使用embedchain快速建立rag知识库,本地大模型
初学RAG搭建知识库,强烈建议先利用embedchain这个开源的RAG框架,短短几行代码就能让你快速建立一个私人知识库,并支持随时增加知识源,是理想的学习和使用RAG知识的开源利器
最简单的解决方式:
- 框架: Embedchain
- LLM: Ollama
- 嵌入式模型: nomic-embed-text 或 bge-m3
- 向量数据库: ChromaDB (默认)
按照步骤依次进行:
安装ollama等模型:
pip install embedchain ollama chromadb sentence-transformers
Windows平台, 需要去https://ollama.com/download 下载 Windows 安装程序(.exe),运行安装,务必在安装过程中勾选“Add Ollama to your PATH”。
下载大模型到本地:
ollama pull llama3.2
下载embedding model:
ollama pull nomic-embed-text
启动ollama
ollama serve 测试ollama是否启动 curl http://localhost:11434/api/tags
设置embedchain :
from embedchain import App import os os.environ["OPENAI_API_KEY"] = "ollama" # Ollama 不校验,填任意值 os.environ["OPENAI_API_BASE"] = "http://localhost:11434/v1" config = { "vectordb": { "provider": "chroma", "config": { "collection_name": "ollama_openai_compat" } }, "llm": { "provider": "openai", # 使用 openai provider "config": { "model": "llama3.2", # 模型名称 "temperature": 0.1, "max_tokens": 2000 } }, "embedder": { "provider": "openai", "config": { "model": "nomic-embed-text", # 嵌入模型 } } } app = App.from_config(config=config)
增加文档:
app.add(r'E:\拿破仑传.pdf', data_type='pdf_file')
增加问题:
response = app.query("拿破仑去世时间") print(response)
完整的代码:
from embedchain import App import os os.environ["OPENAI_API_KEY"] = "ollama" # Ollama 不校验,填任意值 os.environ["OPENAI_API_BASE"] = "http://localhost:11434/v1" config = { "vectordb": { "provider": "chroma", "config": { "collection_name": "ollama_openai_compat" } }, "llm": { "provider": "openai", # 使用 openai provider "config": { "model": "llama3.2", # 模型名称 "temperature": 0.1, "max_tokens": 2000 } }, "embedder": { "provider": "openai", "config": { "model": "nomic-embed-text", # 嵌入模型 } } } app = App.from_config(config=config) app.add(r'E:\拿破仑传.pdf', data_type='pdf_file') response = app.query("拿破仑去世时间") print(response)
最后输出答案:
拿破仑于1815年去世。
embedchain github地址:https://github.com/hypier/embedchain
总结一下遇到的问题:
问题1:依赖包版本不兼容
这个问题最好是单独建立一套虚拟环境,然后在这套虚拟环境下执行上面的命令
问题2:sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) table ec_chat_history already exists
这个是因为我在测试时已经建立过一次向量数据库,手动删除embedchain.db后问题解决
浙公网安备 33010602011771号