开放代理id
Python SDK 打开代理ID --使用V2协议对AI代理身份进行签名和验证。
安装
pip install open-agent-id或用于开发:
pip install -e ".[dev]"快速开始
最常见的用例是向出站请求添加代理身份验证标头:
from agent_id import sign_agent_auth
headers = sign_agent_auth(
"did:oaid:base:0x1234567890abcdef1234567890abcdef12345678",
private_key, # 32-byte Ed25519 seed
)
# Returns dict with:
# "X-Agent-DID": "did:oaid:base:0x1234..."
# "X-Agent-Timestamp": "1708123456"
# "X-Agent-Nonce": "a3f1b2c4d5e6f7089012abcd"
# "X-Agent-Signature": ""
import httpx
resp = httpx.post("https://api.example.com/v1/tasks", headers=headers, json={"task": "search"})注册表客户端
from agent_id import RegistryClient
client = RegistryClient() # defaults to https://api.openagentid.org所有方法
| 方法 | 需要授权 | 描述 |
|---|---|---|
client.request_challenge(wallet_address) | 否 | 请求钱包身份验证挑战 |
client.verify_wallet(wallet_address, challenge_id, signature) | 否 | 验证钱包签名,返回身份验证令牌 |
client.register_agent(token, name, public_key, capabilities=None) | 是 | 注册新代理 |
client.get_agent(did) | 否 | 通过DID查找代理 |
client.list_agents(token, limit=20, cursor=None) | 是 | 列出经过身份验证的钱包所拥有的代理 |
client.update_agent(did, token=None, agent_signer=None, **updates) | 是 | 更新代理元数据 |
client.revoke_agent(did, token) | 是 | 撤销代理身份 |
client.rotate_key(did, token, public_key) | 是 | 旋转代理的公钥 |
client.deploy_wallet(did, token) | 是 | 为代理部署链上智能钱包 |
client.get_credit(did) | 否 | 查询代理人的信用评分 |
client.verify_signature(did, domain, payload, signature) | 否 | 根据代理的注册密钥验证签名 |
钱包身份验证流程
# 1. Request challenge
challenge = await client.request_challenge(wallet_address)
# 2. Sign the challenge text with your wallet (e.g. via web3.py)
# wallet_signature = ...
# 3. Verify and get auth token
token = await client.verify_wallet(wallet_address, challenge["challenge_id"], wallet_signature)注册代理
agent = await client.register_agent(
token,
name="my-agent",
public_key=base64url_public_key,
capabilities=["search", "summarize"],
)查找并列出代理商
info = await client.get_agent("did:oaid:base:0x1234...")
agents = await client.list_agents(token)管理代理
await client.update_agent(did, token=token, name="new-name")
await client.rotate_key(did, token, new_public_key)
await client.revoke_agent(did, token)
await client.deploy_wallet(did, token)信用评分
credit = await client.get_credit("did:oaid:base:0x1234567890abcdef1234567890abcdef12345678")
print(credit["credit_score"]) # 300
print(credit["level"]) # "verified"HTTP签名
签署HTTP请求
from agent_id import sign_http_request, verify_http_signature
headers = sign_http_request(
private_key,
method="POST",
url="https://api.example.com/v1/tasks",
body=b'{"task":"search"}',
)
# headers: X-Agent-Timestamp, X-Agent-Nonce, X-Agent-Signature验证HTTP签名
valid = verify_http_signature(
public_key, method="POST", url=url, body=body,
timestamp=timestamp, nonce=nonce, signature=signature,
)使用Signer守护进程进行异步签名
from agent_id import sign_http_request_async, Signer
signer = Signer(socket_path="/tmp/oaid-signer.sock")
headers = await sign_http_request_async(
signer, method="GET", url="https://api.example.com/data", body=None, key_id="key-1"
)消息签名
签署P2P消息
from agent_id import sign_message, verify_message_signature
signature = sign_message(
private_key,
msg_type="request",
msg_id="msg-001",
from_did="did:oaid:base:0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
to_dids=["did:oaid:base:0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"],
ref=None,
timestamp=None, # auto-generated
expires_at=None,
body={"task": "summarize", "url": "https://example.com"},
)异步消息签名
from agent_id import sign_message_async
sig = await sign_message_async(
signer, msg_type="request", msg_id="msg-002",
from_did="did:oaid:base:0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
to_dids=["did:oaid:base:0xbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"],
ref=None, timestamp=None, expires_at=None, body={"hello": "world"}, key_id="key-1",
)E2E加密
from agent_id import encrypt_for, decrypt_from
# Encrypt a message for another agent (NaCl box: X25519-XSalsa20-Poly1305)
ciphertext = encrypt_for(
b"secret message",
recipient_public_key, # 32-byte Ed25519 public key
sender_private_key, # 32-byte Ed25519 seed
)
# Recipient decrypts
plaintext = decrypt_from(ciphertext, sender_public_key, recipient_private_key)DID实用程序
from agent_id import validate_did, parse_did, format_did
validate_did("did:oaid:base-sepolia:0x1234567890abcdef1234567890abcdef12345678") # True
method, chain, address = parse_did("did:oaid:base:0x1234567890abcdef1234567890abcdef12345678")
# ("oaid", "base", "0x1234...")
did = format_did("base", "0x1234567890abcdef1234567890abcdef12345678")测试
pip install -e ".[dev]"
pytest许可证
Apache-2.0--参见 许可证.
