Skip to main content

概述

AgentSystems Notary 为 AI 智能体交互创建防篡改的审计追踪。

为何需要

当客户、审计员、监管机构、保险公司等对 AI 行为提出质疑时,您需要证明实际发生了什么。传统日志无法胜任:由于日志由您控制,第三方必须信任您没有修改它们。 防篡改日志消除了这种信任要求。

工作原理

原始 LLM 交互保存在您的存储中,正常运营期间第三方不会看到这些数据。但每次交互的加密哈希值会同时写入独立的防篡改存储(Arweave 或 AgentSystems 托管服务)。 一旦需要审计或发生争议,您提供原始日志。审计员重新计算哈希值并与存储的哈希值进行比对。匹配则表明日志未被篡改,不匹配则表明存在篡改或损坏。 您控制数据,但任何修改都会被检测到。 记录内容:
  • 您的存储:完整的原始 LLM 载荷(提示词、响应、元数据、时间戳)
  • 哈希存储:SHA-256 哈希值 + 元数据(例如命名空间、会话 ID、时间戳)

哈希存储选项

哈希值(非原始数据)可写入以下两种存储选项之一:
存储最适合特性
去中心化(Arweave)无供应商锁定公开的只追加账本、开源验证、无需账户
托管服务合规管理一次写入存储、验证界面、带签名的审计证明
托管服务方案提供符合 WORM 标准的哈希存储、托管签名以及用于审计的带签名证明。

前置条件

pip install agentsystems-notary langchain langchain-anthropic python-dotenv

示例(去中心化)

1

生成签名密钥

openssl genrsa -out arweave-key.pem 4096
请妥善保管此密钥。在验证过程中,需要使用它来证明对链上哈希的所有权。
在生产环境中,请使用云密钥管理服务
2

创建 .env 文件

在项目根目录创建 .env 文件:
# AWS S3 for raw payload storage
ORG_AWS_S3_BUCKET_NAME=your-bucket
ORG_AWS_S3_ACCESS_KEY_ID=AKIA...
ORG_AWS_S3_SECRET_ACCESS_KEY=...
ORG_AWS_S3_REGION=us-east-1

# Path to signing key
ARWEAVE_PRIVATE_KEY_PATH=./arweave-key.pem

# Anthropic
ANTHROPIC_API_KEY=sk-ant-...
3

运行示例

import os

from agentsystems_notary import (
    LangChainNotary,
    ArweaveHashStorage,
    AwsS3StorageConfig,
    LocalKeySignerConfig,
    RawPayloadStorage,
)
from langchain_anthropic import ChatAnthropic
from dotenv import load_dotenv

load_dotenv()

# Your S3 bucket for raw LLM payloads
s3_config = AwsS3StorageConfig(
    bucket_name=os.environ["ORG_AWS_S3_BUCKET_NAME"],
    aws_access_key_id=os.environ["ORG_AWS_S3_ACCESS_KEY_ID"],
    aws_secret_access_key=os.environ["ORG_AWS_S3_SECRET_ACCESS_KEY"],
    aws_region=os.environ["ORG_AWS_S3_REGION"],
)
raw_payload_storage = RawPayloadStorage(storage=s3_config)

# Local RSA key for signing
signer = LocalKeySignerConfig(
    private_key_path=os.environ["ARWEAVE_PRIVATE_KEY_PATH"],
)

# Arweave for decentralized hash storage
# Namespace is public — written to the ledger and used to segment stored data
# Namespace should be one anonymous ID per customer, agent, or environment
# Retain a record of your namespace mappings
arweave_storage = ArweaveHashStorage(
    namespace="tenant_a1b2c3d4",  # See namespace comments above
    signer=signer,
)

# Create notary callback
notary = LangChainNotary(
    raw_payload_storage=raw_payload_storage,
    hash_storage=[arweave_storage],
    debug=True,
)

# Attach to model
model = ChatAnthropic(
    model="claude-sonnet-4-6",
    api_key=os.environ["ANTHROPIC_API_KEY"],
    callbacks=[notary],
)

response = model.invoke("What is the capital of France?")
print(response.content)

验证

去中心化(Arweave):从您的存储桶下载原始载荷,压缩后使用开源 CLI 验证:
aws s3 sync s3://your-bucket/arweave/tenant_a1b2c3d4/ ./logs
zip -r logs.zip logs
npm install -g agentsystems-verify
agentsystems-verify --logs logs.zip
CLI 会重新计算每个载荷的哈希值,并与存储在 Arweave 上的哈希值进行比对。详情请参阅完整验证指南 此外,验证界面同时支持去中心化和托管验证。

配置

资源