发布时间:2026/8/24 10:20:34
03-上下文工程:Agent的“眼睛”,消息四种角色与核心循环代码实现 03-上下文工程Agent的“眼睛”消息四种角色与核心循环代码实现上一篇我们聊了 Harness 工程与 ReAct 循环这一篇把镜头怼到 Agent 的“眼睛”上——上下文Context。很多人以为 Agent 的能力上限由模型参数量决定参数越大越聪明。这个说法只对了一半同一个模型喂给它的上下文不一样表现可以天差地别。李博杰在书里反复强调上下文决定 Agent 能力的上限模型只决定下限。模型是大脑上下文是眼睛——眼睛不行大脑再好也是睁眼瞎。一、上下文为什么决定上限先建立一个直觉LLM 是无状态的。它不记得你是谁、昨天聊了什么、刚才调用了什么工具。每一次调用 API模型都是从零开始“现场阅读”你给它的全部信息然后输出。这个“全部信息”就是上下文。也就是说Agent 的每一次“思考”都是基于当前上下文的一次重新理解。上下文里没有的信息模型不知道上下文里被污染的信息比如塞了一堆无关日志会稀释模型的注意力。这就好比你去医院看病医生只能看你递过去的病历本——病历写得清楚诊断就准病历里夹了三张外卖小票医生再厉害也得皱眉。所以“上下文工程”Context Engineering的本质就一句话在有限的窗口里把对的信息在对的时机放进去。二、API 消息的四种角色打开任何一家大模型 API 文档OpenAI、Anthropic、DeepSeek 都差不多你会发现对话是用一个 messages 列表表示的每条消息有个 role 字段只有四种取值。这四种角色就是上下文的基本积木角色谁在说话作用类比system开发者设定身份、规则、约束全局有效员工手册user终端用户提出请求、补充信息客户开口assistant模型模型的回复包括文字和工具调用请求员工答复tool工具执行器把工具执行结果回填给模型查完系统的回执几个新手容易踩的点system消息一般放最前面且全局只有一条或少数几条它是你作为开发者能施加的最强控制手段。assistant消息不一定是文字。当模型决定调用工具时它输出的是一个结构化的tool_calls字段里面带函数名和 JSON 参数——这也算一条assistant消息。tool消息必须紧跟在带tool_calls的assistant消息后面相当于“回执”。没有回执模型会认为工具还没执行完。三、从单轮对话到 Agent 核心循环最简单的调用只需要 system user 两条消息模型返回一段文字结束。这是“聊天机器人”不是 Agent。Agent 的分水岭在于模型返回的不是文字而是工具调用请求。你的代码负责真正执行工具把结果以tool消息塞回去模型再看结果决定下一步——是继续调工具还是给出最终答复。这个“请求→执行→回填→再看”的过程循环往复就是上一篇讲的 ReAct 循环在 API 层面的真实形态。一句话总结带工具调用的多轮交互 Agent 核心循环。所谓 Agent 框架LangChain、OpenAI Agents SDK 等剥掉包装内核都是这一段循环。四、用 Python 实现核心循环下面用伪 OpenAI 风格的接口写一个最小可用的 Agent 循环场景是无人售货柜客服用户投诉“扣了两次钱”Agent 先查支付记录确认重复扣款后调用退款工具。importjson# 1. 定义工具暴露给模型的说明书tools[{type:function,function:{name:query_payment_records,description:根据订单号查询支付流水返回所有扣款与冲正记录,parameters:{type:object,properties:{order_id:{type:string,description:订单号}},required:[order_id],},},},{type:function,function:{name:create_refund,description:对指定扣款流水发起退款金额单位为分,parameters:{type:object,properties:{payment_id:{type:string},amount:{type:integer},},required:[payment_id,amount],},},},]# 2. 本地真正执行工具的函数生产环境里对接 SpringBoot 微服务defexecute_tool(name,args):ifnamequery_payment_records:# 模拟查库两笔扣款第二笔未冲正returnjson.dumps({order_id:args[order_id],records:[{payment_id:P-1001,amount:500,status:SUCCESS},{payment_id:P-1002,amount:500,status:SUCCESS_NO_REVERSE},],},ensure_asciiFalse)ifnamecreate_refund:returnjson.dumps({refund_id:RD-8848,status:CREATED},ensure_asciiFalse)returnjson.dumps({error:funknown tool{name}})# 3. 核心循环整个 Agent 的心脏不到 30 行messages[{role:system,content:你是无人售货柜客服处理扣款异常时必须先查支付流水再操作退款。},{role:user,content:我在 3 号柜买了瓶可乐被扣了两次钱订单号 20260818001快点退我},]whileTrue:respllm.chat(messagesmessages,toolstools)# 一次模型调用msgresp.choices[0].messageifmsg.tool_calls:# 模型想动手messages.append(msg)# 记住它的请求forcallinmsg.tool_calls:argsjson.loads(call.function.arguments)resultexecute_tool(call.function.name,args)messages.append({# 回填观察role:tool,tool_call_id:call.id,content:result,})continue# 带着观察进入下一轮思考print(msg.content)# 没有工具调用 最终答复break盯着messages这个列表看它随着循环不断变长模型每一轮“思考”时看到的东西都不一样。这个列表就是上下文的全部实体。所谓上下文工程就是管理这个列表的艺术——往里加什么、什么时候裁剪、按什么顺序排。五、上下文的构成四要素拆解把上面代码里的 messages 展开一个成熟 Agent 的上下文由四部分构成系统提示身份、规则、红线。示例中那句“必须先查流水再退款”就是护栏。工具定义tools 列表也会被序列化进上下文。工具描述写得好不好直接决定模型会不会用、会不会滥用。对话历史user 与 assistant 的交替记录是模型的“短期记忆”。观察结果tool 消息回填的真实世界数据。注意这部分的量往往最大——一条支付流水、一段日志、一张 YOLO 检测结果 JSON都可能很长是上下文膨胀的头号元凶。六、一个重要澄清上下文 ≠ 环境最后纠正一个常见误解上下文不是环境本身上下文是环境在 Agent 内部的表示。真实环境里无人售货柜有温度、有货道余量、有摄像头画面信息是连续且无穷的而上下文是离散的、有限的文本快照。Harness 的职责之一就是决定“环境的哪些部分、以什么粒度、什么格式”进入这个快照。快照拍得好模型如临现场拍得差模型等于盲人摸象。理解了这层关系你也就理解了为什么说“观察空间的设计是提升 Agent 表现的主要工程手段”——设计观察空间本质上就是在设计上下文的取景框。小结上下文决定能力上限模型决定下限上下文工程 在有限窗口里放对的信息。四种消息角色system/user/assistant/tool是上下文的基本积木tool_calls与tool回执构成工具闭环。Agent 核心循环在代码层面就是一个 while 循环 一个不断增长的 messages 列表任何框架的内核不过如此。上下文四要素系统提示、工具定义、对话历史、观察结果其中观察结果最容易失控。上下文是环境在 Agent 内部的表示而非环境本身——设计观察空间就是在设计取景框。

相关新闻

2026/8/24 14:51:29

从零开始的敲代码生活--数据结构篇(内核链表)

一、内核链表基础概念普通链表:数据域里面包含指针。 内核链表:不把数据放在链表结点内部,链表结点只存两个指针(prev/next),嵌入到自定义结构体中,称为“侵入式链表”。 本质是双向循环链表&am…

2026/8/24 14:51:29

OpenAI Codex Harness 深度解析

从大模型竞争,到 Agent 基础设施竞争。过去几年,AI 竞争的核心一直围绕: 参数规模Benchmark 分数推理能力上下文长度 但是进入 Agent 时代以后,一个新的关键词正在出现:Harness(智能体运行框架)…

2026/8/24 14:51:29

Graphiti:面向 AI Agent 的时序知识图谱框架详解-王仕宇

从 Ontology、Knowledge Graph 到 GraphRAG,让 AI Agent 拥有真正的长期记忆能力。 项目地址: https://github.com/getzep/graphiti 一、为什么需要 Graphiti? 过去一年,RAG(Retrieval-Augmented Generation&#xf…

2026/8/24 14:51:29

单词汇总(一)

1.Embedded System 嵌入式系统2.IC ‌Integrated Circuit‌ 集成电路3.stack栈 heap堆4.welcome to board 欢迎加入5.TTS Text to speech 文字转换成语音6.designer 设计师7.co-work 合作8.FPGA Field Programmable Gate Array 现场可编程门阵列,是一种用户可编程的半导体集成…

2026/8/24 14:46:28

美团:元Harness优化长程智能体设计

📖标题:AutoDesign: Meta-Harness Optimization for Long-Horizon Agentic Design 🌐来源:arXiv, 2608.13560v1 🛎️文章简介 🔸研究问题:如何将多模态源转化为结构化输出时,使系统能…

2026/8/24 0:07:22

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/24 1:12:32

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/24 8:17:29

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/24 1:09:25

3条命令跑通LocalAI:无GPU本地AI引擎部署

3条命令跑通LocalAI:无GPU本地AI引擎部署 【免费下载链接】LocalAI LocalAI is the open-source AI engine. Run any model - LLMs, vision, voice, image, video - on any hardware. No GPU required. 项目地址: https://gitcode.com/GitHub_Trending/lo/LocalAI…

2026/8/24 1:09:25

AI推理性能测试怎么做:MLPerf Inference完整上手指南

AI推理性能测试怎么做:MLPerf Inference完整上手指南 【免费下载链接】inference Reference implementations of MLPerf inference benchmarks 项目地址: https://gitcode.com/gh_mirrors/inf/inference 同一个模型换一张卡,速度快多少你知道吗&a…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/23 6:14:43

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/23 4:22:01

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…