# 根据自己电脑性能安装deepseek模型
ollama pull deepseek-r1:7b
# 安装嵌入模型(用于文本转向量)
ollama pull nomic-embed-text
参见:Python常用命令
# 根据需要安装相应依赖
# langchain: 核心框架
# langchain-ollama:Ollama API
# langchain-chroma:Chroma 向量数据库
pip install langchain langchain-ollama langchain-chroma
from langchain_ollama import OllamaLLM, OllamaEmbeddings
from langchain_chroma import Chroma
from langchain_core.prompts import PromptTemplate
from langchain_core.runnables import RunnableLambda
# 配置
OLLAMA_URL = "http://localhost:11434"
LLM_MODEL = "deepseek-r1:7b"
EMBEDDING_MODEL = "nomic-embed-text"
# 初始化
llm = OllamaLLM(base_url=OLLAMA_URL, model=LLM_MODEL)
embeddings = OllamaEmbeddings(base_url=OLLAMA_URL, model=EMBEDDING_MODEL)
# 向量库(使用 Chroma,来自 langchain_chroma)
vectorstore = Chroma(collection_name="knowledge_base", embedding_function=embeddings)
# 添加知识(示例)
docs = {
"机器学习": "机器学习是AI分支,让计算机从数据中学习。",
"深度学习": "深度学习使用多层神经网络。",
"自然语言处理": "NLP使计算机理解人类语言。"
}
for text, answer in docs.items():
vectorstore.add_texts(texts=[text], metadatas=[{"answer": answer}])
# 检索函数
def retrieve(question):
results = vectorstore.similarity_search(question, k=1)
return results[0].metadata["answer"] if results else ""
# RAG 链
template = """仅根据以下上下文回答问题。如果上下文中没有答案,就说“找不到相关信息”。不要使用你自己的知识。
上下文:{context}
问题:{question}
"""
chain = (RunnableLambda(lambda q: {"context": retrieve(q), "question": q})
| PromptTemplate.from_template(template)
| llm)
# 运行
question = input("请输入问题:")
print(chain.invoke(question))