2.Agent框架
总览¶
先回顾一下JSON
型和code
型Agent的区别。
用代码而非 JSON 编写操作提供了几个关键优势:
- 可组合性(Composability):轻松组合和重用操作
- 对象管理(Object Management):直接处理复杂结构,如图像
- 通用性(Generality):表达任何计算上可能的任务
- 适合大语言模型:高质量代码已存在于大语言模型的训练数据中
smolagents¶
这个notebook可以进行实践。
- multistep:每个step执行一次思考,一次调用工具。
- code agent:编写代码调用外部工具
提供两种智能体:
- 使用代码的智能体:写代码,然后在沙盘里运行
- 调用工具的智能体:使用JSON调用其它
tool
函数
下面是一个例子:code agent会创建如此代码
for query in [
"Best catering services in Gotham City",
"Party theme ideas for superheroes"
]:
print(web_search(f"Search for: {query}"))
而tool calling agent会创建如此JSON:
[
{"name": "web_search", "arguments": "Best catering services in Gotham City"},
{"name": "web_search", "arguments": "Party theme ideas for superheroes"}
]
Memory与每次运行流程¶
总体上,如下图所示,Agent维护一个Memory,最开始是空的,每次思考后,将反馈添加到Memory中,然后再将`System_Prompt
和Memory
拼一起进行思考。
多智体¶
多智体,其实很简单,一个智能体分配任务,其他的接受任务,各司其职。deepseek-R1利用下属模型完成搜索,最后能够画图。
实战细节¶
如下定义web agent,其中description
给上层提供了它的职能。
web_agent = CodeAgent(
model=model,
tools=[
GoogleSearchTool(provider="serper"),
VisitWebpageTool(),
calculate_cargo_travel_time,
],
name="web_agent",
description="Browses the web to find information",
verbosity_level=0,
max_steps=10,
)
如下定义manage agent,其中managed_agents
列出了它的子智能体。planning_interval
规定多少次行动后进行一次规划,是个能耗平衡的参数。
Note
沙盒环境中,本来没有额外库或包,但是可以手动授权导入。
manager_agent = CodeAgent(
model=HfApiModel("deepseek-ai/DeepSeek-R1", provider="together", max_tokens=8096),
tools=[calculate_cargo_travel_time],
managed_agents=[web_agent],
additional_authorized_imports=[
"geopandas",
"plotly",
"shapely",
"json",
"pandas",
"numpy",
],
planning_interval=5,
verbosity_level=2,
final_answer_checks=[check_reasoning_and_plot],
max_steps=15,
)
带图像视觉的¶
log
就是执行的所有细节,包括过程,参数,结果等等。每一步最后都要callback,截个图,保留一定步数内的截图。