AI Agent 开发实战:从 Function Calling 到工具调用

什么是 Function Calling

大模型本身只会”说话”,不会”做事”。Function Calling(函数调用)是让模型在回答时,能够输出一个结构化的”我想调用哪个函数、参数是什么”,由你的程序真正去执行,再把结果喂回模型继续推理。这就是 AI Agent 最基础的能力闭环。

一、一次完整的 Agent 调用循环

  1. 你定义一个工具列表(函数的名字、描述、参数 JSON Schema)。
  2. 把用户问题 + 工具列表发给模型。
  3. 模型返回”我要调用 get_weather(city="北京")“。
  4. 你的代码真的去查天气,拿到结果。
  5. 把结果作为新消息发回模型,模型生成最终自然语言回答。

二、定义工具(以 OpenAI 兼容格式为例)

tools = [
  {
    "type": "function",
    "function": {
      "name": "get_weather",
      "description": "查询指定城市的当前天气",
      "parameters": {
        "type": "object",
        "properties": {
          "city": {"type": "string", "description": "城市名,如 北京"}
        },
        "required": ["city"]
      }
    }
  }
]

三、循环执行(Python 示例)

import requests, json

API = "https://apihub.agnes-ai.com/v1/chat/completions"
HEADERS = {"Authorization": "Bearer <你的KEY>", "Content-Type": "application/json"}

messages = [{"role": "user", "content": "北京今天适合出门吗?"}]

resp = requests.post(API, headers=HEADERS, json={
    "model": "agnes-2.0-flash",
    "messages": messages,
    "tools": tools
}).json()

msg = resp["choices"][0]["message"]
if msg.get("tool_calls"):
    for tc in msg["tool_calls"]:
        fn = tc["function"]
        args = json.loads(fn["arguments"])
        # 真实执行工具
        result = get_weather(args["city"])
        # 把结果塞回对话,让模型继续
        messages.append(msg)
        messages.append({
            "role": "tool",
            "tool_call_id": tc["id"],
            "content": result
        })

final = requests.post(API, headers=HEADERS, json={
    "model": "agnes-2.0-flash", "messages": messages
}).json()
print(final["choices"][0]["message"]["content"])

四、从单工具到多工具 Agent

真实的 Agent 往往有多个工具:查数据库、算数、搜网页、发邮件。模型会根据问题自主选择调用顺序,甚至多轮串联(先查订单、再查库存、最后判断是否发货)。你只需不断把 tool 结果回灌,直到模型不再返回 tool_calls 为止。

五、必须注意的安全问题

  • 不要把工具执行结果直接当代码跑(防止 prompt injection 触发危险操作)。
  • 给工具加白名单和权限边界,比如”发邮件”工具只允许发给固定地址。
  • tool_calls 的参数做校验与脱敏,别把用户输入原样塞进 shell。
  • 关键操作(删数据、转账)设人工确认环节。

小结

Function Calling 是 AI Agent 的发动机。理解了”模型只决定调什么、你的代码才真正执行”这个分工,你就能用任意大模型(包括私有化部署的)搭出会查数据、会调接口、会干活的智能体。安全和边界控制,是它能不能上生产的关键。

上一篇 Kubernetes Pod 调度与故障排查实战
下一篇 Linux 服务器安全加固 12 条 Checklist