使用拥抱脸 Smol 代理开启智能工作流:本地或云
image generated by author and DALL-E.3
Hugging Face的SMOL代理
Hugging Face的SMOL代理代表了大型语言模型(LLMs)与现实世界交互方式的范式转变。与遵循严格工作流程的传统AI系统不同,SMOL代理是轻量级的、以代码为先的AI程序,其中LLM输出动态控制执行流程。基于一个极简框架(约1,000行核心代码),它们优先考虑简单性、安全性和灵活性,使开发者能够部署编写和执行代码以解决复杂任务的代理。
高效的AI系统需要LLMs与现实世界交互,例如检索信息或执行任务,这个概念被称为_代理_。这决定了LLMs在工作流程中的控制程度,并在一个光谱上演变,从基本输出到启动复杂的多代理工作流。
Hugging Face的_SMOL代理_通过利用轻量级、安全和灵活的框架来说明这一点,在这些框架中,LLM输出动态驱动执行。
Source: Hugging Face Github
这些代理使开发者能够通过将简单性与强大的执行能力相结合来部署复杂任务的解决方案。
什么是SMOL代理?
SMOL代理是多步骤AI系统,使用大型语言模型迭代地规划、执行和完善操作。主要特点包括:
- 代码驱动的操作:代理编写Python代码片段来调用工具(例如,API、数据库),而不是依赖基于JSON的工具调用,从而提高可组合性并减少约30%的步骤。
- 多代理工作流:代理可以协调其他代理,实现层次化任务分解(例如,一个管理代理协调专业子代理)。
- 集成中心:工具和代理可以通过Hugging Face Hub共享,促进协作。
- 安全性:代码执行在使用E2B或受限环境的沙箱中进行,以防止不安全的操作。
它们在需要动态决策的场景中表现出色,例如旅行规划、实时数据分析或客户支持,在这些情况下,预定义的工作流往往无法满足需求。
构建 SMOL 代理
先决条件
- Python 3.11+
- 安装库:
步骤 1:初始化代码代理
SMOL代理由 CodeAgent
类驱动,该类使用大型语言模型生成可执行代码。首先导入模块并定义工具:
from smolagents import CodeAgent, HfApiModel, tool
@tool
def get_travel_duration(start: str, end: str, mode: str = "driving") -> str:
"""计算两个地点之间的旅行时间."""
import googlemaps
gmaps = googlemaps.Client(key=os.getenv("GMAPS_API_KEY"))
directions = gmaps.directions(start, end, mode=mode)
return directions[0]['legs'][0]['duration']['text']
步骤 2:配置代理
加载模型(例如,Hugging Face 的推理 API 或通过 LiteLLM 的 OpenAI)并初始化代理:
model = HfApiModel(model_id="meta-llama/Llama-3.3-70B-Instruct")
agent = CodeAgent(
tools=[get_travel_duration],
model=model,
additional_authorized_imports=["datetime"],
use_e2b_executor=True
)
注意:您可以通过 LM Studio 使用 OpenAI 格式的本地模型。
步骤 3:执行多步骤任务
在复杂查询上运行代理。代理迭代地编写代码、执行工具并优化其方法:
response = agent.run(
"计划一次围绕巴黎的单日自行车游,并为每个停靠点安排时间。"
)
print(response)
输出:
- 从埃菲尔铁塔出发(上午 9:00)。
- 前往巴黎圣母院(上午 10:46,46 分钟车程)。
…
代理使用 get_travel_duration
计算交通时间,并动态调整行程。
第4步:检查和调试
查看代理的执行日志:
for step in agent.logs:
print(f"Step {step['index']}: {step['llm_output']}")
print(f"Observation: {step['observation']}")
示例用例
-
自动化客户支持:
from smolagents import ManagedAgent support_agent = CodeAgent(tools=[knowledge_base_search, escalate_to_human]) managed_agent = ManagedAgent( agent=support_agent, name="support_bot", description="处理客户查询和升级。" ) manager_agent.run("客户投诉:我的订单延迟了。")
-
实时数据分析:
@tool def query_database(sql: str) -> pd.DataFrame: """在客户数据库上运行SQL查询.""" ... agent = CodeAgent(tools=[query_database], model=HfApiModel()) agent.run("查找2024年第四季度按收入排序的前5名客户。")
-
物联网集成:
@tool def read_temperature(sensor_id: int) -> float: """从传感器获取温度.""" ... agent = CodeAgent(tools=[read_temperature], model=TransformersModel("tiny-llama")) agent.run("每10分钟监测厨房温度,如果超过30°C则发出警报。")
为什么SMOL代理脱颖而出
来源:Huggingface github
- 代码 > JSON:使用Python编写操作(而不是JSON)提高了灵活性,并利用了大型语言模型的代码生成训练。
- 开源性能:基准测试显示,像Llama-3.3–70B这样的开放模型在代理任务中与GPT-4o相匹配。
- 安全性:限制导入和E2B沙盒化降低了代码执行风险。
构建商业分析 SMOL 代理:分步指南
用例:创建一个代理,使用本地大型语言模型通过 LM Studio 分析学术研究以寻找市场机会。
工作流作者/LN Claude.ai
第 1 步:定义特定领域工具
@tool
def search_papers(query: str, max_results: int = 10) -> List[Dict[str, Any]]:
"""增强的 arXiv 搜索,带有商业过滤器"""
@tool
def analyze_market_potential(papers: List[Dict[str, Any]]) -> Dict[str, Any]:
"""使用正则表达式模式提取商业洞察"""
@tool
def generate_business_report(papers: List, analysis: Dict) -> str:
"""将发现结构化为 markdown"""
第 2 步:配置本地大型语言模型集成
model = OpenAIServerModel(
model_id="deepseek-r1-distill-qwen-7b",
api_base="http://localhost:1234/v1",
api_key="lm-studio"
)
第 3 步:组装代理
agent = CodeAgent(
tools=[search_papers, analyze_market_potential, generate_business_report],
model=model,
add_base_tools=True
)
第 4 步:执行分析链
result = agent.run(
f"""分析 '{query}' 的方法:
1. 查找 {max_papers} 篇论文 -> search_papers()
2. 提取市场洞察 -> analyze_market_potential()
3. 生成格式化报告 -> generate_business_report()
包括特定的片段和模型"""
)
第5步:验证和迭代
for step in agent.logs:
print(f"Step {step['index']}: {step['llm_output']}")
print(f"Observation: {step['observation']}")
完整代码在GitHub上
何时避免使用代理
代理引入了复杂性和不可预测性。如果满足以下条件,请坚持使用确定性代码:
- 任务符合预定义工作流(例如,表单提交)。
- 可靠性至关重要(例如,金融交易)。
结论
SMOL代理通过将Hugging Face的生态系统与代码优先的灵活性相结合,使代理AI实现民主化。通过利用SMOL代理,开发者可以构建能够动态适应现实世界复杂性的系统,并探索各种用例。随着这项技术的发展,期待将推出用户友好的UI界面,使其对更广泛的受众更加可及。
参考文献