AI 编程 Agent 不是黑箱了用 ccglass 看清 Claude Code 和 Codex 的真实请求引言AI 编程 Agent 的神秘面纱在 AI 辅助编程的浪潮中Claude Code 和 OpenAI Codex 这类 AI 编程 Agent 已经成为开发者手中的利器。它们能够理解自然语言描述自动生成代码、修复 bug、甚至重构整个模块。然而对于许多开发者来说这些 AI Agent 的内部运作机制仍然像是一个“黑箱”——你输入需求它输出代码但中间具体发生了什么它到底向 API 发送了什么请求用了什么参数为什么有时候输出不如预期今天我们将通过一个名为ccglass的工具彻底揭开这个黑箱的面纱。ccglass是一个轻量级的请求监控库它可以拦截并记录 AI Agent 与后端 API 之间的所有通信。通过它你可以清晰地看到 Claude Code 和 Codex 的真实请求内容从而理解它们的工作原理甚至调试自己的 AI 应用。## 基础概念理解 AI Agent 的请求结构在深入使用 ccglass 之前我们先复习一下 AI 编程 Agent 的核心工作流程。以 Codex 为例当用户输入“用 Python 写一个快速排序函数”时Agent 会构造一个 HTTP 请求发送到 OpenAI 的 API。这个请求通常包含以下几个关键部分-model使用的模型名称如gpt-4或code-davinci-002。-messages对话历史包含用户输入和系统提示。-temperature控制输出随机性的参数。-max_tokens生成的最大 token 数量。以下是 Codex 请求的简化示例使用 Python 的requests库pythonimport requests# 这是 Codex 请求的典型结构url https://api.openai.com/v1/chat/completionsheaders { Authorization: Bearer YOUR_API_KEY, Content-Type: application/json}data { model: gpt-4, messages: [ {role: system, content: 你是一个编程助手擅长生成 Python 代码。}, {role: user, content: 用 Python 写一个快速排序函数。} ], temperature: 0.7, max_tokens: 500}response requests.post(url, headersheaders, jsondata)print(response.json())这段代码展示了 Agent 发送给 API 的原始请求。但实际中Agent 可能会添加额外的系统提示、格式化指令或上下文管理。ccglass能够捕获这些细节。## 中级用法使用 ccglass 拦截并分析请求现在让我们安装并使用ccglass。假设你已经有了一个 Python 环境可以通过 pip 安装bashpip install ccglassccglass 的核心功能是作为一个中间件自动监听 HTTP 请求并记录它们。以下是一个完整示例演示如何使用 ccglass 监控 Codex 的请求pythonimport ccglassimport requests# 启动 ccglass 监听器默认监听 127.0.0.1:8080monitor ccglass.Monitor(host“127.0.0.1”, port8080)# 定义一个回调函数当检测到请求时打印详细信息def on_request(request): print(“ 检测到请求 “) print(fURL: {request.url}”) print(fMethod: {request.method}“) print(fHeaders: {request.headers}”) print(fBody: {request.body.decode(‘utf-8’)}“) print(” 请求结束 \n)# 注册回调monitor.on_request(on_request)# 模拟一个 Codex 请求实际中需要替换为你的 API 调用url http://127.0.0.1:8080/v1/chat/completionsheaders { “Authorization”: “Bearer fake-key”, “Content-Type”: “application/json”}data { “model”: “gpt-4”, “messages”: [ {“role”: “system”, “content”: “你是一个编程助手。”}, {“role”: “user”, “content”: “实现二分查找。”} ]}# 发送请求ccglass 会自动拦截response requests.post(url, headersheaders, jsondata)print(“响应内容:”, response.json())运行这段代码你会看到类似下面的输出取决于实际响应 检测到请求 URL: http://127.0.0.1:8080/v1/chat/completionsMethod: POSTHeaders: {‘Authorization’: ‘Bearer fake-key’, ‘Content-Type’: ‘application/json’}Body: {“model”: “gpt-4”, “messages”: [{“role”: “system”, “content”: “你是一个编程助手。”}, {“role”: “user”, “content”: “实现二分查找。”}], “temperature”: 0.7, “max_tokens”: 500} 请求结束 响应内容: {“id”: “chatcmpl-xxx”, “choices”: […]}通过 ccglass你可以清楚地看到- Agent 发送了哪些参数model、messages、temperature 等。- 系统提示system prompt的具体内容。- 用户输入是如何被格式化的。## 高级用法分析 Claude Code 的请求与调试Claude Code 和 Codex 的请求结构略有不同。Claude 使用 Anthropic 的 API其消息格式可能包含 role 和 content 的分层结构。下面是一个更复杂的示例展示如何用 ccglass 监控 Claude Code 的请求并添加过滤功能pythonimport ccglassimport json# 创建更高级的监控器支持过滤和统计monitor ccglass.Monitor(host“127.0.0.1”, port9090)# 使用装饰器注册回调只记录包含 Claude 关键词的请求monitor.on_request(filter_funclambda r: “claude” in r.body.decode(‘utf-8’).lower())def log_claude_requests(request): print(”— Claude Code 请求 —“) body json.loads(request.body) print(f模型: {body.get(‘model’, ‘unknown’)}”) print(f消息数: {len(body.get(‘messages’, []))}“) for i, msg in enumerate(body.get(‘messages’, [])): print(f” 消息 {i1}: role{msg[‘role’]}, 内容长度{len(msg[‘content’])}“) print(f温度: {body.get(‘temperature’, ‘默认’)}”) print(“— 结束 —\n”)# 模拟一个 Claude Code 请求url http://127.0.0.1:9090/v1/messagesheaders { “x-api-key”: “sk-ant-xxx”, “anthropic-version”: “2023-06-01”}data { “model”: “claude-3-opus-20240229”, “max_tokens”: 1024, “messages”: [ {“role”: “user”, “content”: “请优化以下代码\ndef factorial(n):\n if n 0:\n return 1\n else:\n return n * factorial(n-1)”} ], “temperature”: 0.5}response requests.post(url, headersheaders, jsondata)print(“Claude 响应:”, response.json()[:200] “…”) # 截断输出这个示例展示了如何1. 设置过滤条件只监控 Claude 相关请求。2. 解析请求体提取关键信息如模型名称、消息数量。3. 对比不同 Agent 的请求差异比如 Claude 使用anthropic-version头而 Codex 使用Authorization。通过这种方式你可以调试为什么同样的提示词在不同 Agent 下产生不同结果——答案往往隐藏在请求参数中。## 总结从黑箱到透明通过ccglass我们成功地将 AI 编程 Agent 的请求从“黑箱”变成了“透明”。你可以看到- Claude Code 和 Codex 发送的完整请求结构。- 系统提示system prompt的具体内容这直接影响代码质量。- 参数如 temperature、max_tokens 如何影响输出。- 不同 API 的认证方式和消息格式差异。这种透明度对于开发者来说至关重要它帮助你理解 AI 的行为调试错误的输出甚至优化自己的提示词。下次当你使用 Claude Code 或 Codex 时不妨用 ccglass 窥探一下背后的真实请求——你会发现AI 编程 Agent 其实没那么神秘。