CryptoAgent AI:为AI智能体赋予链上执行能力的完整框架
在Web3和DeFi领域,自动化执行是提升效率、降低操作风险的关键技术。其核心原理在于通过程序化脚本或智能合约,替代人工完成链上交互,如资产转移、交易执行和协议交互。这项技术的价值在于能够实现7x24小时不间断的资产管理、策略执行和风险监控,尤其适用于高频交易、投资组合再平衡和批量操作等场景。CryptoAgent AI正是这一技术理念的工程化实践,它通过一个集成了安全管道和多链支持的Python
1. 项目概述:为AI智能体赋予链上执行能力
在Web3和DeFi的世界里,自动化执行一直是个痛点。无论是管理多链资产、执行定投策略,还是处理复杂的空投分发,传统方式要么需要你手动操作钱包,要么就得写一堆冗长的脚本,把Web3.py、ether.js和各种协议的SDK拼凑在一起,还得时刻操心私钥安全、Gas费估算和交易重试。更别提让AI来帮你做决策并执行了——这中间的鸿沟巨大。CryptoAgent AI这个项目,就是为了填平这个鸿沟而生的。它的核心目标很明确: “给你的AI智能体一个钱包” 。它不是一个简单的Web3 SDK封装,而是一个集成了安全、多链支持和AI代理能力的完整框架,让你能用几行Python代码,就构建出能自主发送ETH、在Uniswap上兑换代币、在Aave上进行借贷,并跨Ethereum、Base、Arbitrum和Polygon管理投资组合的自动化智能体。
简单来说,它把构建一个安全、可靠的链上自动化机器人所需的所有复杂组件——多链RPC提供者、加密钱包管理、交易签名、Gas策略、安全规则引擎、以及AI工具调用接口——全部打包成了一个简洁的异步Python SDK和一个功能齐全的命令行工具。无论你是一个想自动化管理自己多链资产的老手,还是一个希望为你的AI应用(比如基于Claude的聊天机器人)添加链上交互能力的开发者,CryptoAgent AI都提供了一个“开箱即用”的解决方案。它尤其适合那些需要将链上数据分析与链下逻辑决策结合起来的场景,比如基于市场情绪的自动调仓机器人、多签钱包的自动化支付审批流程,或者是一个能理解你自然语言指令并帮你执行交易的AI助手。
1.1 核心设计哲学:安全第一,简化开发
CryptoAgent AI的设计哲学可以概括为两点: 安全第一 和 开发者友好 。在安全方面,它采用了“纵深防御”策略。私钥使用高强度的Fernet加密和PBKDF2(60万次迭代)进行本地加密存储,仅在交易签名时短暂解密,签名后立即从内存中清除。所有交易在执行前都必须通过一个可组合的安全管道,这个管道包括基于金额的规则引擎、可配置的消费限额(单次、每小时、每日)、高价值交易的人工审批机制,以及针对DeFi操作的滑点保护。每一次工具调用和交易尝试都会被记录到不可篡改的审计日志中。
在开发者友好方面,它通过高度的抽象来简化开发。你不再需要手动连接Provider、配置Signer、管理Nonce、估算Gas。所有这些底层细节都被封装在了一个简单的异步上下文管理器 CryptoAgent 里。发送ETH从原来可能需要几十行代码和各种异常处理,变成了一句 await agent.send_eth(...) 。这种设计极大地降低了开发门槛,让你能更专注于业务逻辑本身,而不是Web3的底层复杂性。
2. 核心架构与组件深度解析
要理解CryptoAgent AI的强大之处,我们需要深入其架构。它不是一个单一的黑盒,而是一个模块化、层次清晰的系统。整个架构可以看作是一个“执行引擎”加一个“安全守护神”的组合。
2.1 分层架构:从SDK到区块链网络
项目的代码结构清晰地反映了其分层设计思想。最上层是面向用户的接口层,包括Python SDK ( sdk/ ) 和命令行工具 ( cli/ )。SDK提供了完整的编程控制能力,而CLI则方便进行快速的操作和测试。中间层是核心的业务逻辑层,它又分为几个关键模块:
-
core/:这是智能体的大脑。包含了驱动AI代理循环(感知-推理-行动-反思)的AgentLoop,与Claude API交互的Brain类,以及将所有链上功能注册为AI可调用工具的ToolRegistry。 -
wallet/:负责钱包的整个生命周期。基于BIP-44标准(路径m/44'/60'/0'/0/N)生成和管理分层确定性钱包,实现了前述的加密存储和内存安全签名。 -
chain/:多链支持的核心。ChainClient类封装了与特定区块链的交互,内部集成了具备故障转移能力的RPC提供者、EIP-1559交易构建器、Nonce管理器。这是与区块链网络直接对话的模块。 -
protocols/:封装了主流DeFi协议的逻辑。目前主要集成了Uniswap V3(获取报价和执行兑换)和Aave V3(存入资产、借出资产、查询健康因子)。这些模块将复杂的合约调用简化为清晰的函数。 -
tools/:这是AI代理的“工具箱”。通过@tool()装饰器,将19个核心功能(如查询余额、发送交易、执行兑换)包装成符合Claude Function Calling格式的JSON Schema,使得AI能够理解并调用它们。 -
safety/:安全体系的实现。Guardian(守护者)类是所有交易必须通过的关卡,它串联起RuleEngine(规则引擎)、SpendingLimits(消费限额管理器)和ApprovalManager(人工审批管理器)。 -
memory/:提供状态持久化和审计能力。使用SQLite数据库来存储投资组合快照、交易历史、消费限额使用情况以及完整的审计日志。
最下层则是依赖的外部服务:各个区块链网络的RPC节点、Claude的API,以及本地的加密密钥存储。
2.2 安全管道:交易执行的每一道关卡
安全是CryptoAgent AI的基石,其安全管道的工作流程值得详细拆解。假设一个AI代理决定执行“向地址0x...发送0.1 ETH”的操作。
- 工具调用与参数验证 :AI通过
send_eth工具发起调用,传入目标地址和金额。工具层首先进行基础校验,如地址格式、金额是否为正值。 - 进入守护者(Guardian) :校验通过的交易请求被送入
Guardian安全管道。 - 规则引擎(RuleEngine)检查 :这是第一道关卡。规则引擎会根据预定义的规则进行评估。最核心的规则是
MaxValueRule,它会根据当前ETH的实时价格(通过内置的预言机或配置的API获取),将0.1 ETH换算成美元价值,然后与环境变量MAX_TX_VALUE_USD(默认$100)进行比较。如果超出,交易会被立即拒绝,并记录到审计日志。 - 消费限额(SpendingLimits)检查 :如果通过了单笔交易限额,守护者会查询SQLite数据库,检查当前周期(本小时、本日)内,该钱包已使用的额度。将本次交易的美元价值累加后,与
HOURLY_SPENDING_LIMIT_USD和DAILY_SPENDING_LIMIT_USD(默认$1,000)对比。如果超出任一限额,交易同样会被拒绝。 - 人工审批(ApprovalManager)检查 :对于金额较高的交易,可能需要人工介入。守护者会检查本次交易的美元价值是否超过了
REQUIRE_HUMAN_APPROVAL_ABOVE_USD(默认$50)阈值。如果超过,交易流程会暂停,并通过配置的通知方式(例如,在CLI交互模式下弹出提示,或在集成到Web应用时发送通知到前端)请求人工确认。只有在获得确认后,流程才会继续。 - 滑点保护(针对DeFi) :如果交易是Uniswap兑换,在获取报价后,还会进行滑点检查。确保最终成交价格与预期价格的偏差在设定的最大滑点(例如50个基点,即0.5%)之内。
- 放行与执行 :只有成功通过上述所有关卡,交易请求才会被传递给
ChainClient进行最终的签名和广播。同时,每一步的检查结果(通过/拒绝及原因)都会被详细记录到审计日志中。
这个管道是可配置和可扩展的。你可以轻松地添加自定义规则(例如,禁止向某些地址转账),或者调整各个限额的阈值。
2.3 AI代理循环:感知、推理、行动与反思
当以AI代理模式运行时,CryptoAgent AI就从一个被动的工具库变成了一个主动的、持续运行的自主智能体。其工作循环借鉴了经典的智能体模型:
- 感知(Perceive) :智能体醒来后,首先收集当前环境状态。这包括调用
get_all_balances获取所有链上的资产余额,get_gas_price获取各链Gas价格,可能还会通过自定义插件获取市场数据(如ETH价格)。 - 推理(Reason) :将收集到的状态信息与内置的“目标”或外部传入的指令(例如,通过
agent.prompt(“如果Gas费低于10 gwei,将10%的USDC换成ETH”))相结合,形成一个完整的上下文。然后将这个上下文提交给Claude模型。Claude会分析当前状况,决定需要采取哪些行动,并生成一个包含具体工具调用和参数的计划。 - 行动(Act) :智能体执行Claude规划的工具调用。每一个工具调用都会经过上述的 安全管道 。这意味着即使是AI自主决策的行动,也受到同样严格的安全规则约束。
- 反思(Reflect) :行动完成后,智能体会将结果(成功或失败,包括交易哈希、Gas消耗等)记录到内存模块。这既更新了投资组合的状态,也为后续的推理提供了历史参考。例如,如果一次兑换因为滑点过大而失败,这个信息会被记录下来,下次Claude在类似情况下可能会选择等待或调整参数。
- 休眠(Sleep) :完成一个循环后,智能体会休眠一个可配置的时间间隔(例如5分钟),然后重新开始“感知”阶段,进入下一个循环。
这个循环使得CryptoAgent AI能够处理复杂的、需要持续监控和决策的任务,比如自动化的投资组合再平衡。
3. 从零开始:完整实操指南
了解了核心架构后,让我们动手搭建一个属于自己的链上AI智能体。我将以一个实际的场景为例:在Base链上创建一个钱包,存入一些资金,然后配置一个AI代理,让它监控并管理你的USDC和ETH资产。
3.1 环境准备与安装
首先,确保你的系统满足基础要求。CryptoAgent AI需要Python 3.11或更高版本,这是使用其异步功能和现代语法特性的基础。
# 检查Python版本
python --version # 应显示 Python 3.11.x 或更高
# 使用pip安装CryptoAgent AI,这是最直接的方式
pip install cryptoagent-ai
注意 :由于项目依赖一些密码学和Web3相关的原生库(如
coincurve,cryptography),在Windows系统上安装时可能会遇到编译问题。如果遇到困难,建议使用WSL2(Windows Subsystem for Linux)来获得与Linux/macOS一致的体验。在macOS上,如果遇到secp256k1相关错误,可能需要先通过Homebrew安装openssl和pkg-config:brew install openssl pkg-config。
安装完成后,你可以通过CLI验证安装是否成功:
cryptoagent --version
cryptoagent info # 查看当前配置,如支持的链和RPC端点
3.2 创建并备份你的加密钱包
钱包是你的资产门户,其创建和备份必须慎之又慎。
# 创建一个名为“my-base-bot”的钱包,并设置一个强密码
cryptoagent wallet create my-base-bot -p "YourSuperStrongPassword123!"
执行这个命令后,会发生以下几件事:
- 系统使用BIP-44标准生成一组新的助记词(通常是12或24个单词)和对应的主私钥。
- 使用你提供的密码和PBKDF2算法(60万次迭代)派生出一个加密密钥。
- 使用该加密密钥,通过Fernet对称加密算法,将助记词和私钥加密。
- 将加密后的数据(称为“keystore”文件)保存到本地一个安全的位置(通常是用户目录下的
.cryptoagent/keystore/文件夹)。 - 在终端中显示生成的助记词,并且只显示这一次。
关键操作:立即备份助记词! 这是恢复钱包的唯一方式。请将助记词 手抄 在纸上,并存放在至少两个物理上分开的安全地点(如保险箱和银行保管箱)。 切勿截图、切勿存储在任何联网设备、切勿通过任何通讯软件发送 。密码丢失,你可以用助记词恢复钱包;助记词丢失,资产将永久无法找回。
创建成功后,你可以查看钱包地址:
cryptoagent wallet address my-base-bot
你会得到一个以 0x 开头的以太坊地址。这个地址在Ethereum、Base、Arbitrum、Polygon上都是同一个(因为使用相同的私钥派生)。
3.3 基础链上操作:充值、查询与转账
在让AI代理工作之前,我们先手动进行一些操作,熟悉一下CLI和SDK。
1. 获取钱包余额:
# 查看所有已支持链上的原生代币余额
cryptoagent wallet balance my-base-bot
# 查看Base链上的详细余额,包括主流ERC-20代币
cryptoagent wallet balance my-base-bot --chain base --tokens
在首次使用时,余额应该都是0。你需要从交易所或其他钱包向这个地址充值。例如,向你的 my-base-bot 地址发送一些Base链上的ETH作为Gas费,以及一些USDC作为操作资产。
2. 发送一笔测试交易(通过CLI): 假设你已向钱包充值了少量ETH(例如0.01 ETH),现在可以尝试发送一小笔给另一个地址。
# 发送0.001 ETH到指定地址
cryptoagent wallet send my-base-bot 0x742d35Cc6634C0532925a3b844Bc9e7595f... 0.001 --chain base -p "YourSuperStrongPassword123!"
CLI会提示你确认交易详情(金额、接收方、预估Gas),输入 y 后,交易将被签名并广播。稍等片刻,你可以使用 cryptoagent tx lookup <交易哈希> --chain base 来查询交易状态。
3. 使用Python SDK进行编程化操作: 创建一个Python脚本 bot_demo.py ,体验更灵活的操作。
import asyncio
from sdk import CryptoAgent
async def main():
# 初始化代理,连接到Base链
async with CryptoAgent("my-base-bot", password="YourSuperStrongPassword123!", chains=["base"]) as agent:
print(f"我的钱包地址: {agent.address}")
# 查询余额
eth_balance = await agent.get_balance("base")
usdc_balance = await agent.get_token_balance("base", "USDC")
print(f"Base链余额: {eth_balance:.4f} ETH, {usdc_balance:.2f} USDC")
# 查询当前Gas价格
gas_price_gwei = await agent.get_gas_price("base")
print(f"当前Base链Gas价格: {gas_price_gwei:.2f} gwei")
# 如果Gas费很低(例如小于0.1 gwei),自动发送一笔小额ETH
if gas_price_gwei < 0.1:
print("Gas费很低,执行一笔测试转账...")
try:
receipt = await agent.send_eth("0xAnotherAddress...", 0.0001, chain="base")
print(f"转账成功!交易哈希: {receipt.tx_hash}")
except Exception as e:
print(f"转账失败: {e}")
else:
print("Gas费较高,暂不执行自动转账。")
asyncio.run(main())
这个脚本展示了如何通过SDK查询状态并根据条件自动执行操作,这是构建更复杂机器人的基础。
3.4 配置并启动AI自主代理
现在,让我们赋予这个钱包“智能”。AI代理的核心是Claude模型,因此你需要一个Anthropic的API密钥。
1. 设置API密钥:
# 在终端中设置环境变量(临时)
export ANTHROPIC_API_KEY='sk-ant-your-api-key-here'
# 更推荐的做法:将环境变量写入你的shell配置文件(如 ~/.bashrc 或 ~/.zshrc)
echo 'export ANTHROPIC_API_KEY="sk-ant-your-api-key-here"' >> ~/.zshrc
source ~/.zshrc
2. 配置安全规则(可选但建议): 在启动代理前,最好根据你的风险承受能力调整安全规则。你可以通过环境变量来设置:
export MAX_TX_VALUE_USD=50 # 单笔交易最大金额降至50美元
export DAILY_SPENDING_LIMIT_USD=500 # 每日总支出限额降至500美元
export REQUIRE_HUMAN_APPROVAL_ABOVE_USD=10 # 超过10美元的交易需要人工确认
这些设置会覆盖默认值,让你的代理在更严格的约束下运行。
3. 启动AI代理:
# 以持续循环模式启动代理(默认每5分钟运行一次循环)
cryptoagent agent start --wallet my-base-bot -p "YourSuperStrongPassword123!"
# 或者,先以“单次运行”模式测试
cryptoagent agent start --wallet my-base-bot -p "YourSuperStrongPassword123!" --once
启动后,代理会开始它的“感知-推理-行动-反思”循环。你可以在终端看到它的日志输出:它先获取余额和Gas价格(感知),然后Claude模型会根据当前状态和内置目标进行思考(推理),决定是否需要执行操作(行动),最后记录结果(反思)。
4. 与AI代理交互(通过SDK): 你还可以在Python脚本中直接向代理发送自然语言指令:
async with CryptoAgent("my-base-bot", password="YourSuperStrongPassword123!", chains=["base"]) as agent:
# 让AI分析我的投资组合
response = await agent.prompt("我目前在Base链上的资产构成是什么?给出一个简要总结。")
print("AI分析报告:", response)
# 给AI一个复杂的执行指令
response = await agent.prompt(
"检查Base链上的Gas价格。如果低于0.05 gwei,并且我的USDC余额大于100,"
"那么将20%的USDC通过Uniswap兑换成ETH。请告诉我你的计划和执行结果。"
)
print("AI执行反馈:", response)
AI会解析你的指令,调用相应的工具( get_gas_price , get_token_balance , get_swap_quote , swap_tokens )来完成任务,并返回一个包含其思考和行动过程的文本报告。
4. 高级功能与实战场景剖析
掌握了基础操作后,我们可以探索CryptoAgent AI更强大的功能,并将其应用到实际场景中。
4.1 批量操作与空投分发
如果你需要向数百个地址发放代币(例如社区空投、项目奖励),手动操作是不可行的。CryptoAgent AI的批量发送功能就是为此而生。
async def batch_airdrop_usdc():
async with CryptoAgent("airdrop-wallet", password="pwd", chains=["arbitrum"]) as agent:
# 从CSV文件读取接收地址和金额列表
recipients = {
"0xAddress1": 50.0, # 50 USDC
"0xAddress2": 100.0,
"0xAddress3": 75.0,
# ... 可以包含数百个地址
}
print(f"开始向 {len(recipients)} 个地址批量空投USDC...")
# 执行批量发送。batch_send_token会顺序处理,避免Nonce冲突。
# 返回一个列表,包含每个交易的结果(成功为Receipt对象,失败为Exception对象)
results = await agent.batch_send_token(recipients, token="USDC", chain="arbitrum")
success_count = 0
fail_count = 0
for addr, result in zip(recipients.keys(), results):
if isinstance(result, Exception):
print(f" ❌ 发送给 {addr[:10]}... 失败: {result}")
fail_count += 1
else:
print(f" ✅ 发送给 {addr[:10]}... 成功,哈希: {result.tx_hash[:16]}...")
success_count += 1
print(f"\n批量空投完成。成功: {success_count}, 失败: {fail_count}")
# 失败的任务可以记录到文件,稍后重试
if fail_count > 0:
with open("failed_airdrops.txt", "w") as f:
for addr, result in zip(recipients.keys(), results):
if isinstance(result, Exception):
f.write(f"{addr}\n")
实操心得 :
- Gas费预估 :批量交易总Gas费可能很高。建议先在测试网运行,或选择Gas费较低的链(如Polygon、Base)和时段进行操作。
- Nonce管理 :
batch_send_token内部会为每笔交易顺序递增Nonce,这是正确的。但如果你同时有其他脚本在用同一个钱包发送交易,可能会导致Nonce混乱。最佳实践是:在进行批量操作期间,锁定该钱包的其他用途。- 错误处理 :批量操作中个别交易失败(如Gas不足、地址无效)不会导致整个批次中止。务必像示例一样检查每一个结果,并对失败项建立重试机制。
- 隐私考虑 :将接收地址列表硬编码在脚本中并不安全。应从加密的数据库或环境变量中读取。
4.2 集成DeFi协议:自动兑换与借贷
CryptoAgent AI内置了与Uniswap和Aave的集成,让DeFi操作变得简单。
场景:创建一个自动定投DCA(Dollar-Cost Averaging)机器人 这个机器人每周一自动用100 USDC购买ETH,并存入Aave赚取利息。
import asyncio
from datetime import datetime
from sdk import CryptoAgent
async def dca_and_lend_bot():
async with CryptoAgent("dca-bot", password="pwd", chains=["ethereum"]) as agent:
# 1. 检查今天是否是周一
if datetime.today().weekday() != 0: # 0代表周一
print("今天不是周一,跳过执行。")
return
# 2. 检查USDC余额是否足够
usdc_balance = await agent.get_token_balance("ethereum", "USDC")
dca_amount = 100.0
if usdc_balance < dca_amount:
print(f"USDC余额不足。当前: {usdc_balance}, 所需: {dca_amount}")
return
# 3. 获取Uniswap上USDC->ETH的报价
print("获取Uniswap兑换报价...")
quote = await agent.get_swap_quote(
token_in="USDC",
token_out="ETH",
amount_in=dca_amount,
chain="ethereum"
)
print(f"报价: {dca_amount} USDC 可兑换约 {quote['amount_out']:.6f} ETH")
print(f"预估Gas费: {quote['estimated_gas']} 单位, 路径: {quote['path']}")
# 4. 执行兑换(设置最大滑点为0.5%)
print("执行兑换...")
swap_receipt = await agent.swap_tokens(
token_in="USDC",
token_out="ETH",
amount_in=dca_amount,
slippage_bps=50, # 50个基点 = 0.5%
chain="ethereum"
)
print(f"兑换成功!交易哈希: {swap_receipt.tx_hash}")
# 5. 等待兑换确认,并查询得到的ETH数量(实际数量可能因滑点略有不同)
# 这里简化处理,假设我们兑换得到了 `eth_received` 数量的ETH
# 实际项目中,应该解析交易日志来获取精确数量。
eth_received = quote['amount_out'] * 0.995 # 粗略估计,考虑最大滑点
# 6. 将得到的ETH存入Aave
print(f"将 {eth_received:.6f} ETH 存入Aave...")
aave_receipt = await agent.aave_supply(
asset="ETH",
amount=eth_received,
chain="ethereum"
)
print(f"存入Aave成功!交易哈希: {aave_receipt.tx_hash}")
# 7. 查询并打印当前的Aave健康因子
health_factor = await agent.aave_health_factor("ethereum")
print(f"当前Aave健康因子: {health_factor:.2f} (大于1则安全)")
print("本周定投任务完成!")
# 可以将此函数设置为系统定时任务(如cron job或Celery beat)
场景:创建杠杆挖矿策略监控机器人 这个机器人监控你在Aave上的借贷头寸,当健康因子过低时自动偿还部分债务或补充抵押品。
async def monitor_aave_position():
async with CryptoAgent("leverage-bot", password="pwd", chains=["arbitrum"]) as agent:
# 1. 获取当前健康因子
health_factor = await agent.aave_health_factor("arbitrum")
print(f"当前健康因子: {health_factor:.2f}")
# 2. 定义安全阈值
WARNING_THRESHOLD = 1.5
DANGER_THRESHOLD = 1.1
if health_factor < DANGER_THRESHOLD:
print("⚠️ 警报:健康因子过低,有清算风险!")
# 策略:偿还一部分债务(例如,偿还10%的USDT债务)
# 首先检查钱包中是否有USDT
usdt_balance = await agent.get_token_balance("arbitrum", "USDT")
if usdt_balance > 10: # 假设至少有10 USDT
repay_amount = min(usdt_balance * 0.1, 50) # 偿还10%或最多50 USDT
print(f"自动偿还 {repay_amount} USDT 债务以提升健康因子...")
repay_receipt = await agent.aave_repay(
asset="USDT",
amount=repay_amount,
chain="arbitrum"
)
print(f"偿还成功,交易哈希: {repay_receipt.tx_hash}")
else:
print("钱包中USDT不足,无法自动偿还。请手动处理!")
# 可以在这里集成通知系统,如发送邮件或Telegram消息
elif health_factor < WARNING_THRESHOLD:
print("⚠️ 警告:健康因子偏低,请关注。")
# 可以执行更温和的策略,例如存入更多抵押品
eth_balance = await agent.get_balance("arbitrum")
if eth_balance > 0.01:
print("存入少量ETH作为额外抵押品...")
supply_receipt = await agent.aave_supply(
asset="ETH",
amount=0.005, # 存入0.005 ETH
chain="arbitrum"
)
print(f"存入成功,交易哈希: {supply_receipt.tx_hash}")
else:
print("✅ 健康因子良好,无需操作。")
4.3 多代理系统与跨钱包协作
CryptoAgent AI支持“代理间转账”,这意味着你可以构建一个由多个专门化智能体组成的系统。
场景:构建一个公司财务管理系统 假设你有三个钱包/代理:
company-treasury:主国库,存储大部分资产。payroll-bot:工资发放机器人,每周从国库领取预算并向员工发放工资。defi-yield-bot:DeFi收益机器人,从国库领取资金进行流动性挖矿或借贷。
# payroll_bot.py - 工资发放机器人
async def run_payroll(treasury_wallet_name: str):
async with CryptoAgent("payroll-bot", password="payroll_pwd", chains=["base"]) as agent:
# 1. 每周初,从国库申请本周预算(例如 10 ETH)
weekly_budget = 10.0
print(f"正在从国库 [{treasury_wallet_name}] 申请 {weekly_budget} ETH 预算...")
try:
receipt = await agent.send_to_agent(treasury_wallet_name, weekly_budget, chain="base")
print(f"预算接收成功!交易哈希: {receipt.tx_hash}")
except Exception as e:
# 可能是国库设置了审批规则,需要人工确认
print(f"预算申请失败: {e}. 等待人工审批或通知管理员。")
return
# 2. 查询工资单(从数据库或文件读取)
payroll_list = {
"0xEmployee1...": 0.5, # 0.5 ETH
"0xEmployee2...": 0.7,
"0xEmployee3...": 0.3,
}
# 3. 执行批量发放
print(f"开始向 {len(payroll_list)} 名员工发放工资...")
results = await agent.batch_send_eth(payroll_list, chain="base")
# ... (错误处理和日志记录)
print("本周工资发放完成。")
# defi_yield_bot.py - DeFi收益机器人
async def manage_yield_strategy(treasury_wallet_name: str):
async with CryptoAgent("yield-bot", password="yield_pwd", chains=["polygon"]) as agent:
# 1. 从国库领取运作资金(例如 5000 USDC)
capital = 5000.0
print(f"从国库领取 {capital} USDC 作为运作资金...")
receipt = await agent.send_to_agent(treasury_wallet_name, capital, chain="polygon", token="USDC")
# 注意:send_to_agent 需要国库钱包的代理也处于活动状态并能响应请求。
# 2. 将USDC存入Aave获取稳定收益
supply_receipt = await agent.aave_supply("USDC", capital, chain="polygon")
print(f"资金已存入Aave。")
# 3. 定期(例如每天)检查收益并复投
# ... 更复杂的策略逻辑
在这种架构下, company-treasury 钱包可以设置非常严格的安全规则(如高额人工审批),而 payroll-bot 和 defi-yield-bot 则有明确的、有限的权限,实现了职责分离和风险控制。
5. 生产环境部署、监控与故障排查
将CryptoAgent AI从开发环境迁移到生产环境,需要关注安全性、可靠性和可观测性。
5.1 安全加固配置
-
密钥管理 :
- 绝对不要 将密码硬编码在脚本中。使用环境变量或专业的密钥管理服务(如HashiCorp Vault、AWS Secrets Manager)。
- 生产环境考虑使用硬件钱包(如Ledger, Trezor)通过
eth_account的HDAccount或LocalAccount集成,但CryptoAgent AI目前主要支持软件钱包。对于更高安全需求,可以修改其wallet模块,集成web3.py的硬件钱包支持。
-
环境变量配置 : 创建一个
.env.production文件(并确保不被提交到版本库):# .env.production ANTHROPIC_API_KEY=sk-ant-... WALLET_PASSWORD=YourProductionSuperStrongPassword MAX_TX_VALUE_USD=1000 DAILY_SPENDING_LIMIT_USD=5000 REQUIRE_HUMAN_APPROVAL_ABOVE_USD=200 # 使用私有RPC节点以获得更好的性能和可靠性 BASE_RPC_URL=https://your-private-base-node.com ARBITRUM_RPC_URL=https://your-private-arbitrum-node.com LOG_LEVEL=INFO使用
python-dotenv在应用中加载。 -
RPC节点 :
- 公共RPC节点有速率限制且可能不稳定。生产环境 必须 使用私有RPC节点服务(如Infura, Alchemy, QuickNode)或自建节点。
- 在
config/chains.yaml中配置多个备用RPC URL,利用内置的故障转移功能。
5.2 系统化部署与进程管理
-
作为系统服务运行 : 对于长期运行的AI代理,使用系统如
systemd(Linux) 或launchd(macOS) 来管理。- 创建systemd服务文件
/etc/systemd/system/cryptoagent.service:
[Unit] Description=CryptoAgent AI DeFi Bot After=network.target [Service] Type=simple User=deploy WorkingDirectory=/opt/cryptoagent-bot EnvironmentFile=/opt/cryptoagent-bot/.env.production ExecStart=/usr/local/bin/python /opt/cryptoagent-bot/bot_main.py Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target- 然后启用并启动服务:
sudo systemctl enable --now cryptoagent
- 创建systemd服务文件
-
使用进程管理器 : 对于更灵活的管理,可以使用
supervisord或PM2(通过pm2 start bot.py --interpreter python3)。
5.3 监控、日志与告警
-
审计日志 : CryptoAgent AI内置的SQLite审计日志 (
~/.cryptoagent/audit.db) 是首要的监控数据源。定期备份并分析此数据库。-- 示例查询:查看过去24小时所有被安全规则阻止的交易 SELECT * FROM audit_log WHERE action LIKE '%rejected%' AND timestamp > datetime('now', '-1 day'); -
应用日志 : 配置
LOG_LEVEL=DEBUG可以获取更详细的内部运行信息,但生产环境通常INFO级别即可。使用Python的logging模块将日志输出到文件,并集成日志收集系统(如ELK Stack, Loki)。 -
链上监控 :
- 使用区块链浏览器(如Etherscan, Arbiscan)为你的钱包地址设置“地址标签”和“监控通知”。
- 对于关键交易,在脚本中实现交易回执确认检查,并设置失败告警。
receipt = await agent.send_eth(...) if receipt.status == 0: # 交易失败 send_alert(f"交易失败!哈希: {receipt.tx_hash}") -
健康检查 : 为你的机器人编写一个简单的健康检查端点(如果部署为Web服务),或定时运行一个检查脚本,验证钱包余额、RPC连接和AI API的可用性。
5.4 常见问题与排查技巧实录
在实际使用中,你可能会遇到以下问题。这里是我踩过的一些坑和解决方法:
问题1:交易一直处于Pending状态,无法确认。
- 可能原因1:Gas费设置过低。 在网络拥堵时,你设置的Gas费可能低于市场价,导致矿工不愿打包。
- 排查 :使用
cryptoagent gas --chain base查看当前链的基础Gas费(Base Fee)和优先费(Priority Fee)。 - 解决 :CryptoAgent AI默认使用EIP-1559并会自动估算Gas。但在极端情况下,你可能需要手动干预。目前SDK未直接暴露手动设置
maxFeePerGas和maxPriorityFeePerGas的接口。如果频繁出现,可以考虑在代码中捕获异常后,等待一段时间或提高内置的Gas倍数(如果未来版本提供该配置)。
- 排查 :使用
- 可能原因2:Nonce值冲突。 如果你同时在多个地方使用同一个钱包发送交易,可能会导致Nonce错乱。
- 排查 :在区块链浏览器上查询你的地址,查看最新的已确认交易的Nonce(
nonce字段),并与你本地待处理交易的Nonce对比。 - 解决 :确保同一时间只有一个进程在使用该钱包发送交易。对于批量发送,
batch_send系列函数内部已处理好Nonce顺序。如果出现冲突,可能需要重置本地Nonce管理器(这通常涉及清除本地缓存,具体取决于实现细节)。
- 排查 :在区块链浏览器上查询你的地址,查看最新的已确认交易的Nonce(
问题2:AI代理执行 prompt 时返回错误或未按预期执行。
- 可能原因1:Claude对工具的理解有偏差。 尽管工具通过JSON Schema定义,但AI有时会误解指令或选择错误的工具参数。
- 排查 :查看代理的详细日志(设置
LOG_LEVEL=DEBUG),看Claude返回的思考过程和工具调用计划。 - 解决 :优化你的提示词(Prompt)。给予更明确的指令。例如,与其说“买点ETH”,不如说“检查我的USDC余额,如果大于50,则通过Uniswap V3将50 USDC兑换成ETH,并设置最大滑点为1%”。在
agent.prompt()调用中,可以提供更丰富的上下文。
- 排查 :查看代理的详细日志(设置
- 可能原因2:安全规则阻止了执行。 AI计划的操作被Guardian拦截。
- 排查 :检查审计日志,找到对应的记录,查看
reason字段。 - 解决 :调整安全规则的环境变量(如提高
MAX_TX_VALUE_USD),或在需要时通过CLI或SDK进行人工审批。
- 排查 :检查审计日志,找到对应的记录,查看
问题3: send_token 或 swap_tokens 失败,提示“Insufficient allowance”或类似错误。
- 原因 :在发送ERC-20代币或进行兑换前,必须先授权(Approve)对应的智能合约(如Uniswap路由合约)可以从你的钱包中划转一定数量的代币。
- 解决 :CryptoAgent AI的
send_token应该会自动处理授权(如果之前没有授权或授权额度不足)。但如果失败,你可以手动调用approve_token函数:# 授权Uniswap路由合约无限使用你的USDC(谨慎操作) receipt = await agent.approve_token("USDC", spender="0xUniswapRouterAddress", chain="base", amount=2**256-1) # 最大授权 # 或者授权一个特定额度 receipt = await agent.approve_token("USDC", spender="0xUniswapRouterAddress", chain="base", amount=1000.0)
问题4:连接到RPC节点超时或返回错误。
- 原因 :公共RPC节点不稳定或达到速率限制。
- 解决 :
- 配置故障转移RPC :在
config/chains.yaml中为每条链配置多个rpc_urls。 - 使用私有节点 :这是生产环境的必选项。通过环境变量
BASE_RPC_URL等覆盖默认配置。 - 增加重试和超时 :检查SDK或底层
web3.py客户端是否支持配置重试逻辑和超时时间。
- 配置故障转移RPC :在
问题5:在Docker容器中运行时,无法访问本地Keystore文件。
- 原因 :默认的Keystore路径 (
~/.cryptoagent) 在容器内可能不存在或权限不对。 - 解决 :
- 通过环境变量
CRYPTOAGENT_HOME指定一个容器内的持久化存储卷路径。 - 在启动容器时,将主机上的Keystore目录挂载到容器内该路径。
docker run -e CRYPTOAGENT_HOME=/app/data \ -v /path/on/host/.cryptoagent:/app/data \ ... your-image - 通过环境变量
问题6:如何升级或迁移钱包?
- 私钥/助记词是根本 :只要你备份了助记词,在任何兼容BIP-44的钱包工具中都可以恢复你的资产。
- CryptoAgent AI特定数据 :你的钱包配置、审计日志、消费限额记录都存储在
~/.cryptoagent/目录下。升级软件版本时,备份这个目录即可。如果要从头开始,只需用助记词在新环境重新导入钱包。
更多推荐




所有评论(0)