LangChain 搭建具备工具调用能力的智能代理
核心概念
- 智能代理:能自主决策调用外部工具完成复杂任务的 AI 系统
- 工具调用:代理根据输入动态选择并执行特定功能模块
- LangChain 框架:提供标准化接口连接语言模型与工具
开发步骤
1. 定义工具集
创建可调用的基础功能模块,每个工具需包含:
- 名称:唯一标识符
- 描述:功能说明(LLM 据此选择工具)
- 执行函数:具体实现逻辑
from langchain.tools import BaseTool
class Calculator(BaseTool):
name = "calculator"
description = "执行数学计算,输入数学表达式"
def _run(self, expression: str):
return eval(expression) # 实际开发需安全处理
class WebSearch(BaseTool):
name = "web_search"
description = "获取实时网络信息,输入查询关键词"
def _run(self, query: str):
return get_search_results(query) # 需实现搜索接口
2. 构建代理
使用 LangChain 的 Agent 框架集成工具:
from langchain.agents import initialize_agent
from langchain.llms import OpenAI
# 初始化组件
llm = OpenAI(temperature=0)
tools = [Calculator(), WebSearch()]
# 创建代理
agent = initialize_agent(
tools,
llm,
agent="zero-shot-react-description", # 零样本决策代理
verbose=True # 显示执行过程
)
3. 代理决策机制
代理执行流程:
- 问题解析:LLM 分析用户意图
- 工具选择:根据工具描述匹配需求
- 决策依据:工具描述与问题语义相似度
- 参数生成:提取工具所需输入参数
- 执行反馈:整合工具返回结果
数学决策模型: $$ \text{工具选择概率} P(t|q) = \frac{e^{\text{sim}(d_t, q)}}{\sum_{i} e^{\text{sim}(d_i, q)}} $$ 其中 $d_t$=工具描述, $q$=用户问题
执行示例
# 简单计算任务
response = agent.run("计算圆周率与自然对数的乘积")
# 执行路径: 选择calculator → 生成表达式"math.pi * math.log(1)" → 返回结果
# 复杂信息获取
response = agent.run("特斯拉当前股价是多少美元?换算成人民币是多少?")
# 执行路径:
# 1. 选择web_search获取股价 → 返回$265.43
# 2. 选择calculator计算汇率 → 输入"265.43 * 6.8"
进阶优化
- 工具组合:支持多工具链式调用
agent = initialize_agent(..., max_iterations=5) # 允许最多5次工具调用 - 记忆增强:添加对话历史管理
from langchain.memory import ConversationBufferMemory memory = ConversationBufferMemory() agent.agent_executor.memory = memory - 安全控制:限制敏感工具访问权限
@tool(return_direct=True) # 强制直接返回结果 def database_query(input: str): if validate_permission(user_id): return run_sql(input)
典型应用场景
| 场景类型 | 工具示例 | 代理行为 |
|---|---|---|
| 金融分析 | 股票API/汇率计算器 | 获取实时数据 → 执行量化计算 |
| 科研助手 | 论文检索/公式求解器 | 文献查询 → 数学验证 |
| 智能运维 | 日志分析/服务器控制 | 故障诊断 → 执行修复命令 |
通过 LangChain 构建的智能代理,可使大模型突破纯文本生成限制,实现感知-决策-执行的完整智能闭环。
1403

被折叠的 条评论
为什么被折叠?



