欢迎光临
我们一直在努力

Agent 到底把哪些数据发给大模型?

Agent 到底把哪些数据发给大模型?

一篇讲清 Agent、上下文、工具信息和 Skill 工作原理的实战笔记

一、为什么要学这个

这块内容其实是 Agent 的核心。

搞清楚它,你能同时理解三件事:

  • Skill 到底是怎么工作的。
  • Agent 的工具为什么能被大模型“看懂”并使用。
  • 对话为什么能看起来像“有记忆”,但大模型本身却是“无状态”的。
  • 很多人学 Agent 的时候,容易只看到“会调用工具”“会记住上下文”,但没有意识到,真正起作用的是:

    • 每一轮请求里,Agent 都会把一整套上下文重新组织好,再发给模型。
    • 模型不是自己记住了上一轮,而是又看到了上一轮。
    • 工具不是神秘能力,本质上是一份结构化说明书,告诉模型“你有哪些工具、它们怎么用、什么时候该用”。

    二、先给结论

    从“模型实际收到的输入”角度看,Agent 每一轮通常会发送 4 类信息:

  • model 区:本轮使用哪个模型、推理参数是什么。
  • system / 系统提示词区:这轮对模型的总规则是什么。
  • history / 历史消息区:前面所有对话上下文。
  • tools / 工具信息区:有哪些工具、工具怎么调用。
  • 更准确地说,不是把“整个世界”都发过去,而是把当前上下文窗口内、需要模型看的信息打包发过去。
    如果对话太长,历史消息还可能被截断、摘要或压缩。

    图 1:Agent 请求大模型的整体结构

    #mermaid-svg-RX6I0GpvdgFlnpNx{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-RX6I0GpvdgFlnpNx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-RX6I0GpvdgFlnpNx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-RX6I0GpvdgFlnpNx .error-icon{fill:#552222;}#mermaid-svg-RX6I0GpvdgFlnpNx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-RX6I0GpvdgFlnpNx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-RX6I0GpvdgFlnpNx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-RX6I0GpvdgFlnpNx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-RX6I0GpvdgFlnpNx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-RX6I0GpvdgFlnpNx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-RX6I0GpvdgFlnpNx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-RX6I0GpvdgFlnpNx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-RX6I0GpvdgFlnpNx .marker.cross{stroke:#333333;}#mermaid-svg-RX6I0GpvdgFlnpNx svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-RX6I0GpvdgFlnpNx p{margin:0;}#mermaid-svg-RX6I0GpvdgFlnpNx .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-RX6I0GpvdgFlnpNx .cluster-label text{fill:#333;}#mermaid-svg-RX6I0GpvdgFlnpNx .cluster-label span{color:#333;}#mermaid-svg-RX6I0GpvdgFlnpNx .cluster-label span p{background-color:transparent;}#mermaid-svg-RX6I0GpvdgFlnpNx .label text,#mermaid-svg-RX6I0GpvdgFlnpNx span{fill:#333;color:#333;}#mermaid-svg-RX6I0GpvdgFlnpNx .node rect,#mermaid-svg-RX6I0GpvdgFlnpNx .node circle,#mermaid-svg-RX6I0GpvdgFlnpNx .node ellipse,#mermaid-svg-RX6I0GpvdgFlnpNx .node polygon,#mermaid-svg-RX6I0GpvdgFlnpNx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-RX6I0GpvdgFlnpNx .rough-node .label text,#mermaid-svg-RX6I0GpvdgFlnpNx .node .label text,#mermaid-svg-RX6I0GpvdgFlnpNx .image-shape .label,#mermaid-svg-RX6I0GpvdgFlnpNx .icon-shape .label{text-anchor:middle;}#mermaid-svg-RX6I0GpvdgFlnpNx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-RX6I0GpvdgFlnpNx .rough-node .label,#mermaid-svg-RX6I0GpvdgFlnpNx .node .label,#mermaid-svg-RX6I0GpvdgFlnpNx .image-shape .label,#mermaid-svg-RX6I0GpvdgFlnpNx .icon-shape .label{text-align:center;}#mermaid-svg-RX6I0GpvdgFlnpNx .node.clickable{cursor:pointer;}#mermaid-svg-RX6I0GpvdgFlnpNx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-RX6I0GpvdgFlnpNx .arrowheadPath{fill:#333333;}#mermaid-svg-RX6I0GpvdgFlnpNx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-RX6I0GpvdgFlnpNx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-RX6I0GpvdgFlnpNx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RX6I0GpvdgFlnpNx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-RX6I0GpvdgFlnpNx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RX6I0GpvdgFlnpNx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-RX6I0GpvdgFlnpNx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-RX6I0GpvdgFlnpNx .cluster text{fill:#333;}#mermaid-svg-RX6I0GpvdgFlnpNx .cluster span{color:#333;}#mermaid-svg-RX6I0GpvdgFlnpNx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-RX6I0GpvdgFlnpNx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-RX6I0GpvdgFlnpNx rect.text{fill:none;stroke-width:0;}#mermaid-svg-RX6I0GpvdgFlnpNx .icon-shape,#mermaid-svg-RX6I0GpvdgFlnpNx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-RX6I0GpvdgFlnpNx .icon-shape p,#mermaid-svg-RX6I0GpvdgFlnpNx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-RX6I0GpvdgFlnpNx .icon-shape .label rect,#mermaid-svg-RX6I0GpvdgFlnpNx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-RX6I0GpvdgFlnpNx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-RX6I0GpvdgFlnpNx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-RX6I0GpvdgFlnpNx :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}

    用户输入

    Agent

    拼装上下文

    大模型推理

    模型回复 / 工具调用

    工具执行

    三、四大区块分别是什么

    区块作用典型内容说明
    model 区 选择模型和推理参数 gpt-4.1、temperature、max_tokens 这是请求配置,不是模型“理解”的正文
    系统提示词区 定义角色、规则和边界 身份、风格、优先级、约束 对模型影响最大,通常优先级很高
    历史消息区 让模型看到上下文 过去的用户、助手、工具消息 让对话保持连贯
    工具信息区 告诉模型有哪些工具能用 工具名、描述、参数结构 决定模型会不会发起工具调用

    四、历史消息区:对话为什么能连起来

    历史消息区就是把前面的对话一条条喂给模型。

    一个最常见的对话长这样:

    用户:你好
    助手:我是一个大模型
    用户:中国首都是哪
    助手:北京

    在请求里,这些内容通常会被组织成带 role 的消息列表:

    [
    { "role": "user", "content": "你好" },
    { "role": "assistant", "content": "我是一个大模型" },
    { "role": "user", "content": "中国首都是哪" },
    { "role": "assistant", "content": "北京" }
    ]

    role 是什么

    role 的意思是:这一条消息是谁说的、在上下文里扮演什么角色。

    常见角色有:

    • system:系统级规则,优先级最高。
    • developer:开发者给模型的内部约束,某些平台会使用。
    • user:用户输入。
    • assistant:模型输出。
    • tool:工具执行结果。

    你最开始笔记里写的 user 和 assistant 是最核心的两类,但在真实 Agent 里,system 和 tool 往往也很关键。

    为什么说大模型是无状态的

    这里要讲得严谨一点:

    • 模型本身不是像人一样“自己记得上一次说了什么”。
    • 它之所以能接着聊,是因为 Agent 又把前面的消息发给它了。
    • 所以,对模型来说,状态不是存在“脑子里”,而是存在上下文输入里。

    这就是常说的“无状态”:

    模型在每一次推理时,看到的都是一份新的输入。

    图 2:一次对话的消息流

    大模型Agent用户大模型Agent用户#mermaid-svg-QYf4hXibA89zYNPv{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QYf4hXibA89zYNPv .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QYf4hXibA89zYNPv .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QYf4hXibA89zYNPv .error-icon{fill:#552222;}#mermaid-svg-QYf4hXibA89zYNPv .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QYf4hXibA89zYNPv .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QYf4hXibA89zYNPv .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QYf4hXibA89zYNPv .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QYf4hXibA89zYNPv .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QYf4hXibA89zYNPv .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QYf4hXibA89zYNPv .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QYf4hXibA89zYNPv .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QYf4hXibA89zYNPv .marker.cross{stroke:#333333;}#mermaid-svg-QYf4hXibA89zYNPv svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QYf4hXibA89zYNPv p{margin:0;}#mermaid-svg-QYf4hXibA89zYNPv .actor{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QYf4hXibA89zYNPv text.actor>tspan{fill:black;stroke:none;}#mermaid-svg-QYf4hXibA89zYNPv .actor-line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-QYf4hXibA89zYNPv .innerArc{stroke-width:1.5;stroke-dasharray:none;}#mermaid-svg-QYf4hXibA89zYNPv .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333;}#mermaid-svg-QYf4hXibA89zYNPv .messageLine1{stroke-width:1.5;stroke-dasharray:2,2;stroke:#333;}#mermaid-svg-QYf4hXibA89zYNPv #arrowhead path{fill:#333;stroke:#333;}#mermaid-svg-QYf4hXibA89zYNPv .sequenceNumber{fill:white;}#mermaid-svg-QYf4hXibA89zYNPv #sequencenumber{fill:#333;}#mermaid-svg-QYf4hXibA89zYNPv #crosshead path{fill:#333;stroke:#333;}#mermaid-svg-QYf4hXibA89zYNPv .messageText{fill:#333;stroke:none;}#mermaid-svg-QYf4hXibA89zYNPv .labelBox{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QYf4hXibA89zYNPv .labelText,#mermaid-svg-QYf4hXibA89zYNPv .labelText>tspan{fill:black;stroke:none;}#mermaid-svg-QYf4hXibA89zYNPv .loopText,#mermaid-svg-QYf4hXibA89zYNPv .loopText>tspan{fill:black;stroke:none;}#mermaid-svg-QYf4hXibA89zYNPv .loopLine{stroke-width:2px;stroke-dasharray:2,2;stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);}#mermaid-svg-QYf4hXibA89zYNPv .note{stroke:#aaaa33;fill:#fff5ad;}#mermaid-svg-QYf4hXibA89zYNPv .noteText,#mermaid-svg-QYf4hXibA89zYNPv .noteText>tspan{fill:black;stroke:none;}#mermaid-svg-QYf4hXibA89zYNPv .activation0{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QYf4hXibA89zYNPv .activation1{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QYf4hXibA89zYNPv .activation2{fill:#f4f4f4;stroke:#666;}#mermaid-svg-QYf4hXibA89zYNPv .actorPopupMenu{position:absolute;}#mermaid-svg-QYf4hXibA89zYNPv .actorPopupMenuPanel{position:absolute;fill:#ECECFF;box-shadow:0px 8px 16px 0px rgba(0,0,0,0.2);filter:drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));}#mermaid-svg-QYf4hXibA89zYNPv .actor-man line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;}#mermaid-svg-QYf4hXibA89zYNPv .actor-man circle,#mermaid-svg-QYf4hXibA89zYNPv line{stroke:hsl(259.6261682243, 59.7765363128%, 87.9019607843%);fill:#ECECFF;stroke-width:2px;}#mermaid-svg-QYf4hXibA89zYNPv :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}你好system + history + 当前用户消息我是一个大模型中国首都是哪system + 更新后的 history + 当前用户消息北京

    一个很重要的现实问题:上下文窗口

    历史消息不是无限长的。

    如果对话越来越长,会出现几个问题:

  • 成本上升。
  • 延迟增加。
  • 超过上下文窗口后,旧消息会被截断或摘要。
  • 所以真实 Agent 往往会配合:

    • 历史摘要
    • 长期记忆
    • 检索增强(RAG)
    • 任务状态压缩

    来保持“像有记忆”,但又不至于把所有历史都原封不动塞进去。

    五、系统提示词区:Agent 的总规则

    系统提示词区一般负责回答这些问题:

    • 你是谁?
    • 你要扮演什么角色?
    • 你要遵守什么规则?
    • 你能不能胡编?
    • 什么时候必须调用工具?
    • 回复风格应该是什么?

    例如:

    你是一个严谨的中文助手。
    回答要优先准确,其次简洁。
    如果信息不足,先澄清再回答。
    需要外部信息时,优先使用工具。

    它的作用很像“总开关”。

    如果说历史消息负责“记住发生了什么”,那么系统提示词负责“决定你该怎么做”。

    六、工具信息区:大模型为什么会用工具

    工具信息区是很多人第一次看 Agent 时最容易忽略、但其实最关键的一块。

    它不是把工具代码直接塞给模型,而是给模型一份结构化说明,告诉它:

    • 工具叫什么。
    • 工具是干什么的。
    • 工具需要什么参数。
    • 参数怎么组织。

    你笔记里写的:

    • name
    • desc

    就是最简化的表达。

    真实场景里通常还会有参数结构,比如:

    {
    "name": "search_web",
    "description": "搜索网络信息,适合查最新事实、定义或外部资料。",
    "parameters": {
    "type": "object",
    "properties": {
    "query": {
    "type": "string",
    "description": "要搜索的关键词"
    }
    },
    "required": ["query"]
    }
    }

    工具信息区的作用

    模型看到这份描述后,会判断:

  • 当前问题要不要调用工具。
  • 该调用哪个工具。
  • 工具参数怎么填。
  • 所以工具信息区本质上是在给模型做“能力说明书”。

    七、Skill 的工作原理,为什么能理解

    Skill 可以理解成一套打包好的任务能力。

    它通常不是“单独魔法”,而是下面几部分的组合:

    • 任务说明
    • 操作步骤
    • 工具描述
    • 输出约束
    • 示例或模板

    也就是说,Skill 的工作原理,本质上还是把“怎么做”这件事写成模型能读懂的上下文或工具信息。

    你可以把它理解成:

    Skill = 规则 + 工具 + 示例 + 约束

    当 Agent 加载某个 Skill 时,它就相当于把这份能力说明放进了模型能看到的内容里。

    于是模型就能更容易判断:

    • 什么时候该用这个 Skill。
    • 用这个 Skill 时要遵守什么格式。
    • 产出应该长什么样。

    八、一次完整请求到底长什么样

    下面是一个简化版请求示意:

    {
    "model": "gpt-4.1",
    "messages": [
    {
    "role": "system",
    "content": "你是一个严谨的中文助手。"
    },
    {
    "role": "user",
    "content": "帮我解释一下 Agent 为什么是无状态的。"
    }
    ],
    "tools": [
    {
    "type": "function",
    "function": {
    "name": "search_web",
    "description": "搜索网络信息",
    "parameters": {
    "type": "object",
    "properties": {
    "query": { "type": "string" }
    },
    "required": ["query"]
    }
    }
    }
    ],
    "temperature": 0.7
    }

    这份请求可以拆成三层理解:

  • 选哪个模型来推理。
  • 这轮对话的规则是什么。
  • 模型能用哪些工具。
  • 具体工作流如下:

    在这里插入图片描述

    赞(0)
    未经允许不得转载:171主机测评 » Agent 到底把哪些数据发给大模型?
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址