HTTPeep Blog
AI 会读代码,但它看不见请求真正发生了什么
从代码猜测到网络观测:为什么 AI 调试需要 Network Context
本页目录
AI Coding Agent 正在改变开发者的工作方式。
AI Coding Agent 正在改变开发者的工作方式。它们能读懂整个代码库,理解模块之间的依赖关系,追踪跨文件的函数调用链,在几秒钟内生成一个完整的功能实现。曾经需要搜索文档、翻 Stack Overflow、反复试错的工作,现在可以直接交给 Agent 来处理。
对于很多开发者来说,这已经不是"辅助工具",而是真正意义上的协作者。
但有一类问题,Agent 至今仍然束手无策。
不是复杂的算法,不是精妙的架构设计,而是最日常的一件事:调试网络请求。
当接口报错、数据对不上、请求莫名超时,Agent 的处理方式几乎总是一样的——它从代码出发,检查函数逻辑,检查类型定义,检查错误处理,然后给出一个"看起来很合理"的修改建议。
有时候它是对的。
但很多时候,它修改的那几行代码根本不是问题所在。真正的问题在别处——在代码看不见的地方,在运行时的网络层里。
代码告诉 Agent 你的意图。网络告诉它真正发生了什么。调试,需要两者。
而那一层,Agent 从来没有看见过。
一、你可能见过这种调试场景
页面报错。
不是那种一眼就能看出来的语法错误,也不是逻辑明显有问题的代码。就是那种——看起来完全正确,但就是不工作的 bug。
你把代码、错误堆栈、接口调用方式一起丢给 AI Coding Agent,心里想着:这种事 AI 应该很擅长。
Agent 扫完代码,给出一个听起来很合理的判断:
"逻辑没有问题。这里可能是空值,建议加一个兜底判断。"
然后它开始改代码:
- 给字段加 optional chaining
- 给返回值加默认值
- 给请求加 retry 逻辑
- 给异常处理加 fallback
- 顺手重构了一遍数据转换函数
改完之后,它说:"应该好了。"
你刷新页面。报错消失了。
你松了一口气,准备合代码。
然后三天后,用户反馈说功能一直不对——数据始终是空的,操作没有任何效果,但页面没有任何报错。
你这才意识到,当时 Agent 没有修好任何东西。它只是把报错藏起来了。
打开抓包工具,五秒钟之内你找到了真正的问题。
不是代码逻辑。不是数据结构。不是任何 Agent 碰过的地方。
是一条 301 重定向,把 POST 请求变成了 GET,body 在跳转过程中消失了。
整个过程 fetch 没有报错,Promise resolved,status 200。代码侧毫无感知,Agent 也毫无感知。
问题发生在网络层。而那一层,Agent 从头到尾都没有看见。
二、主案例:POST 请求撞上 301,body 悄悄消失
这个案例值得认真拆解,因为它极具代表性——不是代码写错了,而是代码和真实网络行为之间出现了裂缝。
代码看起来完全正确
前端代码没有任何问题:
await fetch('http://localhost:3000/api/submit', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(payload),
});payload 是完整的对象,JSON.stringify 没有报错,Content-Type 正确设置。任何有经验的开发者看到这段代码,都不会觉得有什么问题。
但后端一直反馈:没有收到 body,数据入库是空的。
于是你找 Agent 帮忙。
Agent 的推理方向
Agent 拿到代码,开始从它能看到的信息出发推理。
它注意到 body 没有被收到,于是把排查方向指向了后端中间件:
- 是不是
express.json()没有挂载? - 是不是 body parser 的顺序不对?
- 是不是某个中间件提前消费了请求体?
- 是不是
Content-Type没有正确匹配?
这些推理方向,在这类 bug 里都是合理的经验之谈。Agent 不是在乱猜,它在做一个有经验的开发者会做的事——从已知信息出发,列出最可能的根因。
问题在于,它的已知信息不完整。
网络里实际发生了什么
打开 HTTPeep,找到这条请求的完整流量记录:
POST http://localhost:3000/api/submit
← 301 Moved Permanently
Location: http://localhost:3000/api/submit/
GET http://localhost:3000/api/submit/ ← 注意:POST 已变成 GET
← 200 OK
Body: { "success": true } ← 后端正常响应,但 body 是空的就多了一个尾部斜杠。
nginx 的 try_files 默认行为,会把没有尾部斜杠的路径 301 到带斜杠的版本。这是一个极其常见的服务器配置,很多人甚至不知道自己开了它。
浏览器跟随了这个重定向。但根据 HTTP 规范,跟随 301 重定向时,非幂等的方法(POST、PUT)会被降级为 GET,body 会被丢弃。这个行为是规范定义的,不是 bug,但它在这里造成了一个隐蔽的 bug。
第二次请求以 GET 空请求到达后端。后端的路由匹配到了,业务逻辑执行了,没有报错,只是写入了一条空数据。返回的 { "success": true } 也是真实的——从后端角度看,这是一次成功的请求。
为什么这个 bug 极难定位
这个 bug 同时在三个层面隐身了:
代码层: 发送的是 POST,传了 body,没有任何写错的地方。
异常层: fetch 没有抛异常,Promise 正常 resolved,没有任何错误可以 catch。
状态码层: 最终响应是 200,甚至 body 里还有 "success": true。
对 Agent 来说,它看到的是一段正确的代码,却要解释一个"后端收不到 body"的现象,而中间那两条 HTTP 请求——301 重定向和 POST 变 GET——它完全不知道存在。
它只能在自己能看见的范围内找答案。而答案不在那个范围里。
三、这类问题并不罕见
301 吃掉 body 是一个极端清晰的例子,因为网络现实和代码意图之间的裂缝太明显了。但这种裂缝在开发中无处不在,只是大多数时候没这么戏剧性。
Token 看起来被复用,实际每次都在重新请求
const token = await auth.getToken();
await api.fetchUserData(token);看起来是标准的两步调用:先拿 Token,再用 Token 请求数据。任何人看到这段代码都会认为 SDK 内部应该已经处理了缓存——毕竟,缓存 Token 是一个如此基础的功能,SDK 怎么可能没做?
但打开流量记录,你会看到每一次 getToken() 都触发了一次完整的 /oauth/token POST 请求,grant_type=client_credentials,完整认证,没有缓存,没有复用。一个普通列表页加载,背后是 40 次重复认证。本地开发时感觉不出来,因为 Token 服务响应很快。但到了有 rate limit 的生产环境,这 40 次请求会打满 quota,然后业务请求开始收到 429。
SDK 的实现在你的代码库之外。Agent 合理地假设它做了正确的事。但"应该有缓存"不等于"真的有缓存"。
Promise.all 看起来并发,实际请求串行执行
const [orders, inventory, pricing] = await Promise.all([
fetchOrders(userId),
fetchInventory(userId),
fetchPricing(userId),
]);Promise.all 是并发的教科书写法,Agent 看到这里通常会说"已经是最优解了"。
但看一眼请求时序图:
fetchOrders ████████████████████ 0ms - 210ms
fetchInventory ████████████████████ 215ms - 430ms
fetchPricing ████████████████████ 435ms - 650ms三个请求依次发出,每个都等上一个完成才开始。
原因是 fetchOrders 内部有一个共享的 HTTP 连接池,第一次初始化时会加锁,后两个函数调用在等锁释放。这个连接池逻辑在一个共享的 HTTP client 模块里,不在这三个函数的源码里,也不在 Promise.all 的上下游代码里。
代码是并发的。网络执行是串行的。总耗时是并发应有的三倍。
请求看起来打本地,实际被代理到旧实例
项目的 .env 里写着:
VITE_API_BASE=http://localhost:3000代码里的请求也老老实实用着这个地址。Agent 查完所有配置,认为请求目标正确。
但 vite.config.ts 里还有一条三个月前加的代理规则:
proxy: {
'/api': {
target: 'http://localhost:4000',
changeOrigin: true,
}
}所有 /api/* 请求都被 Vite 悄悄转发到了 4000 端口——那里跑的是一个还没重启的旧版本服务,返回的是上一个版本的数据结构,字段名已经变了。
前端报错,字段 undefined。Agent 花了很长时间在代码里找那个"变成 undefined"的字段。真正的问题是请求根本没打到你以为的地方。
这几个问题的共同点不是"代码写错了",而是代码里的预期和网络里的现实之间存在裂缝。这些裂缝只能在真实流量里被看到。
这也是 HTTPeep 一直在做的事——把运行时的网络现场,变成 Agent 可以直接读取和推理的结构化上下文。在详细介绍它之前,先把问题的本质说清楚。
四、这是一种系统性盲区:Runtime Blindness
代码是静态意图,网络是运行时真相
有一个很容易被忽视的事实:代码只描述了程序本来打算做什么。
类型定义描述了你期望的数据结构,不是真实 API 返回的结构。配置文件写了你打算连接的地址,不是请求最终到达的地址。函数调用描述了你打算执行的逻辑,不是运行时实际发生的事。
这些都是意图。是蓝图。
而当程序真正运行,蓝图和现实之间会产生各种各样的偏差。Proxy 规则改写了目标地址,SDK 悄悄发了额外的请求,中间件改变了传输内容,重定向改变了 HTTP Method,缓存返回了旧版本的响应。
代码里没有记录这些偏差。这些偏差只存在于运行时的网络流量中。
代码是静态意图。网络才是运行时真相。
Agent 在没有运行时现场的情况下,只能猜
调试的本质是找到"预期行为"和"实际行为"之间的差距。
当 Agent 只有代码,它知道预期行为,但不知道实际行为。它只能用意图推断现实——推断请求打到了哪里,推断响应结构是什么,推断 Token 有没有带上,推断 body 有没有在传输中丢失。
这种推断有时候是对的。一个有经验的开发者也会做同样的推断,而且很多时候会推断正确。
但推断终究是推断,不是观测。在代码和网络行为高度一致的情况下,推断工作得很好。但一旦中间出现了 Proxy、重定向、SDK 封装、中间件改写,推断就开始失准——而偏偏这些因素在真实开发环境中无处不在。
我们把这种现象叫做 Runtime Blindness:Agent 能读懂你写下的一切意图,却看不见程序运行时真正发生的事。它不是 Agent 能力不足的问题,而是它缺少了一类关键的上下文——运行时产生的网络证据。
五、只看代码,Agent 会犯三种系统性错误
Runtime Blindness 不只是让 Agent"效率变低",它会导致三种在结构上完全错误的调试行为。
把网络 Bug 修成代码 Bug
这是最常见、也最危险的误判。
页面报错:Cannot read properties of undefined: profile.plan
Agent 看到这类错误,自然地把问题定位在代码层,建议加上防御性兜底:
plan: profile.plan ?? 'free'报错消失了。看起来问题解决了。
但假设真实的 API 响应早已变成这样:
{
"user": { "name": "Chris" },
"subscription": { "tier": "pro" }
}那真正的问题不是 plan 字段缺少默认值,而是 API 响应结构三周前就已经变更,plan 现在位于 subscription.tier,没有人更新前端的类型定义和数据处理逻辑。
加 ?? 'free' 之后,用户明明付费升级到了 Pro,但客户端永远从兜底值读到"免费版"。付费功能全部被锁住。这个 bug 会安静地在生产环境里运行,直到用户投诉。
Agent 修复了报错。但它把一个网络层的数据结构问题,修成了代码层的防御性兜底。问题被掩埋,没有被解决,而且掩埋的方式会造成真实的业务损失。
没有证据,结论只是合理的猜测
同一个 profile.plan 报错,实际上可能有很多完全不同的根因:
- API 响应结构发生了变更
- 请求打到了错误的环境,返回了另一套数据
- 本地 Mock 数据三周没有同步,和真实 API 已经分叉
- 某个中间件改写了响应体
- 用户的 Cookie 状态不同,触发了另一个数据分支
- CDN 缓存返回了旧版本的响应
每一种根因,对应的修法都完全不同。错误的修法不只是"没用",而是会把真正的 bug 掩盖得更深,让下一次排查更困难。
只看代码,Agent 无法区分这些根因。它给出的建议听起来合理,但合理是基于推断的合理,不是基于证据的合理。在没有网络证据的情况下,每一个建议都是在可能性空间里的一次猜测——有时候猜对了,有时候猜错了,而你没有办法在修之前知道哪种情况。
无法验证修复是否真正有效
这是最容易被忽视的问题,但它决定了整个调试闭环是否能真正完成。
Agent 改完代码,通常只能说:"从逻辑上看,这样应该可以。"
但调试需要的不是"逻辑上应该可以"。调试需要的是确认:
- 修复后请求是否真的打到了正确地址
- 响应结构是否和代码假设真正一致
- 那条 301 重定向是否已经消失
- Token 是否现在真的被复用了
- 耗时是否真的下降到了合理范围
如果 Agent 看不到修复后的网络行为,它就无法完成闭环。它可以修改代码,但它不能验证现实。而"代码看起来对了"和"程序运行时真的对了",是两件需要分别确认的事。
六、Network Context:结构化的运行时证据
Network Context 不是一个抽象的概念,而是一组具体的、可以结构化交给 Agent 的运行时数据。把它想象成调试现场的完整还原——不是开发者的描述,而是程序运行时留下的原始记录。
请求上下文:发出去的是什么
Agent 需要看到的不是"代码里构造了什么请求",而是"网络上真正发出去的是什么"。这包括完整 URL(含协议、Host、Path、Query Params)、HTTP Method、Request Headers 明文(Authorization、Cookie、Content-Type、自定义 Header 一个不漏)、Request Body 明文。
代码里写了 Authorization: Bearer ${token},不代表这个 Header 真的带上了——Token 可能在某个中间层被覆盖,可能因为跨域被浏览器拦截,可能因为某个拦截器的 bug 被移除了。Network Context 要回答的是:最后离开客户端的那条请求,到底长什么样?
响应上下文:收到的是什么
包括 HTTP 状态码、Response Headers 明文(Cache-Control、Set-Cookie、Content-Encoding、X-* 自定义头)、解压并解码后的 Response Body 明文(无论中间经过多少层 gzip、Brotli、TLS,Agent 拿到的都是最终真实内容)、是否命中 Mock 规则、是否被 Rewrite 规则修改过响应内容。
很多 bug 的根因不在请求,而在响应——但响应里看起来一切正常。状态码 200,Content-Type 正确,但 body 的数据结构已经悄悄变了,或者某个字段被中间件抹掉了,或者 Set-Cookie 里有一个旧的 session 覆盖了当前用户状态。
时序上下文:时间花在哪里
一个请求从发出到收到响应,中间经历了很多阶段:DNS 解析、TCP 握手、TLS 协商、等待服务端处理(TTFB)、数据传输。每一个阶段都有自己的耗时,每一个阶段都可能是瓶颈。
Network Context 提供的时序数据包括:DNS 解析耗时、TCP 连接耗时、TLS 握手耗时、服务端响应耗时(TTFB)、内容传输耗时、全程总耗时,以及每条请求发生的绝对时间戳。
有了时序数据,一个 5 秒超时的 bug 才能被正确诊断:是 DNS 慢(换 DNS 或加缓存),还是 TLS 握手慢(证书链问题),还是 TTFB 高(服务端慢查询),还是内容传输慢(响应体太大),还是多个请求被串行阻塞(连接池问题)。每种原因,修法完全不同。没有时序数据,这些全部只能猜。
路由上下文:中间发生了什么
现代开发环境里,一条请求在到达服务器之前可能经历很多中间层:Vite proxy 改写目标地址,nginx redirect 改变 URL,DNS override 把域名解析到本地,Mock 规则拦截请求返回假数据,Rewrite 规则修改请求头或响应体。
路由上下文记录的就是这些中间过程:实际连接的 Host 是什么、DNS 实际解析到了哪个 IP、请求经历了哪些重定向、是否命中了 Mock 规则、是否被 Rewrite 规则修改、最终路由到了哪个服务实例。
这些信息不在业务代码里,但它们是 POST 变 GET、Token 认证失败、接口返回旧版本数据这类 bug 的真正藏身之处。
七、HTTPeep:AI 工作流里的 Network Context Layer
传统工具的局限:Agent 拿到的是转述,不是证据
Charles、Proxyman、mitmproxy 这类工具,设计目标是给人看的。
这个设计目标在 AI 介入调试之前完全合理——开发者打开 UI,找到那条请求,看响应体,理解问题,然后去改代码。整个信息消化过程发生在开发者的大脑里。
但当 AI Agent 参与调试时,这个流程出现了一个断点。开发者看完流量,理解了问题,然后需要把理解重新"翻译"成文字,描述给 Agent 听。Agent 再基于这个描述去推理和修复。
这个翻译过程会带来信息损耗。
开发者描述的是自己认为重要的部分,但可能遗漏了 Agent 需要的细节。开发者说"接口返回 200 但数据是空的",Agent 不知道这里其实经历了一次 301 重定向和一次 POST 变 GET。那个细节在网络流量里,但没有出现在描述里,因为开发者以为自己找到了根因(空数据),但其实只找到了现象。
Agent 拿到的是一份二手描述,不是一手证据。它只能基于描述推理,而不能基于现场推理。
新的工作流:从转述到直接观测
HTTPeep 要做的不是"更好看的抓包工具",而是 AI 编程工作流里的 Network Context Layer——把运行时 HTTP 流量结构化地转换成 Agent 可以直接读取、直接查询、直接推理的上下文。
以前的流程是:
开发者复现问题
→ 开发者捕获流量
→ 开发者阅读流量,形成理解
→ 开发者把理解转述给 Agent
→ Agent 基于转述推理和修复新的流程是:
开发者复现问题
→ HTTPeep 捕获流量,转换成结构化 Network Context
→ Agent 通过 MCP 直接读取和查询流量数据
→ Agent 基于真实证据推理根因
→ 开发者审查根因和修复方案
→ Agent 再次读取修复后的流量,验证网络行为在这个流程里,Agent 不再依赖开发者的描述。它能自己查看那条 301 重定向,自己对比两次请求的 Method 和 body,自己发现 POST 变 GET 的那一刻。
它拿到的是证据,不是转述。
八、五分钟让 Agent 真正看见你的网络
前面说了这么多问题,现在说怎么解决。
HTTPeep 通过 Agent Skills 的方式与 AI Coding Agent 集成。Skills 是一种标准化的能力描述机制,安装之后,Agent 就知道 HTTPeep 能做什么、怎么调用、返回什么格式的数据——不需要写任何胶水代码,不需要手动配置,开箱即用。
安装 Skills
在你的项目目录下运行一条命令:
npx skills add HTTPeep/agent-skills --skill httpeep-cli安装完成后,Agent 就能通过 httpeep-cli 与 HTTPeep 交互——获取实时流量数据、查询历史请求、检查规则命中情况,以及对比修复前后的网络行为差异。
自动检测与安装
如果你的环境里还没有安装 httpeep-cli,Skills 在首次运行时会自动检测并提示安装,通常不需要手动处理。
Windows 用户需要注意: 由于系统差异,Windows 环境下可能需要先手动安装 HTTPeep 桌面应用。安装完成后,httpeep-cli 命令会自动随之就位,后续流程和其他平台完全一致。
HTTPeep 下载地址:httpeep.com
纯命令行也能工作
httpeep-cli 不依赖 HTTPeep 桌面 UI。在没有图形界面的环境里——CI 流水线、远程服务器、纯终端开发环境——它同样能独立捕获流量、查询请求、导出结构化数据,供 Agent 直接读取和推理。
你不需要打开任何 GUI,整个调试链路可以完全在命令行里完成。
在 OpenClaw 和 Hermes 环境下使用
如果你在 OpenClaw 或 Hermes 这类 AI Agent 环境里工作,httpeep-cli + Agent Skills 同样适用。
安装 Skills 之后,Agent 可以在项目的调试过程中自动调用 httpeep-cli,捕获当前项目的网络流量,检查请求和响应,分析耗时,然后结合代码上下文直接给出根因判断。整个过程不需要你手动介入——Agent 自己决定什么时候需要看流量,自己发起查询,自己把网络证据和代码逻辑对齐。
这正是 Network Context 真正发挥价值的工作方式:不是开发者主动抓包再告诉 Agent,而是 Agent 在遇到网络相关问题时,自主地去观测运行时现场。
安装 Skills 之后,你可以直接在对话里让 Agent 操作 HTTPeep:
# 查看最近捕获的请求,定位报错相关的流量
用 HTTPeep 查看最近的网络流量,找到和这个报错相关的请求。
# 检查某条请求的完整细节
检查刚才那条 POST /api/submit,看有没有重定向,body 是否完整,响应是什么。
# 分析耗时瓶颈
查看最近 10 条请求的耗时分布,找出 TTFB 最高的几条,判断瓶颈在哪一层。
# 修复后对比验证
再运行一次,捕获新的流量,对比修复前后的请求和响应有什么变化。Agent 会直接调用 httpeep-cli 拿到结构化的流量数据,基于真实的网络证据判断根因——而不是基于你的描述猜测。
从"转述"到"直接观测",就是这一条命令的距离。
九、一个从观测到修复的完整闭环
有了 Network Context,一次完整的 AI 辅助调试是什么样的?
第一步:复现问题,捕获真实流量
不要一上来就让 Agent 猜。先把问题复现出来。
正常运行应用,触发报错或者异常行为,让 HTTPeep 在后台捕获这次运行过程中的全部 HTTP 流量。捕获的不只是请求和响应内容,还包括完整的时序数据、路由规则命中情况、以及每条请求之间的相对时序。
目标是先还原现场,而不是先猜答案。调试里,"还原现场"和"猜测原因"是两件必须分开的事,顺序不能颠倒。
第二步:让 Agent 读取 Network Context,先观测再判断
不要只说"页面崩溃了,帮我修"。换成让 Agent 先看流量再开口:
用 HTTPeep MCP 查看最近的网络流量。
找到和这个错误相关的请求。
检查实际发出的请求内容、响应体、状态码、耗时分布、路由规则。
如果有多条请求,注意它们之间的时序关系。
先给出你观察到的网络现象和根本原因,再决定是否需要修改代码。这条指令做了一件很关键的事:它把 Agent 的工作顺序从"先猜再改"变成了"先观测再判断再修改"。观测是有约束的,猜测是无约束的。强制观测,就是强制 Agent 在有证据的情况下发言。
第三步:对齐代码意图与网络现实
还是 profile.plan is undefined 这个错误。
没有 Network Context,Agent 的建议是加 ?? 'free',用户永远显示免费版,bug 安静潜伏。
有了 Network Context,Agent 拿到的是:
请求:GET https://staging.example.com/api/profile
状态:200 OK
时序:DNS 12ms | TCP 8ms | TLS 24ms | TTFB 340ms | 传输 5ms | 总计 389ms
实际响应 Body:
{
"user": { "name": "Chris" },
"subscription": { "tier": "pro" }
}
路由:无 Mock 命中,无 Rewrite 规则,直连 staging.example.comAgent 现在能做出有依据的判断:
观察到的网络现象:
- 请求正常到达服务端,响应 200,耗时正常
- 实际响应中不存在 profile.plan 字段
- 套餐信息位于 subscription.tier
根本原因:
API 响应结构已发生变更,但前端代码仍使用旧版字段路径
建议修复:
更新数据映射逻辑,对齐新的响应结构
同时建议同步更新 TypeScript 类型定义,避免类似问题再次出现修复因此变得有目标:
function normalizeProfile(response) {
return {
name: response.name ?? response.user?.name,
plan: response.plan ?? response.subscription?.tier,
};
}这不是猜测响应结构,而是根据真实网络证据修代码。修完能说清楚为什么这样改,改的是什么,对应的是哪个实际观测到的网络现象。
第四步:修复后验证网络行为,完成闭环
代码改完,再次运行,让 HTTPeep 再捕获一次流量。
然后确认:请求是否打到了预期地址,响应结构是否和代码假设一致,之前的 301 重定向是否已经消失,Token 是否现在真的在被复用,并发请求是否真的同时发出,耗时是否降到了合理范围。
每一项都有明确的网络行为作为验证依据,不是"代码逻辑上应该可以",而是"网络行为确认了它正常工作了"。
这才是真正的闭环——从代码意图出发,经过网络现实的验证,回到代码修复,再经过网络现实的确认。一个完整的环,而不是一个在代码层打转的半环。
十、结语
AI Coding Agent 读得懂代码。读得很好。
它能理解复杂的类型系统,能追踪跨文件的调用链,能在数千行代码里找到一个逻辑漏洞。这些能力在过去几年里进步之快,超出了大多数人的预期。
但有一件事它一直做不到:看见程序运行时真正发生了什么。
代码描述意图,网络记录现实。当这两者之间出现裂缝——一条多余的 301、一个没有缓存的 Token、一个悄悄改了结构的 API 响应——Agent 没有任何感知,只能继续从代码出发推理,给出合理但可能完全错误的建议。
这不是模型能力的问题。这是上下文的问题。
Runtime Blindness 本质上是一个信息缺失问题:Agent 缺少了运行时产生的网络证据。而网络证据不是开发者口头告诉它的描述,而是 HTTP 流量里真实记录的每一条请求、每一个响应、每一次重定向、每一段耗时。
Network Context 是那层缺失的上下文。HTTPeep 要做的,是把这层上下文结构化地交给 Agent——让它不再猜测程序本该如何运行,而是直接观测程序实际如何运行。
从猜测到观测。这一步,是 AI 调试真正闭环之前最后缺失的一环。
AI 大模型在不断进化, 但它的调试能力能不能真正落地, 取决于它能不能看见运行时的网络现场。HTTPeep 的目标,就是让 AI 不再盲人摸象,而是有眼有耳地直接看到那个现场。