文档
LangChain RAG(检索增强生成)Hello World
目标
构建一个最小 RAG 系统:加载文档 → 切分 → 向量化存储 → 检索 → 让 LLM 回答问题。
完整代码
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplate
# ─── 1. 准备文档 ───
with open("knowledge.txt", "w") as f:
f.write("""Python 是一种解释型、面向对象的编程语言,由 Guido van Rossum 于 1991 年发布。
Python 的设计哲学强调代码可读性,使用缩进代替大括号。
Python 广泛应用于 Web 开发(Django/Flask)、数据科学(NumPy/Pandas)、AI(PyTorch/TensorFlow)。
Python 的包管理器是 pip,虚拟环境用 venv 或 conda 管理。""")
# ─── 2. 加载 → 切分 ───
loader = TextLoader("knowledge.txt")
documents = loader.load()
splitter = RecursiveCharacterTextSplitter(chunk_size=200, chunk_overlap=50)
chunks = splitter.split_documents(documents)
print(f"文档被切分为 {len(chunks)} 个 chunk")
# ─── 3. 向量化存储 ───
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(chunks, embeddings, persist_directory="./chroma_db")
retriever = vectorstore.as_retriever(search_kwargs={"k": 2})
# ─── 4. 构建 RAG Chain ───
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
prompt = ChatPromptTemplate.from_template("""
根据以下上下文回答用户问题。如果上下文中没有答案,请说"我不确定"。
不要编造信息。
上下文:
{context}
问题:{input}
回答:
""")
combine_chain = create_stuff_documents_chain(llm, prompt)
rag_chain = create_retrieval_chain(retriever, combine_chain)
# ─── 5. 提问 ───
questions = [
"Python 是谁创建的?",
"Python 在 AI 领域有哪些框架?",
"Python 是编译型还是解释型?",
]
for q in questions:
result = rag_chain.invoke({"input": q})
print(f"\n❓ {q}")
print(f"💬 {result['answer']}")
运行步骤
pip install langchain langchain-openai chromadb tiktoken
export OPENAI_API_KEY="sk-..."
echo "Python 是一种解释型..." > knowledge.txt
python rag_hello_world.py
预期输出
文档被切分为 2 个 chunk
❓ Python 是谁创建的?
💬 Python 由 Guido van Rossum 于 1991 年创建。
❓ Python 在 AI 领域有哪些框架?
💬 Python 在 AI 领域使用的框架包括 PyTorch 和 TensorFlow。
❓ Python 是编译型还是解释型?
💬 Python 是一种解释型编程语言。