mcpField
E
Echoproof

Echoproof

本地服务
github.com开发工具02 周前更新

关于 Echoproof

Echoproof 将录制的 HTTP 流量重放到基准版和修改版构建中,并报告 API 行为差异,供团队依据真实请求检查代码变更。它支持按变更意图评估回归,并生成 CI 可用的结果。

主要功能

  1. 01录制并脱敏真实 HTTP 流量
  2. 02向两个构建重放请求
  3. 03按字段比较 JSON 变化
  4. 04过滤噪声并处理有状态服务
  5. 05依据声明的意图评估变化
  6. 06生成 CI 和 Agent 报告

适用场景

  1. 01合并变更前检查 API 行为
  2. 02发现单元测试遗漏的回归
  3. 03用真实流量验证编码 Agent 的改动

MCP 相关

Echoproof 包含供编码 Agent 使用的 MCP 服务,可基于录制流量检查其工作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
cargoechoproof0.4.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Echoproof

CI crates.io Release License: MIT OR Apache-2.0

印度尼西亚语 | English

基于真实流量,验证每次代码变更对 API 行为的影响。

Echoproof 会记录服务的真实请求和响应,将其重放到变更后的代码构建版本中,然后报告哪些内容发生了变化、涉及哪些端点和字段、影响了多少比例的请求,以及这些变化是否符合预期。它既可用作 CI 中的门禁,也可直接供编码 Agent(Claude Code、Cursor 等)检查自己的工作。

Echoproof 捕获了与变更意图不符的价格回归

record  ->  replay ke build lama dan baru  ->  diff semantik  ->  nilai terhadap niat  ->  gate

目录

为什么选择 Echoproof

当大部分代码都由 AI Agent 编写时,代码变更的数量增长速度远超人类审查能力。测试通过、差异看起来整洁,并不能保证系统行为仍然正确,因为测试基于假设编写,而 Bug 往往来自意料之外的真实数据组合。

Echoproof 回答了单元测试和代码审查都无法回答的问题:

这次变更是否改变了系统对真实流量的行为?如果改变了,这是否符合预期?

Echoproof 能捕获这样的情况:某个 PR 的目标是“在目录中添加 currency 字段”,但却意外地把一个参数放错了位置。结果是 8 道菜单中有 3 道的价格发生变化,另外 5 道仍然正确。单元测试通过了,代码差异看起来也很正常。Echoproof 会报告每个目录请求中的 products[*].price: 18000 -> 22000,并将其标记为回归。

主要功能

  • 从真实流量录制。 反向代理会录制每个请求和响应,并在写入磁盘前遮蔽敏感数据。
  • 语义差异比较。 按字段比较 JSON,而非按文本行比较。变更会按端点和字段分组,并分类为 breaking、behavior 或 additive。
  • 抵御噪声。 自动识别 UUID、时间戳和随机值。通过将旧构建重放两次,学习不同运行之间自行变化的字段。
  • 保障状态安全。 除非按端点允许,否则不会重放写入请求。新旧构建基于相同数据进行比较,并在每轮运行之间执行重置命令。
  • 识别变更意图。 Claude 可根据 PR 或 Agent 任务描述评估每组变更。未能由变更意图解释的变更会被标记为回归。
  • 适用于 CI 和 Agent。 提供合并门禁退出码、用于 PR 评论的 Markdown 报告、供自动化使用的 JSON,以及面向编码 Agent 的 MCP 服务。

安装

Homebrew(macOS 和 Linux)
brew install est57/tap/echoproof
预编译二进制文件(推荐)

从发布页面下载适用于您平台的压缩包,或通过终端下载:

VERSION=v0.1.0
TARGET=aarch64-apple-darwin   # atau x86_64-apple-darwin, x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu
curl -sLO https://github.com/est57/echoproof/releases/download/$VERSION/echoproof-$VERSION-$TARGET.tar.gz
curl -sLO https://github.com/est57/echoproof/releases/download/$VERSION/echoproof-$VERSION-$TARGET.tar.gz.sha256
shasum -a 256 -c echoproof-$VERSION-$TARGET.tar.gz.sha256
tar -xzf echoproof-$VERSION-$TARGET.tar.gz
sudo mv echoproof-$VERSION-$TARGET/echoproof /usr/local/bin/
echoproof --version
使用 Cargo

如果已安装 Rust 1.85 或更高版本:

cargo install echoproof
从源代码构建

**要求:**Rust 1.85 或更高版本。运行演示需要 curl。

git clone https://github.com/est57/echoproof.git
cd echoproof
cargo install --path crates/echoproof-cli

二进制文件 echoproof 会安装到 ~/.cargo/bin。确保该文件夹已加入 PATH:

echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.zshrc && source ~/.zshrc
echoproof --version

快速开始

以下步骤会检查在测试环境中运行的服务上的代码更改。

1. 创建配置文件(可选,所有设置均有默认值):

echoproof init

**2. 录制流量。**在服务前运行代理,然后将应用、Postman 或自动化测试指向代理地址:

echoproof record --upstream http://127.0.0.1:8000 --listen 127.0.0.1:8080 --out traffic.jsonl

收集到有代表性的流量后,按 Ctrl-C 停止。

Laravel 应用无需代理即可录制,可使用 echoproof/laravel:运行 composer require echoproof/laravel,在 .env 中设置 ECHOPROOF_RECORD=true,流量便会写入 storage/echoproof/traffic.jsonl,并遵循相同的脱敏规则。

3. 运行两个构建版本:更改前的版本(base)和更改后的版本(PR),并使用相同的数据库。

4. 进行比较:

echoproof check -s traffic.jsonl --base http://127.0.0.1:8001 -t http://127.0.0.1:8002

**5. 查看结果。**退出代码 0 表示没有意外更改,1 表示存在回归,2 表示发生错误。请参阅阅读报告。

要根据更改意图评估结果,请添加 PR 描述和代码差异:

git diff main...HEAD > change.diff
echoproof check -s traffic.jsonl --base http://127.0.0.1:8001 -t http://127.0.0.1:8002 \
  --intent-file pr-description.md --code-diff change.diff --output echoproof-report.md

演示

完整演示耗时约 10 秒,无需运行自己的服务:

./scripts/demo.sh

演示使用一个小型 POS 后端(examples/demo-shop),其中包含状态:每次下单都会减少产品库存。一个“来自 Agent 的 PR”意在为产品添加 currency 字段,但也更改了促销折扣与优惠券的合并方式。

步骤展示内容
1. 录制来自生产版本的 2,000 个请求录制过程
2. 将流量回放到相同版本,并与录制结果比较因状态导致的误报:录制期间库存已减少
3. 使用 --base 和 --reset 比较 base 和 PR 构建版本,采用安全模式误报消失。检测到 currency。写入请求被报告为尚未验证
4. 与步骤 3 相同,但使用 --allow-writes "POST /orders"捕获到折扣错误,仅出现在同时使用促销和优惠券的订单中
5. 由 Claude 评估更改意图(如果存在 ANTHROPIC_API_KEY)currency 被评为符合预期,折扣更改被评为回归

概念

快照

快照是一个 JSONL 文件,每行包含一组请求和响应。写入文件前,标头和敏感字段会经过脱敏。同一个快照可以重复用于检查多个 PR。

两种比较模式
模式命令适用场景
与录制结果比较echoproof check -s traffic.jsonl -t URL_PR无状态服务,或数据与录制时相同的环境
Base 与 PR 比较echoproof check -s traffic.jsonl --base URL_BASE -t URL_PR使用数据库的服务(推荐)

在 base 与 PR 模式下,不会将录制的响应作为参照。Echoproof 会将相同流量回放到使用相同数据的两个构建版本:

reset  ->  replay ke base         ->  acuan
reset  ->  replay ke base lagi    ->  field yang berbeda dicatat sebagai noise
reset  ->  replay ke PR           ->  kandidat
diff acuan dan kandidat, abaikan noise

每个构建版本的服务器地址(例如图片 URL 或分页链接中的 http://127.0.0.1:8001)会自动标准化,因此即使两个构建版本运行在不同端口上,也可以进行比较。

安全模式

默认情况下,只会重放 GET、HEAD 和 OPTIONS 方法。写入请求会被跳过,且不计为通过:报告会注明跳过的数量,并提醒这些行为尚未经过验证。

仅针对可更改或可重置的环境,按端点允许写入请求:

echoproof check ... --allow-writes "POST /orders" --allow-writes "PUT /cart/*"

使用 --reset(或 replay.reset)在每轮前还原状态,例如恢复数据库转储或调用测试环境中的重置端点。学习噪声时,如果没有重置,Echoproof 会拒绝重放写入请求,因为运行之间的状态变化也会被视为噪声,从而掩盖回归问题。

语义差异
  • JSON 按字段比较。5 和 5.0 视为相同,且忽略键的顺序。

  • 每项变化都会分类:

    分类示例
    breaking字段缺失、类型变化(包括变为 null)、状态码从 2xx 变为错误
    behavior值变化、数组长度变化、状态变化
    additive新增字段
  • 路径会经过规范化:/products/42 会变为 GET /products/{id},items[3].price 会变为 $.items[*].price。每项变化在每个请求中只计一次。

  • 形态相同的 UUID、ULID 和 date-time 会被视为噪声。仅日期(例如 2026-10-14)仍会进行比较。

变更意图

有两种方式可以告诉 Echoproof 哪些变化是预期的。

方式粒度适用场景
--expect "GET /products/*"端点快捷、免费,无需外部服务
--intent "..."端点、字段和值预期变化与 bug 可能出现在同一端点时

--expect 会放行指定端点上的所有变化。如果某个 PR 确实修改了商品目录,却意外破坏了目录中的价格,--expect "GET /catalog" 就无法捕获这个问题。

使用 --intent 时,Claude 会评估每组变化,并给出 intended、regression 或 unclear 结论,同时提供引用示例值的理由。评估依据包括变更意图、代码差异(可选)、受影响请求的百分比、发生变化的请求示例及其变更前后的值,以及同一端点上未发生变化的请求示例作为对照。unclear 结论和未评估的组都会被视为回归(默认拒绝)。

评估变更意图需要 Anthropic API key。每次运行只会进行一次 API 调用,且仅在存在变化时进行。使用默认模型时,每次运行的典型费用约为 USD 0.01 到 0.02。

第三方调用

调用支付网关、消息服务或其他 API 的服务,在重放期间不得真正连接这些服务。使用 echoproof/laravel 时,这些调用会与每个请求一同录制;使用 ECHOPROOF_REPLAY=true 运行的构建会根据录制内容响应,并阻止所有其他调用。两个构建都会收到完全相同的第三方响应,随后 Echoproof 会比较每个构建发送的内容:

  x POST /checkout  3/3 changed (100.0%)  unexpected
      behavior  value changed   outbound[POST pay.example.com/v2/charges] $.amount  (3 requests)
            outbound[POST pay.example.com/v2/charges] $.amount: 18000 -> 1800000

在此示例中,结账响应完全相同;只有发送到网关的金额发生变化。对于从未录制过的调用,报告会将其列为 call added,级别为 breaking。如果某个构建报告的调用无法被 Echoproof 读取,该请求会导致检查失败,而不会在未经验证的情况下通过。

任意语言:出站代理

对于非 Laravel 服务,或通过自有 HTTP 客户端的 SDK 调用第三方的服务,Echoproof 可以充当服务出站调用的代理:

echoproof ca init                                   # CA per proyek di .echoproof/, kunci mode 0600
echoproof ca env --runtime php                      # atau node, python, go: setting untuk service
echoproof record --upstream http://127.0.0.1:8000 --listen 127.0.0.1:8080 -o traffic.jsonl \
  --outbound-listen 127.0.0.1:8899                  # merekam setiap panggilan bersama request yang berjalan
echoproof check -s traffic.jsonl --base http://127.0.0.1:8001 -t http://127.0.0.1:8002 \
  --outbound-proxy 127.0.0.1:8899                   # menjawab setiap panggilan dari rekaman

只在受测服务上设置代理和 CA。Echoproof 自身会忽略环境中的代理变量。回放时,代理无法连接到原始目标。忽略代理设置的客户端(Node 22.21 之前的版本未设置 NODE_USE_ENV_PROXY=1,或自行设置代理的代码)仍会调用真实服务,但会显示为 call removed,绝不会显示为通过;如有可能,请在无法连接外部网络的环境中运行测试构建。第三方返回的机密值(返回 URL 中的 API key、返回 header 中的 token)也会被屏蔽。只有在请求逐个到达时,录制才能准确归因调用,因此请在 staging 环境中录制,或录制脚本生成的流量。

命令参考

命令功能
echoproof init创建 echoproof.toml,并说明每项设置
echoproof record --upstream URL --out FILE运行用于录制流量的反向代理
echoproof replay -s FILE -t URL -o FILE将快照回放到目标并保存响应
echoproof diff BASELINE CANDIDATE比较两个快照
echoproof check -s FILE -t URL一步完成回放和 diff,对比录制内容
echoproof check -s FILE --base URL -t URL回放并 diff,在相同状态下对比 base 和 PR
echoproof accept CANDIDATE --baseline FILE将经过审核的响应设为新基线
echoproof mcp为编码 Agent 运行 MCP 服务

通用选项:

选项适用于说明
--config FILE全部配置文件,默认为 echoproof.toml
--expect PATTERNdiff、check预期会变化的端点。可重复使用
--intent TEXT、--intent-file FILEdiff、check用于由 Claude 评估的变更意图
--code-diff FILEdiff、check作为意图评估依据的代码 diff
--format text|markdown|jsondiff、check终端输出格式,默认为 text
--output FILEdiff、check保存报告。格式根据扩展名确定(.md、.json)
--max-examples Ndiff、check每个变更组的示例数量,默认为 2
--base URLcheck用于 base 与 PR 模式的基准构建
--reset CMDcheck用于在每轮之前恢复状态的 shell 命令
--noise-runs Ncheck对 base 额外回放的次数,用于学习噪声,默认为 1
--allow-writes PATTERNreplay、check允许回放写入请求的端点。可重复使用
--concurrency Nreplay、check并行请求数,默认为 1
--save FILEcheck保存候选快照

端点模式:POST /orders、GET /products/*(* 匹配单个路径段)、/admin/**(** 匹配多个路径段),或用 * 匹配全部。

退出码:0 表示通过或仅有预期变更,1 表示存在回归,2 表示错误(配置、网络、重置失败或意图评估失败)。

配置

所有设置均为可选。运行 echoproof init 可创建包含全部设置及其说明的文件。

[record]
upstream = "http://127.0.0.1:8000"
listen = "127.0.0.1:8080"

[sanitize]
# Diterapkan saat merekam dan saat replay, sehingga nilai yang disamarkan tetap sebanding.
redact_headers = ["authorization", "cookie", "set-cookie", "x-api-key"]
redact_fields = ["password", "token", "pin", "card_number", "phone", "email"]

[replay]
concurrency = 1                                          # naikkan hanya untuk endpoint tanpa state
timeout_ms = 10000
headers = { authorization = "Bearer ${STAGING_TOKEN}" }  # menggantikan header yang disamarkan
safe_methods = ["GET", "HEAD", "OPTIONS"]
allow_writes = ["POST /orders"]                          # default kosong (mode aman)
reset = "./scripts/restore-test-db.sh"
noise_runs = 1

[diff]
ignore = ["updated_at", "$.meta.trace_id", "items[*].etag"]
expect = ["GET /products/*"]
auto_noise = true
compare_headers = ["content-type"]

[judge]
model = "claude-opus-5-5"
effort = "high"                                          # low, medium, high, xhigh, max
fallbacks = true

[mcp]
allowed_hosts = []                                       # host selain localhost yang boleh dipakai agent

ignore 模式:仅名称(updated_at)可匹配任意深度。以 $ 开头或包含点号的模式($.meta.trace_id、items[*].etag)以 body 根节点为基准。

环境变量:

变量说明
ANTHROPIC_API_KEY用于意图评估的 API key(替代项:ANTHROPIC_AUTH_TOKEN)
ANTHROPIC_WORKSPACE_ID如果 API key 未绑定到单个 workspace,则必须设置
ANTHROPIC_BASE_URL替代 API 端点。必须使用 https,localhost 除外
ECHOPROOF_JUDGE_TRACE将评估器的请求和响应保存到文件(权限为 0600),以便调试

阅读报告

终端报告示例:

echoproof: REGRESSION - 83 exchanges, 5 changed, 78 unchanged
  ignored 1 noisy fields that differ between runs of the base build: GET /up body
  intent judged by claude-opus-5-5: The currency field is added as intended. ...

  x GET /catalog                5/5 changed (100.0%)  unexpected
      behavior  value changed   $.result.products[*].price  (5 requests)
          [regression] The diff swaps the third argument of products() ...
          GET /catalog  [00e36fd43ade]
            $.result.products[1].price: 18000 -> 22000
      additive  added           $.result.currency  (5 requests)
          [intended] Adding 'currency' => 'IDR' matches the intent.

  - GET /branches               0/5 changed (0.0%)  unchanged

result: FAIL
标记含义
x端点以非预期方式发生变化(回归)
~端点按预期或意图发生变化
-端点未发生变化,或其请求未被重放
(N requests)发生此类变化的请求数量
[intended]、[regression]、[unclear]意图评估的判定及理由

其他格式:

  • --format markdown 会生成可直接用作 PR 评论的报告。
  • --format json 会生成结构化数据,其中包含 findings:每个问题对应一句可直接返回给编码 Agent 的说明。

审查并批准更改后,将结果设为新的基线:

echoproof replay -s traffic.jsonl -t URL_PR -o candidate.jsonl
echoproof accept candidate.jsonl --baseline traffic.jsonl

CI 集成

使用 Echoproof GitHub Action。该 Action 会安装发布的二进制文件、运行 echoproof check、将报告写入作业摘要,并将判定作为输出提供:

- name: Start base and PR builds
  run: ./scripts/start-builds.sh   # base on :8001, PR on :8002, same test database

- run: git diff origin/${{ github.base_ref }}...HEAD > change.diff

- name: Behavior check
  id: echoproof
  uses: est57/echoproof-action@v1
  with:
    snapshot: traffic/baseline.jsonl
    base: http://127.0.0.1:8001
    target: http://127.0.0.1:8002
    reset: ./scripts/reset-db.sh
    intent: ${{ github.event.pull_request.title }}
    code-diff: change.diff
    anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}

- name: Comment on PR
  if: always()
  run: gh pr comment ${{ github.event.number }} --body-file "${{ steps.echoproof.outputs.report }}"
  env:
    GH_TOKEN: ${{ github.token }}

回归会导致步骤失败并阻止合并。如果只想报告而不阻止,请使用 fail-on-regression: false。在其他 CI 系统中,安装二进制文件并直接运行 echoproof check;退出代码 1 表示存在回归。

编码 Agent 集成(MCP)

编码 Agent 发现并修复了一个与自身工作无关的折扣 Bug,并由 Echoproof 验证

在这段录制中,Claude Code(Sonnet)被要求整理订单服务中的收银员名称。此前,同一文件中已埋入一个折扣 Bug。检查失败后,Agent 沿着回归追查到一个并非由它引入的 Bug,将其修复,并在检查通过后才宣布任务完成。

echoproof mcp 通过 stdio 运行 Model Context Protocol 服务,使编码 Agent 能够在宣布工作完成之前检查自己所做的更改。

在编码 Agent 中安装

先安装二进制文件 echoproof(brew install est57/tap/echoproof 或 cargo install echoproof)。以下每个 Agent 都会在项目文件夹中运行 echoproof mcp,以便访问本地构建和快照文件。

Claude Code,作为插件(推荐)。该插件会安装 MCP 服务和 verify-behavior 技能,告知 Claude 何时以及如何检查更改,因此无需在 CLAUDE.md 中添加额外说明:

/plugin marketplace add est57/echoproof
/plugin install echoproof@echoproof

在 shell 中运行:claude plugin marketplace add est57/echoproof 和 claude plugin install echoproof@echoproof。

Claude Code,仅 MCP 服务:

claude mcp add echoproof -- echoproof mcp

Cursor(项目中的 .cursor/mcp.json 或 ~/.cursor/mcp.json)、Claude Desktop(claude_desktop_config.json)以及读取 mcpServers 映射的其他客户端:

{ "mcpServers": { "echoproof": { "command": "echoproof", "args": ["mcp"] } } }

VS Code,使用 Copilot Agent 模式(.vscode/mcp.json):

{ "servers": { "echoproof": { "type": "stdio", "command": "echoproof", "args": ["mcp"] } } }

Codex CLI:codex mcp add echoproof -- echoproof mcp,或在 ~/.codex/config.toml 中配置:

[mcp_servers.echoproof]
command = "echoproof"
args = ["mcp"]

Gemini CLI:gemini mcp add echoproof echoproof mcp,该命令会在项目中写入 .gemini/settings.json。

Claude Code 集成已通过端到端测试。其他客户端使用相同的标准 MCP stdio,但尚未经过测试;欢迎反馈使用情况。ChatGPT 和 Claude.ai 等基于 Web 的助手无法使用 Echoproof,因为它们运行在服务提供商的服务器上,无法访问您计算机上的构建。

Echoproof 已以以下名称登记在 MCP 官方注册表:

mcp-name: io.github.est57/echoproof

工具
工具主要输入功能
echoproof_checksnapshot、target、base、intent、expect、allow_writes重放并比较差异。返回面向 Agent 的报告、结构化 JSON 和 run_id
echoproof_diffbaseline、candidate、intent、expect比较两个现有快照
echoproof_exchangerun_id、id完整请求、基准响应与候选响应,以及逐字段更改

Agent 工作流:修改代码、运行构建、调用 echoproof_check 并将任务作为 intent 传入;如果结果显示回归,则通过 echoproof_exchange 打开示例、修复代码并重新检查。服务不会提供 accept,因为是否批准新的基准仍由人工决定。

安全与隐私

记录的数据

  • 写入磁盘前,[sanitize] 中列出的标头和字段会被替换为 [REDACTED]。请添加您所在领域中包含个人数据的字段,例如电话号码、电子邮件或身份证号。
  • 快照包含业务数据。请将其保存在公共仓库之外,或确保将其加入 .gitignore。

使用 --intent 时发送给 Anthropic 的数据

意图文本、代码差异(如有提供)、端点和字段名称、受影响的请求数量,以及经过脱敏处理的请求正文和值的前后示例。超过 4.000 个字符的正文示例会被截断。不使用 --intent 时不会发送任何数据。

内置防护措施

  • 未获得每个端点的明确许可时,不会重放写入请求。
  • 会验证快照中的路径,防止请求和嵌入的凭据被定向到其他主机。
  • 响应大小上限为 32 MB。
  • API key 仅通过 https 发送,localhost 除外。
  • 外部文本(意图、差异、流量)无法更改评估器提示词的结构,也无法破坏 Markdown 报告中的表格。

编码 Agent 防护措施(MCP)

  • target 和 base 只能是 localhost,除非主机已在 [mcp] allowed_hosts 中登记。重放会携带 replay.headers 中的标头,因此 Agent 不应将其发送到其他主机。
  • 文件路径(snapshot、save、code_diff_file)必须位于项目文件夹内。拒绝指向文件夹外部的符号链接。
  • 重置命令只从 echoproof.toml 读取,绝不从 Agent 读取。

限制

  • 写入请求需要可重置的测试环境。没有此类环境时,请使用安全模式,该模式仅验证读取请求。
  • 第三方调用通过 echoproof/laravel(Laravel Http 客户端)或出站代理使用录制结果响应(适用于任何遵循代理设置的客户端)。忽略代理设置的客户端和非 HTTP 依赖项(SMTP、队列、通过原始套接字使用的 gRPC)仍会进行真实调用;前者会显示为 call removed。
  • 跨请求 ID:在顺序重放(concurrency = 1)时,重放期间生成的 ID 与录制时不同(录制时订单 ID 为 9812,重放时为 57),此 ID 会传递到同一实体的后续请求中(/orders/9812、order_id)。流量录制时已存在的数据 ID 无法映射;使用 --base 时,此类请求会报告为 not reproduced,而不是判定为未变化。使用 --no-id-mapping 或 [replay] map_ids = false 可关闭映射。
  • 请求顺序通过顺序重放(concurrency = 1)保持。大量流量可能会导致重放缓慢;并行重放仅适用于无状态端点。
  • 应当发生却未发生的更改难以检测,因为 Echoproof 会报告发生变化的请求。
  • 一次学习运行可能无法捕获偶发噪声。必要时可提高 --noise-runs,或添加 ignore 模式。

开发

仓库结构

crates/echoproof-core     format snapshot, sanitasi, diff, laporan, penilaian niat
crates/echoproof-cli      binary `echoproof`: perekam, replay, CLI, server MCP
examples/demo-shop     backend POS untuk demo dan eval
eval/judge             eval penilai niat: kasus uji, runner, dan grader
scripts/demo.sh        demo end-to-end

运行测试

cargo test
cargo clippy --all-targets -- -D warnings

意图判定器评测

eval/judge 包含 26 个带标签的 PR 场景(54 组更改),用于衡量判定器区分有意更改与回归的准确度。在默认配置下,判定器在 78 次运行中实现了 100% 的正确门禁判定,且没有误报。当前场景已不足以区分更优的配置,因此正在添加真实系统中的案例。案例列表见 eval/judge/CASES.md。

eval/judge/prepare.sh                                                         # buat fixture, tanpa biaya API
node eval/judge/run-eval.mjs --flow eval/judge/runs/intent-judge --variant baseline --reps 3
node eval/judge/summarize.mjs eval/judge/runs/intent-judge/baseline

必须先使用 --approve-harness 批准一次测试框架,Runner 才会运行;每当 Runner 代码、案例或判定器发生变化时,都需要重新批准。

许可证

Echoproof 根据您的选择,采用以下两种许可证之一进行授权:

除非另有说明,您提交并纳入本项目的任何贡献均以相同方式采用双重许可,且不附加任何条款。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。