以编程方式使用文档

概述

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

为什么

当客户、审计员、监管机构、保险商等对 AI 行为提出质疑时,你需要证明实际发生了什么。传统日志不起作用:你控制着它们,所以第三方必须信任你没有篡改它们。

防篡改日志消除了这种信任需求。

工作原理

原始 LLM 交互保留在你的存储中。正常操作期间没有第三方看到它们。但每次交互的密码学哈希会同时写入独立的防篡改存储(Arweave 或 AgentSystems 托管服务)。

如果出现审计或争议,你提供原始日志。审计员重新计算哈希并与存储的哈希进行比较。匹配表示日志未被篡改。不匹配表示存在篡改或损坏。

你控制你的数据,但无法在不被察觉的情况下篡改它。

记录的内容: - 到你的存储:完整的原始 LLM 有效载荷(提示、响应、元数据、时间戳) - 到哈希存储:SHA-256 哈希 + 元数据(如命名空间、会话 ID、时间戳)

哈希存储选项

哈希(而非原始数据)可以写入任一存储选项:

存储适用场景特性
去中心化(Arweave)无供应商锁定公共仅追加账本、开源验证、无需账户
Custodied托管合规一次写入存储、验证 UI、用于审计的签名证明

前置条件

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

示例(去中心化)

Generate signing key

    openssl genrsa -out arweave-key.pem 4096
    

对于生产环境,请使用 云密钥管理服务.

Create .env file

在你的项目中创建 .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-...
    

Run the example

    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 上的哈希进行比较。参见 完整验证指南 了解更多详情。

另外, 验证 UI 支持去中心化和托管验证。

配置

资源