1. 项目概述:20分钟快速构建LangChain智能体
去年在开发一个文档问答系统时,我花了整整两周时间才搭建出第一个可用的智能体原型。直到发现LangChain这个神器,同样的功能现在20分钟就能实现。今天要分享的就是如何用LangChain快速开发一个具备文档检索和分析能力的智能体(Agent)。
这个智能体的核心功能是:用户提出关于LangChain的技术问题,它能自动检索官方文档,通过子智能体并行分析多个文档片段,最后生成带参考来源的专业回答。整个过程完全自动化,且支持实时流式输出。
2. 环境准备与工具选型
2.1 基础环境配置
建议使用Python 3.9+环境,先安装核心依赖:
pip install langchain-core langchain-openai deepagents我习惯用conda创建独立环境:
conda create -n langchain-agent python=3.9 conda activate langchain-agent2.2 嵌入模型选择
文档检索的核心是嵌入模型,根据需求可选:
- 轻量级测试:
HuggingFaceEmbeddings(本地运行) - 生产环境:
OpenAIEmbeddings(需API key) - 中文场景:
M3E或BGE中文嵌入模型
这里以OpenAI为例:
from langchain_openai import OpenAIEmbeddings embeddings = OpenAIEmbeddings(model="text-embedding-3-small")注意:嵌入模型的选择直接影响检索质量。小规模数据测试时可以用
InMemoryVectorStore,生产环境建议使用PGVector或Chroma。
3. 文档处理流水线搭建
3.1 文档加载与分块
首先从LangChain官网抓取文档:
from langchain_community.document_loaders import WebBaseLoader urls = [ "https://docs.langchain.com/docs/agents", "https://docs.langchain.com/docs/retrieval" ] loader = WebBaseLoader(urls) docs = loader.load()然后用递归分块器处理文档:
from langchain_text_splitters import RecursiveCharacterTextSplitter text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, separators=["\n\n", "\n", "。", "!", "?"] ) splits = text_splitter.split_documents(docs)3.2 向量数据库构建
将分块后的文档存入向量数据库:
from langchain_chroma import Chroma vector_store = Chroma.from_documents( documents=splits, embedding=embeddings, persist_directory="./chroma_db" )实测数据:
- 1000个文档块
- 每个块约500-1000字符
- 构建索引耗时约2分钟
4. 智能体核心逻辑实现
4.1 搜索工具开发
创建文档搜索工具函数:
from langchain.tools import tool import uuid @tool def search_docs(query: str) -> list: """检索LangChain文档并返回相关片段""" docs = vector_store.similarity_search(query, k=4) return [ f"片段ID:{uuid.uuid4()}\n内容:{doc.page_content[:500]}..." for doc in docs ]4.2 子智能体配置
设置分析文档片段的子智能体:
chunk_analyst = { "name": "doc-analyst", "system_prompt": """你是一个文档分析专家: 1. 提取关键API和配置参数 2. 总结操作步骤 3. 标注来源文档位置 回答不超过300字""", "tools": [] # 可以添加文件读取等工具 }4.3 主智能体组装
整合所有组件创建主智能体:
from deepagents import create_deep_agent agent = create_deep_agent( model="gpt-4-turbo", tools=[search_docs], subagents=[chunk_analyst], system_prompt="""你是LangChain专家助手: 1. 先检索文档 2. 派发子任务分析片段 3. 综合所有分析结果 必须引用文档来源""" )5. 运行与优化技巧
5.1 启动智能体
query = "如何在LangChain中实现流式输出?" response = agent.invoke({"input": query}) for chunk in response: print(chunk["output"])5.2 性能优化建议
- 并行处理:设置
max_concurrent=3允许并行分析多个文档片段 - 缓存机制:对常见问题缓存回答
- 分级检索:先检索目录再定位具体内容
5.3 常见问题排查
问题1:检索结果不相关
- 检查分块大小是否合适
- 尝试不同嵌入模型
- 调整相似度阈值
问题2:响应速度慢
- 减少返回片段数量(k参数)
- 使用更轻量的LLM模型
- 启用流式输出
6. 项目扩展方向
这个基础框架可以扩展为:
- 客服机器人:接入产品文档库
- 教学助手:链接课程资料
- 代码分析工具:集成GitHub仓库
我在实际项目中发现,加入以下改进会大幅提升体验:
- 用户反馈循环(标记有用/无用回答)
- 自动生成示例代码
- 多语言支持切换
最后分享一个调试技巧:使用LangSmith平台监控智能体的完整决策过程,这对优化提示词和工具链非常有帮助。刚开始可以设置verbose=True查看详细日志,稳定后再关闭。