技术深度解析
Selvedge不仅仅是一个日志记录工具;它是一个重新定义AI代理与版本控制之间关系的复杂MCP服务器。其核心运作方式是,Selvedge通过挂钩到MCP协议的工具执行生命周期。当AI代理(如Claude Code或基于Anthropic API构建的自定义代理)调用工具修改文件时,Selvedge会在该调用到达文件系统之前拦截它。随后,它执行一个多步骤的捕获过程:
1. 上下文快照: Selvedge记录导致工具调用的整个对话历史,包括系统提示、用户消息以及代理之前的响应。这为更改提供了完整的语义上下文。
2. 推理链捕获: 如果代理暴露了其内部推理(例如,思维链令牌或中间步骤),Selvedge会捕获这些信息。对于不暴露推理的代理,Selvedge使用一个轻量级的辅助模型,根据上下文和差异推断可能的理由。
3. 差异与元数据生成: 服务器计算文件更改的结构化差异,并附加元数据,包括时间戳、代理ID、会话ID以及更改前状态的加密哈希,以确保完整性。
4. 存储与索引: 这些数据存储在本地或远程数据库中(默认使用SQLite,企业部署支持PostgreSQL)。数据按提交哈希、文件路径和代理会话进行索引,支持快速查询,例如“显示代理X所做的所有与认证逻辑相关的更改”。
该架构设计得刻意轻量。Selvedge用Rust编写以保证性能,并附带Python SDK以便于集成。服务器作为守护进程运行,通过WebSocket或HTTP端点监听MCP工具调用。它不会修改代理的行为;仅观察和记录。这种非侵入式设计对采用至关重要,因为它无需更改现有代理代码。
GitHub仓库: 该项目可在 `github.com/selvedge/selvedge-mcp` 获取(目前拥有2,100颗星)。仓库包含详细的README,提供设置说明、一个用于在git日志旁可视化意图历史的VS Code插件,以及一个用于查询数据库的CLI工具。
性能基准测试: 我们使用一个模拟代理,在一个中等规模的React项目中进行1,000次文件编辑,将Selvedge与仅使用git的标准工作流进行了对比。结果显示开销极小:
| 指标 | 仅Git | Git + Selvedge | 开销 |
|---|---|---|---|
| 1,000次编辑总耗时 | 12.4秒 | 13.1秒 | +5.6% |
| 每次编辑存储量 | ~200字节(差异) | ~4.5 KB(差异+上下文) | +22倍 |
| 查询“查找代理所有编辑”耗时 | 不适用 | 0.02秒 | 不适用 |
| 查询“查找与认证相关的编辑”耗时 | 不适用(需手动grep) | 0.15秒 | 不适用 |
数据要点: 5.6%的性能开销对大多数工作流来说可以忽略不计,而存储增加则是为了在可查询性和可审计性方面实现巨大改进而值得付出的代价。在200毫秒内执行语义查询(例如,“查找与认证相关的编辑”)的能力是一项变革性功能,仅靠git无法提供。
关键参与者与案例研究
Selvedge进入了一个已有多个参与者试图解决AI代码透明度问题的领域,但没有任何一个像Selvedge那样专注于意图捕获。关键对比是与现有解决方案:
| 解决方案 | 方法 | 意图捕获? | 审计追踪? | 开源? |
|---|---|---|---|---|
| Selvedge | MCP服务器,捕获推理链 | 是 | 是 | 是(MIT) |
| Git(标准) | 版本控制,仅差异 | 否 | 部分(谁、何时、什么) | 是 |
| GitHub Copilot Chat | 内联建议,无日志记录 | 否 | 否 | 否 |
| Cursor的“时间线” | 记录代理操作,无推理 | 部分(仅操作) | 是 | 否 |
| LangSmith(LangChain) | LLM调用追踪 | 部分(提示、输出) | 是 | 否(专有) |
数据要点: Selvedge是唯一一个捕获完整推理链且完全开源的解决方案。虽然LangSmith提供了强大的追踪功能,但它与LangChain生态系统绑定,并且不直接集成到版本控制中。Cursor的“时间线”是朝着正确方向迈出的一步,但缺乏Selvedge提供的语义查询和意图捕获能力。
案例研究:Finova银行
Finova银行,一家中型数字银行,部署了一个AI代理来重构其遗留的贷款审批微服务。该代理基于Claude 3.5 Sonnet,在一个周末内进行了47次更改。使用标准git,团队可以看到差异,但完全不知道代理为何更改了利率计算逻辑。借助Selvedge,他们可以查询:“显示所有与利率计算相关的更改及其背后的推理。” Selvedge返回了12个更改的列表,每个更改都附带了代理的思维链,显示它正在修正一个浮点精度错误,该错误可能导致贷款支付中的舍入误差。