ไธบ AI Agent ๆ้ ็ๆฌๅฐ่ฏญไน่ฎฐๅฟไธๆฃ็ดข็ณป็ป โ ๅฎๅ จ็ฆป็บฟ๏ผไฟๆค้็ง
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 uvicornfrom 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("ๆ็ๆๆกฃๅบ", "ๅญๆพๅทฅไฝๆๆกฃ")# ๅๆก่ฎฐๅฟ
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)# ๆ ๅๆ็ดข
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}")ไธไธบ AI ๅฏน่ฏ่ฎพ่ฎก๏ผ่ชๅจๅฐ็ธๅ ณ่ฎฐๅฟๆ ผๅผๅไธบ่ฟ่ดฏไธไธๆ๏ผ
# ็ๆ AI ๅฏ็ดๆฅไฝฟ็จ็ไธไธๆ
context = mgr.recall(
query="็จๆท็ๅทฅไฝๅๅฅฝ",
max_chars=3000, # ๆๅคงๅญ็ฌฆๆฐ
top_k=10,
)
# ๆๆ็คบไพ๏ผ
# [่ฎฐๅฟ abc123] ไปๅคฉๅๅผ ไธ่ฎจ่ฎบไบAI้กน็ฎ่ฟๅฑ๏ผๆๆๅพๅฅฝใ
# [่ฎฐๅฟ def456] ็จๆทๅๅฅฝ้่ฟๅพฎไฟกๆฒ้ใๅฐๆๆกฃๅบไธ่ฎฐๅฟ็ณป็ป้็ฆป็ฎก็๏ผ
# ๅๅปบ็ฅ่ฏๅบ
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)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.fishstreamlit run scripts/streamlit_app.pyๆไพ 7 ไธช้กต้ข๏ผ
| ้กต้ข | ๅ่ฝ |
|---|---|
| ๐ ่ฏญไนๆ็ดข | ่พๅ ฅ่ช็ถ่ฏญ่จ๏ผ็ง็บงๆฃ็ดข |
| ๐พ ๆทปๅ ่ฎฐๅฟ | ๅๆกๆๆน้ๅฏผๅ ฅๆไปถ |
| ๐ ่ฎฐๅฟๅ่กจ | ๅ้กตๆต่งใๆ็ดขใๅ ้ค |
| ๐ ็ป่ฎกไฟกๆฏ | ๆ ็ญพๅๅธใๆฅๆบ็ป่ฎกใๆง่ฝๆๆ |
| ๐ ็ฅ่ฏๅบ | ๅๅปบใๅฏผๅ ฅใๆฅ่ฏขๆๆกฃๅบ |
| โ๏ธ ้ ็ฝฎ็ฎก็ | ๅฏ่งๅไฟฎๆนๆๆ้ ็ฝฎ้กน |
| ๐๏ธ ๆน้ๆไฝ | ๆน้ๅ ้คใๆ ็ญพ็ฎก็ใๅฏผๅบ |
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 |
็ณป็ป็ป่ฎก |
# ๆๅปบ้ๅ
docker build -t semantic-memory .
# ่ฟ่ก๏ผ่ชๅจไธ่ฝฝๆจกๅ๏ผ
docker run -p 8765:8765 \
-v $(pwd)/data:/app/data \
semantic-memory
# ๆไฝฟ็จ Docker Compose
docker compose up -dAPI ๆๆกฃ๏ผ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-gpudocker run --gpus all -p 8765:8765 semantic-memory:gpuQ: ๅฆไฝ่ฟ็งปๆฐๆฎๅฐๆฐๆบๅจ๏ผ
ๆดไธช data/ ็ฎๅฝๅณๆฐๆฎ๏ผๅคๅถๅฐๆฐๆบๅจๅฏนๅบไฝ็ฝฎๅณๅฏใFAISS ็ดขๅผไธๆจกๅๅๅจ้ฆๆฌกๅฏๅจๆถ่ชๅจ้ๅปบใ
Q: ่ฎฐๅฟๆฐ้ๅพๅคๅๆ็ดขๅๆ ข๏ผ
bge-small-zh-v1.5 ๆจกๅ็ปดๅบฆ 512๏ผๅจ 10 ไธๆก่ฎฐๅฟๅ
ๆ็ดขๆง่ฝ่ฏๅฅฝใๅฆ้ๆดๅคง่งๆจก๏ผๅฏๅๆขๅฐ bge-base-zh-v1.5๏ผ็ปดๅบฆ 768๏ผๆไฝฟ็จ GPUใ
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๏ผ
- Fork ๆฌไปๅบ
- ๅๅปบ็นๆงๅๆฏ๏ผ
git checkout -b feature/my-feature - ๆไบคๆดๆน๏ผ
git commit -am 'Add some feature' - ๆจ้ๅๆฏ๏ผ
git push origin feature/my-feature - ๅๅปบ Pull Request
่ดก็ฎๆๅ่ฏฆ่ง CONTRIBUTING.mdใ
MIT License โ ่ฏฆ่ง LICENSE ๆไปถใ