Asqav SDK(Python + TypeScript)
为 AI Agent 的每个动作生成可验证的签名合规回执:后量子签名、哈希链审计、无需信任厂商即可独立核验。
最小权限方面:SDK为纯客户端,零原生依赖,私钥明确声明仅存服务端、永不下发SDK,测试夹具将凭据路径隔离到临时目录,表现良好但仅限文件证据,未给满分。用户确认:作为签收/审计SDK,几乎不涉及破坏性操作,但无人审签流程、无操作前确认机制的文档,仅记1分。数据流透明度:签收内容(receipt payload)结构在测试中可见,支持离线验证与本地重算chain_hash,透明度尚可;但每个动作的证据都会发往第三方云服务,README未逐项说明哪些上下文字段会被上传。敏感数据处理:密钥服务端存储、测试隔离凭据文件,处理合理;但context载荷可含任意业务数据且上传至云端,脱敏指引未见。依赖安全:SECURITY.md逐条列出GHSA编号、说明extras门控、默认安装路径零漏洞,并诚实说明chromadb关键漏洞无上游补丁,是同类项目中罕见的透明度,给满分。外部影响:SDK会向asqav.com发送动作证据(外部网络副作用),但本地签名模式(Ed25519/ES256)提供了不走云的选项,扣分点在于云端签发路径的副作用边界未完全文档化。回滚:签收链设计为不可变,删除/作废签收的机制未提及,仅记1分。来源归属:发布者为个人GitHub账号,未经验证,归属信息有限,按规则不因未知而额外扣分,但仅能记1分。
自洽性:conformance/目录要求跨语言共享fixture、先写fixture再实现、CI强制verdict parity,测试文件中Oracle与acceptor规则相互印证(含防默认通过的反向测试),证据充分,给满分。依赖可用性:默认安装路径零运行时依赖,但框架集成依赖(smolagents/dspy/crewai extras)存在已知漏洞且chromadb关键漏洞无补丁,属可选路径但确实存在可用性与风险张力,记2分。失败信息:中间件fail-closed(无凭据/垃圾凭据均403且请求不达应用)、拒绝时返回具体失败边(first_failing_edge)与规则名、doctor命令非零退出,错误路径测试覆盖充分,给满分。
受众与场景:明确面向LangChain/CrewAI/MCP等代理框架开发者与合规/审计受众,分语言README给出quick start/CLI/CI集成,场景清晰但深度仅见于链接文档,记2分。能力边界:README明示示例签收ID会返回verified:false并解释原因,承诺文档含'签收不能证明什么'一节,边界意识突出,给满分。触发精度:sign/verify/doctor各入口职责在CI与测试中界定明确,acceptor与verifier职责分离有专门测试钉住,但agent侧动作拦截的触发条件文档不足,记2分。环境适配:精确钉住Python 3.10-3.12与Node 20.19+/22.12+,支持离线CLI验证与ASGI中间件部署,但环境支持范围较窄(如Node仅限特定小版本),记2分。
信息架构:仓库布局图清晰,conformance/verifier/python/typescript职责分离合理,文档分层(仓库README+语言README+docs站)明确,给满分。安装说明:双语言安装命令、版本要求、extras安装示例俱全,给满分。命名稳定性:asqav/asqav-sdk/@asqav/sdk命名一致,但MIT式生态外的Elastic License及独立版本号意味着改名/弃用风险无承诺,记2分。示例与FAQ:主README示例完整且示例ID的失败行为被显式解释(亮点),但FAQ仅指向外站,语言级示例未在本次证据中直接展开,记2分。已知局限:'签收不证明什么'章节、已知依赖公告、macOS二进制构建路径的诚实披露均为正面证据,但局限清单不完整(如云端可用性依赖未讨论),记2分。许可证:LICENSE文件为完整的Elastic License 2.0全文,但仓库license元数据为NOASSERTION,且ELv2限制托管服务与商标使用,对企业采用有实质约束,记2分。版本与变更日志:双语言独立版本、tag前缀驱动发布(py-v*/ts-v*)、OIDC发布、CHANGELOG被引用,机制完整但CHANGELOG内容本身未在证据中,记2分。维护责任:SECURITY.md承诺48小时响应、仅支持最新版不回移补丁、定时artifact探针验证已发布产物、直接推送被禁止,流程成熟;但维护者实为单一未验证个人,长期承诺无背书,记2分。
输出可用性:verify返回verified布尔+chain_hash+verification_url,acceptor决策注入scope.state供下游读取,拒绝原因结构化(rule/edge/class),可用性好;但结果字段完整schema未在证据中给出,记2分。边际价值:可验证、可离线复核、防量子签名的代理动作证据层在生态中属稀缺定位,acceptor侧准入控制(拒绝verifier接受的弱化证据)解决了真实缺口,给满分。成本效益:默认安装零依赖、免费层可用、离线验证无账户门槛,成本结构友好;但云签发路径按计划收费且证据上传带来的外发数据成本需自行评估,记2分。
主张可追溯:几乎所有主张(CI行为、发布流程、二进制构建、依赖公告、示例ID失败语义)都能对应到仓库内具体文件与测试,且测试文件包含防自欺的元测试('guards against admitting on a verdict the oracle never reached'),给满分。跨源印证:对PyPI/npm包、IETF草案、NSA引用编号、asqav.com定价页的外部主张在本仓库内无法核验,IETF Independent Submission的真实性与状态未证实,仅记1分。事实与推断分离:SECURITY.md明确区分默认安装路径与extras路径的漏洞暴露,README区分示例ID与真实签收,措辞总体审慎;但部分安全声明('liboqs服务端'、'RFC 3161合规')无法从静态证据复核,记2分。
- 发布者为未经核实的个人账号,长期维护与供应链信任需自行评估。
- 许可证为Elastic License 2.0,禁止将其作为托管/受管服务提供给第三方,商用集成前务必核对限制;仓库license元数据为NOASSERTION。
- 每个动作的证据默认上传至asqav.com云端,评估外发数据是否含敏感业务上下文;如需零外发,仅本地签名(Ed25519/ES256)路径可避开云端。
- 安装 [crewai]/[dspy]/[smolagents] extras 会引入已知漏洞依赖,其中chromadb关键漏洞目前无上游补丁;生产环境避免使用 asqav[all]。
- IETF草案、NSA引用编号、PyPI/npm发布状态等外部主张未经本次静态审查核验。
- 安全修复不回移旧版本,仅最新版受支持;生产部署需紧跟补丁版本。
- 签收链不可变且未见作废/撤销机制,误签发后的处置路径需事先确认。
这个 Agent 能做什么,适合哪些场景?
Asqav SDK 是 asqav.com(面向 AI Agent 的证据层)的 Python 与 TypeScript 客户端,仓库为 jagmarques/asqav-sdk,含 python/、typescript/、conformance/ 与 verifier/ 四个目录。开发者在代码中调用 govern() 创建 agent,再用 sign() 为每个动作(如 api:openai:chat)生成 ML-DSA-65(FIPS 204,后量子)签名的、按哈希链串联的合规回执,并由独立时间见证方加盖时间戳。任何持有 signature_id 的人——审计师、对手方、监管者——无需 Asqav 账号即可通过 verify() 验证回执,SDK 会在本地按 RFC 8785 规范化载荷重算 SHA-256 chain_hash。两个 SDK 均零原生依赖,密码学运算在服务端完成;也提供 verify_receipt_offline 等离线零信任验证路径。项目以 IETF Internet-Draft(draft-marques-asqav-compliance-receipts)为标准依据,兼容 LangChain、CrewAI、MCP 等生态,许可证为 Elastic License 2.0,采用 Free/Pro/Enterprise 订阅模式。
SDK 的核心流程是:先用 asqav.govern(api_key="sk_...", agent_name=...) 或 TypeScript 的 govern({apiKey, agentName}) 注册一个被治理的 agent;随后对每个动作调用 agent.sign("api:openai:chat", {"model": "gpt-4o"}),服务端用 ML-DSA-65 签名并返回带 verification_url 的回执。验证端调用 asqav.verify(signature_id) 或 verify(),无需账号即可得到 verified 布尔结果并本地重算 chain_hash(SHA-256 over RFC 8785 canonical payload);云端回执用 ML-DSA-65,本地签名回执用 Ed25519/ES256,算法由 receipt 的 signature.alg 字段决定。完全离线场景可用 asqav.verify_receipt_offline(receipt, jwks)、verifyReceiptOffline() 或 CLI python -m asqav.verifier.verify_receipt --offline 复现签名本身。仓库还包含 conformance/ 跨语言一致性测试夹具、verifier/ 中立多格式验证器,以及 asqav doctor 配置连通性自检命令,CI 按 py-v*/ts-v* 标签分别发布到 PyPI(asqav)和 npm(@asqav/sdk)。
- 受欧盟 AI Act、DORA 等监管约束的团队,需要为生产环境中 Agent 的每次 API 调用留存可对抗篡改的审计回执
- AI 平台工程团队,希望对基于 LangChain、CrewAI、MCP 或 OpenAI Agents 构建的 Agent 流水线实施策略执行与审计追踪
- 外部审计师或监管者,只拿到一个 signature_id,需要在不注册账号、不信任厂商的前提下独立验证某个动作回执
- 采购或安全评审人员,需要在完全离线环境中用 verify_receipt_offline 零信任地复现并核验回执签名
- SaaS 提供方,需要向客户或对手方出示 Agent 行为的第三方可验证证据,作为合同或合规交付物
- CI/CD 平台团队,可用 asqav doctor 在流水线中校验配置与连通性,失败即非零退出以阻断合并
这个 Agent 有哪些优点和局限?
- 第三方可验证:审计师和监管者无需 Asqav 账号即可核验回执,且验证器在证据缺失时如实地返回 verified: false 而非放行
- 采用 NIST FIPS 204(ML-DSA-65)后量子签名,并对齐 RFC 8785 (JCS) 与 NSA CSI 标准,签名算法可随回执切换(云端 ML-DSA-65 / 本地 Ed25519、ES256)
- 提供真正离线的零信任验证路径(verify_receipt_offline / --offline CLI),chain_hash 在本地可复现
- conformance/ 目录强制双语言 SDK 通过同一夹具集,CI 在夹具变更时同时运行两套矩阵,防止跨语言行为漂移
- 明确文档化了与 LangChain、CrewAI、MCP、OpenAI Agents 等主流 Agent 生态的对接,并有 IETF Internet-Draft 作为标准背书
- 核心签名依赖 Asqav 服务端:README 明言密码学在服务端运行且零原生依赖,意味着签名路径存在对厂商云服务的运行时依赖
- 许可证为 Elastic License 2.0(GitHub 标记 NOASSERTION),不是 OSI 开源许可证,自托管或二次分发给企业采用带来限制
- 商业计划分 Free/Pro/Enterprise,配额与部分能力按计划门控,具体价格和限额需到 asqav.com/pricing 查询,重度使用会产生持续成本
- TypeScript 运行时版本窗口较窄(Node 20.19–20.x 或 22.12+),老旧 Node 环境需升级
- README 中的示例 signature_id 是占位形状示例,验证必然返回 false,新用户首次验证需要自己生成真实回执
如何安装或部署这个 Agent?
Python(要求 3.10+):pip install asqav。TypeScript(要求 Node 20.19–20.x 或 22.12+):npm install @asqav/sdk。两个包均零原生依赖,密码学在服务端执行。安装后需要到 asqav.com 获取 API key(sk_... 格式),作为环境变量 ASQAV_API_KEY 或显式参数传入。源码方式:克隆 https://github.com/jagmarques/asqav-sdk 后,Python 执行 cd python && pip install -e ".[all,dev]",TypeScript 执行 cd typescript && npm ci。
如何使用这个 Agent?
第一步注册 agent:Python 中 import asqav; agent = asqav.govern(api_key="sk_...", agent_name="my-agent");TypeScript 中 const agent = await govern({ apiKey: process.env.ASQAV_API_KEY, agentName: "my-agent" })。第二步为动作签名:Python 的 agent.sign("api:openai:chat", {"model": "gpt-4o"}) 返回含 verification_url 的回执;TypeScript 用 agent.sign({ actionType: "api:openai:chat", context: { model: "gpt-4o" } })。第三步验证:asqav.verify(signature_id) 或 verify(signature_id) 无需账号即可返回 verified 与 chain_hash。离线核验用 asqav.verify_receipt_offline(receipt, jwks)、verifyReceiptOffline() 或 python -m asqav.verifier.verify_receipt --offline。环境自检运行 asqav doctor(需设置 ASQAV_API_KEY)。框架集成、CLI、数据处理模式的详细说明见 python/README.md 与 typescript/README.md。