2026年7月9日 2 分钟阅读

LangDrift 实战:用 CLI 测试你的 AI Agent 在不同语言下是否行为一致

tinyash 0 条评论

你的 AI Agent 在英语环境下完美运行:退款、下单、查询——工具调用一步到位。但当用户用法语发来同样的请求,Agent 突然沉默了;用阿拉伯语,它调用了完全错误的工具;用斯瓦希里语,它什么都没做。

这不是假设——这是 LangDrift 的核心发现。它的内置基准测试表明,同一条意图跨语言表达时,Agent 的工具选择、参数传递和响应行为都可能发生静默偏差。今天介绍的 LangDrift(GitHub 0⭐,MIT 许可证)就是一个专门检测这类「语言漂移」的评估 CLI 工具。

什么是 LangDrift

LangDrift 检查 AI Agent 在不同语言下是否保持行为一致:工具选择、工具参数、响应语言和失败模式。核心问题很直白:

当同一条用户意图以不同语言到达时,你的 Agent 是否仍然选择正确的工具?

它不是文本翻译质量检测——LangDrift 关注行为而非流畅度。它检查的是 Agent 是否在法语中正确调用了 create_refund_ticket,而不是法语回复是否写得漂亮。

安装与快速体验

npm install -g langdrift

需要 Node >= 22。安装后,先用内置的 demo 体验一下(无需 API Key):

git clone https://github.com/RubenGlez/langdrift.git
cd langdrift
pnpm install
pnpm fake-agent

另一个终端窗口:

langdrift run ./examples/scenarios/support-routing.yaml \
  --target http://127.0.0.1:3011/api/agent

fake agent 故意对斯瓦希里语(sw)和中文(zh)丢弃工具调用,输出如下:

Locale  Passed  Failure       Detail
en      1/1     -             create_refund_ticket
sw      0/1     no_tool_call  expected create_refund_ticket, got no tool calls
zh      0/1     no_tool_call  expected create_refund_ticket, got no tool calls

Result: failed, 2 of 12 locales failed

30 秒就能看到「语言漂移」的实际表现。

编写测试场景

init 命令创建你的第一个场景:

langdrift init ./refund-scenario.yaml --template support

生成的 YAML 格式如下:

id: refund_request
agent: support

locales:
  en:
    input: "I was charged twice for my subscription. Can you refund one charge?"
    expect:
      toolCall:
        name: create_refund_ticket
        arguments:
          reason: duplicate_charge
      noToolCall:
        name: escalate_to_human

  fr:
    input: "J'ai été facturé deux fois. Pouvez-vous me rembourser un paiement?"
    expect:
      toolCall:
        name: create_refund_ticket
        arguments:
          reason: duplicate_charge
      responseLanguage: fr

场景文件使用严格的 2 空格缩进 YAML 子集。用 langdrift lint 验证语法。

断言技巧

  • 工具参数:使用 oneOf 处理同一含义的不同表达:reason: { oneOf: [duplicate_charge, double_charge] }
  • 禁止工具:用 noToolCall + anyOf 防止 Agent 误调用高危工具:noToolCall: { anyOf: [escalate_to_human, contact_seller] }
  • 响应语言responseLanguage: fr 检查回复使用法语(拉丁字母)书写。

对接到你的 Agent

LangDrift 通过 HTTP 与 Agent 通信,每次测试发送一个 POST 请求:

langdrift run ./refund-scenario.yaml \
  --target http://localhost:3010/api/agent \
  --format markdown \
  --iterations 3

请求体包含 localeinputscenarioIdagent,你的 Agent 只需返回工具调用数组和回复文本即可——无需引入特殊 SDK。

内置示例 Agent 支持 OpenAI、Anthropic、DeepSeek:

ANTHROPIC_API_KEY="$ANTHROPIC_KEY" \
  MODEL_PROVIDER=anthropic \
  MODEL_NAME=claude-haiku-4-5-20251001 \
  pnpm agent

CI 集成

LangDrift 在设计上就是 CI-Friendly 的——测试失败时退出码非零。在 GitHub Actions 中使用 --format markdown 生成 PR 注释友好的报告:

langdrift run ./scenarios \
  --target "$AGENT_URL" \
  --iterations 3 \
  --format markdown \
  --min-pass-rate 80

--min-pass-rate N 允许设定一个通过率阈值,避免单个弱语言导致整个 pipeline 失败。--allow-fail 则可以标记某个已知弱势语言为”允许失败”,不影响构建。

设计亮点

LangDrift 的几个设计选择值得注意:

  • 行为优先于文本:检查的是工具调用和结构化行为,而非回复是否流畅。
  • 确定性断言:核心循环不依赖 LLM-as-Judge,失败原因可解释、可复现。
  • HTTP 契约无框架锁定:任何能接受 POST 请求的 Agent 都可以测试。
  • 零运行时依赖:TypeScript 源码,Node >= 22 即可运行,CLI 安装即用。

总结

当你的 AI Agent 服务全球用户时,英语测试通过不等于整体通过。LangDrift 用轻量的方式暴露了语言漂移问题——4 个 CLI 命令(initrunlinttranslate)、一个清晰的 HTTP 契约、CI 集成支持,让跨语言 Agent 行为验证变得简单可操作。

如果你的 Agent 需要处理多语言用户请求,LangDrift 是一个值得加入 CI pipeline 的工具。


相关链接

发表评论

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