Skip to content

zhan1206/semantic-memory

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

17 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿง  Semantic Memory

ไธบ AI Agent ๆ‰“้€ ็š„ๆœฌๅœฐ่ฏญไน‰่ฎฐๅฟ†ไธŽๆฃ€็ดข็ณป็ปŸ โ€” ๅฎŒๅ…จ็ฆป็บฟ๏ผŒไฟๆŠค้š็ง

GitHub stars Python License: MIT Offline Vector DB: FAISS Embedding: ONNX

๐ŸŽฏ ๆ˜ฏไป€ไนˆ

Semantic Memory ๆ˜ฏ OpenClaw Agent ็š„้•ฟๆœŸ่ฎฐๅฟ†ๆจกๅ—๏ผŒๅŸบไบŽ ONNX + FAISS ๅฎž็ŽฐๅฎŒๅ…จ็ฆป็บฟ็š„ๅ‘้‡่ฏญไน‰ๆฃ€็ดข๏ผŒๆ— ้œ€ไปปไฝ• API Key๏ผŒไธไพ่ต–ไบ‘ๆœๅŠก๏ผŒๆ•ฐๆฎๅฎŒๅ…จไฟ็•™ๅœจๆœฌๅœฐใ€‚

ๆ ธๅฟƒ่ƒฝๅŠ›๏ผš

  • ๐Ÿ” ่ฏญไน‰ๆœ็ดข โ€” ่พ“ๅ…ฅ่‡ช็„ถ่ฏญ่จ€๏ผŒ็žฌ้—ดๅœจๅ…จ้‡่ฎฐๅฟ†ไธญๆฃ€็ดข็›ธๅ…ณๅ†…ๅฎน
  • ๐Ÿ’พ ่ฎฐๅฟ†็ฎก็† โ€” ๆทปๅŠ ใ€็ผ–่พ‘ใ€ๅˆ ้™คใ€ๆ ‡็ญพๅŒ–ใ€้‡่ฆๆ€ง่ฏ„ๅˆ†
  • ๐Ÿ“š ็Ÿฅ่ฏ†ๅบ“ โ€” ๅคšๆ–‡ๆกฃ็ฎก็†ใ€ๆ‰น้‡ๅฏผๅ…ฅใ€ๆ–‡ๆกฃ้—ฎ็ญ”
  • ๐Ÿค– AI ไธŠไธ‹ๆ–‡ๅฌๅ›ž โ€” ่‡ชๅŠจไธบ AI ๆไพ›็›ธๅ…ณ่ฎฐๅฟ†ไฝœไธบไธŠไธ‹ๆ–‡
  • โšก ๅฎŒๅ…จ็ฆป็บฟ โ€” ONNX ๆจกๅž‹ๆœฌๅœฐๆŽจ็†๏ผŒ้›ถ็ฝ‘็ปœไพ่ต–

๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹

ๅฎ‰่ฃ…ไพ่ต–

# ๅ…‹้š†ๆˆ–่ฟ›ๅ…ฅ้กน็›ฎ็›ฎๅฝ•
cd semantic-memory

# ๅฎ‰่ฃ…ๆ ธๅฟƒไพ่ต–
pip install -r requirements.txt

# ไป…ๆ ธๅฟƒๅŠŸ่ƒฝ๏ผˆไธๅซๆ–‡ๆกฃ่งฃๆž๏ผ‰
pip install onnxruntime faiss-cpu numpy chardet

# ๅฎŒๆ•ดๅฎ‰่ฃ…๏ผˆๅซ PDF/DOCX/XLSX ่งฃๆž๏ผ‰
pip install PyPDF2 python-docx openpyxl python-pptx cryptography

# ๅฏ้€‰๏ผšWeb UI
pip install streamlit

# ๅฏ้€‰๏ผšAPI ๆœๅŠก
pip install fastapi uvicorn

้ฆ–ๆฌก่ฟ่กŒ๏ผˆ่‡ชๅŠจไธ‹่ฝฝๆจกๅž‹๏ผ‰

from memory_manager import MemoryManager

mgr = MemoryManager()  # ้ฆ–ๆฌก่‡ชๅŠจไธ‹่ฝฝ ~100MB ONNX ๆจกๅž‹

ๅŸบ็ก€็”จๆณ•

from memory_manager import MemoryManager

mgr = MemoryManager()

# โ”€โ”€ ๆทปๅŠ ่ฎฐๅฟ† โ”€โ”€
mem_id = mgr.add(
    text="ไปŠๅคฉๅ’Œๅผ ไธ‰่ฎจ่ฎบไบ† AI ้กน็›ฎ่ฟ›ๅฑ•๏ผŒๆ•ˆๆžœๅพˆๅฅฝใ€‚",
    tags=["ๅทฅไฝœ", "AI้กน็›ฎ"],
    importance=0.8,
    source="conversation",
)
print(f"่ฎฐๅฟ†ๅทฒไฟๅญ˜: {mem_id}")

# โ”€โ”€ ่ฏญไน‰ๆœ็ดข โ”€โ”€
results = mgr.search("AI ้กน็›ฎ่ฟ›ๅฑ•ๅฆ‚ไฝ•๏ผŸ", top_k=5)
for r in results:
    print(f"  ็›ธไผผๅบฆ {r['score']:.2%} | {r['text'][:50]}...")

# โ”€โ”€ AI ไธŠไธ‹ๆ–‡ๅฌๅ›ž โ”€โ”€
context = mgr.recall("ๅผ ไธ‰็š„้กน็›ฎ่ฎจ่ฎบ", max_chars=2000)
print(context)  # ๅฏ็›ดๆŽฅ็ฒ˜่ดด็ป™ๅคงๆจกๅž‹

# โ”€โ”€ ็Ÿฅ่ฏ†ๅบ“ โ”€โ”€
mgr.create_kb("ๆˆ‘็š„ๆ–‡ๆกฃๅบ“", "ๅญ˜ๆ”พๅทฅไฝœๆ–‡ๆกฃ")

๐Ÿ“– ่ฏฆ็ป†็”จๆณ•

1. ๆทปๅŠ ่ฎฐๅฟ†

# ๅ•ๆก่ฎฐๅฟ†
mem_id = mgr.add(
    text="็”จๆˆทๅๅฅฝๅœจๅพฎไฟกๆฒŸ้€š",
    tags=["็”จๆˆท", "ๅๅฅฝ"],
    importance=0.9,
    source="manual",
)

# ๆ‰น้‡ๆทปๅŠ 
mem_ids = mgr.batch_add([
    {"text": "ๅผ ไธ‰่ดŸ่ดฃๅ‰็ซฏ", "tags": ["ๅทฅไฝœ"]},
    {"text": "ๆŽๅ››่ดŸ่ดฃๅŽ็ซฏ", "tags": ["ๅทฅไฝœ"]},
])

# ่‡ชๅŠจๅˆ†ๅ—๏ผˆ้•ฟๆ–‡ๆœฌ่‡ชๅŠจๅˆ‡ๅˆ†๏ผ‰
mem_id = mgr.add("้•ฟๆ–‡ๆœฌๅ†…ๅฎน..." * 100, auto_chunk=True)

2. ่ฏญไน‰ๆœ็ดข

# ๆ ‡ๅ‡†ๆœ็ดข
results = mgr.search(
    query="ๅผ ไธ‰็š„่”็ณปๆ–นๅผ",
    top_k=5,               # ่ฟ”ๅ›žๆ•ฐ้‡
    tag="ๅทฅไฝœ",             # ๆ ‡็ญพ่ฟ‡ๆปค๏ผˆๅฏ้€‰๏ผ‰
    min_score=0.5,          # ๆœ€ไฝŽ็›ธไผผๅบฆ๏ผˆๅฏ้€‰๏ผ‰
    kb_name="ๆˆ‘็š„ๆ–‡ๆกฃๅบ“",   # ็Ÿฅ่ฏ†ๅบ“ๆœ็ดข๏ผˆๅฏ้€‰๏ผ‰
)

for r in results:
    print(f"[{r['score']:.2%}] {r['text']}")
    print(f"  ๆ ‡็ญพ: {r['tags']} | ้‡่ฆๆ€ง: {r['importance']:.1f}")

3. AI ไธŠไธ‹ๆ–‡ๅฌๅ›ž

ไธ“ไธบ AI ๅฏน่ฏ่ฎพ่ฎก๏ผŒ่‡ชๅŠจๅฐ†็›ธๅ…ณ่ฎฐๅฟ†ๆ ผๅผๅŒ–ไธบ่ฟž่ดฏไธŠไธ‹ๆ–‡๏ผš

# ็”Ÿๆˆ AI ๅฏ็›ดๆŽฅไฝฟ็”จ็š„ไธŠไธ‹ๆ–‡
context = mgr.recall(
    query="็”จๆˆท็š„ๅทฅไฝœๅๅฅฝ",
    max_chars=3000,     # ๆœ€ๅคงๅญ—็ฌฆๆ•ฐ
    top_k=10,
)

# ๆ•ˆๆžœ็คบไพ‹๏ผš
# [่ฎฐๅฟ† abc123] ไปŠๅคฉๅ’Œๅผ ไธ‰่ฎจ่ฎบไบ†AI้กน็›ฎ่ฟ›ๅฑ•๏ผŒๆ•ˆๆžœๅพˆๅฅฝใ€‚
# [่ฎฐๅฟ† def456] ็”จๆˆทๅๅฅฝ้€š่ฟ‡ๅพฎไฟกๆฒŸ้€šใ€‚

4. ็Ÿฅ่ฏ†ๅบ“

ๅฐ†ๆ–‡ๆกฃๅบ“ไธŽ่ฎฐๅฟ†็ณป็ปŸ้š”็ฆป็ฎก็†๏ผš

# ๅˆ›ๅปบ็Ÿฅ่ฏ†ๅบ“
mgr.create_kb("ๆˆ‘็š„ๆ–‡ๆกฃๅบ“", description="ๅญ˜ๆ”พๅทฅไฝœ็›ธๅ…ณๆ–‡ๆกฃ")

# ๅฏผๅ…ฅๆ–‡ๆกฃ
from doc_parser import import_file_to_kb, import_directory_to_kb

# ๅ•ๆ–‡ไปถๅฏผๅ…ฅ
import_file_to_kb("report.pdf", "ๆˆ‘็š„ๆ–‡ๆกฃๅบ“")

# ๆ‰น้‡ๅฏผๅ…ฅๆ•ดไธช็›ฎๅฝ•
import_directory_to_kb("./documents/", "ๆˆ‘็š„ๆ–‡ๆกฃๅบ“", tags=["ๅฝ’ๆกฃ"])

# ็Ÿฅ่ฏ†ๅบ“่ฏญไน‰ๆœ็ดข
results = mgr.query_kb("ๆˆ‘็š„ๆ–‡ๆกฃๅบ“", "ๅนดๅบฆๆŠฅๅ‘Šๆ‘˜่ฆ", top_k=3)

5. ไบคไบ’ๅผ CLI

python scripts/interactive.py
โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ•‘         Semantic Memory ไบคไบ’ๅผ็ฎก็†                  โ•‘
โ•šโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

  [1] ๐Ÿ’พ ๆทปๅŠ ่ฎฐๅฟ†
  [2] ๐Ÿ” ่ฏญไน‰ๆœ็ดข
  [3] ๐Ÿ“‹ ่ฎฐๅฟ†ๅˆ—่กจ
  [4] ๐Ÿ—‘๏ธ  ๅˆ ้™ค่ฎฐๅฟ†
  [5] ๐Ÿ“š ็Ÿฅ่ฏ†ๅบ“
  [6] โš™๏ธ  ้…็ฝฎ็ฎก็†
  [7] ๐Ÿ“Š ็ปŸ่ฎกไฟกๆฏ
  [0] ๐Ÿšช ้€€ๅ‡บ

่ฏท้€‰ๆ‹ฉๆ“ไฝœ: _

Shell ่‡ชๅŠจ่กฅๅ…จ๏ผˆbash / zsh / fish๏ผ‰๏ผš

# bash
echo 'eval "$(python -m memory.completion bash)"' >> ~/.bashrc

# zsh
echo 'eval "$(python -m memory.completion zsh)"' >> ~/.zshrc

# fish
python -m memory.completion fish > ~/.config/fish/completions/memory.fish

6. Web UI

streamlit run scripts/streamlit_app.py

ๆไพ› 7 ไธช้กต้ข๏ผš

้กต้ข ๅŠŸ่ƒฝ
๐Ÿ” ่ฏญไน‰ๆœ็ดข ่พ“ๅ…ฅ่‡ช็„ถ่ฏญ่จ€๏ผŒ็ง’็บงๆฃ€็ดข
๐Ÿ’พ ๆทปๅŠ ่ฎฐๅฟ† ๅ•ๆกๆˆ–ๆ‰น้‡ๅฏผๅ…ฅๆ–‡ไปถ
๐Ÿ“‹ ่ฎฐๅฟ†ๅˆ—่กจ ๅˆ†้กตๆต่งˆใ€ๆœ็ดขใ€ๅˆ ้™ค
๐Ÿ“Š ็ปŸ่ฎกไฟกๆฏ ๆ ‡็ญพๅˆ†ๅธƒใ€ๆฅๆบ็ปŸ่ฎกใ€ๆ€ง่ƒฝๆŒ‡ๆ ‡
๐Ÿ“š ็Ÿฅ่ฏ†ๅบ“ ๅˆ›ๅปบใ€ๅฏผๅ…ฅใ€ๆŸฅ่ฏขๆ–‡ๆกฃๅบ“
โš™๏ธ ้…็ฝฎ็ฎก็† ๅฏ่ง†ๅŒ–ไฟฎๆ”นๆ‰€ๆœ‰้…็ฝฎ้กน
๐Ÿ—๏ธ ๆ‰น้‡ๆ“ไฝœ ๆ‰น้‡ๅˆ ้™คใ€ๆ ‡็ญพ็ฎก็†ใ€ๅฏผๅ‡บ

7. REST API ๆœๅŠก

python -m uvicorn scripts.api_server:app --reload --port 8765

ไธป่ฆ็ซฏ็‚น๏ผš

ๆ–นๆณ• ่ทฏๅพ„ ่ฏดๆ˜Ž
GET /health ๅฅๅบทๆฃ€ๆŸฅ
POST /memory/add ๆทปๅŠ ่ฎฐๅฟ†
POST /memory/search ่ฏญไน‰ๆœ็ดข
POST /memory/recall AI ไธŠไธ‹ๆ–‡ๅฌๅ›ž
GET /memory/list ๅˆ—ๅ‡บ่ฎฐๅฟ†
DELETE /memory/{id} ๅˆ ้™ค่ฎฐๅฟ†
GET /kb/list ๅˆ—ๅ‡บ็Ÿฅ่ฏ†ๅบ“
POST /kb/{name}/query ็Ÿฅ่ฏ†ๅบ“ๆŸฅ่ฏข
GET /stats ็ณป็ปŸ็ปŸ่ฎก

8. Docker ้ƒจ็ฝฒ

# ๆž„ๅปบ้•œๅƒ
docker build -t semantic-memory .

# ่ฟ่กŒ๏ผˆ่‡ชๅŠจไธ‹่ฝฝๆจกๅž‹๏ผ‰
docker run -p 8765:8765 \
    -v $(pwd)/data:/app/data \
    semantic-memory

# ๆˆ–ไฝฟ็”จ Docker Compose
docker compose up -d

API ๆ–‡ๆกฃ๏ผšhttp://localhost:8765/docs


๐Ÿ—๏ธ ็ณป็ปŸๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                     Semantic Memory                           โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚                                                              โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚  ็”จๆˆท็•Œ้ขๅฑ‚   โ”‚     โ”‚  API ๆœๅŠกๅฑ‚   โ”‚     โ”‚  CLI ๅฑ‚      โ”‚ โ”‚
โ”‚  โ”‚              โ”‚     โ”‚              โ”‚     โ”‚              โ”‚ โ”‚
โ”‚  โ”‚ Streamlit UI โ”‚     โ”‚  FastAPI     โ”‚     โ”‚ interactive  โ”‚ โ”‚
โ”‚  โ”‚ Streamlit    โ”‚     โ”‚  REST API    โ”‚     โ”‚ CLI          โ”‚ โ”‚
โ”‚  โ”‚ Web App     โ”‚     โ”‚  /docs       โ”‚     โ”‚ shell comp.  โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚         โ”‚                    โ”‚                    โ”‚          โ”‚
โ”‚         โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜          โ”‚
โ”‚                              โ”‚                               โ”‚
โ”‚                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”                     โ”‚
โ”‚                    โ”‚  MemoryManager     โ”‚                     โ”‚
โ”‚                    โ”‚  (็ปŸไธ€ๅ…ฅๅฃ)         โ”‚                     โ”‚
โ”‚                    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                     โ”‚
โ”‚                              โ”‚                               โ”‚
โ”‚         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”          โ”‚
โ”‚         โ”‚                    โ”‚                    โ”‚          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚  ่ฎฐๅฟ†ๆ“ไฝœ    โ”‚   โ”‚   ๆฃ€็ดขๆจกๅ—       โ”‚  โ”‚   ๆ–‡ๆกฃ่งฃๆž       โ”‚ โ”‚
โ”‚  โ”‚             โ”‚   โ”‚                 โ”‚  โ”‚                 โ”‚ โ”‚
โ”‚  โ”‚ add()      โ”‚   โ”‚ search()        โ”‚  โ”‚ doc_parser.py   โ”‚ โ”‚
โ”‚  โ”‚ delete()   โ”‚   โ”‚ recall()        โ”‚  โ”‚ PDF่กจๆ ผๆๅ–     โ”‚ โ”‚
โ”‚  โ”‚ update()   โ”‚   โ”‚ query_kb()      โ”‚  โ”‚ XLSX/PPTX      โ”‚ โ”‚
โ”‚  โ”‚ tag()      โ”‚   โ”‚ similarity()    โ”‚  โ”‚ DOCX่กจๆ ผ      โ”‚ โ”‚
โ”‚  โ”‚ list()     โ”‚   โ”‚                 โ”‚  โ”‚                 โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚         โ”‚                   โ”‚                    โ”‚          โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”   โ”‚
โ”‚  โ”‚                     ๆ ธๅฟƒๅฑ‚                           โ”‚   โ”‚
โ”‚  โ”‚                                                       โ”‚   โ”‚
โ”‚  โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  VectorStore  โ”‚  โ”‚ ONNX Embedding โ”‚  โ”‚ Config   โ”‚  โ”‚   โ”‚
โ”‚  โ”‚  โ”‚  FAISS Index  โ”‚  โ”‚  BGE-small-zh  โ”‚  โ”‚ Logger   โ”‚  โ”‚   โ”‚
โ”‚  โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ”‚   โ”‚
โ”‚  โ”‚                                                       โ”‚   โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜   โ”‚
โ”‚                                                               โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ•ฐๆฎๆตๅ‘๏ผš

็”จๆˆท่พ“ๅ…ฅ โ”€โ”€โ†’ MemoryManager.add() โ”€โ”€โ†’ Text โ†’ ONNX Encoder โ”€โ”€โ†’ ๅ‘้‡
                                          โ†“                   โ†“
                                     [chunk text]      FAISS Index
                                          โ†“                   โ†“
                                     JSON metadata    ID mapping
                                          โ†“                   โ†“
                                     memories/ โ†โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ“ ้กน็›ฎๆ–‡ไปถ็ป“ๆž„

semantic-memory/
โ”œโ”€โ”€ scripts/
โ”‚   โ”œโ”€โ”€ __init__.py          # ๅŒ…ๅ…ฅๅฃ
โ”‚   โ”œโ”€โ”€ core.py               # ONNX Embedding ๅผ•ๆ“Ž
โ”‚   โ”œโ”€โ”€ vector_store.py       # FAISS ๅ‘้‡ๅญ˜ๅ‚จ
โ”‚   โ”œโ”€โ”€ memory_manager.py     # ่ฎฐๅฟ†็ฎก็†ๅ™จ๏ผˆๆ ธๅฟƒ API๏ผ‰
โ”‚   โ”œโ”€โ”€ config.py             # ้…็ฝฎ็ฎก็†
โ”‚   โ”œโ”€โ”€ sensitive_filter.py   # ๆ•ๆ„Ÿไฟกๆฏ่ฟ‡ๆปค
โ”‚   โ”œโ”€โ”€ logging.py            # ็ปŸไธ€ๆ—ฅๅฟ—ๆจกๅ—
โ”‚   โ”œโ”€โ”€ batch.py              # ๆ‰น้‡ๆ“ไฝœ API
โ”‚   โ”œโ”€โ”€ interactive.py        # ไบคไบ’ๅผ CLI
โ”‚   โ”œโ”€โ”€ retry.py              # ๆŒ‡ๆ•ฐ้€€้ฟ้‡่ฏ•่ฃ…้ฅฐๅ™จ
โ”‚   โ”œโ”€โ”€ doc_parser.py         # ๅคšๆ ผๅผๆ–‡ๆกฃ่งฃๆž๏ผˆPDF่กจๆ ผใ€XLSXใ€PPTX๏ผ‰
โ”‚   โ”œโ”€โ”€ streamlit_app.py      # Web UI๏ผˆStreamlit๏ผ‰
โ”‚   โ”œโ”€โ”€ api_server.py         # FastAPI REST ๆœๅŠก
โ”‚   โ””โ”€โ”€ completion/           # Shell ่‡ชๅŠจ่กฅๅ…จ
โ”‚       โ”œโ”€โ”€ bash_completion
โ”‚       โ”œโ”€โ”€ zsh_completion
โ”‚       โ””โ”€โ”€ fish_completion
โ”œโ”€โ”€ tests/
โ”‚   โ”œโ”€โ”€ conftest.py           # pytest ้…็ฝฎ + fixtures
โ”‚   โ”œโ”€โ”€ test_core.py          # ONNX ๅผ•ๆ“Žๆต‹่ฏ•๏ผˆๅพ…่กฅๅ……๏ผ‰
โ”‚   โ”œโ”€โ”€ test_vector_store.py
โ”‚   โ”œโ”€โ”€ test_memory_manager.py
โ”‚   โ”œโ”€โ”€ test_config.py
โ”‚   โ”œโ”€โ”€ test_sensitive_filter.py
โ”‚   โ””โ”€โ”€ test_batch.py
โ”œโ”€โ”€ data/                     # ๆ•ฐๆฎ็›ฎๅฝ•๏ผˆ่‡ชๅŠจๅˆ›ๅปบ๏ผ‰
โ”‚   โ”œโ”€โ”€ memories/             # ่ฎฐๅฟ† JSON ๆ–‡ไปถ
โ”‚   โ”œโ”€โ”€ kb/                   # ็Ÿฅ่ฏ†ๅบ“ๆ•ฐๆฎ
โ”‚   โ”œโ”€โ”€ models/               # ONNX ๆจกๅž‹็ผ“ๅญ˜
โ”‚   โ””โ”€โ”€ logs/                 # ๆ—ฅๅฟ—ๆ–‡ไปถ
โ”œโ”€โ”€ .github/
โ”‚   โ””โ”€โ”€ workflows/
โ”‚       โ””โ”€โ”€ ci.yml            # GitHub Actions CI/CD
โ”œโ”€โ”€ Dockerfile                # Docker ้•œๅƒๆž„ๅปบ
โ”œโ”€โ”€ docker-compose.yml        # Docker Compose ็ผ–ๆŽ’
โ”œโ”€โ”€ docker/
โ”‚   โ””โ”€โ”€ README.md             # Docker ้ƒจ็ฝฒๆŒ‡ๅ—
โ”œโ”€โ”€ docs/
โ”‚   โ””โ”€โ”€ api_examples.md       # API ไฝฟ็”จ็คบไพ‹
โ”œโ”€โ”€ requirements.txt           # Python ไพ่ต–
โ”œโ”€โ”€ pyproject.toml            # ้กน็›ฎๅ…ƒๆ•ฐๆฎ + pytest ้…็ฝฎ
โ”œโ”€โ”€ CONTRIBUTING.md           # ่ดก็ŒฎๆŒ‡ๅ—
โ”œโ”€โ”€ LICENSE                   # MIT License
โ””โ”€โ”€ README.md                 # ๆœฌๆ–‡ไปถ

โš™๏ธ ้…็ฝฎๅ‚่€ƒ

้…็ฝฎ้กน ้ป˜่ฎคๅ€ผ ่ฏดๆ˜Ž
model_id "BAAI/bge-small-zh-v1.5" ONNX ๆจกๅž‹ๆ ‡่ฏ†
device "cpu" ่ฟ่กŒ่ฎพๅค‡๏ผˆcpu / cuda๏ผ‰
search_top_k 5 ้ป˜่ฎค่ฟ”ๅ›žๆ•ฐ้‡
search_min_score 0.0 ๆœ€ไฝŽ็›ธไผผๅบฆ้˜ˆๅ€ผ
half_life_days 14.0 ่ฎฐๅฟ†ๅŠ่กฐๆœŸ๏ผˆๅคฉ๏ผ‰
min_importance 0.2 ไฝŽไปทๅ€ผ่ฎฐๅฟ†้˜ˆๅ€ผ
dedup_threshold 0.95 ๅŽป้‡็›ธไผผๅบฆ้˜ˆๅ€ผ
dedup_enabled true ๅฏ็”จๅŽป้‡
sensitive_filter_enabled true ๅฏ็”จๆ•ๆ„Ÿไฟกๆฏ่ฟ‡ๆปค
metrics_enabled true ๅฏ็”จๆ€ง่ƒฝ็ปŸ่ฎก
chunk_max_chars 500 ๆ–‡ๆœฌๅˆ†ๅ—ๆœ€ๅคงๅญ—็ฌฆๆ•ฐ
chunk_overlap 50 ๅˆ†ๅ—้‡ๅ ๅญ—็ฌฆๆ•ฐ

้…็ฝฎๆ–‡ไปถ่ทฏๅพ„๏ผš~/.semantic_memory/config.json๏ผˆๆˆ–้€š่ฟ‡ SEMANTIC_MEMORY_DATA_DIR ็Žฏๅขƒๅ˜้‡่ฆ†็›–๏ผ‰


๐Ÿงช ๆต‹่ฏ•

# ่ฟ่กŒๅ…จ้ƒจๆต‹่ฏ•
pytest tests/ -v

# ่ฟ่กŒๅนถ็”Ÿๆˆ่ฆ†็›–็އๆŠฅๅ‘Š
pytest tests/ -v --cov=scripts --cov-report=html

# ไป…่ฟ่กŒๅ•ๅ…ƒๆต‹่ฏ•๏ผˆไธๅซ้›†ๆˆๆต‹่ฏ•๏ผ‰
pytest tests/ -v -m "not integration"

# ๅ•ไธชๆต‹่ฏ•ๆ–‡ไปถ
pytest tests/test_memory_manager.py -v

ๆณจๆ„๏ผš้ƒจๅˆ†ๆต‹่ฏ•๏ผˆๅฆ‚ ONNX ๆจกๅž‹ๅŠ ่ฝฝ๏ผ‰้œ€่ฆ็ฝ‘็ปœ่ฟžๆŽฅไธ‹่ฝฝๆจกๅž‹๏ผŒๅฑžไบŽ้›†ๆˆๆต‹่ฏ•ใ€‚


๐Ÿ”ง ๅธธ่ง้—ฎ้ข˜

Q: ้ฆ–ๆฌก่ฟ่กŒๆŠฅ FileNotFoundError: model not found๏ผŸ

้ฆ–ๆฌกๅฏๅŠจไผš่‡ชๅŠจไธ‹่ฝฝ ~100MB ็š„ ONNX ๆจกๅž‹ใ€‚ๅฆ‚้‡็ฝ‘็ปœ้—ฎ้ข˜๏ผŒๅฏๆ‰‹ๅŠจไธ‹่ฝฝ๏ผš

from scripts.core import download_model
download_model()  # ้‡ๆ–ฐไธ‹่ฝฝๆจกๅž‹

Q: ๅฆ‚ไฝ•ๆŒ‡ๅฎšๆจกๅž‹ๅญ˜ๅ‚จไฝ็ฝฎ๏ผŸ

import os
os.environ["SEMANTIC_MEMORY_DATA_DIR"] = "/path/to/data"
mgr = MemoryManager()  # ๆจกๅž‹ๅ’Œๆ•ฐๆฎๅฐ†ๅญ˜ๆ”พๅœจๆญค็›ฎๅฝ•

Q: ๆจกๅž‹ไธ‹่ฝฝๅคฑ่ดฅ/่ถ…ๆ—ถ๏ผŸ

ไฝฟ็”จไปฃ็†ๆˆ–ๆ‰‹ๅŠจไธ‹่ฝฝ๏ผš

# ่ฎพ็ฝฎไปฃ็†
export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
python -c "from memory_manager import MemoryManager; MemoryManager()"

Q: Docker ไธญ GPU ๅŠ ้€Ÿ๏ผŸ

# Dockerfile.gpu๏ผˆไฝฟ็”จ onnxruntime-gpu๏ผ‰
FROM semantic-memory:latest
RUN pip install onnxruntime-gpu
docker run --gpus all -p 8765:8765 semantic-memory:gpu

Q: ๅฆ‚ไฝ•่ฟ็งปๆ•ฐๆฎๅˆฐๆ–ฐๆœบๅ™จ๏ผŸ

ๆ•ดไธช data/ ็›ฎๅฝ•ๅณๆ•ฐๆฎ๏ผŒๅคๅˆถๅˆฐๆ–ฐๆœบๅ™จๅฏนๅบ”ไฝ็ฝฎๅณๅฏใ€‚FAISS ็ดขๅผ•ไธŽๆจกๅž‹ๅ‡ๅœจ้ฆ–ๆฌกๅฏๅŠจๆ—ถ่‡ชๅŠจ้‡ๅปบใ€‚

Q: ่ฎฐๅฟ†ๆ•ฐ้‡ๅพˆๅคšๅŽๆœ็ดขๅ˜ๆ…ข๏ผŸ

bge-small-zh-v1.5 ๆจกๅž‹็ปดๅบฆ 512๏ผŒๅœจ 10 ไธ‡ๆก่ฎฐๅฟ†ๅ†…ๆœ็ดขๆ€ง่ƒฝ่‰ฏๅฅฝใ€‚ๅฆ‚้œ€ๆ›ดๅคง่ง„ๆจก๏ผŒๅฏๅˆ‡ๆขๅˆฐ bge-base-zh-v1.5๏ผˆ็ปดๅบฆ 768๏ผ‰ๆˆ–ไฝฟ็”จ GPUใ€‚


๐Ÿ› ๏ธ ๆ‰ฉๅฑ•ไธŽๅฎšๅˆถ

ๆทปๅŠ ๆ–ฐ็š„ Embedding ๆจกๅž‹

from scripts.core import ONNXEmbeddingEngine

class MyEncoder(ONNXEmbeddingEngine):
    def __init__(self):
        super().__init__(model_id="your-model-id")

mgr = MemoryManager(encoder=MyEncoder())

่‡ชๅฎšไน‰่ฎฐๅฟ†่ฟ‡ๆปคๅ™จ

def my_filter(text: str) -> str:
    # ่‡ชๅฎšไน‰่ฟ‡ๆปค้€ป่พ‘
    return text.replace("ๅ†…้ƒจไปฃๅท", "[ๅทฒ่„ฑๆ•]")

from memory_manager import MemoryManager
mgr = MemoryManager(custom_filters=[my_filter])

็Ÿฅ่ฏ†ๅบ“ๆ’ไปถ๏ผˆๆ–‡ๆกฃ่งฃๆžๅ™จ๏ผ‰

# ๅœจ doc_parser.py ไธญๆณจๅ†Œๆ–ฐ็š„่งฃๆžๅ™จ
PARSERS[".odt"] = _parse_odt  # ๆทปๅŠ  ODT ๆ”ฏๆŒ

๐Ÿ“‹ ๅพ…ๅฎŒๆˆๅŠŸ่ƒฝ

  • test_core.py โ€” ONNX ๅผ•ๆ“Žๅ•ๅ…ƒๆต‹่ฏ•๏ผˆ้œ€่ฆ mock ONNX Runtime๏ผ‰
  • ้€š็”จ้‡่ฏ•ๆœบๅˆถ โ€” API ่ฐƒ็”จๅ’Œ่ฎฐๅฟ†ๆ“ไฝœๆทปๅŠ  @retry ่ฃ…้ฅฐๅ™จ
  • Streamlit Web UI โ€” ๅฎŒๆ•ดๅฏ่ง†ๅŒ–็•Œ้ข๏ผˆ่ฟ›่กŒไธญ๏ผ‰
  • ๆ–‡ๆกฃๆˆชๅ›พ โ€” โœ… README ๆˆชๅ›พๅทฒๅฎŒๆˆ๏ผˆ่งไธŠๆ–นๆผ”็คบๅ›พ๏ผ‰๏ผ›่ง†้ข‘ๆผ”็คบๅพ…ๅฝ•ๅˆถ
  • PDF ่กจๆ ผๆ™บ่ƒฝ่งฃๆž โ€” ๅคๆ‚ PDF ่กจๆ ผ็ป“ๆž„่ฏ†ๅˆซ
  • GitHub Actions CI Token โ€” ้œ€่ฆๆ—  Token ๆ–นๅผ้…็ฝฎ๏ผˆๅฏ็”จ GITHUB_TOKEN๏ผ‰

๐Ÿค ่ดก็Œฎ

ๆฌข่ฟŽๆไบค Issue ๅ’Œ Pull Request๏ผ

  1. Fork ๆœฌไป“ๅบ“
  2. ๅˆ›ๅปบ็‰นๆ€งๅˆ†ๆ”ฏ๏ผšgit checkout -b feature/my-feature
  3. ๆไบคๆ›ดๆ”น๏ผšgit commit -am 'Add some feature'
  4. ๆŽจ้€ๅˆ†ๆ”ฏ๏ผšgit push origin feature/my-feature
  5. ๅˆ›ๅปบ Pull Request

่ดก็ŒฎๆŒ‡ๅ—่ฏฆ่ง CONTRIBUTING.mdใ€‚


๐Ÿ“„ License

MIT License โ€” ่ฏฆ่ง LICENSE ๆ–‡ไปถใ€‚

About

๐Ÿง  OpenClaw ๆœฌๅœฐ่ฏญไน‰่ฎฐๅฟ†็ณป็ปŸ โ€” 100%็ฆป็บฟใ€้š็งไผ˜ๅ…ˆใ€้›ถ้…็ฝฎ | Local Semantic Memory for AI Agents with ONNX + FAISS

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors