都在聊Context Engineering图工程,可你说的图和他说的不是一个图

Context Engineering 的热度还没散,Loop Engineering 刚被写进几家大厂的技术博客,Graph Engineering 又开始刷屏了。

但你多看几个人怎么用这个词,会发现一件麻烦事:大家嘴里的"图",根本不是同一个东西------有人说图是人画出来的流程,有人说图是系统攒下来的记忆。

更尴尬的是,就在我们争论多智能体该怎么编排的时候,有人把 prompt 里的 {ticket} 改成了 {ticket_id},过了 code review,过了单元测试,把线上搞挂了。

名词一年换四个,地基好像一块砖都没砌。这事得掰开说说。


一、先数数这一年换了多少个词

现在流行的叙事大概是这么一条线:

Prompt Engineering 解决"怎么跟模型说话"。

Context Engineering 解决"给模型看什么"。

Loop Engineering 解决"让它自己跑几轮"。

Graph Engineering 解决......嗯,这就是分歧开始的地方。

有人给这四段配了四个动词:沟通、理解、执行、学习。听起来很顺,顺到你几乎不会停下来问一句:前三段,真的都"做完了"吗?

每一个新名词的出现,都默认了上一个名词已经被解决------可现实是,上一个连版本管理都还没有。


二、同一个"图",两种完全不同的东西

这是最该先说清楚的一条。同样打着 Graph Engineering 的旗号,你按第一种理解去实现第二种方案,会做出一个四不像。

| | 图 = 流程编排 | 图 = 系统记忆 | | --- | --- | --- | | 图是什么 | 控制流 | 记忆层 | | 谁来画 | 人 | 系统自己长 | | 解决的问题 | 这一次怎么跑 | 下一次别从零跑 | | 典型载体 | LangGraph / 状态机 | 知识图谱 / 执行日志 |

第一种:图是人画出来的路径

这一派把三层分得很干脆:prompt 工程优化的是单次模型调用,loop 工程优化的是智能体的迭代循环,而图工程管的是一群智能体之间的协作

关键区别在于谁做主。在 loop 里,你只定义目标和及格线,剩下让 AI 自己去探索、执行、验证,不达标就再来一轮。而在图里,路径是人设计的

拿写文章这件事举例最好懂。只用 loop,就是"写→评→改→再评"转圈。但用图,你可以规定------质量不达标退回写作节点;如果是选题方向本身错了,那要退得更远,回到调研和结构设计阶段。

这两种"不合格",处理路径根本不一样。loop 表达不了这种区别,图可以。

按这套主张,一张图要定义的东西是一串:节点、边、状态、产物、权限、观测、评估、变更历史。用 LangGraph 落地大致长这样(示意):

bash 复制代码
from langgraph.graph import StateGraph, END

g = StateGraph(AgentState)
g.add_node("understand", understand_node)   # 拆解意图
g.add_node("retrieve",   retrieve_node)     # 取上下文
g.add_node("generate",   generate_node)     # 产出草稿
g.add_node("judge",      judge_node)        # 质量评估

g.set_entry_point("understand")
g.add_edge("understand", "retrieve")
g.add_edge("retrieve",   "generate")
g.add_edge("generate",   "judge")

# 判定不过就回炉重写;但必须带退出条件,否则死循环烧钱
g.add_conditional_edges(
    "judge",
    lambda s: "generate" if (not s["passed"] and s["retries"] < 3) else END,
)

注意最后那个 retries < 3做图工程的人最先学会的不是怎么连边,是怎么让它停下来。

第二种:图是系统攒下来的记忆

另一种定义的出发点完全不同。它不关心这次任务怎么编排,只盯住一句话:每一次执行都从零开始

典型场景是这样的:AI 排查一次线上故障,翻仓库、理依赖、读文件,花五分钟得出结论。一个月后类似问题再来,同一个 Agent 把这五分钟一模一样地重走一遍,烧掉成千上万个 token,得出几乎相同的结论。

这不是智能的问题,是记忆的问题。

顺着这个思路,图被拆成三张,每张回答一个问题:

知识图(Knowledge Graph)------我的系统是怎么连起来的?装的是仓库、服务、API、数据库、基础设施、团队、归属关系、依赖链路。

执行图(Execution Graph)------以前跑过什么?装的是用户请求、规划决策、检索到的上下文、工具调用、代码改动、测试、模型响应、部署步骤。

反馈图(Feedback Graph)------那次到底管不管用?装的是人工审批、PR 评审、线上事故、回滚记录、客户反馈、评估分数、成功指标。

三张图串进一条链路:用户请求 → 规划智能体 → 查知识图和执行图 → 组装上下文 → 调 LLM → 执行工具 → 评估引擎 → 写回反馈图 → 图更新服务。

这里有个容易被忽略的设计要点:图是执行组件,不是检索源。

我知道很多人读到这已经在想"这不就是知识图谱加 RAG 吗"。区别就在这句话上。RAG 里,检索是给模型喂料的一个前置步骤;而在这套架构里,规划智能体本身要读执行图来决定这次该怎么走------图参与的是决策,不是补充材料。

一个具体场景:React monorepo 里有人报"登录成功后认证弹窗立刻关闭"。系统不去重新搜代码、重建分析,而是直接从执行图里捞出------以前处理过的相似流程、当时改了哪些文件、哪个 PR 合了、有没有现成的回归测试。

省钱的逻辑也顺着这条:它不让推理变便宜,它让不必要的推理根本不发生。

说白了就一句话:一个 Agent,不该把同一个问题解两遍。

所以到底该用哪个?

这不是二选一。它们在架构上根本不在一个位置:一个是运行时的控制流,一个是跨执行的持久层。你完全可以用 LangGraph 编排流程,同时用另一套图存记忆。

但你得知道自己在建哪个。把控制流的图和记忆的图混成一个,是这波概念热潮里最容易踩的坑。


三、什么时候压根不需要图

图不是越多越好,边界其实很清楚。

不需要图:任务只有一个目标、工具很少、分支不多、也不需要中途断点续跑。这种直接用 loop,加一层图只会徒增复杂度。

才值得上图:跨多个部门、多个智能体、执行周期长、有并行分支、需要审批、需要留审计痕迹。

正面例子是重构支付系统------API 兼容、数据迁移、前端改造、测试、安全评审、发布协调,六件事互相牵制,有先后依赖,有必须卡住的审批点。这种任务,你不画图就是在赌。

对照一下你手上的活儿。如果它更像"写篇文章"而不是"重构支付系统",那你现在需要的不是图。


四、最扎心的一层:我们连一个字符串都没管住

前面两种图都在讨论多智能体协作和跨执行记忆。把视线拉回地面,有件更小的事更值得警惕。

一句话概括:prompt engineering 已经解决了,prompt management 没有。

事故长这样:

bash 复制代码
# prompts.py ------ 有人把变量名改得更"规范"了
TRIAGE = "请处理工单 {ticket_id},输出优先级和负责人。"

# handler.py ------ 调用方没跟着改
TRIAGE.format(ticket=ticket.id)     # 💥 线上 KeyError: 'ticket_id'

一次纯粹的重命名。Git 提交正常,代码评审通过,单元测试全绿。然后到了生产环境,KeyError

为什么四道关卡一道都没拦住?

类型检查器不管。 mypy、pyright 检查的是类型,字符串里的占位符对不对得上,不在它们的职责范围内。

单元测试不管。 因为测试里 LLM 调用是 mock 掉的------mock 掉的那一层,恰恰就是 .format() 真正会炸的那一层。

代码评审不管。 三五个文件时人眼能看出来,几十个 prompt、上百个调用点时,谁都看不出来。

Schema 库能管,但代价是重构。 为了一个变量名把整套 prompt 结构推倒重来,没人愿意。

已经有人把这套检查做成了工具(promptctl),思路是三遍扫描:

  1. PromptDiff :用 Python 的 aststring.Formatter 找出 prompt 文件里变量的变化

  2. 契约校验 :检查所有 .format() 调用点,是不是都提供了必需的变量

  3. 影响面分析:标出哪些文件引用了这个 prompt

工具本身没什么魔法------纯标准库,零依赖,全量分析大约 3 毫秒。用 JSON 快照存"上一次被批准的 prompt 状态"作为基线,通过返回 0、失败返回 1,直接卡进 CI。

它的边界也很清楚:不评估 prompt 质量和模型行为、处理不了动态拼出来的键名、只认 Python 文件里的 prompt、合并后基线不会自动更新。

但真正值钱的不是这个工具,是它背后那个心智模型------

改一个 prompt,本质上是一次数据库 schema 迁移,不是一次字符串编辑。

你不会随手把生产库的列名改掉就直接上线。那为什么 prompt 就可以?


五、把这几层放在一起看,真正的问题浮出来了

单看每一层,都挺有道理。叠在一起看,问题就露出来了:

抽象层在疯狂往上堆,但每一层的工程规范都是空的。

我们从 prompt 跑到 context,从 context 跑到 loop,从 loop 跑到 graph,一年四级跳。但回头看:

  • prompt 层------没有契约校验,改个变量名能炸线上

  • context 层------没有标准的评估方式,好坏全靠感觉

  • loop 层------退出条件基本靠人肉写 retries < 3

  • graph 层------连这个词指什么,业内都还没谈拢

每一层都在自己被工程化之前,就被下一层宣布"已解决"了。

这不是说新概念没价值。三张图的划分很有洞察,图工程和 loop 的边界也划得清楚。但概念的迭代速度,正在远远甩开工程规范的建设速度,这才是真正的风险。

这波热潮里最清醒的一种声音是:图工程这个词,几个月后大概率会消失。

我信。但更重要的是后半句------词会没,任务拆解、并行、决策卡点这些东西不会没。

这句话可以直接套到前面所有名词上。


六、如果你明天就要动手,只做这三件事

第一,先判断你要不要图。 单目标、工具少、分支少、不需要断点续跑,loop 就够了,别硬上。真到了跨部门、长周期、要审批要审计的场景,再画图不迟。

第二,想清楚你建的是哪种图。 控制流的图解决"这次怎么跑",记忆的图解决"下次别从零跑"。可以都要,但别混在一个东西里。想省 token 就先建执行图,想让复杂流程可控就先建状态机。

第三,不管你在哪一层,先把 prompt 当 schema 管起来。 版本、契约、迁移、CI 卡口。这是唯一一件今天就能动手、而且明年还不会过时的事。

前两件事取决于你的业务复杂度,第三件事没有例外。


下一个新名词大概三个月后就会来。到时候值得问的不是"这词什么意思",而是"上一个词,我们真的做完了吗"。

你手上的 Agent,现在是每次都从零开始,还是记得住上一次?评论区聊聊。


希望这篇文章能为您带来一些帮助。如果有任何疑问或建议,请在评论区留言,我们将尽力回答!

欢迎后台私信加入组织共同交流!

让我们一起探索并推动前沿技术发展!🚀💻

祝好运!😊✍️

微信公众号:算子之心

相关推荐
Yao8061 小时前
MinIO自建对象存储,省OSS费用的完整方案
前端·后端
Ai拆代码的曹操1 小时前
深夜告警风暴:Dubbo 异步调用回调丢失 300 次——一个 tech lead 的自述
后端·dubbo
Codelinghu3 小时前
LangSmith Evaluate实战评估Agent,不要在玩Demo了
后端
xingren3 小时前
人体模型部位分割:从 SCHP平面解析 映射到 3D 模型
后端
董员外3 小时前
RAG 系统进化论(五):Corrective RAG 与 Self-RAG,让系统发现并纠正错误
人工智能·后端·设计模式
暗黑小白3 小时前
路由策略与引擎可替换性
后端·python·ai agent
zzzll11114 小时前
SpringBoot 入门与实践指南
java·spring boot·后端
newerp5 小时前
Go :结构体嵌入、sort.Interface 与 io.Reader/Writer
后端
SamDeepThinking5 小时前
如何维持缓存的一致性?
后端·面试·程序员