一文搞懂智能体

我的博客 写的不对的地方,还望大佬指正,共同学习,共同进步。

什么是智能体

智能体是指具有自主性和智能的实体,能够通过感知、规划、决策并执行相关任务,以达成预设目标。

用通俗的话来讲,可以把大模型看作人的大脑,但是光有大脑什么事都干不了,只能口嗨。比如DeepSeek这种问答式的ChatModel。而智能体就是给大模型装上手脚(Function Calling和MCP),让它能够使用工具,完成更高级的任务。并且它能够自主行动,自己判断要用什么工具,如果失败了,还会自己纠错。比如Claude,Cursor等。

但是市面上很多产品滥用智能体的概念,把只是加了个系统提示词的ChatModel和集成了大模型的工作流也称为智能体。

Function Calling

大模型想要使用工具,首先要解决的问题,就是可识别和结构化输出。Function Calling出现之前,需要通过不断调整提示词,才能得到想要的输出。 Function Calling解决了这个问题,主要做了两件事:

  • 模型层面,识别出何时需要调用函数来对输出格式化
  • 函数方面,设定具体的格式化逻辑来让我们更好使用

Function Calling并不是直接调用工具,它只是返回调用工具所需要的结构化参数,真正调用工具的是我们自己的应用程序。执行后再把结果告诉大模型,让它继续工作。

以询问天气为例子:

第一步,定义工具包

就是告诉大模型,有哪些工具可以使用,以及在什么时候用。相当于把工具的使用说明书给到大模型。

javascript 复制代码
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_current_weather",
            "description": "获取指定城市的当前天气",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市名,例如:北京"
                    }
                },
                "required": ["location"]
            }
        }
    }
]

第二步,模型决策 - "我需要调用函数"

当用户提问"北京今天天气怎么样?"时,模型会结合当前的对话上下文(messages)和刚刚提供的"工具包"(tools)进行推理。

  1. 意图识别:模型理解用户想查询天气。

  2. 工具匹配:模型在"工具包"中寻找最相关的工具。它发现 get_current_weather 函数的描述("获取指定城市的当前天气")与用户意图高度匹配。

  3. 生成调用指令:模型不会直接执行代码,而是生成一个结构化的 JSON 对象作为响应。这个 JSON 对象表明它"想"调用某个函数,并提供了所需的参数。 模型的响应如下:

json 复制代码
{
  "id": "chatcmpl-xxx",
  "object": "chat.completion",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": null, // 注意:此时不生成自然语言回答
      "tool_calls": [{ // 关键字段:工具调用数组
        "id": "call_abc123",
        "type": "function",
        "function": {
          "name": "get_current_weather", // 要调用的函数名
          "arguments": "{\"location\": \"北京\"}" // 函数参数(JSON字符串格式)
        }
      }]
    },
    "finish_reason": "tool_calls" // 完成原因:因为需要调用工具而停止
  }]
}

第三步:应用程序执行

当应用程序发现大模型返回"finish_reason": "tool_calls"时,就说明需要调用函数了

  1. 解析:从 tool_calls[0].function 中提取出函数名 get_current_weather 和参数 {"location": "北京"}。

  2. 映射与执行:在你的代码中,你早已定义好了一个同名的真实函数 get_current_weather(location)。这个函数内部可能会去调用一个真实的天气 API(如和风天气)。

  3. 获取结果:函数执行后返回真实数据,例如:{"temperature": 28, "condition": "晴"}。

第四步,整合信息并回答

现在,应用程序需要把函数执行的结果"喂"回给模型,让它来完成最终的回答。

javascript 复制代码
messages.append(response.choices[0].message) # 上一步模型说"要调用函数"的消息
messages.append({
    "role": "tool",
    "tool_call_id": "call_abc123", // 对应之前的调用ID
    "content": str(function_result) // 函数返回的结果,如 "温度28度,晴"
})

生成最终答案 "北京今天天气很好,是晴天,气温在28度左右,非常适合户外活动。"

MCP

Function Calling只能调用自己系统内部的工具,那如果大模型想要调用第三方的工具该怎么办呢,这时候就需要MCP了。 MCP(Model Context Protocol,模型上下文协议)。它本身只是一种协议,类似http协议,它定义了调用第三方工具的规范。

MCP 核心架构:

MCP 主机(MCP Hosts):发起请求的 LLM 应用程序(例如 Claude Desktop、IDE 或 AI 工具)。

MCP 客户端(MCP Clients):在主机程序内部,与 MCP server 保持 1:1 的连接。

MCP 服务器(MCP Servers):为 MCP client 提供上下文、工具和 prompt 信息。

本地资源(Local Resources):本地计算机中可供 MCP server 安全访问的资源(例如文件、数据库)。

远程资源(Remote Resources):MCP server 可以连接到的远程资源(例如通过 API)。

总结

Function Calling是AI模型调用函数的机制,MCP是一个标准协议,使大模型与API无缝交互,而AI Agent是一个自主运行的智能系统,利用Function Calling和MCP来分析和执行任务,实现特定目标。

相关推荐
zzywxc7872 小时前
AI 行业应用:AI 在金融、医疗、教育、制造业等领域的落地案例
人工智能·spring·金融·prompt·语音识别·xcode
六月的可乐2 小时前
Vue接入AI聊天助手实战
前端·vue.js·人工智能
赴3352 小时前
dlib库关键点定位和疲劳检测
人工智能·opencv·计算机视觉·关键点·疲劳检测·dlib
汀丶人工智能3 小时前
AI Compass前沿速览:Qwen3-Max、Mixboard、Qwen3-VL、Audio2Face、Vidu Q2 AI视频生成模型、Qwen3-Liv
人工智能
唐天下文化3 小时前
展厅迎宾机器人:豹小秘2如何打造科技第一印象
人工智能·科技·机器人
qiu_zhongya3 小时前
iree 用C++来运行Qwen 2.5 0.5b
开发语言·c++·人工智能
拾贰_C3 小时前
【anaconda】anaconda安装配置,git安装配置以及pytorch安装
人工智能·pytorch·git
荼蘼3 小时前
Dlib+OpenCV 人脸轮廓绘制
人工智能·opencv·计算机视觉
九河云3 小时前
物流仓储自动化升级:物道供应链 AGV 机器人实现分拣效率提升 60%
人工智能·科技·物联网·机器人·自动化