智能体

定义

智能体(AI Agent)是一种能够自主行动、感知环境、 做出决策并与环境交互的计算机系统或实体,通常依赖大型语言模型作为其核心决策和处理单元,具备独立思考、 调用工具去逐步完成给定目标的能力。

架构

image-20250622135025387

核心要素

  • 大模型(LLM):大模型作为“大脑”:提供推理、规划和知识理解能力,是AI Agent的决策中枢。
  • 记忆(Memory):
    • 短期记忆:存储单次对话周期的上下文信息,属于临时信息存储机制。受限于模型的上下文窗口长度。
    • 长期记忆:可以横跨多个任务或时间周期,可存储并调用核心知识,非即时任务。可以通过模型参数微调(固化知识)、知识图谱(结构化语义网络)或向量数据库(相似性检索)方式实现。长期记忆的主要体现为 个人知识库
  • 工具使用(Tool Use):调用外部工具(如API、数据库)扩展能力边界。
  • 规划决策(Planning):通过任务分解、反思与自省框架实现复杂任务处理。例如,利用思维链(Chain of Thought)将目标拆解为子任务,并通过反馈优化策略。
  • 行动(Action):实际执行决策的模块,涵盖软件接口操作(如自动订票)和物理交互(如机器人执行搬运)。比如:检索、推理、编程等。

三个阶段

  1. 阶段1:提示词立人设:GPTs、Cherry-Studio、豆包等通过提示词,做一个阉割版的智能体,直接和LLM交互。

  2. 阶段2(面向过程):工作流:定义工作流,每一步可以指定不同的模型,应用就会按照我们设定的流程执行任务。

  3. 阶段3:real 智能体(面相目标):智能体根据人类设定的目标,自主进行任务拆分,工具选择,进度控制,实现目标后自主结束工作。

RAG

定义

RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索(Retrieval)与文本生成(Generation)的技术,旨在提升大语言模型在回答专业问题时的准确性和可靠性。

为什么需要RAG

  • 减少特定领域(陌生领域)的幻觉;
  • 数据实时问题;
  • 提升准确率;

以下分三个场景进行举例。

场景1:大型语言模型(LLM)的训练依赖于网络上海量公开的静态数据,而某些特定领域(如企业内部资料、专有技术文档等)的数据通常不会作为公开的训练数据,导致模型在面对这些领域的查询时,可能因缺乏足够的信息而生成不准确甚至虚构的回复。

解决方案:为了解决这一问题,RAG技术通过引入向量数据库(Vector Database)作为外部知识源,将模型缺失的知识以结构化的形式提供(其实 个人知识库 就是RAG技术的落地的体现)。

image-20250622140019312

场景2:随着LLM 规模扩大,训练成本与周期相应增加。因此,包含最新信息的数据难以融入模型训练过程,无法及时反映最新的信息或动态变化。导致LLM 在应对诸如“请推荐当前热门影片”等时间敏感性问题。

解决方案:提供联网搜索功能。

image-20250622140428124

场景3:LLM在考试的时候面对陌生的领域,答复能力有限,然后就准备放飞自我了(AI幻觉),而此时RAG给了一些提示和思路,让LLM懂了开始往这个提示的方向做,最终考试的正确率从60%到了90%!

image-20250622140531159

个人知识库执行流程

image-20250622135820898

MCP与A2A

image-20250621220128989

MCP

定义

MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由Anthropic 推出的一种开放标准。旨在为大语言模型(LLM)提供统一的、标准化方式与外部数据源和工具之间进行通信。

特征 MCP TCP/IP、HTTPS
本质 协议(Protocol) 协议(Protocol)
作用 标准化AI模型与上下文来源/工具之间的数据交互方式 标准化设备之间的网络通信方式
目标 让不同模型应用可以用统一方式访问资源/工具 让不同设备、系统可以互通数据
好处 消除碎片化集成、形成生态闭环 解决设备互联、实现互联网基础
  • without MCP:这种为每个数据源构建独立连接的方式,可以被视为一个M*N问题。(M是大模型,N是插件)
  • with MCP :可以被视为一个M + N问题。(中间件的感觉)

image-20250622144908673

MCP 作为一种标准化协议,极大地简化了大语言模型与外部世界的交互方式,使开发者能够以统一的方式为AI 应用添加各种能力。可以将MCP理解为电脑的USB接口(一套标准),通过这个接口电脑可以访问各种外部设备。

MCP协议中的核心角色:

  • MCP Client:MCP client 充当LLM 和MCP server 之间的桥梁,嵌入在主机程序中。接收来自LLM的请求,将请求转发到相应的MCP server ,将MCP server 的结果返回给LLM。

image-20250624230443433

  • MCP Server:每个MCP 服务器都提供了一组特定的工具,负责从本地数据或远程服务中检索信息。是MCP 架构中的关键组件。

    与传统的远程API 服务器不同,MCP 服务器既可以作为本地应用程序在用户设备上运行(操作本地数据库等),也可部署至远程服务器(调用外部接口(高德MCP等))

image-20250624230523452

  • MCP Host:MCP Client通常并不是独立运行的,而是嵌入在AI模型相关的工具当中,比如Claude桌面应用、IDE(Cursor、Cline、
WindSurf)等。内嵌MCP Client的应用被称为MCP Host。协作关系如下图所示:

image-20250622145706022

img

通信机制

  • stdio(标准输入输出):主要用在本地服务上,操作你本地的软件或者本地的文件。比如Blender 这种就只能用Stdio 因为他没有在线服务。(默认通信方式)
    • 优点:
      1. 这种方式适用于客户端和服务器在同一台机器上运行的场景,简单。
      2. stdio模式无需外部网络依赖,通信速度快,适合快速响应的本地应用。
      3. 可靠性高,且易于调试
    • 缺点:
      1. Stdio 的配置比较复杂,我们需要做些准备工作,需要提前安装需要的命令行工具。
      2. stdio模式为单进程通信,无法并行处理多个客户端请求,同时由于进程资源开销较大,不适合在本地运行大量服务。(限制了其在更复杂分布式场景中的使用)
  • SSE(Server-Sent Events):主要用在远程通信服务上,这个服务本身就有在线的API,比如访问你的谷歌邮件,天气情况等。
    • 优点:
      1. 适用于实时数据更新、消息推送、轻量级监控和实时日志流等场景
      2. 对于分布式或远程部署的场景,基于HTTP和SSE 的传输方式则更为合适
      3. 配置方式非常简单,基本上就一个链接就行,直接复制他的链接填上就行

stdio的本地环境安装

stdio客户端与对应的服务端都在本地,所以需要本地有运行MCP服务的环境。 stdio的本地环境有两种:一种是Python 编写的服务,一种用TypeScript 编写的服务。分别对应着uvx 和npx 两种指令。

stdio的本地环境安装uvx有两种安装方式:

  • 若已配置Python环境,可使用命令安装:pip install uv
  • 若没配置Python环境,可在Windows下可以通过PowerShell运行命令来安装uv:owershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex”
  • 检查是否正常:uv --versionuvx --help

stdio的本地环境安装npx :

  • 装一个node就行。

MCP Server仓库

cursor中使用MCP

Cursor 中添加 MCP Server 有两种配置方式:

  • 全局设置:通过 Cursor Settings -> MCP Tools -> Add Custom MCP 添加全局可用的 MCP 服务。

  • 项目级别:在项目目录的 .cursor 目录中新建 mcp.json 文件进行配置,仅对特定项目生效。(建议)

高德地图服务

高德地图的MCP Server需要从MCP.so (https://mcp.so/zh) 平台获取。申请高德地图的API:https://console.amap.com/

image-20250624214513723

image-20250624214545788

image-20250624220117806

image-20250624220207796

选择Agent模式,输入提示词:

1
1.从高德地图的MCP服务中获取北京站到天安门、天安门到颐和园、颐和园到南锣鼓巷的地铁线路;2.从高德地图的MCP中获取颐和园、南锣鼓巷附件的美食信息,每处获取三家美食店铺信息,3.将一二步的信息生成一个精美的html前端展示页面,并存放在当前目录下

MCP执行过程:

image-20250624221542971

我们会注意到有很多的Called MCP Tool的调用,这个其实在MCP Server仓库中有提到的函数/工具,所以我们需要根据提供的函数/工具来提对应的需求。

image-20250624222852826

最终效果如下所示:

22d8918a9906ca8bd4894a9643bdd8d1

Function Call、MCP、RAG

mcp类似于usb这样的协议 目的是统一各个工具和各家大模型之间交互的标准,rag是检索增强生成,用于从知识库向量检索到相关知识喂给大模型回答问题,让他不仅仅根据训练知识回答还要根据你自己的知识库知识回答。

function Call也好,mcp也好,就是一个大模型json输出而已。大模型默认输出markdown格式文本,也可以指定输出json。fc和mcp原理是一样的 都是拼接提示词,让大模型输出一个符合要求的json,然后从json中解析函数名和参数,客户端调用函数,获得结果。区别就是fc是开发者自己定义json格式(注意是开发者定义的,不是大模型定义的),mcp仅仅是增加了一个标准,类似于做成通用库,可以让遵循mcp的客户端都可以直接用,而无需再重复造轮子。

本地部署大模型

目标:使用 Ollama 在本地部署 DeepSeek 模型。

参考文献

安装ollama

  1. 访问 Ollama 官网:https://ollama.com/
  2. Ollama 默认会安装在 C 盘,想要安装在其它的盘,则要用命令来指定安装路径,比如 OllamaSetup.exe /dir=E:\Ollama,代码以安装在 E:\Ollama 为例,具体操作步骤如下

22d8918a9906ca8bd4894a9643bdd8d1

  1. 安装好后,接着是 下载模型,在 Cmd 窗口 或者 终端,输入 ollama run deepseek-r1:1.5b,Ollama 就会自动下载,这里的 1.5b 可以修改为你想下载的版本。(下载时,如果速度变慢或者卡住不动了。在窗口里按一下 Ctrl+C 取消下载,然后再次输入代码,就会重新下载,进度不会丢失)

image-20250624235041562

使用模型对话

  1. 模型下载完成后会自动进入对话模式
  2. 在提示符 >>> 后输入问题并按回车
  3. 常用命令:
    • /clear - 清除上下文,重新开始对话
    • /bye - 退出对话模式
    • 直接输入问题 - 开始对话

日常使用说明

启动模型

  1. 按 Win+R 打开运行
  2. 输入 cmd 打开命令提示符
  3. 输入启动命令:ollama run 模型名称 例如:ollama run deepseek-r1:1.5b

模型管理命令

  • 查看已安装模型:ollama list
  • 删除模型:ollama rm 模型名称 例如:ollama rm deepseek-r1:1.5b
  • 查看所有命令:直接输入 ollama

通过 API 接口访问模型

  1. API 基本信息

    • 默认 API 地址:http://localhost:11434/api
    • 支持的请求方式:POST
    • 数据格式:JSON
  2. 主要 API 接口

    • 生成回答(Generate)
    1
    2
    3
    4
    5
    curl -X POST http://localhost:11434/api/generate -d '{
    "model": "deepseek-r1:1.5b",
    "prompt": "你好,请介绍一下自己",
    "stream": false
    }'
    • 聊天对话(Chat)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    curl -X POST http://localhost:11434/api/chat -d '{
    "model": "deepseek-r1:1.5b",
    "messages": [
    {
    "role": "user",
    "content": "你好,请介绍一下自己"
    }
    ],
    "stream": false
    }'
    • JavaScript 示例代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    async function chatWithModel(prompt) {
    const url = "http://localhost:11434/api/chat";
    const data = {
    model: "deepseek-r1:1.5b",
    messages: [
    {
    role: "user",
    content: prompt,
    },
    ],
    stream: false,
    };

    const response = await fetch(url, {
    method: "POST",
    headers: {
    "Content-Type": "application/json",
    },
    body: JSON.stringify(data),
    });

    return await response.json();
    }

    // 使用示例
    chatWithModel("你好,请介绍一下自己")
    .then((response) => console.log(response.message.content))
    .catch((error) => console.error("Error:", error));
    • 注意事项
      1. 确保 Ollama 服务正在运行
      2. API 默认只监听本地请求(localhost)
      3. 如需远程访问,需要配置 Ollama 允许远程连接
      4. 建议在生产环境中添加适当的安全措施
      5. stream 参数设置为 true 时可获得流式响应

注意事项

  1. 硬件要求:
    • 1.5b 版本:最低 8GB 内存
    • 7b 版本:建议 16GB 以上内存
    • 14b 版本:建议 32GB 以上内存
  2. 存储空间:
    • 请确保有足够的硬盘空间(模型文件较大)
    • 1.5b 约需 3GB
    • 7b 约需 15GB
    • 14b 约需 30GB
  3. 使用建议:
    • 首次使用建议从小模型开始尝试
    • 确保网络稳定,避免下载中断
    • 使用时保持电脑有足够的可用内存

改变安装位置

需要注意的是,Ollama 存储模型的位置也是在 C 盘,你可以在 Cmd 窗口输入下面这条代码来修改,比如:

1
setx OLLAMA_MODELS "E:\Ollama\.ollama\models"

特别需要注意的是,设置好后,一定要退出 Ollama,重启一下 Ollama 才会生效。接着,在命令行里输入 ollama list,即可查看已下载的模型。

image-20250624234420820

最后,你还可以将之前下载过的模型,移动到新的目录来,比如我安装在了 E:\Ollama,只需要将默认位置的整个 .ollama 文件夹,复制过来即可。这也是之前把模型储存位置修改为 E:\Ollama.ollama\models 的原因,直接一键复制即可

1
2
3
#默认安装位置:
macOS: ~/.ollama/models
Windows: C:\Users\%username%\.ollama\models

image-20250624234502419