news 2026/9/9 19:17:08

Paperclip 的反馈投票数据保存在哪里?如何用 CLI 查看和导出本地投票记录?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Paperclip 的反馈投票数据保存在哪里?如何用 CLI 查看和导出本地投票记录?

Paperclip 的反馈投票数据保存在哪里?如何用 CLI 查看和导出本地投票记录?

【免费下载链接】paperclipThe open-source app everyone uses to manage agents at work项目地址: https://gitcode.com/GitHub_Trending/papercl/paperclip

你在 Paperclip 里对 agent 的回复点了Helpful(赞)或Needs work(踩)之后,可能想知道:这些投票到底存在哪里,能不能在终端里快速看一份汇总,能不能把全部投票连同上下文快照打包导出来备份或交给分析流程。本文基于 docs/feedback-voting.md 和 doc/CLI.md,给出"数据存储位置 → CLI 查看 → CLI 导出"这条可核对的路径。前提是你有一个正在运行的本地 Paperclip 实例,以及可用的paperclipaiCLI(仓库内用pnpm paperclipai脚本,或已安装的npx paperclipai/paperclipai)。

投票数据保存在哪里

每次投票都会在本地 Paperclip 数据库中产生两条记录,全部随你的运行实例保存在本机,除非你显式选择分享,否则不会离开你的机器:

记录内容
Vote(投票)你的投票方向(up/down)、可选的原因文本、分享偏好、consent 版本、时间戳
Trace bundle(跟踪包)完整上下文快照:被投票的评论/文档修订文本、issue 标题、agent 信息、你的投票与原因——足以孤立理解这条反馈

物理位置上,本地 Paperclip 数据位于选定的实例根目录下。PAPERCLIP_HOME(默认~/.paperclip)决定主目录,PAPERCLIP_INSTANCE_ID决定实例,内嵌 PostgreSQL 数据就在实例根目录的db/下(见 doc/CLI.md 的 Local Storage Defaults 一节):

~/.paperclip/ # PAPERCLIP_HOME └── instances/ └── default/ # 实例根目录 ├── db/ # 内嵌 PostgreSQL 数据 └── ...

投票本身没有独立的"投票表文件"可以直接 cat,而是通过 CLI 和 API 从数据库读取。每条投票还有一个导出状态,决定它是否会被上传:

状态含义
local_only仅本地保存,未标记分享
pending已标记分享,等待立即上传尝试
sent已成功传输
failed传输失败(如后端不可达),后台 flush worker 后续重试

无论状态如何,本地数据库始终保留完整的投票与 trace 数据。标记为 "keep local" 的投票永远不会进入导出队列。

用 CLI 查看本地投票记录

快速报告

最直接的方式是终端报告命令:

# 仓库内(开发脚本形式) pnpm paperclipai feedback report # 已安装 CLI paperclipai feedback report

报告是带颜色的汇总:票数统计、每条 trace 的详情(含原因)以及导出状态。如果没有任何投票,报告会显示No feedback traces found.

常用变体:

# 指向另一个 server 或公司 npx paperclipai feedback report --api-base http://127.0.0.1:3000 --company-id <company-id> # 在报告中包含原始 payload 转储 pnpm paperclipai feedback report --payloads

其中<company-id>替换为你公司的实际 ID。若不传--company-id,CLI 会依次使用PAPERCLIP_COMPANY_ID环境变量或 CLI context 默认值(可用npx paperclipai context set --api-base ... --company-id <id>配置,见 docs/cli/overview.md)。

通过 API 端点核对单条数据

CLI 报告之外,可以直接用 API 查看,便于脚本化核对。以下端点都需要 board-user 权限(本地开发环境自动满足)。注意 docs/feedback-voting.md 的示例使用127.0.0.1:3102端口,而文档其他位置给出的默认服务器端口是3100(见 docs/deploy/environment-variables.md),请替换为你实例实际的 api-base:

# 列出某个 issue 的全部投票 curl http://127.0.0.1:3102/api/issues/<issueId>/feedback-votes # 列出某个 issue 的 trace bundles(含完整 payload) curl 'http://127.0.0.1:3102/api/issues/<issueId>/feedback-traces?includePayload=true' # 列出全公司的 trace curl 'http://127.0.0.1:3102/api/companies/<companyId>/feedback-traces?includePayload=true' # 获取单条 trace 记录 curl http://127.0.0.1:3102/api/feedback-traces/<traceId> # 获取一条 trace 的完整导出 bundle curl http://127.0.0.1:3102/api/feedback-traces/<traceId>/bundle

trace 端点支持的查询参数:

参数取值说明
voteupdown按投票方向过滤
statuslocal_onlypendingsentfailed按导出状态过滤
targetTypeissue_commentissue_document_revision按被投票对象类型过滤
sharedOnlytrue只看用户选择分享的投票
includePayloadtrue包含完整上下文快照
from/toISO 日期日期范围过滤

另外,doc/CLI.md 列出了按 ID 直接取单条记录的形式,适合自动化导出流程:

npx paperclipai feedback trace <trace-id> npx paperclipai feedback bundle <trace-id>

按 issue 查看投票也有专门命令:

npx paperclipai issue feedback:votes <issue-id>

用 CLI 导出本地投票记录

导出到文件 + zip

pnpm paperclipai feedback export

默认导出为全量,会创建一个带时间戳的目录和一个同名 zip。文档给出的目录结构示例如下(目录名为文档示例,实际按运行时间生成):

feedback-export-20260331T120000Z/ index.json # 清单,含汇总统计 votes/ PAP-123-a1b2c3d4.json # 投票元数据(每条投票一个文件) traces/ PAP-123-e5f6g7h8.json # Paperclip feedback envelope(每条 trace 一个文件) full-traces/ PAP-123-e5f6g7h8/ bundle.json # 该 trace 的完整导出清单 ...raw adapter files # 可用时的 codex / claude / opencode 会话原始文件 feedback-export-20260331T120000Z.zip

traces/保留 Paperclip envelope,full-traces/包含更丰富的逐条 bundle 以及可恢复的 adapter 原生文件。指定自定义服务器与输出目录:

npx paperclipai feedback export --api-base http://127.0.0.1:3000 --company-id <company-id> --out ./my-export

两个执行层面的注意点:

  • 输出目录必须不存在或为空,已存在非空目录会直接报错,不会覆盖旧导出;
  • 导出只读取本地数据库并写入--out指定位置,不修改数据库本身。

验证导出结果

导出完成后,命令会打印一段Paperclip Feedback Export摘要,列出公司 ID、输出目录、zip 路径,以及 thumbs up / thumbs down / with reason / unique issues 计数和文件数量。进一步的核对方式:

  1. 打开导出目录中的index.json,它是清单文件,包含exportedAtserverUrlcompanyId、汇总统计以及files下 votes/traces/fullTraces/zip 的完整文件列表;
  2. 打开traces/中任意文件查看上下文快照。文档示例(值为示例,不是固定预期):
{ "id": "trace-uuid", "vote": "down", "issueIdentifier": "PAP-123", "issueTitle": "Fix login timeout", "targetType": "issue_comment", "targetSummary": { "label": "Comment", "excerpt": "The first 80 chars of the comment that was voted on..." }, "payloadSnapshot": { "vote": { "value": "down", "reason": "Did not address the root cause" }, "target": { "body": "Full text of the agent comment..." }, "issue": { "identifier": "PAP-123", "title": "Fix login timeout" } } }
  1. 打开full-traces/<issue>-<trace>/bundle.json,可以看到扩展的导出元数据(capture notes、adapter 类型、完整性元数据、写入的原始文件清单)。bundle.json.files[]中每个条目把捕获的文件内容放在contents字段里,而不是只有路径;文本产物以 UTF-8 存储,二进制产物用 base64 加encoding标记。内置本地 adapter 会直接导出原生会话文件,例如codex_localadapter/codex/session.jsonlclaude_localadapter/claude/session.jsonl(含 sidecar 与debug.txt,若存在)、opencode_localadapter/opencode/session.json等。

限制与边界

  • 分享偏好按公司保存,首次投票时由 consent 对话框选择 "Keep local" 或 "Share this vote",之后可随时在反馈设置中更改;
  • 标记分享的 trace 会尝试立即上传到 Telemetry Backend(未配置后端 URL 时回退到https://telemetry.paperclip.ing),失败会进入failed状态等待重试。上传的是投票时刻的快照:如果底层 adapter 会话文件之后继续增长,本地重新生成的 bundle 可能比已上传快照更大;
  • 已分享对象在远端对象存储中的 key 为确定性模式feedback-traces/<companyId>/YYYY/MM/DD/<exportId-or-traceId>.json,便于核对上传结果;
  • 端口提示再次说明:本文 curl 示例沿用了 docs/feedback-voting.md 原文的3102,若你的实例按默认端口运行,请把 host:port 替换为实际 api-base。

完成一次feedback report确认计数与状态、再跑一次feedback export核对index.json与实际文件,就是这条数据从产生、查看到导出的完整闭环验证。

【免费下载链接】paperclipThe open-source app everyone uses to manage agents at work项目地址: https://gitcode.com/GitHub_Trending/papercl/paperclip

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 19:16:52

构建本地大模型CLI工具:从‘magnitude’误传到Rust实战

1. “magnitude”不是命令行工具&#xff0c;而是被误传的模型服务基础设施代号最近在多个技术社区和开发者群聊里&#xff0c;频繁看到有人搜索“magnitude CLI”“magnitude inference server”“magnitude local models”&#xff0c;甚至出现“unable to locate the magnit…

作者头像 李华
网站建设 2026/9/9 19:16:48

数据归一化与标准化:四种特征缩放方法原理与实战对比

开头最近带一个做算法落地项目的朋友调模型&#xff0c;他用的是 KNN 分类器&#xff0c;特征里有用户年龄、消费金额、注册天数、点击次数这几个字段。第一次跑出来准确率 62%&#xff0c;他百思不得其解。我让他把数据分布打出来一看&#xff0c;消费金额从 0 到 89000 都有&…

作者头像 李华
网站建设 2026/9/9 19:16:31

嵌入式驱动开发:ZLG源码中的封装思路与移植实战

简介&#xff1a;ZLG源码是一套面向 ASP 初学者及 Web 开发者的网站后台源码包&#xff0c;聚焦用户注册、登录验证、密码找回等常见功能模块&#xff0c;适合用来理解动态网页开发中的认证与会话管理流程。压缩包内为多个 ASP 页面文件&#xff0c;整体大小约 18.7MB&#xff…

作者头像 李华
网站建设 2026/9/9 19:16:30

Delphi网络编程实战:Indy 10.2.3核心组件与坑点解析

简介&#xff1a;Indy10.2.3是一套面向Delphi开发环境的网络通信组件库&#xff0c;支持TCP/IP、HTTP、FTP、SMTP、POP3等多种协议&#xff0c;并兼容Delphi2007与Delphi2010&#xff0c;适合需要快速构建网络应用或深入组件定制的开发者。压缩包共2000个文件&#xff0c;体积仅…

作者头像 李华
网站建设 2026/9/9 19:16:26

PyAutoGUI 0.9.26离线安装实战:依赖配置与pyscreeze报错排查

简介&#xff1a;PyAutoGUI 0.9.26 是一款面向 Python 开发者的跨平台 GUI 自动化控制库安装包&#xff0c;适用于需要模拟鼠标键盘操作、完成界面自动化测试、数据采集或重复性桌面任务的初中级开发者。该库支持 Windows、macOS 与 Linux&#xff0c;通过 move_to、click、wri…

作者头像 李华