04Agent 入门:会调工具的 LLM
约 60 分钟
剥掉各种框架的包装,Agent 的本质是一个循环:模型决定下一步动作 → 执行 → 把结果喂回模型 → 直到它说“做完了”。
最小实现:工具调用
tools = [{
"type": "function",
"function": {
"name": "query_order",
"description": "查询订单状态和物流信息",
"parameters": {
"type": "object",
"properties": {"order_id": {"type": "string"}},
"required": ["order_id"],
},
},
}]
while True:
resp = client.chat.completions.create(
model="gpt-4o-mini", messages=messages, tools=tools,
)
msg = resp.choices[0].message
if not msg.tool_calls:
break # 模型认为做完了
for call in msg.tool_calls:
result = query_order(**json.loads(call.function.arguments))
messages.append({"role": "tool", "tool_call_id": call.id, "content": str(result)})
就这么点东西。框架(LangChain、CrewAI 之类)做的是在这个循环上叠加记忆、规划、多角色协作。
什么时候需要 Agent
- 需要:任务路径不确定(查订单还是查库存取决于用户问什么)、要多步操作、要和外部系统交互
- 不需要:固定流程的抽取/分类/翻译——一个 prompt 就够,套 Agent 只会变慢变贵变不稳
经验法则:能用确定的代码流程写死的,就别让模型自己决定。 Agent 的每一步都引入一次出错机会。
生产环境的三个护栏
- 步数上限:while True 必须配 max_iterations,模型会陷入循环
- 工具白名单:模型能调的工具必须枚举死,删除类操作要人工确认
- 全程日志:每次工具调用的入参出参都要落库,出了问题才能复盘
练习
给上面的循环加两个工具(get_weather、search_docs),实现一个能同时回答“天气怎么样”和“公司制度”的入口。观察模型在什么问题下会选错工具。
至此入门课结束。想深入评估、成本优化和上线运营,可以看付费专栏的进阶课程。