本地 RAG 从零搭建,我用的这 5 个组件
唐唐老师513 阅读
一直想搞一个能回答公司内部文档的问答机器人。Dify 和 FastGPT 都试过,功能确实全,但有些定制需求绕不开,最后还是决定自己拼。拼完发现其实没那么难,核心就是五个组件。
1. 文档解析:我用的是 unstructured,它能把 PDF、Word、PPT 都解析成带结构的文本。坑在于不同格式要装不同的依赖,pip install "unstructured[pdf,docx,pptx]" 一次性装全。
2. 分块:这块容易被忽视但特别重要。我试过固定 500 字符分块,效果很差,一段代码被截成两半。后来用 recursive character splitter,按
→ → 空格 的优先级切,配合 10% 重叠,效果好了不少。
3. Embedding:本地环境我用的 bge-m3,中文效果比 OpenAI 的 text-embedding-3-small 强,而且免费。具体对比下一篇文章讲。
4. 向量库:Chroma 起步最快,pip install chromadb 就完事,数据落盘在本地目录,单机够用。
5. 生成:接本地 Ollama 的 qwen,prompt 里把检索到的片段塞进去。
整个链路串起来大概这样:
Python
docs = load_docs("docs/") # unstructured
chunks = split(docs) # recursive splitter
col = Chroma.from_documents(chunks, bge_embedding())
hits = col.similarity_search(q, k=4) # 检索
answer = ollama_chat(q, context=hits) # 生成
就这几步,一个能用的 RAG 就出来了。接下来你会发现真正难的不是搭起来,而是把检索质量调好——分块策略、top-k、有没有 rerank,差别巨大。
评论0
还没有评论,来抢沙发~