2026年6月25日 2 分钟阅读

Orchid 完全指南:零侵入式 AI Agent 网络流量记录、调试与回放

tinyash 0 条评论

调试 AI Agent 一直是开发者的痛点——LLM 调用藏在框架、队列和多层抽象之后,每次都要靠打印日志、手动 curl 测试、或者盯着 OpenAI 的 dashboard 猜问题。Orchid 用一个零侵入式代理解决了这个问题:它记录 Agent 的所有网络请求(LLM 调用、工具调用、外部 API),然后让你像看录像一样回放、检查、调试。

架构:零侵入代理 + 本地存储

Orchid 的核心是一个透明 HTTP 代理(orchid-proxy),运行在 Docker 容器中。Agent 的所有出站流量经过这个代理时,会被自动记录到本地的 SQLite 数据库。代理本身暴露三个端口功能:

  • 4320(代理端口):接收 Agent 的 HTTP 请求,转发到上游 API
  • 4321(查询/UI/MCP 端口):提供 Web 可视化面板、REST API 和 MCP 服务端

数据全程保存在你本地——SQLite 数据库文件保留在 Docker 挂载卷中,Authorization 头等敏感信息在写入磁盘前自动替换为 [REDACTED],不上传任何数据到云端。

安装与快速启动

前提条件

  • Docker(运行 orchid-proxy 容器)
  • Python 3.9+ 或 Node.js 18+(根据你的项目语言选择 SDK)

第一步:拉取代理镜像

docker pull ghcr.io/mario-guerra/orchid-proxy:latest

第二步:生成 API Key

docker run --rm ghcr.io/mario-guerra/orchid-proxy:latest generate-api-key

第三步:启动代理

docker run -d \
  --name orchid-proxy \
  -p 4320:4320 \
  -p 4321:4321 \
  -v orchid-data:/data \
  -e ORCHID_API_KEY=orchid-api-key \
  -e ORCHID_DB_PATH=/data/orchid.db \
  ghcr.io/mario-guerra/orchid-proxy:latest

核心功能详解

1. 三种流量处理模式

Orchid 代理通过 HTTP 请求头中的 X-Orchid-Mode(或 SDK 中的 mode 参数)控制对每个请求的处理方式:

模式行为适用场景
passthrough透明转发,不写入磁盘生产环境不想记录流量
capture转发请求 + 将完整请求/响应写入 SQLite开发调试、测试录制
replay阻止所有出站流量,从 SQLite 返回已录制的响应CI 测试、离线调试

replay 模式下,代理会计算请求的哈希值并与数据库中的记录匹配。如果找不到匹配项,返回一个确定的模拟错误。

2. Thin SDK:一行代码接入

Orchid 通过底层 HTTP 传输层打补丁的方式实现无侵入集成——不需要修改 LLM 客户端的初始化代码。

Python 项目

import orchid

orchid.init()

orchid.init() 会自动 patch httpxrequests 的传输层,将后续所有 HTTP 请求路由到 localhost:4320 的代理。只需 pip install orchid-sdk

TypeScript/Node.js 项目

import { init } from "orchid-sdk";

// 必须在初始化任何 LLM 客户端之前调用
await init();

npm install orchid-sdk

3. 会话管理(Session)

默认所有请求归到 "default-session" 下。你可以用以下方式组织不同测试运行的记录(按优先级从高到低):

  • SDK 上下文作用域with orchid.session("test-run-v2", mode="capture"):
  • HTTP 头X-Orchid-Session-Id: test-run-v2
  • 环境变量ORCHID_SESSION_ID=test-run-v2

4. Web 可视化面板

启动代理后打开 http://localhost:4321,输入 API Key 即可进入可视化面板。支持:

  • 按模型、供应商、状态、关键词搜索过滤
  • 查看每次 Exchange 的完整 Prompt、Token 用量、延迟和费用
  • 跨会话对比 Token 消耗和成本
  • 导出会话为 JSON 快照文件

5. MCP 服务端集成

Orchid 代理内置了 MCP 服务端(运行在 4321 端口的 SSE 端点),可以让 Cursor、VS Code 或 Claude Code 直接查询已记录的流量。

配置方式(在 IDE 的 mcp_config.json 中添加):

{
  "mcpServers": {
    "orchid-local": {
      "command": "docker",
      "args": ["exec", "-i", "orchid-proxy", "orchid-proxy", "--mcp"]
    }
  }
}

配置后,你可以在 IDE 中直接问 AI 助手:「刚才那次运行为什么失败了?」——助手通过 MCP 工具查询 Orchid 数据库中的记录,找出问题并修复。

6. 模型定价配置

为了跟踪成本,需要向代理注册模型定价信息。可以通过 REST API 推送:

curl -X POST http://localhost:4321/v1/pricing \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer orchid-api-key" \
  -d '{
    "google": {
      "gemini-2.5-flash": {"prompt": 0.30, "completion": 2.50}
    },
    "openai": {
      "o3-mini": {"prompt": 1.10, "completion": 4.40}
    },
    "anthropic": {
      "claude-sonnet-4-6": {"prompt": 3.00, "completion": 15.00}
    }
  }'

也可以通过 MCP 工具的 update_pricing 方法配置。更新后可用 POST /v1/pricing/recompute 回溯历史会话的成本数据。

7. 确定性回放测试

这是 Orchid 最有价值的能力——录制一次,在 CI 中离线回放:

  1. 录制阶段:在 capture 模式下运行测试套件,生成 JSON 快照
  2. 提交快照:将快照文件提交到仓库
  3. CI 回放:在 CI 中启动代理(replay 模式),加载快照,运行测试

回放模式下测试执行速度极快(响应来自本地 SQLite,零网络延迟),且不消耗任何 API 费用。还适合做性能基准测试——去掉网络延迟后,可以准确测量 Agent 自身逻辑的性能。

常见问题(FAQ)

Q: Orchid 和 LangSmith / LangFuse 有什么区别?

A: Orchid 是本地优先的流量回放调试工具,数据完全保留在你的基础设施内。LangSmith 等是托管的 LLM 可观测性平台,强调多云协作和 Dashboard 共享。Orchid 的核心差异在于零代码入侵(通过代理拦截而非 SDK wrap)和确定性离线回放能力。

Q: 数据安全怎么保证?

A: 代理启动时生成的 API Key 保护所有数据接口。Authorization 头在写入磁盘前被替换为 [REDACTED]。不过注意,Prompt 文本本身会被完整记录——如果 Prompt 中粘贴了密钥,它也会被存储。

Q: 支持哪些协议?

A: Python 侧自动 patch httpxrequests 传输层;TypeScript 侧 patch fetch。如果使用其他语言(Go、Java、Ruby),可以直接修改 LLM 客户端的 base_urlhttp://localhost:4320/v1 并传入 X-Orchid-Api-Key 头。

Q: 需要修改已有代码吗?

A:如果使用 Thin SDK(推荐),只需在入口处加一行 orchid.init()。也可以通过配置 LLM 客户端 base_url 的方式零 SDK 集成。

总结

Orchid 解决了 AI Agent 开发中一个长期存在的痛点——当 LLM 调用深埋在多层抽象后面时,如何高效调试。它的零侵入代理 + 本地 SQLite + MCP 集成三件套,让开发者无需修改代码就能获得完整的网络流量记录和回放能力。对于需要确定性测试和离线调试的 AI Agent 项目,Orchid 是一个实用且优雅的解决方案。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。