技术分享1 分钟阅读
ai工具调用
代码示例 先安装依赖,pip install langchain,langchain_openai
import os
from typing import Optional
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate
from langchain.agents import create_tool_calling_agent, AgentExecutor
# 定义工具功能
@tool
def search_web(query: str, max_results: Optional[int] = 3):
"""用于执行网页搜索的工具"""
# 此处可替换为实际搜索引擎接口
return [f"结果{i + 1}: {query}" for i in range(max_results)]
@tool
def math_calculator(expression: str):
"""执行数学表达式计算的工具"""
try:
return eval(expression)
except Exception as e:
return f"计算错误: {str(e)}"
# 初始化大语言模型
llm = ChatOpenAI(model="gpt-4o-mini",
openai_api_key='sk-XXXXX',
openai_api_base='https://XX.XX.cm/v1',
temperature=0)
# 创建工具列表
tools = [search_web, math_calculator]
# 构建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能助手,请根据用户需求选择合适的工具"),
("user", "{input}"),
("placeholder", "{agent_scratchpad}"), # 必须加上这一行
])
# 创建智能体
agent = create_tool_calling_agent(llm, tools, prompt)
# 创建执行器
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# 示例执行
if __name__ == "__main__":
print("--- LangChain工具调用演示 ---")
while True:
user_input = input("请输入您的需求(输入'exit'退出): ")
if user_input.lower() == 'exit':
break
try:
result = agent_executor.invoke({"input": user_input})
print("\n执行结果:")
print(result['output'])
except Exception as e:
print(f"发生错误: {str(e)}")
print("\n" + "=" * 50 + "\n")
LangChain 工具调用智能体代码解析
这段代码展示了一个使用 LangChain 框架构建的智能体(Agent),它能够根据用户输入选择并调用适当的工具来完成任务。下面我将详细解释代码的各个部分:
1. 导入必要的库
import os
from typing import Optional
from langchain_openai import ChatOpenAI
from langchain_core.tools import tool
from langchain_core.prompts import ChatPromptTemplate
from langchain.agents import create_tool_calling_agent, AgentExecutor
os: 操作系统接口typing.Optional: 类型注解,表示可选参数ChatOpenAI: LangChain 的 OpenAI 聊天模型封装tool: 装饰器,用于将函数转换为 LangChain 工具ChatPromptTemplate: 聊天提示模板create_tool_calling_agent和 AgentExecutor: 用于创建和执行智能体2. 定义工具功能
网页搜索工具
@tool
def search_web(query: str, max_results: Optional[int] = 3):
"""用于执行网页搜索的工具"""
# 此处可替换为实际搜索引擎接口return [f"结果{i + 1}: {query}" for i in range(max_results)]
@tool装饰器将函数标记为 LangChain 工具接收查询字符串和可选的最大结果数
目前是模拟实现,实际应用中可替换为真实搜索引擎 API
工具描述文档字符串很重要,LLM 会根据它决定是否使用该工具
数学计算器工具
@tool
def math_calculator(expression: str):
"""执行数学表达式计算的工具"""
try:
return eval(expression)
except Exception as e:
return f"计算错误: {str(e)}"
接收数学表达式字符串
使用 Python 的
eval()执行计算包含错误处理,返回错误信息
3. 初始化大语言模型
llm = ChatOpenAI(model="gpt-4o-mini", openai_api_key='sk-bC0cLw1brB4Kvo5s14D6Cd84EeF243B3A3A2373c545067C2',
openai_api_base='https://free.v36.cm/v1', temperature=0)
创建
ChatOpenAI实例指定模型为 "gpt-4o-mini" (注意:这不是 OpenAI 官方模型名称)
提供 API 密钥和自定义 API 基础 URL
temperature=0使输出更确定性4. 创建工具列表
tools = [search_web, math_calculator]
将定义的两个工具放入列表,供智能体使用
5. 构建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个智能助手,请根据用户需求选择合适的工具"),
("user", "{input}"),
("placeholder", "{agent_scratchpad}"),# 必须加上这一行
])
定义对话提示模板,包含三部分:
•
系统消息:设定智能体的角色和行为
•
用户输入:占位符
{input}将被实际输入替换•
代理草稿本:
{agent_scratchpad}用于记录智能体的思考过程6. 创建智能体和执行器
agent = create_tool_calling_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
create_tool_calling_agent: 创建能调用工具的智能体参数:LLM 实例、工具列表、提示模板
AgentExecutor: 执行智能体的实际工作verbose=True显示详细执行过程7. 主程序交互循环
if __name__ == "__main__":
print("--- LangChain工具调用演示 ---")
while True:
user_input = input("请输入您的需求(输入'exit'退出): ")
if user_input.lower() == 'exit':
break
try:
result = agent_executor.invoke({"input": user_input})
print("\n执行结果:")
print(result['output'])
except Exception as e:
print(f"发生错误: {str(e)}")
print("\n" + "=" * 50 + "\n")
持续接收用户输入
调用
agent_executor.invoke()处理输入打印结果或错误信息
输入 "exit" 退出循环
工作流程总结
•
用户输入问题/请求
•
智能体分析输入,决定是否需要使用工具
•
如果需要工具,选择最合适的工具并生成调用参数
•
执行工具并获取结果
•
智能体整合工具结果生成最终回复
•
返回给用户
关键概念
工具(Tool): 封装特定功能的可调用对象,LLM 可以决定是否及如何调用
智能体(Agent): 决定何时及如何使用工具的 LLM 系统
执行器(Executor): 实际运行智能体逻辑的组件
这段代码展示了 LangChain 框架构建工具调用智能体的基本模式,理解这个结构后可以扩展出更复杂的功能。
有关使用上的问题,欢迎您在底部评论区留言,一起交流~
读者评论
评论会同步写入该文在 Notion 中的页面底部(与正文同页,便于管理)。
暂无评论,欢迎抢沙发。