最近的Agent异常火热,manus、扣子空间、百度最近发布的心响,都让我们感受到了Agent的强大。
什么是Agent
它可以经过反复调研为我们出股票分析报告,可以根据我们的需求和预算帮我们制定旅游计划,甚至可以根据我们的需求帮我们写一个网站。

它不再是简单的只能对话的“玩具”,而是可以规划和执行的帮手。也就是具有了Resoning + Action的能力。
能根据模型的推理和规划,来调用工具,完成复杂任务,这就是对Agent最基本的理解。重点是根据模型的推理和规划来调用工具,而不是人为硬编码固定流程来调用工具,后者我们一般称为workflow。
实现一个天气查询Agent
今天我们就通过这个例子来看Agent是怎么实现的。我们借助langchain开发框架来完成。
langchain是一个流行的AI应用开发框架,它将AI应用的开发流程进行抽象,使用应用开发变得简单。
比如连续对话、RAG知识库、基于ReAct的Agent等都可以基于这个框架进行开发。
下面用一个简单的查询天气的例子理解Agent的工作流程。
首先,创建一个语言模型,语言模型是Agent的大脑,帮助Agent进行规划,告诉Agent如何执行,并对结果进行观察和总结。我使用阿里百炼平台提供的qwen-max模型,这个模型工具调用能力基本没啥问题。目前deepseek-r1还不具备工具调用能力,这里最好不要使用,效果比较差。当然,工具调用是大势所趋,后续版本deepseek必定也会支持这个能力的。
import os
import sys
from dotenv import load_dotenv
from langchain_openai.chat_models.base import ChatOpenAI
from langchain.agents import Tool
from langchain.agents import initialize_agent
# 从.env文件加载环境变量
load_dotenv()
# 获取API密钥
api_key = os.getenv("OPENAI_API_KEY")
if not api_key:
print("错误: 请在.env文件中设置您的OPEN_API_KEY")
sys.exit(1)
#我们使用阿里百炼平台提供的qwen-max模型
llm = ChatOpenAI(
openai_api_key=api_key,
model_name="qwen-max",
openai_api_base="https://dashscope.aliyuncs.com/compatible-mode/v1/",
temperature=0.7,
max_tokens=8192
)
接下来。我们定义工具函数,这里只是为了说明用法,我定义了两个极其简单的函数,一个是将小写字母转化为大写,另一个是获取天气。而且获取天气也未真实实现。理解运行过程就好。
# 自定义工具,将小写字母转化为大写字母
def to_upper_tool(text:str)->str:
return text.upper()
to_upper_tool = Tool(
name="to_upper_tool",
func=to_upper_tool,
description="useful for when you need to convert a string to uppercase."
)
# 自定义工具,模拟获取城市天气
def get_weather_tool(test:str)->str:
#todo: get weather from weather api
return "天气晴,温度28度"
get_weather_tool = Tool(
name="get_weather_tool",
func=get_weather_tool,
description="useful for when you need to get the weather of a city."
)
现在,我们把前面定义好的工具和语言模型一起给到agent,这个时候agent就拥有了大模型和工具的能力了。
# 工具列表
tools = [to_upper_tool, get_weather_tool]
# 初始化代理
agent = initialize_agent(
agent="zero-shot-react-description",
tools=tools,
llm=llm,
verbose=True, # 显示调试信息
)
一个简单的agent就创建好了。
我们先问一个普通的问题,测试Agent的回复。
result = agent.run(input="你好,你是谁?") # 使用Agent进行对话
print(f"AI回复: {result}")
看下它的执行过程。
Entering new AgentExecutor chain…
我理解的问题是中文,问题是“你好,你是谁?”。这个问题是在询问我的身份。作为Qwen,一个由阿里云开发的AI助手,我可以直接回答这个问题,无需使用提供的工具。
Thought: 我可以直接回答这个问题,不需要使用任何工具。
Final Answer: 你好!我是Qwen,一个由阿里云创造的大规模语言模型。作为一个AI助手,我的目标是帮助用户获得准确的信息、提供有用的建议并激发创造力。很高兴遇见你!
Finished chain.
AI回复: 你好!我是Qwen,一个由阿里云创造的大规模语言模型。作为一个AI助手,我的目标是帮助用户获得准确的信息、提供有用的建议并激发创造力。很高兴遇见你!
嗯,表现正常。没有乱调工具~
继续测试一下小写字母转化为大写字母。
result = agent.run(input="将fdafdsfkjklajfdkasjf转化为大写字母") # 使用Agent进行对话
print(f"AI回复: {result}")
看下它的执行过程。
Entering new AgentExecutor chain…
我需要使用to_upper_tool这个工具来将给定的字符串转换为大写。
Action: to_upper_tool
Action Input: “fdafdsfkjklajfdkasjf”
Observation: FDAFDSFKJKLAJFDKASJF
Thought:我通过使用to_upper_tool工具成功地将给定的字符串转换为了大写形式。
Final Answer: FDAFDSFKJKLAJFDKASJF>
Finished chain.
AI回复: FDAFDSFKJKLAJFDKASJF
这个回答表现也正常,调用了to_upper_tool工具来转化字母大小写。当然,没有这个工具模型本身应该也能搞定,这里只是为了演示工具用法。
再来看第三个问题,难度升级。我把转化字母大小写和查询天气两个不相关的事情放在一起问,看下它的表现。
result = agent.run(input="将fdafdsfkjklajfdkasjf转化为大写字母,并帮忙查询武汉的天气") # 使用Agent进行对话
print(f"AI回复: {result}")
看下它的执行过程。
Entering new AgentExecutor chain…
我需要先使用to_upper_tool工具将给定的字符串转换为大写,然后再用get_weather_tool查询武汉的天气。
Action: to_upper_tool
Action Input: fdafdsfkjklajfdkasjf
Observation: FDAFDSFKJKLAJFDKASJF
Thought:我已经成功将字符串转换为大写,接下来我需要使用get_weather_tool来查询武汉的天气。
Action: get_weather_tool
Action Input: 武汉
Observation: 天气晴,温度28度
Thought:我现在知道了最终答案。
Final Answer: 字符串"fdafdsfkjklajfdkasjf"转换为大写后是"FDAFDSFKJKLAJFDKASJF"。武汉的天气是晴天,温度为28度。
Finished chain.
AI回复: 字符串"fdafdsfkjklajfdkasjf"转换为大写后是"FDAFDSFKJKLAJFDKASJF"。武汉的天气是晴天,温度为28度。
过程大致是这样的:
- 首先问题给到语言模型。
- 语言模型规划执行步骤,要调用哪些工具。
- Agent执行to_upper_tool工具调用。
- 模型观察工具调用结果。
- Agent执行get_weather_tool工具调用。
- 模型观察工具调用结果。
- 模型总结最终答案。
这是一个多步调用工具的流程,它给了我正确的答案。模型在完成工具调用上是ok的。当然,像manus这种通用Agent,场景会复杂百倍,我们也会看到任务执行失败的情况。Agent能稳定地执行复杂任务,还有很多的探索空间。
Agent的未来
我们可以看到Agent的执行过程,thought->action->observation->thought->action->…,直到得出终结果。这就是Agent的ReAct模式,也就是Resoning+Action,让模型具有了思考和行动能力。
随着MCP生态的丰富,通过给Agent接入更多的工具,模型将具备更加强大的能力。未来,Agent将超越工具属性,成为人类生活中不可或缺的智能伙伴。更重要的是,通过A2A协议,Agent之间将实现高效协作,也将构建起无缝连接的智慧生态。
好了,今天使用langchain实现Agent调用工具就介绍到这里,觉得有用的话请点个赞吧。
更多好玩的AI探索实践及AI前沿技术,请关注微信公众号:深度探索AI应用
389

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



