人工智能AI Agent多智能体Agent 工作流深度研究AI 评测【免费下载链接】PRAXISTAutonomous research system for measurable, computer-executable research.项目地址https://gitcode.com/gh_mirrors/pr/PRAXIST点击查看免费下载本文以 PRAXIST 开源仓库中的 隐私声明Praxist Privacy Notice, Product Usage Data 为主体结合 产品使用数据收集模块技术文档、用户数据收集告知文本 以及praxist/product_usage/与services/product_usage/下的客户端 SDK、服务端 Collector 与部署配置源码系统讲解 PRAXIST 可选产品使用数据收集的完整机制。读完本文你将掌握该遥测系统收集什么、不收集什么、如何通过封闭 SchemaClosed Schema在代码层面强制保证技术性不可能收集任务内容同意/撤销同意的全部 CLI 操作以及从本地假名化到服务端保留删除的完整数据链路与安全设计。PRAXIST 是一个面向可度量、可计算机执行研究的自主研究系统。为了让产品可靠性分析建立在真实运行数据之上同时守住任务内容绝不上传的底线PRAXIST 内置了一套完全可选、可随时撤销、仅收集假名化生命周期数据的产品使用遥测模块。本文基于仓库源码逐层拆解这套机制的实现与边界。1. 声明概览与四大核心原则本声明Notice仅适用于 PRAXIST可选的产品使用数据收集product-usage data collection数据控制者data controller为 Sapient Intelligence Pte Ltd即许可证协议中的 Licensor同一法律实体。声明当前版本为Notice version 3最后更新于 2026 年 8 月 27 日。声明确立的四大核心原则自愿Voluntary收集以你的明确同意为前提绝不是强制性的可撤销Revocable你可以在任何时刻撤回同意撤回后收集立即停止不影响使用No impact on use拒绝或撤回同意不会影响 PRAXIST 的安装或任何研究功能假名化且最小化Pseudonymized and minimized只收集封闭 Schema 内的假名化生命周期数据——绝不收集任何任务内容、输入数据或研究结果。配套文档还包括Praxist User Data Collection Notice应用内告知文本Notice version 3、Product Usage Technical Documentation收集模块技术文档以及许可证协议 LICENSE.md。2. 自愿同意机制收集的三个前置条件PRAXIST 只有在同时满足以下三个条件时才开始收集产品使用数据安装的构建版本包含经过批准的收集传输通道approved collection transport该构建版本启用了产品使用数据收集你在本声明可供审阅之后单独且明确地选择了Share product usage或在安装过程中对同意提示回复了Yes/Agree。需要特别留意的几个细节独立于其他协议接受 Praxist User Agreement 或 Fair Source License Agreement不构成对数据收集的同意两者相互独立unset 状态即零收集当未做出任何选择状态为unset时不收集、不上传任何内容非交互环境在没有终端输入的非交互环境中不展示同意提示收集保持关闭Agent 辅助安装同样只识别Yes/Agree同意与No/Disagree拒绝任何其他措辞一律视为未同意Notice 版本化当声明内容变更时版本号递增当前为 Notice version 3你此前记录的同意不会延续到新版本升级后首次使用时会被再次征询。2.1 源码实现fail-closed 的同意状态机上述规则在 consent.py 中实现为一个**默认拒绝fail-closed**的状态机状态只有三种unset/granted/denied。核心行为包括ConsentStore.read()在文件缺失、JSON 损坏或consent_notice_version与当前CONSENT_NOTICE_VERSION不匹配时一律返回None即状态退回unsetparse_agent_reply()只对剥离首尾空白后的Yes、Agree、No、Disagree四个精确词返回决策其余输入包括小写yes、I agree、中文同意等一律返回None不进行任何自然语言推断同意记录以原子方式写入tempfile.mkstemp创建临时文件 →os.chmod(0o600)→flushfsync→os.replace原子替换 → 目录fsync全程仅当前用户可读写0600/0700 权限。2.2 同意记录与命令操作命令查看完整声明文本praxist product-usage notice查看当前同意状态praxist product-usage status --json记录同意praxist product-usage consent或在首次使用时选择 Share product usage随时撤回同意praxist product-usage withdraw其中consent子命令支持--agent-reply参数用于 Agent 辅助场景例如praxist product-usage consent --agent-reply Yes。撤回会立即停止一切后续捕获并删除本地所有未发送事件。这些命令由 praxist/cli/product_usage.py 注册实现内部通过praxist.product_usage.client.UsageSdk完成状态读写。3. 封闭 Schema V2收集内容的精确边界产品使用协议使用封闭 SchemaSchema V2只有下表列出的字段被允许任何额外字段都会被客户端与服务端双双拒绝。这一约束在 protocol.py 中由StrictModelmodel_config ConfigDict(extraforbid, strictTrue, frozenTrue)在 Pydantic 层强制实现并同步导出为 JSON Schemausage-event.schema.json、usage-batch.schema.jsonSchema 扩展必须显式修改protocol.py并提升版本号。3.1 公共生命周期字段字段说明schema_version产品使用事件结构版本当前为 2praxist_versionPRAXIST 公开版本号consent_notice_version你同意所基于的 Notice 版本environment_id环境标识符本地随机生成的 UUID在同一 PRAXIST 环境内的各次 Research Run 间保持稳定见第 5 节telemetry_run_id单次 Research Run 的独立随机标识符event_id单个事件的随机标识符用于关联与去重event_sequence同一 Research Run 内的序号event_type生命周期事件类型见 3.2occurred_at客户端事件时间UTC精确到秒error_summaries/error_summaries_truncated有界的结构化错误分类计数以及有界列表是否被截断见 3.33.2 四个生命周期事件事件记录内容run_startedRun 启动边界处的 generation 序号、计划 Peer 数以及 planning、running、completed、cancelled、failed、unknown 六种状态下 Peer 的聚合计数generation_finished在持久化 generation 边界处记录相同字段各状态计数之和必须等于计划 Peer 数completed仅表示 Peer 生命周期正常返回不断言任何科学结果有效run_finished活跃 Run 的完整分钟数上限 43,200 分钟即 30 天以及是否达到该上限run_reconciled相同的时长字段当此前未完成的 Run 被恢复、之后完成了可信的终止处理后记录在 lifecycle.py 中RunTelemetryContext负责为单次 Run 生成事件run_started每个 Run 最多发出一次含恢复场景generation_finished对每个 generation 序号只发出一次event_sequence单调递增。这些事件由 infrastructure/product_usage.py 中的ProductUsageObserver从 Research Run 生命周期投影而来并通过独立 worker 线程与本地 outbox 隔离任何遥测失败都不会影响研究执行。值得注意的校验细节RunStartedEvent的错误摘要只允许setup/launch阶段GenerationFinishedEvent只允许launch/execution/finalizationRunFinishedEvent只允许finalizationRunReconciledEvent只允许reconciliation——每个事件的错误窗口都在模型校验器中写死防止字段错位。3.3 结构化错误摘要每个生命周期事件最多携带16 组错误摘要每组只允许以下封闭取值scoperun/generation/peerstagesetup/launch/execution/finalization/reconciliationerror_typeconfiguration/resource/orchestration/runtime/external_dependency/storage/unknownerror_codePRX-CAPACITY/PRX-PEER-LAUNCH/PRX-PEER-RUNTIME/PRX-RUNTIME/PRX-RUN-FAILED/PRX-UNKNOWNreason_codeauth_error/quota_exhausted/rate_limited/timeout/provider_unavailable/runtime_error/tool_unavailable/invalid_request/budget_denied/budget_expired/capacity_unavailable/process_start_failed/state_unreadable/unexpected_termination/unknowncount匹配错误的数量上限 65,535以及是否达到上限count_capped这一结构在技术上不具备承载原始错误消息、日志、堆栈、Provider 响应或任意文本的能力——封闭取值列表定义于 protocol.py 的ErrorScope、ErrorStage、ErrorType、ReasonCode、PraxistErrorCode等 StrEnum/Literal 中。测试 test_privacy.py 专门验证了PRX-/Users/alice/project、PRX-raw error message、THIRD-PARTY-429这类试图把自由文本塞进 error_code的负载会被 Pydantic 直接拒绝。3.4 时间字段occurred_at由本地 PRAXIST 客户端在生命周期里程碑生成使用本地系统时钟转换为 UTC因此可能反映时钟不准确received_at由服务端 Collector 在验证之后添加客户端无法提供或篡改。它表示到达时间仅用于存储管理与保留计算。3.5 边界常量一览协议在 protocol.py 顶部集中定义常量值含义SCHEMA_VERSION2事件结构版本CONSENT_NOTICE_VERSION3当前 Notice 版本同意记录绑定到它MAX_BATCH_EVENTS50每批最多事件数MAX_REQUEST_BYTES32 KB请求体最大字节数MAX_ERROR_SUMMARIES16每事件最多错误摘要组数MAX_ERROR_COUNT65,535每组错误计数上限MAX_DURATION_MINUTES43,20030 天活跃 Run 时长记录上限4. 绝不收集的内容负向边界产品使用事件不包含研究任务内容、提示词、研究结果、文件、文件名、项目路径或命令环境变量、API 密钥、已保存的登录凭据、日志、堆栈跟踪、原始错误消息或任意文本模型名称、服务提供商名称、Provider 响应或账户信息姓名、电子邮件地址、操作系统详情、硬件信息、Python 版本、客户端时区、Cookie 或任意请求头单个 Peer 的身份标识或单个 Peer 的输出IP 地址事件体从不包含 IP网络连接信息的临时处理见第 6 节。这份负向清单同样在 test_privacy.py 中被参数化测试逐一验证向事件模型注入ip_address、filename、working_directory、prompt、task_content、stack_trace、raw_error、model、credential、user_agent、cookie、peer_id、research_direction等任何字段都会因extraforbid抛出ValidationError。5. 假名化方法论PRAXIST 采用**假名化pseudonymization**而非完全匿名化生成environment_id、telemetry_run_id、event_id全部通过标准 UUIDv4uuid4()随机生成无派生这些标识符不派生自用户名、账户、设备序列号、MAC 地址、IP 地址、主机名、项目路径或任务内容也不是简单的递增序列持久化environment_id在环境首次需要时生成存储于本地environment.json仅当前用户可读写权限 0600在同一环境内的多次 Run 间保持稳定telemetry_run_id与event_id分别按 Run、按事件生成。实现见 identity.py本地路径哈希本地 Run 状态文件以 Run 路径的 SHA-256 哈希命名这些文件只留在你的机器上绝不上传。具体算法见 paths.py 的run_state_path()先对 Run 目录路径做expanduserresolve归一化再 UTF-8 编码并 SHA-256 哈希64 位小写十六进制摘要作为文件名。SHA-256 是单向的从文件名无法还原原始路径诚实定性由于environment_id跨 Run 稳定同一环境的各事件在理论上可以被相互关联——这是假名化数据而非完全匿名数据。但它无法直接识别你本人或你的设备且项目承诺绝不以任何方式用它识别个人与第 7 节承诺一致。在 infrastructure/product_usage.py 中ProductUsageObserver把telemetry_run_id、next_sequence、已发出事件等状态持久化到runs/hash.json状态文件用于进程中断后的恢复与run_reconciled事件的生成这些状态文件同样有严格的容量与保留上限最多 512 个文件、总量 4 MiB、单文件 512 KiB、180 天保留。6. 网络与传输生产端点https://telemetry.theaiscientist.com/v1/eventsHTTPS 加密、校验服务器证书、不跟随重定向开发端点内部.dev构建使用固定的开发 Collectorhttp://45.78.201.249/v1/events纯 HTTP仅处理内部开发/测试数据从不处理用户数据也不随发布构建分发请求只携带固定的协议级 User-AgentPraxist-Product-Usage/2每个请求上限 32 KB、每批最多 50 个事件网络超时 2 秒传输失败绝不阻塞或影响 Research Run发送失败的事件先存本地网络恢复后自动补发见第 8 节服务端对连接信息的处理产品使用事件体不含 IP 地址、Cookie 或任意请求头。网络服务必然临时处理连接信息以投递请求、保护服务并实施限流。Collector 部署关闭访问日志并在应用处理前剥离转发的 IP、Cookie 与客户端 User-Agent 头这些信息都不会作为产品使用事件数据持久化。6.1 端点选择的源码实现transport.py 中的default_batch_sender()根据 PRAXist 版本字符串是否包含规范化的.dev段选择发送器ProductionHttpsBatchSender在构造时用urlparse强制校验端点必须是 HTTPS URL且不允许带用户名否则直接拒绝构造_RejectRedirects继承HTTPRedirectHandler并让redirect_request返回None从根上禁用重定向跟随测试 test_transport.py 验证了0.3.0使用生产端点、0.2.1.dev0使用开发端点以及0.2.0-dev1、dev0这类看似 dev 实则非法的版本字符串会被canonical_product_version拒绝——任何畸形版本都不会意外启用纯 HTTP 通道。6.2 请求契约POSTContent-Type: application/json请求体上限 32 KB每批最多 50 个事件成功响应为202body 为{accepted: n, duplicates: n}错误响应400格式错误/不支持的 Schema 版本、413过大、415非 JSON、503摄入暂停或临时不可用。这些状态码由服务端 app.py 的/v1/events路由实现_bounded_body流式读取并强约束 32 KBCollectorCore.ingest()见 collector.py在解析前检查全局摄入开关随后按event_id做幂等插入insert_if_absent重复事件计为duplicates。7. 使用目的与承诺收集到的产品使用数据仅用于分析产品可靠性改进 PRAXIST 的功能、性能与用户体验匿名聚合层面的统计且绝不会以能识别特定用户的方式呈现。项目承诺不会向任何第三方出售产品使用数据将其用于广告或营销将其与任何其他关于你或你的用户的数据集关联以识别个人。8. 存储、保留与删除服务端存储托管式 PostgreSQL通过私有端点访问不暴露公网数据库保留期已投递的原始事件自服务端接收起最多保留 180 天之后由定时保留任务删除。保留任务至少每天运行一次设计上事件在第 179 天即进入删除窗口留出一天调度余量确保 180 天上限绝不被突破。该策略在 retention.py 中实现retention_cutoffs()用MAX_RETENTION_DAYS(180) - RETENTION_SAFETY_MARGIN_DAYS(1)计算截止时间RetentionWorker.run_once()通过后端端口删除截止时间之前的原始事件本地未发送事件存储在本地 SQLite 出站队列outbox.sqlite3仅当前用户可读写成功投递后清除撤回同意时立即删除诚实说明服务端不提供按环境标识符删除已投递事件的接口。撤回会停止未来收集并删除本地未发送事件已投递事件在保留期届满时自动删除。本地 outbox 的边界在 outbox.py 中同样有硬性约束最多 1,000 个事件、总字节数上限 1 MiB、单事件 7 天过期SQLite 启用secure_delete、WAL 日志与synchronousFULL且 outbox、WAL、SHM 文件全部 0600 权限。撤回时close_and_delete()会先清空行、wal_checkpoint(TRUNCATE)再删除 DB/WAL/SHM 文件。8.1 服务端部署形态services/product_usage/ 提供完整部署Docker Composecompose.yml中 Collector 容器只绑定127.0.0.1:8110read_only: true、cap_drop: ALL、no-new-privileges并带健康检查独立的 retention 服务以--interval-seconds 86400运行保留任务。Nginx 反代配置collector.conf.template设置了access_log off、client_max_body_size 32k并对/v1/events剥离X-Forwarded-For、X-Real-IP、Cookie、User-Agent头限流区定义于 collector-rate.conf按客户端 1 r/sburst 10、全局 20 r/sburst 100超限返回 429。9. 数据安全生产流量端到端 HTTPS 加密并校验证书拒绝重定向封闭 Schema客户端与服务端都拒绝 Schema 之外的任何字段服务端强制执行全局与每客户端限流、存储容量上限COLLECTOR_MAX_TABLE_BYTES默认 2 GB见 postgres.py 与 app.py主摄入开关COLLECTOR_INGESTION_ENABLED默认关闭需显式开启可在紧急情况下整体关闭收集入口本地同意记录、环境标识符与出站队列仅当前用户可读写0600/0700 权限事件在保留期届满时自动删除无需你采取任何操作安全联系邮箱praxistsapient.inc。此外client.py 的UsageSdk是最佳努力、失败隔离的门面capture()在任何异常路径都返回False而非抛出UploadCoordinator.flush_once()同样把一切异常归零处理遥测的任何失败都不可能进入 Research Run 执行路径。10. 数据接收方与跨境安排数据接收方Sapient Intelligence Pte Ltd与许可证协议下的 Licensor 为同一法律实体服务器位置马来西亚柔佛州Johor, Malaysia跨境转移如果你位于中国大陆并选择加入你的同意即构成将上述数据——其中不含姓名、联系方式、账户、IP 地址或内容数据见第 3、4 节的封闭清单——转移至马来西亚 Collector 的授权且仅限第 3 节封闭 Schema 中列出的字段。10.1 面向欧盟/EEA 用户的补充声明GDPRPRAXIST 全球分发欧盟/EEA 用户同样可以选择加入产品使用收集。根据 GDPR假名化数据仍属个人数据项目对此适用如下规则法律基础仅基于你的明确同意GDPR Art. 6(1)(a)——数据收集默认关闭只有在你主动选择 Share product usage 时才开启撤回可随时通过praxist product-usage withdraw撤回撤回不影响撤回前基于同意进行的处理的合法性Art. 9(3)跨境转移数据转移至并在马来西亚柔佛州的 Collector 处理依赖你加入时给予的明确同意GDPR Art. 49(1)(a) 的减损条款且仅限于本声明第 3 节封闭 Schema 所列字段你的权利访问、更正、限制处理、数据可携、反对与删除。访问、更正或删除请求请发送至 praxistsapient.inc关于删除的诚实说明如第 8 节所述服务端目前无法按环境标识符搜索或删除已投递事件已投递事件在接收后最多 180 天自动删除。你可以在删除请求中附上本地environment.json中的environment_id以验证环境归属项目将在验证后人工处理你的请求不实施的行为不出售个人数据、不用于广告或营销、不进行具有法律或类似重大影响的自动化决策监管机构你有权向所在成员国数据保护监管机构投诉。11. 声明变更机制随着产品演进项目可能修订本声明及应用内告知。当声明内容变更时Notice 版本号递增你记录的同意仅对作出同意时对应的版本有效升级后首次使用时会重新征询同意。如果本声明与应用内告知出现分歧以你同意时呈现的版本为准。12. 如何自查与审计仓库是只读的但你可以自行验证这套机制的每一个环节查看确切字段直接阅读 schemas/v2/usage-event.schema.json 与 protocol.py确认上报字段的封闭清单检查当前同意状态运行praxist product-usage status --json检查本地文件各平台路径如下全部仅当前用户可读写——平台同意记录出站队列 / 环境标识符Linux~/.config/praxist/product-usage/consent.json~/.local/share/praxist/product-usage/outbox.sqlite3、environment.jsonmacOS~/Library/Application Support/Praxist/product-usage/consent.json同目录下的outbox.sqlite3、environment.jsonWindows%LOCALAPPDATA%\Praxist\product-usage\consent.json同目录下的outbox.sqlite3、environment.json抓包验证端点地址、固定 User-Agent 与请求体内容均可通过标准网络抓包工具验证端点选择逻辑见 transport.py完整声明文本运行praxist product-usage notice或阅读仓库中的 docs/legal/product-usage-data-notice.md。13. 联系与总结隐私联系邮箱praxistsapient.inc公司Sapient Intelligence Pte Ltd新加坡注册商业许可与许可协议事宜见 Fair Source License AgreementVersion 1.0文末联系方式praxistsapient.inc。总结而言PRAXIST 的产品使用遥测是一条默认关闭 → 显式同意 → 封闭 Schema → 假名化标识 → 本地缓冲 → HTTPS 投递 → 180 天自动保留删除的完整链路。它的核心设计哲学不是信任而是技术性约束无论客户端还是服务端超出 Schema 的字段在代码层面就被拒绝无论何种网络故障遥测都无法影响研究运行无论何种情况下任务内容、提示词与研究结果都因封闭取值列表的存在而结构上无法被采集。这套设计既服务了产品可靠性分析也为企业 IT 与安全审计人员提供了可验证、可审计的隐私边界。赞分享人工智能AI Agent多智能体Agent 工作流深度研究AI 评测【免费下载链接】PRAXISTAutonomous research system for measurable, computer-executable research.项目地址https://gitcode.com/gh_mirrors/pr/PRAXIST点击查看免费下载相关推荐Agent Orchestrator 产品遥测Telemetry机制全解数据边界、隐私设计与关闭指南Agent Orchestrator 产品遥测Telemetry机制全解数据边界、隐私设计与关闭指南 产品遥测是 Agent OrchestratorAoptimizerDuck 隐私架构解析本地优先、零遥测的数据边界设计optimizerDuck 隐私架构解析本地优先、零遥测的数据边界设计 本篇技术指南围绕 optimizerDuck 官方隐私政策 PRIVACY.md h桌面应用HelixDB 匿名遥测Telemetry架构解析typed JSON 事件、隐私边界与 CLI 持久化设计HelixDB 匿名遥测Telemetry架构解析typed JSON 事件、隐私边界与 CLI 持久化设计 本篇指南围绕 HelixDB 开源仓库中 c数据库图数据库向量数据库AI 应用RAG创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考