共计 1990 个字符,预计需要花费 5 分钟才能阅读完成。
技术背景:为什么需要 LangChain?
在传统 AI 应用开发中,我们通常直接调用大模型 API(如 OpenAI)并自行拼接输入输出。这种方式存在几个明显痛点:

- 流程碎片化:每次调用都需要手动维护会话状态
- 功能单一:缺乏工具扩展能力(如查询数据库 / 网络)
- 调试困难:复杂逻辑需要编写大量胶水代码
LangChain 通过模块化设计解决了这些问题。它像乐高积木一样,将 AI 应用拆解为可组合的标准化组件。举个例子,当我们需要实现一个天气查询机器人时:
传统方式:用户输入 → 手动解析意图 → 调用天气 API → 格式化响应 → 拼接历史对话 → 调用 OpenAI → 返回结果
LangChain 方式:用户输入 → 预构建的 Agent 自动处理全流程
核心概念拆解
- Chain(链):基础执行单元,如问答链、摘要链。可以串联形成复杂工作流
- Agent(代理):智能调度中心,决定何时调用哪些工具或链
- Memory(记忆):保存对话历史,实现多轮交互
- Tool(工具):扩展能力边界,比如:
- 计算器
- 搜索引擎
- 数据库查询
组件交互示意图:
[用户输入]
→ [Agent]
→ 决策是否需要使用[Tool]
→ 调用 [Chain] 处理
→ 更新[Memory]
→ 返回响应
实战演示
1. 基础问答链搭建
from langchain.llms import OpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate
# 注意:实际使用请替换为你的 OpenAI 密钥
llm = OpenAI(model_name="text-davinci-003", temperature=0.7)
prompt = PromptTemplate(input_variables=["question"],
template="请用中文回答以下问题:{question}"
)
qa_chain = LLMChain(llm=llm, prompt=prompt)
# 执行链
question = "如何用 Python 读取 CSV 文件?"
response = qa_chain.run(question=question)
print(response)
2. 添加对话记忆
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory()
# 改造原有 Chain
chat_chain = LLMChain(
llm=llm,
prompt=PromptTemplate(input_variables=["history", "input"],
template=""" 以下是对话历史:{history}
用户新输入:{input}"""
),
memory=memory
)
# 模拟多轮对话
chat_chain.run(input="推荐一道家常菜")
chat_chain.run(input="需要准备哪些食材?") # 这里会自动带入上文
3. 集成自定义工具
from langchain.agents import Tool
from datetime import datetime
def get_current_time() -> str:
return f"当前时间:{datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"
tools = [
Tool(
name="时间查询",
func=get_current_time,
description="当需要知道当前时间时使用"
)
]
# 创建带工具的 Agent
from langchain.agents import initialize_agent
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description",
verbose=True
)
agent.run("现在几点钟?")
避坑指南
- API 调用错误:
- 建议用
try-catch包裹关键操作 -
设置合理的
max_retries参数 -
状态管理:
- 避免在 Memory 中存储敏感信息
-
长对话建议使用
ConversationSummaryMemory压缩历史 -
生产环境:
- 为 Chain 添加
timeout限制 - 使用
langchain.cache提升重复查询效率
进阶方向
- 文档问答系统:
-
结合
VectorstoreIndexCreator实现 PDF 问答 -
数据可视化 Agent:
-
集成
matplotlib自动生成图表 -
自动化办公助手:
- 连接邮箱 / 日历 API 处理日常事务
思考题
如何设计支持多轮审批流程的 Agent?建议考虑:
– 用 AgentExecutor 控制流程节点
– 为每个审批阶段设计专用 Tool
– 使用 ConversationBufferWindowMemory 限制历史长度
(提示:可以模拟 ” 提交→部门审批→财务审批→最终确认 ” 的工作流)
正文完
