开源工具llm-tap:采集LLM交互并导出SFT训练数据
速览
llm-tap是一个本地透明代理和LLM交互数据采集工具,支持自动识别多种协议,提供Web管理界面筛选调用记录,并支持导出为canonical、ShareGPT等训练数据格式,帮助用户沉淀真实使用轨迹用于模型微调。
AI 深度解读
背景
随着大语言模型(LLM)在编程、对话、工具调用等场景的广泛应用,开发者和企业越来越需要高质量、真实的交互数据来训练和微调自己的模型(SFT,Supervised Fine-Tuning)。然而,现有的数据采集工具往往面临两个困境:一是难以在不侵入客户端的情况下记录完整的请求-响应链路;二是采集到的数据混杂、难以筛选和导出为标准的训练格式。llm-tap 正是为解决这一痛点而生——它在本地充当透明代理,将 Claude Code、Codex、CherryStudio 等客户端的 LLM 请求原样转发给真实服务商,同时记录下完整交互,并提供可筛选、可导出的管理界面,从而将真实使用轨迹转化为可用的训练数据。
核心内容
llm-tap 是一个本地透明代理兼 LLM 交互数据采集工具。其核心工作流程如下:
-
透明代理:用户将客户端(如 Claude Code、Codex、CherryStudio 或其他兼容 OpenAI / Anthropic 协议的客户端)的请求指向 llm-tap 的本地地址。llm-tap 不修改请求内容,而是直接转发给真实服务商(如 OpenAI、Anthropic 等),同时将请求、响应和元数据原样保存到本地数据库。
-
零上游配置:llm-tap 从请求 URL 路径中提取 Host(目标服务商地址),API Key 仍由客户端透传,代理自身不保存任何上游凭证,确保安全性。
-
协议自动识别:llm-tap 能自动识别并处理 Anthropic 协议、OpenAI Chat Completions 协议、OpenAI Responses 协议等,并整合流式响应(streaming)为完整记录。
-
Web 管理界面:提供直观的 Web 页面,支持按 Host、模型(model)、协议(protocol)、状态码(status)和时间范围筛选调用记录。每条记录可查看详情,包括请求体、响应体、工具调用链、质量信息(如 token 消耗、延迟等)。
-
灵活导出:用户可以选择单条记录、当前页记录或筛选后的全部记录进行导出,不会误导出全量数据库。支持多种训练数据格式:
- canonical(标准格式)
- ShareGPT(常用于开源对话数据集)
- tool_sft(工具调用微调格式)
- OpenAI(兼容 OpenAI 的 fine-tuning 格式)
- OpenAI windowed(带上下文窗口截断的 OpenAI 格式)
-
上下文压缩与工具链保留:导出时可限制每条记录的上下文长度,保留完整的工具调用链,对过长内容按预算进行压缩,避免超出模型上下文窗口。
-
安全脱敏:对 Authorization、x-api-key 等敏感请求头自动脱敏,数据默认保存在本机用户目录(如
~/.llm-tap),不向外发送。
关键要点
- 完全本地运行,数据不出用户本机,默认存储于用户目录下。
- 不存储上游 API Key,严格遵循安全最小权限原则。
- 协议自动识别:支持 Anthropic、OpenAI Chat Completions、OpenAI Responses,并兼容流式响应。
- 筛选维度丰富:Host、模型、协议、状态码、时间范围均可作为筛选条件。
- 导出精度可控:支持单条、当前页、筛选结果三种导出粒度,避免全量导出带来的混乱。
- 导出格式多样:5 种训练格式(canonical、ShareGPT、tool_sft、OpenAI、OpenAI windowed)覆盖主流 SFT 场景。
- 上下文长度可限制,工具调用链完整保留,可压缩过长内容。
- 敏感请求头脱敏,保障上游凭证安全。
- 开源,项目地址:GitHub - luckfu/llm-tap
意义与影响
llm-tap 的出现填补了 LLM 交互数据采集与 SFT 训练数据准备之间的工具链空白。此前,开发者要获取真实、完整的 LLM 交互数据,往往需要自己编写代理脚本或依赖商业化服务,而 llm-tap 以开源、透明、零配置的方式降低了门槛。它让团队可以轻松积累自己业务场景下的真实对话和工具调用数据,用于模型微调、评估或对齐。同时,多种导出格式(尤其是 tool_sft 和 OpenAI 格式)使其能直接对接主流微调框架,简化了数据处理流程。对于追求数据隐私和自主可控的组织而言,本地部署、不保存凭证的设计尤为重要。整体上,llm-tap 为 LLM 应用开发社区提供了一款实用、可靠的数据采集与处理基础设施。
