鸟语天空
Python RAG 入门
post by:追风剑情 2026-4-23 17:00

一、安装Ollama

 # 根据自己电脑性能安装deepseek模型
ollama pull deepseek-r1:7b
# 安装嵌入模型(用于文本转向量)
ollama pull nomic-embed-text  

111.jpg

二、创建一个新的Python环境

参见:Python常用命令

三、安装LangChain

# 根据需要安装相应依赖
# 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))

运行测试
2222.png

评论:
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容