只需几行代码,释放LLM潜能!Hugging Face Smolagents让AI自己动手!
还在为大型语言模型(LLM)的被动性而苦恼吗?想让你的AI不仅能说会道,还能“手脚并用”地解决实际问题?现在,抱抱脸(Hugging Face)推出的Smolagents框架,只需几行代码,就能让这一切成为可能!它赋予LLM强大的代理能力,让AI化身Agent,主动探索世界,完成复杂任务!告别繁琐的配置和复杂的代码,Smolagents让LLM的潜能触手可及!
LLM的“手脚”——Agent究竟是什么?
想象一下,LLM就像一个拥有超强记忆和语言能力的大脑,但它缺乏与现实世界的连接。Agent就是LLM的“手脚”,让它能够与外界互动:访问搜索引擎获取信息、操作软件完成任务、甚至控制其他程序!
Hugging Face将“代理”定义为一个连续的谱系,赋予LLM不同程度的自主性:
• Lv.1 简单处理器 (☆☆☆): LLM只是被动输出,对程序流程毫无影响,就像一个简单的信息处理器。 例如: process_llm_output(llm_response)
• Lv.2 路由器 (★☆☆): LLM的输出开始影响程序走向,例如决定走哪个if/else分支,像一个交通指挥员。 例如: if llm_decision(): path_a() else: path_b()
• Lv.3 工具调用器 (★★☆): LLM能够调用预定义的工具(函数),例如调用搜索工具获取特定信息,像一个熟练的工具使用者。 例如: run_function(llm_chosen_tool, llm_chosen_args)
• Lv.4 多步Agent (★★★): LLM能够控制程序的迭代和执行流程,可以根据情况多次调用工具,像一个经验丰富的项目经理。 memory = [user_defined_task]
while llm_should_continue(memory):
action = llm_get_next_action(memory)
observations = execute_action(action)
memory += [action, observations]• Lv.5 多Agent (★★★): 多个Agent协同工作,完成更复杂的任务,例如一个Agent负责制定计划,另一个Agent负责执行,像一个高效的团队。 例如: if llm_trigger(): execute_agent()
何时使用 Agents?何时应该避免?
Agent 并非万能灵药,在某些情况下,使用预定义的工作流程反而更高效更可靠。 那么,何时才是使用 Agent 的最佳时机呢?
✅ Agent 的用武之地:
当你的任务需要 LLM 动态地决定工作流程时,Agent 就派上用场了。例如,处理复杂的客户请求,需要根据不同的情况调用不同的工具和 API。
举个例子:一个旅行网站的客服机器人,如果用户只是询问简单的旅行信息或联系销售,预定义的工作流程就足够了。但如果用户提出了一个复杂的问题,例如:"我周一可以出发,但我的护照丢了,可能会延迟到周三,请问周二早上可以安排我和我的行李去冲浪吗?还需要一份取消保险。"
这种情况下,Agent 就能根据情况动态地调用天气 API、地图 API、员工日程安排等工具,最终给出满意的答复。
⛔ 避免过度使用 Agent:
如果你的任务可以用预定义的工作流程高效完成,那就不要画蛇添足地使用 Agent。例如,简单的数学计算或信息检索,直接使用 LLM 就足够了。
记住,Agent 会增加系统的复杂性和不确定性,过度使用反而会降低效率和可靠性。
Smolagents:构建Agent的利器
Smolagents框架简化了构建复杂Agent的流程,它提供了一系列必要的组件:
• 强大的LLM引擎: 驱动Agent的核心,负责思考和决策。 Smolagents 支持多种LLM引擎,包括 HfApiModel
、TransformersModel
和LiteLLMModel
。• 丰富的工具库: Agent可以使用的各种工具,例如搜索工具、代码执行器等等。Smolagents 提供了默认工具箱,也支持自定义工具,甚至可以从 Hugging Face Hub 加载工具。 • 灵活的解析器: 理解LLM的指令,并将其转化为具体的行动。 • 清晰的系统提示: 引导LLM生成有效的指令。 • 可靠的记忆机制: 记录Agent的行动和观察,为后续决策提供依据。 • 完善的错误处理: 即使LLM犯错,Agent也能及时纠正,保证任务顺利完成。
代码Agent:让LLM“说”代码
Smolagents主推代码Agent,它能够直接生成代码来调用工具。以下是一个使用CodeAgent
和自定义工具的例子,只需几行代码即可创建一个Agent:
from smolagents import CodeAgent, tool, HfApiModel
@tool
def get_weather(city: str):
"""获取指定城市的天气。"""
# 这里可以替换成真正的API调用
return f"{city}今天天气晴朗。"
agent = CodeAgent(tools=[get_weather], model=HfApiModel())
agent.run("获取北京的天气")
相比传统的JSON格式,代码Agent拥有诸多优势:更强的表达能力、更好的可组合性、更自然的与代码交互。
下面是官方提供的CodeAgent的系统提示词,看着蛮有趣
你是一位专家助手,可以使用代码块解决任何任务。你将被赋予一个任务,并尽力完成它。
为此,你将可以使用一系列工具:这些工具本质上是你可以通过代码调用的 Python 函数。
为了解决任务,你必须提前计划,并按步骤进行,循环执行“思考”、“代码”和“观察”的步骤。
在每一步中:
* 在“思考”步骤中,你应该首先解释你解决任务的思路以及你想要使用的工具。
* 然后在“代码”步骤中,你应该用简单的 Python 编写代码。“代码”序列必须以 `<end_code>` 序列结束。
* 在每个中间步骤中,你可以使用 `print()` 保存任何你接下来需要的重要信息。
* 这些打印输出将出现在“观察”字段中,并作为下一步的输入。
* 最后,你必须使用 `final_answer` 工具返回最终答案。
以下是一些使用虚拟工具的示例:
---
{examples}
以上示例使用的是虚拟工具,你可能无法访问它们。除了在你创建的 Python 代码片段中执行计算之外,你只能访问以下工具:
{{tool_descriptions}}
{{managed_agents_descriptions}}
以下是解决任务时应始终遵循的规则:
1. 始终提供“思考”序列和以“` ```py`”开头并以“` ```<end_code>`”结尾的“代码”序列,否则你将失败。
2. 仅使用你已定义的变量!
3. 始终为工具使用正确的参数。不要像 `answer = wiki({'query': "What is the place where James Bond lives?"})` 这样以字典形式传递参数,而应直接使用参数,例如 `answer = wiki(query="What is the place where James Bond lives?")`。
4. 注意不要在同一个代码块中链接过多的连续工具调用,尤其是在输出格式不可预测的情况下。例如,对搜索的调用具有不可预测的返回格式,因此不要在同一个代码块中进行依赖其输出的另一个工具调用:而是使用 `print()` 输出结果,以便在下一个代码块中使用它们。
5. 仅在需要时调用工具,并且永远不要使用完全相同的参数重新执行之前的工具调用。
6. 不要使用与工具相同的名称来命名任何新变量:例如,不要将变量命名为 `final_answer`。
7. 不要在代码中创建任何虚拟变量,因为日志中出现这些变量可能会使你偏离真正的变量。
8. 你可以在代码中使用导入,但只能从以下模块列表中导入:{{authorized_imports}}
9. 状态在代码执行之间保持不变:因此,如果你在一个步骤中创建了变量或导入了模块,它们都将继续存在。
10. 不要放弃!你负责解决任务,而不是提供解决任务的指导。
现在开始吧!如果你正确地解决了任务,你将获得 1,000,000 美元的奖励。
React框架:让Agent“思考-行动-观察”
Smolagents基于React(Reason and Act)框架,让Agent像人类一样进行思考和行动,通过持续的“思考-行动-观察”循环来完成任务。
多Agent协作:打造AI梦之队
Smolagents 支持构建多 Agent 系统,让多个 Agent 协同工作,就像一支 AI 梦之队!以下是一个简单的多 Agent 系统示例:
from smolagents import CodeAgent, HfApiModel, ManagedAgent, DuckDuckGoSearchTool
model = HfApiModel()
web_agent = CodeAgent(tools=[DuckDuckGoSearchTool()], model=model)
managed_web_agent = ManagedAgent(agent=web_agent, name="web_search", description="执行网络搜索。")
manager_agent = CodeAgent(tools=[], model=model, managed_agents=[managed_web_agent])
manager_agent.run("Hugging Face的CEO是谁?")
拥抱开放:丰富的集成和工具
Smolagents拥抱开放,支持多种LLM引擎 (例如 HfApiModel
, TransformersModel
, LiteLLMModel
),并提供丰富的集成和工具:
• Hugging Face Hub集成: 轻松共享和加载工具 (例如使用 load_tool
)。• LangChain集成: 利用LangChain丰富的工具库 (例如使用 Tool.from_langchain
)。• Gradio集成: 快速构建交互式界面 (例如使用 GradioUI
)。
未来已来:Smolagents开启无限可能
Smolagents的出现,标志着LLM应用进入了一个新的时代。它让LLM不再是被动的工具,而是能够主动探索世界、解决问题的智能体。未来,Smolagents将为我们带来更多惊喜!
如果您想要让大模型写出优质的短篇小说,以及对其他内容感兴趣,也欢迎点击下面的链接,效果不错哦,很多朋友都说好。
点击这里:超强写作提示词
以及 最强写作指导
效果如下