使用 LangChain 构建智能问答系统
RAG(检索增强生成)是当前构建企业级 AI 应用的主流架构。本文将介绍如何使用 LangChain 实现一个基础的知识库问答系统。
RAG 架构概述
RAG 系统的核心流程:
- 文档加载:读取 PDF、Markdown 等格式文档
- 文本分割:将长文档切分为合适大小的片段
- 向量化:使用 Embedding 模型转换为向量
- 存储索引:存入向量数据库
- 检索生成:根据问题检索相关片段,交给 LLM 生成答案
代码实现
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
# 加载文档
loader = TextLoader("knowledge.md")
documents = loader.load()
# 文本分割
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
texts = text_splitter.split_documents(documents)
# 创建向量存储
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_documents(texts, embeddings)
# 构建问答链
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model="gpt-4"),
retriever=vectorstore.as_retriever()
)
# 提问
answer = qa.run("什么是向量数据库?")
print(answer)
性能优化建议
- 使用合适的 chunk 大小(通常 500-1000 字符)
- 选择适合业务场景的 Embedding 模型
- 考虑使用混合检索(向量 + 关键词)
- 实现缓存机制减少重复计算
总结
LangChain 大大降低了 RAG 系统的开发门槛,通过组合各种组件可以快速搭建智能问答应用。