1. 项目概述
LangChain 是当前最热门的 AI 应用开发框架之一,它让开发者能够快速构建基于大语言模型的智能助手。不同于传统的聊天机器人,基于 LangChain 构建的 AI Agent 具备记忆能力、工具调用能力和复杂任务分解能力,可以完成更高级的交互任务。
我在实际项目中用 LangChain 开发过客服助手、数据分析助手等多种 AI Agent,发现其入门门槛比想象中低很多。只要掌握几个核心概念,5分钟确实能跑通第一个可用的智能助手。下面我就分享这个快速上手指南,包含完整代码和避坑经验。
2. 环境准备与安装
2.1 Python 环境配置
建议使用 Python 3.8-3.10 版本,这是 LangChain 最稳定的支持范围。我推荐使用 conda 创建独立环境:
bash复制conda create -n langchain_env python=3.9
conda activate langchain_env
注意:避免使用 Python 3.11+,某些依赖包可能还不兼容
2.2 安装核心依赖
除了 langchain 基础包,还需要安装对应大模型提供商的 SDK。以 OpenAI 为例:
bash复制pip install langchain openai tiktoken
如果计划使用其他功能模块,可以按需安装:
- 文档加载:
pip install pypdf - 向量数据库:
pip install chromadb - 数学计算:
pip install numexpr
3. 第一个智能助手实现
3.1 基础对话实现
创建一个 basic_agent.py 文件:
python复制from langchain.llms import OpenAI
# 初始化模型 (建议将API key放在环境变量中)
llm = OpenAI(temperature=0.7, model_name="gpt-3.5-turbo")
# 简单对话
response = llm("请用中文介绍一下你自己")
print(response)
关键参数说明:
temperature:控制生成随机性(0-1),值越大回答越多样model_name:指定模型版本,不同版本能力和价格不同
3.2 添加对话记忆
基础版每次问答都是独立的,要让助手记住上下文,需要添加 ConversationChain:
python复制from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
conversation = ConversationChain(llm=llm, memory=memory)
print(conversation.run("你好,我叫张三"))
print(conversation.run("我刚才说我叫什么名字?")) # 助手能记住名字
记忆系统有多种实现方式:
ConversationBufferMemory:保存完整历史ConversationSummaryMemory:生成历史摘要ConversationBufferWindowMemory:只保留最近N轮对话
4. 增强助手能力
4.1 添加工具调用
让助手能执行网络搜索、计算等操作:
python复制from langchain.agents import load_tools
from langchain.agents import initialize_agent
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
agent.run("现在北京天气怎么样?") # 会调用搜索引擎
agent.run("123的平方是多少?") # 会调用计算器
常用工具包包括:
serpapi:谷歌搜索wolfram-alpha:专业计算python_repl:执行Python代码
4.2 处理长文本和文档
对于超出模型上下文长度的内容,需要特殊处理:
python复制from langchain.document_loaders import PyPDFLoader
from langchain.text_splitter import CharacterTextSplitter
# 加载PDF文档
loader = PyPDFLoader("example.pdf")
pages = loader.load()
# 分割文本
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
docs = text_splitter.split_documents(pages)
处理技巧:
- chunk_size 不要超过模型token限制(如GPT-3.5是4096)
- overlap 设置10-20%避免信息割裂
- 复杂文档建议先提取目录结构
5. 实战问题排查
5.1 常见错误与解决
-
API调用超时
- 检查网络连接
- 增加超时参数:
OpenAI(request_timeout=30)
-
输出内容不符合预期
- 调整temperature值
- 添加更明确的prompt约束
-
记忆丢失问题
- 检查memory是否正确传递
- 复杂场景建议使用数据库存储历史
5.2 性能优化技巧
-
缓存重复请求
python复制from langchain.cache import InMemoryCache langchain.llm_cache = InMemoryCache() -
流式输出
python复制for chunk in llm.stream("请写一首诗"): print(chunk, end="") -
批量处理请求
python复制results = llm.generate(["问题1", "问题2", "问题3"])
6. 项目扩展方向
6.1 连接企业数据
通过自定义Retriever接入内部知识库:
python复制from langchain.retrievers import MyCustomRetriever
custom_retriever = MyCustomRetriever()
qa = RetrievalQA.from_chain_type(llm=llm, chain_type="stuff", retriever=custom_retriever)
6.2 构建Web界面
使用Gradio快速创建演示:
python复制import gradio as gr
def chatbot(input):
return conversation.run(input)
gr.Interface(fn=chatbot, inputs="text", outputs="text").launch()
6.3 部署为API服务
使用FastAPI构建:
python复制from fastapi import FastAPI
app = FastAPI()
@app.post("/chat")
async def chat_endpoint(query: str):
return {"response": conversation.run(query)}
我在实际项目中发现,初期不要过度追求复杂功能,先确保基础对话流程稳定更重要。建议从单一功能开始,逐步添加以下模块:
- 用户身份识别
- 多轮对话管理
- 领域知识增强
- 异常处理机制
一个实用的调试技巧:用 langchain.debug = True 可以查看详细的内部执行过程,帮助定位问题。