AI Agent如何安全调用aelf链?Portkey技能包详解MCP、CLI与SDK集成
1. 项目概述为AI Agent赋能的aelf链钱包技能包如果你正在开发一个需要与aelf区块链交互的AI Agent或者想在你的Claude、Cursor等AI工具里直接操作钱包、查询资产、发起交易那么你很可能已经遇到了一个核心难题如何让AI安全、便捷地调用区块链功能这正是portkey/eoa-agent-skills这个项目要解决的问题。它不是一个普通的钱包应用而是一套专门为AI Agent设计的“技能包”通过MCP、CLI和SDK三种标准接口将复杂的区块链操作封装成AI可以理解和执行的标准化工具。简单来说这个项目让AI具备了管理aelf链上EOA钱包、查询资产、执行转账和与智能合约对话的能力。想象一下你可以直接对你的AI助手说“帮我查一下这个地址的ELF余额”或者“给这个地址转10个USDT”AI就能像调用一个普通API一样完成这些操作而无需你手动打开钱包、复制地址、确认交易。这对于构建自动化交易机器人、资产监控助手或者链上数据分析工具来说是一个强大的基础设施。2. 核心架构与设计思路拆解2.1 为什么是“技能包”而非“SDK”传统的区块链SDK是给开发者用的你需要编写代码、处理异步、管理私钥。而AI Agent的运行环境如Claude Desktop、Cursor的AI侧边栏通常是受限的无法直接运行一个完整的Node.js应用或引入复杂的依赖。eoa-agent-skills的核心理念是“适配”它将自己包装成AI生态能直接消费的形态。MCP是桥梁MCP全称是Model Context Protocol你可以把它理解为AI工具和大型语言模型之间的一个标准化插件协议。项目中的src/mcp/server.ts就是一个MCP服务器它启动后会向连接的AI客户端如Claude Desktop宣告“我这里提供了23个工具分别是创建钱包、查询余额、执行转账……”。当你在AI聊天框里提出相关需求时AI模型会识别意图自动选择对应的工具并调用它然后将执行结果返回给你。这个过程对用户是完全透明的你感觉像是在和AI对话实际上背后是这套技能包在干活。统一的核心层为了避免功能重复和维护地狱项目采用了经典的分层架构。所有区块链交互的核心逻辑比如生成钱包、构造交易、调用合约、查询链上数据都被抽象在src/core/目录下。这是一个“纯净”的业务逻辑层不依赖任何外部适配器。然后MCP服务器、CLI命令行工具和TypeScript SDK都作为“适配器”去调用这同一套核心逻辑。这意味着无论你通过哪种方式使用得到的钱包行为、交易结果都是一致的修复一个Bug或增加一个功能只需要改动核心层一处。2.2 多模式消费的设计考量项目支持三种主要使用模式覆盖了从终端用户到开发者的全场景MCP模式面向AI终端用户这是最“傻瓜式”的体验。用户只需运行一次设置脚本bun run bin/setup.ts claude技能包就会自动配置到Claude Desktop中。之后用户在与Claude对话时就能自然使用这些钱包功能。这种模式隐藏了所有技术细节安全性依赖于MCP服务器的本地运行和环境变量配置。CLI模式面向脚本和高级用户portkey_eoa_skill.ts是一个功能完整的命令行工具。它适合用于编写自动化脚本、集成到CI/CD流程或者快速进行一些链上操作测试。例如你可以写一个定时脚本每天用CLI查询一次资产余额并发送到钉钉。CLI模式提供了最细粒度的参数控制。SDK模式面向开发者index.ts导出了一套完整的TypeScript函数。如果你正在用LangChain、LlamaIndex构建更复杂的AI Agent或者想开发自己的区块链应用可以直接引入这个SDK将其作为你应用中的一个模块来调用。它提供了最大的灵活性和可编程性。实操心得模式选择建议对于大多数想体验AI区块链的普通用户直接从MCP模式开始是最快、最直观的。对于开发者我建议先通过CLI模式熟悉所有功能和参数因为它的错误信息最直接在构建复杂应用时再切换到SDK模式进行深度集成。避免一上来就啃SDK源码容易迷失在细节里。3. 核心功能模块深度解析3.1 钱包管理安全与便捷的平衡术钱包管理是任何区块链应用的基石也是安全风险最高的部分。eoa-agent-skills在这方面做了不少值得称道的设计。本地加密存储当你通过portkey_create_wallet创建钱包时私钥并不会以明文形式保存在任何地方。系统会使用你提供的PORTKEY_WALLET_PASSWORD环境变量或交互式输入作为密码通过AES加密算法将私钥加密后存储在你指定的PORTKEY_WALLET_DIR目录下默认是~/.portkey/eoa/wallets/。这意味着即使有人拿到了你的存储文件没有密码也无法解密出私钥。跨技能签名上下文这是一个非常实用的设计。假设你安装了多个需要签名的AI技能比如一个用于DeFi一个用于NFT你不需要在每个技能里都导入一遍钱包。当你在这个技能中创建或导入钱包后它会自动更新一个共享的“活跃钱包上下文”文件默认路径~/.portkey/skill-wallet/context.v1.json。其他支持该规范的技能可以读取这个文件自动获取当前活跃的钱包地址进行签名操作。关键点这个上下文文件里只存储钱包地址和加密后的密钥库信息walletExport绝不存储明文私钥或助记词。钱包备份与恢复portkey_backup_wallet工具提供了两种备份方式一次性输出直接输出助记词和明文私钥。这仅适用于你需要在其他钱包应用如MetaMask中导入的情况且输出后应立即妥善保存并清除聊天记录。加密导出生成一个加密的walletExport字符串。这个字符串可以安全地备份到云端或密码管理器未来可以通过portkey_import_wallet工具配合创建时使用的密码重新导入恢复钱包。这是更推荐的备份方式。注意事项密码管理是命门PORTKEY_WALLET_PASSWORD这个环境变量是整个安全体系的核心。一旦丢失或遗忘你加密存储的钱包将无法解密加密的walletExport也无法导入。务必使用密码管理器如1Password、Bitwarden妥善保管此密码。切勿使用过于简单的密码也不要在多个不信任的环境中使用同一个密码。3.2 资产查询从余额到历史的完整视图资产查询模块提供了链上数据的全景视图是构建监控面板或分析工具的基础。Token列表与余额查询portkey_get_token_list是一个聚合查询它会返回指定地址在所有aelf侧链上的所有代币及其余额。这对于快速总览资产分布非常有用。而portkey_get_token_balance则是精确查询你可以指定具体的链ID如AELF主链tDVV测试网和代币符号如ELFUSDT来获取精确数值。一个关键细节代币价格查询portkey_get_token_prices工具的实现依赖于外部的价格预言机。根据项目代码和aelf生态常见实践它很可能是通过调用aelf网络上的某个价格预言机合约或者查询链下API来获取代币的美元计价。这意味着在私有网络或没有部署价格合约的测试网上这个功能可能返回空或错误。在实际使用时你需要确认当前网络是否支持该功能。NFT查询的链特性portkey_get_nft_collections和portkey_get_nft_items工具是针对aelf链上NFT标准的查询。aelf的NFT合约标准可能与以太坊的ERC-721/1155在接口上略有不同。这些工具封装了与aelf NFT合约如MultiToken合约的交互直接返回处理好的集合和物品信息省去了开发者自己解析合约数据的麻烦。交易历史与详情portkey_get_transaction_history通常是通过查询区块链浏览器API或节点的历史接口来实现的返回的是交易列表。而portkey_get_transaction_detail则会提供单笔交易的更详细信息包括输入/输出、事件日志、状态等。这对于调试失败的交易或分析合约交互至关重要。3.3 交易与合约交互精准操作指南这是技能包中最能体现其价值的部分让AI能够安全地执行链上写操作。普通转账与跨链转账portkey_transfer用于同一条aelf侧链内的代币转账。你需要明确指定目标链ID、代币符号和金额。这里有一个易错点金额单位。aelf链上许多代币如ELF使用8位小数精度。在工具中你需要传入的是代币的最小单位如1 ELF 100,000,000。在CLI中传入--amount 100000000代表1个ELF。portkey_cross_chain_transfer用于在aelf生态内的不同侧链之间转移资产。这背后调用的是aelf主链的跨链合约。操作时你需要指定源链ID、目标链ID、代币和金额。跨链交易通常需要等待多个区块确认时间比普通转账长。合约交互的“视图”与“发送”分离这是智能合约编程中的一个基本原则项目通过两个独立的工具portkey_call_view_method和portkey_call_send_method来严格区分。视图调用用于查询合约状态不消耗Gas不改变链上数据。例如查询余额GetBalance、获取配置GetConfig。重要原则对于输入参数为Empty空的视图方法调用时必须省略--params参数否则会导致调用错误。发送调用用于执行改变合约状态的操作需要支付Gas并等待交易上链。例如授权Approve、转账Transfer。以共振交易为例的实战解析项目文档中给出了一个共振合约交互的经典例子清晰地展示了如何区分两种调用。# 1. 查询队列状态视图调用只读 bun run portkey_eoa_skill.ts contract view \ --contract-address 28Lot71VrWm1WxrEjuDqaepywi7gYyZwHysUcztjkHGFsPPrZy \ --method GetPairQueueStatus \ --params address \ --chain-id tDVV # 2. 加入队列发送调用写操作 bun run portkey_eoa_skill.ts contract send \ --contract-address 28Lot71VrWm1WxrEjuDqaepywi7gYyZwHysUcztjkHGFsPPrZy \ --method JoinPairQueue \ --params {} \ --chain-id tDVV \ --address YOUR_ADDRESS \ --password mypass注意第一个命令中--params的值被包裹在两层引号中这是因为在命令行中整个JSON字符串需要作为一个参数传递。而第二个命令的--params {}表示一个空的JSON对象符合JoinPairQueue方法的要求。费用预估portkey_estimate_fee工具非常实用。在执行任何发送交易之前先调用它预估一下Gas消耗和费用可以避免因Gas不足导致的交易失败也能让你对成本心中有数。3.4 eBridge跨链桥接连接aelf与EVM生态portkey_ebridge_transfer和portkey_ebridge_info这两个工具提供了与eBridge跨链桥交互的能力。eBridge是连接aelf区块链和以太坊等EVM链的官方桥。通过这个工具你可以将资产从aelf转移到以太坊或者反向操作。使用前务必先用portkey_ebridge_info查询当前桥接的限额、手续费和预计时间。跨链桥接交易涉及多链确认耗时从几分钟到几小时不等需要耐心等待。4. 环境配置与实战部署指南4.1 环境变量详解与配置策略项目的运行严重依赖环境变量。正确的配置是成功的第一步。# 推荐做法复制模板文件并编辑 cp .env.example .env # 然后用文本编辑器打开 .env 文件进行配置核心环境变量解析变量名作用与建议默认值PORTKEY_NETWORK指定连接的aelf网络。开发测试用testnet正式操作用mainnet。mainnetPORTKEY_API_URL高级选项覆盖默认的API端点。除非你自建了aelf节点或API服务否则一般不需要设置。根据网络自动选择PORTKEY_PRIVATE_KEY不推荐直接设置明文私钥。虽然方便但存在安全风险特别是将.env文件提交到版本库时。优先使用加密钱包文件。—PORTKEY_WALLET_DIR自定义加密钱包文件的存储目录。可以改为更安全或更便捷的路径。~/.portkey/eoa/wallets/PORTKEY_WALLET_PASSWORD至关重要用于加密/解密本地钱包文件的密码。建议使用强密码并通过export命令设置在终端会话中而非直接写在.env文件里。—PORTKEY_SKILL_WALLET_CONTEXT_PATH共享活跃钱包上下文文件的路径。如果你有多个AI技能环境可以将其设置为共享目录实现钱包状态的同步。~/.portkey/skill-wallet/context.v1.json安全配置建议密码隔离永远不要将PORTKEY_WALLET_PASSWORD提交到任何代码仓库。对于生产环境使用密钥管理服务如AWS Secrets Manager, HashiCorp Vault或至少在部署时通过CI/CD管道注入。私钥最小化尽量避免使用PORTKEY_PRIVATE_KEY。坚持使用“创建/导入钱包 - 加密存储 - 通过密码使用”的工作流。目录权限确保PORTKEY_WALLET_DIR指向的目录权限设置为仅当前用户可读可写Linux/Mac:chmod 700。4.2 MCP模式与Claude Desktop深度集成这是让AI助手“直接”操作区块链的魔法所在。配置过程其实很简单。一键配置# 为Claude Desktop配置技能 bun run bin/setup.ts claude这个脚本会自动做几件事1) 找到你本地Claude Desktop的MCP服务器配置目录2) 生成一个指向本项目MCP服务器的配置片段3) 将其添加到Claude的配置中。完成后重启Claude Desktop你的AI助手就获得了区块链超能力。手动配置适用于高级用户或自定义客户端 如果你使用的不是Claude Desktop或者其他支持MCP的客户端如自定义应用你可以手动创建或修改MCP配置文件例如~/.config/claude/mcp.json或客户端指定的路径添加如下配置{ mcpServers: { portkey-eoa-agent-skills: { command: bun, args: [run, /ABSOLUTE/PATH/TO/YOUR/eoa-agent-skills/src/mcp/server.ts], env: { PORTKEY_NETWORK: testnet, PORTKEY_WALLET_PASSWORD: your_secure_password_here } } } }注意args中的路径必须是绝对路径。环境变量env会传递给MCP服务器进程。验证MCP连接 配置完成后在Claude Desktop中你可以尝试问“我有哪些可用的工具”或者“你能帮我创建一个aelf测试网钱包吗”。如果配置成功Claude会识别出portkey_create_wallet等工具并询问你必要的参数如密码。4.3 CLI模式终端下的全能瑞士军刀CLI工具是进行批量操作、调试和集成测试的利器。所有功能都通过portkey_eoa_skill.ts这个入口点调用。基础命令结构bun run portkey_eoa_skill.ts category action [options]主要类别包括wallet,query,transfer,contract,ebridge。常用操作示例创建钱包并备份# 创建钱包密码通过环境变量或提示输入 bun run portkey_eoa_skill.ts wallet create # 列出所有钱包找到刚创建的钱包地址 bun run portkey_eoa_skill.ts wallet list # 备份该钱包的助记词谨慎操作 bun run portkey_eoa_skill.ts wallet backup --address YOUR_NEW_ADDRESS全面的资产查询# 查询某地址在所有链上的所有代币 bun run portkey_eoa_skill.ts query tokens --address aBcDeF...123 # 查询在主网AELF上的ELF余额 bun run portkey_eoa_skill.ts query balance --address aBcDeF...123 --symbol ELF --chain-id AELF # 查询ELF和USDT的实时价格 bun run portkey_eoa_skill.ts query price --symbols ELF,USDT执行一笔转账# 在tDVV测试网转账1个ELF (注意金额单位) bun run portkey_eoa_skill.ts transfer \ --to recipient_address_here \ --symbol ELF \ --amount 100000000 \ --chain-id tDVV \ --address your_sender_address \ --password your_wallet_passwordCLI模式的优势输出是结构化的通常是JSON非常适合用jq等工具进行解析从而嵌入到Shell脚本中实现自动化。4.4 SDK模式嵌入你的JavaScript/TypeScript项目如果你需要将aelf钱包功能构建到自己的Node.js后端服务、Next.js应用或复杂的AI Agent框架中SDK模式提供了最大的灵活性。安装与引入 首先你需要将项目作为依赖引入。由于项目可能尚未发布到npm一种常见的方式是使用Git仓库直接安装npm install githttps://github.com/Portkey-Wallet/eoa-agent-skills.git # 或 yarn add https://github.com/Portkey-Wallet/eoa-agent-skills.git然后在你的代码中引入import { getConfig, createWallet, getTokenList, transfer, callViewMethod, callSendMethod } from portkey/eoa-agent-skills; import dotenv from dotenv; dotenv.config(); // 加载 .env 文件中的环境变量实战示例构建一个自动监控机器人 假设我们要构建一个服务定时检查某个地址的资产并发送通知。async function monitorPortfolio(address: string) { // 1. 获取配置默认读取 process.env.PORTKEY_NETWORK const config getConfig(mainnet); // 2. 查询该地址的完整资产列表 const portfolio await getTokenList(config, { address }); if (portfolio.success portfolio.data) { const totalValue portfolio.data.reduce((sum, token) { // 假设token.price是美元价格token.balance是带小数位的余额 return sum (parseFloat(token.price || 0) * parseFloat(token.balance)); }, 0); console.log(地址 ${address} 总资产估值: $${totalValue.toFixed(2)}); // 3. 可以进一步过滤、分析或发送到钉钉/Telegram portfolio.data.forEach(token { if (parseFloat(token.balance) 0) { console.log( - ${token.symbol}: ${token.balance} (≈ $${(parseFloat(token.balance) * parseFloat(token.price || 0)).toFixed(2)})); } }); } else { console.error(查询资产失败:, portfolio.error); } } // 定时执行例如每5分钟一次 setInterval(() monitorPortfolio(YOUR_WATCH_ADDRESS), 5 * 60 * 1000);SDK集成心得错误处理SDK函数通常返回一个包含success,data,error字段的对象。务必检查success状态并妥善处理error。配置管理getConfig函数是入口它整合了环境变量和传入的参数。在生产环境中建议将网络类型、API URL等配置集中管理而不是硬编码。异步操作所有涉及链上交互的函数都是异步的。确保在async函数中使用await或妥善处理Promise。5. IronClaw WASM原生工具面向未来的运行时项目文档中提到了一个实验性的IronClaw原生WASM构建。这是一个重要的方向旨在摆脱对Node.js/Bun运行时的依赖让技能包能运行在更轻量、更安全的WASM沙箱环境中。当前状态与理解独立构建WASM工具位于ironclaw-wasm/目录使用Rust编写依赖aelf-web3.rust库并编译为.wasm文件。它与主项目的JavaScript/TypeScript代码库是分离的。功能对等根据文档这个WASM版本实现了全部23个工具的功能意味着在IronClaw运行时中你可以获得与MCP/CLI/SDK完全一致的能力。状态隔离重要当前WASM版本的钱包存储状态与Bun/Node运行时下的状态是隔离的。这意味着你在MCP中创建的钱包无法直接在IronClaw中使用反之亦然。安装方式WASM版本通过ironclaw tool install命令安装一个打包好的.wasm文件。这更像是为一个特定的“IronClaw运行时”环境发布一个独立应用。对开发者的启示未来潜力如果IronClaw这类WASM运行时成为AI工具生态的标准那么这种部署方式将带来更好的安全性沙箱隔离和可移植性。当前用途对于大多数用户和开发者现阶段仍然应该以MCP/CLI/SDK这三种主要模式为主。WASM版本可以视为一个超前的技术预览和测试路径。开发测试如果你对Rust和WASM感兴趣可以按照文档中的步骤进行本地构建和烟雾测试了解其工作原理。6. 常见问题排查与实战技巧在实际使用中你一定会遇到各种问题。这里我总结了一些高频问题的排查思路和解决方案。6.1 连接与网络问题问题MCP服务器启动失败或CLI/SDK调用返回网络错误。检查网络配置确认PORTKEY_NETWORK环境变量设置正确mainnet或testnet。如果你在墙内环境aelf的某些API端点可能访问不稳定。尝试使用PORTKEY_API_URL覆盖为一个更稳定的网关如果有的话。检查节点状态aelf区块链节点可能偶尔维护或升级。你可以通过访问aelf官方区块浏览器查看最新区块是否在正常产生来初步判断网络健康状况。防火墙与代理如果你在公司网络或使用了代理确保本地的Bun/Node进程有权限访问外部网络。有时需要配置HTTP_PROXY和HTTPS_PROXY环境变量。6.2 交易失败问题问题转账或合约调用一直失败返回“Timeout”或“Transaction expired”。Gas费用不足这是最常见的原因。aelf网络也有Gas概念。在执行发送交易前务必先使用portkey_estimate_fee工具预估费用。确保发起交易的地址有足够的ELF来支付这笔Gas费。Nonce值冲突如果你在短时间内通过同一个地址并发发送多笔交易可能会因为Nonce值设置问题导致后续交易失败。EOA钱包通常会自动管理Nonce但在脚本高频调用时可能出错。解决方案是1) 串行执行交易2) 在失败后等待一段时间再重试。合约方法或参数错误仔细核对合约地址、方法名和参数格式。特别是--params参数它必须是一个合法的JSON字符串。对于复杂参数可以先用portkey_call_view_method测试一下是否能成功读取再尝试发送交易。6.3 钱包与签名问题问题提示“Invalid password”或“Wallet not found”。密码错误加密钱包文件使用AES加密密码错误绝对无法解密。请百分百确认你使用的PORTKEY_WALLET_PASSWORD与创建/导入钱包时设置的密码一致。区分大小写注意特殊字符。钱包文件丢失或损坏检查PORTKEY_WALLET_DIR目录下是否存在对应的.json钱包文件。如果文件被误删你只能通过之前备份的助记词或walletExport字符串重新导入。上下文文件冲突如果你手动修改过~/.portkey/skill-wallet/context.v1.json文件或者多个技能同时写入导致其损坏可能会影响活跃钱包的识别。可以尝试删除这个上下文文件然后重新在技能中设置活跃钱包。6.4 MCP工具调用不响应问题在Claude里提到了相关功能但AI没有调用工具或者说“我没有这个功能”。MCP服务器未运行Claude Desktop需要在启动时加载MCP配置并启动服务器。确保你已正确运行bun run bin/setup.ts claude并且重启了Claude Desktop。你可以在Claude的设置中查看“已连接的服务器”列表。工具描述不匹配AI模型根据工具的名称和描述来决定是否调用。尝试使用更直接、更符合工具描述的语言。例如不说“看看我的币”而说“使用portkey技能查询我的代币列表”。检查MCP日志以调试模式启动MCP服务器可能看到更多信息。你可以尝试直接运行bun run src/mcp/server.ts观察启动过程中是否有报错。6.5 性能与优化建议批量查询如果你需要监控多个地址的资产不要用循环频繁调用getTokenList。aelf的API可能有速率限制。考虑是否可以降低查询频率或者在服务端进行聚合。缓存策略对于不经常变动的数据如代币价格、NFT集合信息可以在你的应用层实现简单的缓存例如缓存5分钟以减少对链的请求次数。错误重试机制网络请求和区块链交易本身具有不确定性。在你的SDK集成代码中对于查询类的失败操作建议实现指数退避的重试机制。对于发送交易失败后需要先查明原因Gas不足、Nonce问题等再决定是否重试。7. 安全最佳实践与高级用法将私钥和区块链交互交给AI操作安全是重中之重。以下是我在实际使用中总结出的安全守则。7.1 密钥生命周期管理创建阶段始终在可信的离线环境中创建钱包。虽然MCP服务器在本地运行但确保你的电脑没有恶意软件。存储阶段坚决依赖项目的加密存储。让PORTKEY_WALLET_PASSWORD成为访问钱包的唯一凭证并像保护银行密码一样保护它。使用阶段为不同用途创建不同钱包不要将所有资产放在一个AI可操作的钱包里。可以创建一个“热钱包”存放少量用于日常交互的资产而将大额资产存放在完全离线的“冷钱包”中。限制授权使用portkey_approve工具授权合约使用你的代币时只授权必要的数量而不是无限大uint256.max。授权后对于不再使用的合约记得将其授权额度设置为0。备份阶段加密导出优先使用portkey_backup_wallet生成的加密walletExport字符串进行备份。将这个字符串和你的密码分开保管例如字符串存密码管理器密码记在脑子里。助记词备份仅在首次创建钱包时安全地记录下助记词并离线保存如写在纸上存放在保险箱。切勿将助记词截图或保存在联网设备中。7.2 在团队或生产环境中使用如果你想在团队协作或自动化生产流程中使用这个技能包需要更严格的规范。环境变量集中管理使用.env文件但将其加入.gitignore。通过CI/CD管道如GitHub Actions Secrets, GitLab CI Variables在部署时注入PORTKEY_WALLET_PASSWORD等敏感信息。使用服务账户钱包创建一个专门用于自动化脚本或服务的钱包地址。定期审计该地址的交易记录。操作审计由于AI操作的记录可能散落在聊天记录中难以追溯。建议在重要的写操作如大额转账、合约授权时强制要求通过CLI或SDK执行并将执行命令、交易哈希、时间戳记录到独立的审计日志中。权限隔离如果使用SDK集成到后端服务确保运行服务的服务器具有严格的网络访问控制和文件系统权限防止钱包文件被非法读取。7.3 扩展与自定义开发eoa-agent-skills项目本身结构清晰非常适合在其基础上进行二次开发。添加新的查询工具如果你想查询aelf链上特定的DeFi协议数据如某个DEX的流动性池信息可以模仿src/core/queries/目录下的文件编写新的查询函数然后在src/mcp/tools/下注册为新的MCP工具最后在CLI和SDK中暴露接口。集成其他链项目的核心逻辑是与aelf-sdk交互。理论上你可以仿照其结构创建一套针对以太坊使用ethers.js、BNB Chain等的新核心模块并通过相同的适配器MCP/CLI/SDK提供出去构建一个多链的AI Agent技能库。自定义AI工作流结合LangChain等框架你可以将这里的SDK函数包装成更复杂的“链”Chain。例如创建一个“安全转账链”先查询余额 - 预估Gas - 检查接收地址格式 - 最终确认并执行转账。将多个原子操作组合成一个可靠、安全的自动化工作流。这个项目打开了一扇门让AI不再是区块链世界的旁观者而是成为了一个可以安全、可控的执行者。从简单的查询到复杂的合约交互它提供了一套标准化、可扩展的解决方案。无论你是想提升个人效率还是为你的产品增加AI驱动的区块链功能portkey/eoa-agent-skills都是一个值得深入研究和使用的强大工具箱。