一文搞懂智能体

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

什么是智能体

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

用通俗的话来讲,可以把大模型看作人的大脑,但是光有大脑什么事都干不了,只能口嗨。比如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来分析和执行任务,实现特定目标。

相关推荐
Alter12304 分钟前
用AI重构人机关系,OPPO智慧服务带来了更“懂你”的体验
人工智能·重构
爱看科技4 分钟前
科技新突破!微美全息(NASDAQ:WIMI)研发保留运动想象脑机接口“方差密钥”技术
大数据·人工智能·科技
中科岩创13 分钟前
青海某公路水渠自动化监测服务项目
大数据·人工智能·物联网
报错小能手19 分钟前
python(入门)map内置函数及import模块导入,as别名
开发语言·人工智能·python
Jump 不二34 分钟前
百度 PaddleOCR 3.0 深度测评:与 MinerU 的复杂表格识别对决
人工智能·深度学习·百度·ocr
用户51914958484536 分钟前
Flutter应用设置插件 - 轻松打开iOS和Android系统设置
人工智能·aigc
孤廖1 小时前
C++ 模板再升级:非类型参数、特化技巧(含全特化与偏特化)、分离编译破解
linux·服务器·开发语言·c++·人工智能·后端·深度学习
润 下1 小时前
C语言——回调函数的典型示例(分析详解)
c语言·开发语言·人工智能·经验分享·笔记·程序人生
koo3641 小时前
李宏毅机器学习笔记27
人工智能·笔记·机器学习