健康检查通过,代理要调用的入口却不存在¶
一次运行时切换前的联调:用生产应用工厂构造服务发请求,健康检查返回 200,但跨语言代理要调用的流式请求和取消请求都返回 404。
排查¶
先用生产应用工厂把服务起起来,直接发请求,三个端点的返回放在一起对照:
健康检查 200,说明进程活着,问题锁定在路由层:404 的意思是这条路径没有注册任何路由。顺着这个对比端点注册表和代理的调用路径,两边对不上——默认 Python 应用只注册了旧协议的流式和终止端点(/v1/turns:stream、/v1/turns:abort),Go 代理已经固定调用新的 /v1/responses。
健康检查漏掉它是因为检查的内容就不包含业务入口:健康检查是进程存活检查,只回答进程起没起来,不探测业务协议端点有没有注册。运行手册对这条的表述是 health 200 只证明进程启动,默认 runtime 必须提供 /v1/responses 与 cancel。
再查测试为什么没发现:原有的跨边界测试启动的是内核自带的开发服务命令:
这条命令装配出的应用和生产默认应用不是同一套组件。测试全绿只能说明它启动的那条入口端点是齐的;缺端点的是默认应用,测试覆盖不到,默认入口的断裂一直没暴露。
修复与验证¶
统一入口:产品只留一个入口,默认应用和测试使用同一套装配;旧运行时的应用、组装、会话和工具适配一并删除,不再维护两套协议。
验收打在真实交付形态上:用安装后的包(不是源码目录)启动默认入口,发真实跨语言 HTTP 请求,请求和取消都通过。打包链单独用 make runtime-package-test 验收——在干净虚拟环境安装实际 wheel 后从默认入口启动,单纯 import 不构成验收:
make agent-kernel-test
make ecampus-agent-test
env GOCACHE="$PWD/.tmp/go-build" make test
make runtime-package-test
内核全量测试、WebUI 状态测试、Go 全部含测试包、产品测试均通过。验证用的是确定性模型,能证明连接和入口正确,证明不了回答质量,两个结论分开记录。