大模型多模态、Harness 与 MCP:一个 Agent 开发者的技术笔记

一、大模型与多模态:底层到底发生了什么

很多人初学大模型时会有一个固有印象:大模型只能处理文字。这个说法在早期(GPT-3 时代)是对的,但现在早已过时。

1. 核心事实

大模型内部处理的从来不是"文字"或"图片",而是向量(高维数字) 。所谓多模态,本质是:

  • 识图:图片 → 视觉编码器 → 向量 → 喂入大模型
  • 画图:文字 prompt → 扩散模型 → 从噪点逐步去噪 → 图片

对大模型来说,它从来没有"看到"过图片,它读的是图片的数学表示。图片和文字在训练时被对齐到同一个向量空间中------"猫的图片"和"猫"这个词的向量表示是相近的。

2. 两种多模态实现路径

路径 原理 能力
外挂式​ 图片 → 视觉模型 → 文字描述 → 大模型 有限,中间翻译会丢信息
联合训练式​ 图片 → 视觉编码器 → 向量 → 与文字向量一起训练 精细理解图中细节关系

GPT-4V、Qwen-VL、Gemini 走的是联合训练路线,属于真正的原生多模态。


二、Harness:Agent 的运行时骨架

1. 概念

Harness 原意是"马具",DeepSeek 用它比喻套在模型外面的控制框架。DeepSeek 提出的核心设计理念是 Everything is a Plugin(一切皆插件) 。

2. Harness 管什么

Harness 不等于 tools list,它是整个运行时容器,职责包括:

职责 说明
工具注册与发现 管理当前可用的所有工具
工具调用调度 模型决定调哪个工具后,harness 负责实际执行
上下文管理 多轮对话历史、窗口压缩
循环控制 模型 → 调工具 → 拿结果 → 再思考 → 再调(Loop)
权限与沙箱 工具能否访问文件系统、网络等
记忆管理 跨会话的用户信息持久化

3. 一个实际例子

假设你做了一个财务 BI Agent:

python 复制代码
# 传统写法:把复杂计算逻辑嵌在 agent 代码里
def calculate_irr(cash_flows):
    # 复杂的 IRR 计算逻辑
    ...

def generate_pnl(revenue, costs):
    # 损益表生成逻辑
    ...

在 harness 架构下,这些函数被封装成标准化的 tools,模型通过 prompt 被告知"什么时候该调哪个工具"。Harness 负责接收模型输出的调用指令、执行对应函数、将结果返回给模型继续推理。

4. 关键认知

大模型负责"想",Harness 负责"做"。

模型决定调不调、调哪个、传什么参数;Harness 负责真正执行并把结果喂回去。


三、MCP:工具调用的行业标准协议

1. 为什么需要 MCP

在没有标准协议之前,每个 Agent 项目都自己写工具调用逻辑:

  • 换一个模型 → 重写
  • 换一个工具 → 重写
  • 别人想用你的工具 → 拷代码

MCP(Model Context Protocol,模型上下文协议)由 Anthropic 提出,解决的核心问题是:让工具和模型之间的通信标准化,工具不再嵌在代码里,而是变成独立的标准化服务。

2. 架构

scss 复制代码
┌─────────────────┐      MCP 协议      ┌──────────────────┐      ┌─────────────────┐
│   AI 应用        │ ◄──────────────► │  MCP Server      │ ◄───► │  数据源/工具     │
│  (Host/客户端)   │  JSON-RPC         │  (标准化接口)     │      │  (DB/API/文件)  │
└─────────────────┘                   └──────────────────┘      └─────────────────┘

三个角色:

角色 职责
MCP Host​ AI 应用本身(Claude Desktop、Cursor、自研 Agent)
MCP Server​ 暴露 tools / resources / prompts 的标准化服务
数据源​ 数据库、文件系统、第三方 API 等

3. MCP Server 暴露的三类能力

Tools(工具) ------模型可以主动调用的函数:

json 复制代码
{
  "name": "calculate_tax",
  "description": "计算企业所得税",
  "inputSchema": {
    "revenue": "number",
    "cost": "number",
    "type": "string"
  }
}

Resources(资源) ------模型可以读取的数据(文件内容、数据库记录、API 响应等)。

Prompts(提示模板) ------预定义的 prompt 模板,直接供模型或用户调用。

4. 实际代码示例

python 复制代码
# mcp_finance_server.py
from mcp import Server

server = Server("finance-tools")

@server.tool()
def calculate_irr(cash_flows: list[float]) -> float:
    """计算内部收益率"""
    # 复杂计算逻辑
    ...

@server.tool()
def generate_pnl(revenue: float, costs: dict) -> dict:
    """生成损益表"""
    ...

# 启动服务后,任何支持 MCP 的 AI 应用都能自动发现并调用这些工具

5. MCP vs 自写 Harness Tools

对比维度 自写 Harness Tools MCP
工具位置 嵌在应用代码中 独立服务进程
通信方式 函数调用 JSON-RPC over stdio / HTTP
跨模型复用 绑死特定模型 任何支持 MCP 的模型都能用
工具发现 手动维护 tools list Server 启动时自动声明
跨项目复用 拷贝代码 直接连接同一 MCP Server

6. MCP 与 Harness 的关系

MCP 不是替代 Harness,而是 Harness 的一种标准化实现方式:

javascript 复制代码
Harness(架构概念层)
  ├── 自写 Tool 调用(传统方式)
  ├── MCP 协议调用(标准化方式)
  ├── OpenAI Function Calling
  ├── Google Gemini Tools
  └── 其他协议...

DeepSeek 的"一切皆插件"理念,MCP 是目前最接近其理想形态的标准化落地方案。


四、总结

概念 一句话
多模态​ 图片/音频被编码为向量,与文字在同一空间中处理
Harness​ 套在模型外面的运行时框架,管工具、上下文、循环、权限
Tools​ Harness 管理的可调用能力单元
MCP​ 工具与模型之间的标准化通信协议,实现"一次编写,到处调用"

Agent 开发的核心认知:模型负责推理和决策,Harness 负责执行和调度,MCP 让工具调用标准化、可复用。


如有理解偏差或需要补充的地方,欢迎交流指正。

相关推荐
现任明教教主~3 小时前
SpringBoot+Vue学生宿舍管理系统源码 带部署文档
vue.js·spring boot·后端
码事漫谈9 小时前
骂AI,会让它做得更好吗?
后端
陈随易10 小时前
bm2,Node.js 与 Bun 项目部署新选择
前端·后端·程序员
架构技术专栏11 小时前
AI Agent 框架怎么选:从一次制度查询拆出技术边界
后端·面试
明月_清风13 小时前
SaaS 的三层挣钱逻辑,正在被 AI 从第一层击穿
人工智能·后端
谁在黄金彼岸15 小时前
nginx服务化五套方案原理解剖与选型
后端
谁在黄金彼岸15 小时前
WinSW在Win7上失败真相-实测与修复
后端
花间相见15 小时前
【后端开发|Redis进阶01】—— Redis分布式锁全解:从SETNX到Redisson看门狗,再到RedLock
后端·面试
llqbzllll15 小时前
A2A 1.0 到底和 MCP 差在哪:从 Agent Card、Task 到 Java 最小互操作
后端