带MCP的区块链代理
摘要
互联网从集中式服务提供商向分散式架构的演变标志着向数字自主性和透明度的关键转变。区块链技术通过实现无信任的点对点交互和推动Web3服务的出现,推动了这一转型。然而,区块链系统的固有复杂性仍然对非技术用户构成了重大障碍。为了应对这一挑战,我们提出了一种模块化架构,将人工智能(AI)代理与区块链环境无缝集成,以使访问民主化并简化用户交互。我们的系统利用大型语言模型(LLM)来解释用户意图,使用轻量级的相关性分类器过滤掉不相关或不安全的输入,并通过模型上下文协议(MCP)执行经过验证的操作。通过抽象技术复杂性并纳入人在环保护措施,我们的方法促进了一个更易访问、更安全、以用户为中心的去中心化生态系统。
______________________________________________________________________
概述
一个轻量级的web应用程序+节点服务器,允许您通过MCP工具支持的会话代理与EVM兼容的区块链进行交互。
- 目的:提供一个简单、有指导的用户体验,通过人工智能助手和一组MCP工具执行常见的区块链操作。
- 技术:前端(HTML/CSS/JS+MetaMask),后端Node.JS(Express、Ethers v5、MCP SDK),可选外部API。
- 范围:读取账户数据,使用MetaMask准备/发送交易,部署并与合约交互,获取加密货币价格,查看最近的交易历史,以及审计合约。
______________________________________________________________________
建筑
组件:
- 终端用户:使用数字钱包查询区块链或发起交易的个人。
- 数字钱包:管理加密货币、代币和NFT的应用程序。它们安全地存储加密密钥,处理用户身份验证,并实现用于交易确认的Human in the Loop(HIL)机制。
- 用户意图提取模块(UIEM):使用底层LLM捕获和解释用户意图。它提取相关参数,选择适当的工具,提供文本反馈,并在交互中维护上下文。
- 相关性分类器:评估用户输入与代理范围的相关性。相关请求已转交给教科文组织教育研究所;无关的触发错误消息。
- MCP客户端:从UIEM接收工具执行指令,与MCP服务器通信,调用工具并检索响应。
- MCP服务器:托管并执行通过MCP公开的工具。调用后,它运行所请求的工具,并将结果作为JSON消息返回。
- 区块链:通过数字钱包访问的API支持用户交互和交易的去中心化网络。
- 外部服务:可通过API访问的区块链相关服务,提供网络状态信息或更高级别的功能。
工作流程:
- 用户身份验证:用户通过他们的数字钱包进行身份验证,这是区块链生态系统中的唯一身份。身份验证责任完全委托给钱包,确保代理永远不会直接访问敏感的个人数据。用户发起的所有区块链交互都是通过钱包独家路由的,钱包保留了签署交易的唯一权限。此外,当代数字钱包实现了交易审批的人在环机制。在执行不可逆的操作(如代币转移、加密货币交换或智能合约部署)之前,系统会提示用户进行明确确认。
- 相关性过滤:当用户通过聊天机器人界面提交命令时,消息在到达核心AI代理之前首先由相关性分类器进行评估。该分类器由轻量级LLM提供支持,执行语义分析以评估输入是否与代理的功能范围一致。此过滤步骤通过确保只有相关输入到达核心系统,减少了离题交互并增强了整体用户体验。
- 提取用户意图和参数:在相关性验证后,用户的消息被转发到主模型进行更深入的分析。UIEM的主要功能是解释自然语言输入,识别用户的意图,并将其映射到代理的预定义动作之一。它还提取并验证相关参数,以确保它们符合可靠执行所需的格式、完整性和清晰度。如果请求可以在内部解析,则模型会为用户界面生成JSON格式的响应。对于区块链相关的任务或外部服务调用,它充当协调器——将意图映射到适当的MCP工具,组装所需的参数,并验证其完整性。当参数缺失或不清楚时,UIEM会启动一个澄清循环,提示用户进行额外输入。这确保了只有在完全定义和授权的情况下才能进行操作,从而最大限度地减少错误和意外操作。
一旦所有信息都得到验证,模块就会通过MCP客户端调用所选的MCP工具来执行所请求的操作。
- 命令执行:在收到MCP客户端的请求后,MCP服务器使用提供的参数执行指定的工具。该工具执行二次验证,以确保语义正确性和逻辑连贯性。一旦验证,该工具将继续执行所请求的操作,这可能涉及与外部API、区块链节点或其他服务的交互。输出的格式具有可读性,以方便用户解释。交易的最终提交委托给用户的钱包,确保HIL确认,以防止未经授权的执行。
______________________________________________________________________
存储库结构
ai_agent.html:代理的主UI页面。server.js:Express服务器、MCP客户端引导程序、静态主机和API代理。package.json:节点项目元数据和依赖关系。supportedChains.js:链注册表(ID、符号、通过Infura的RPC URL(如适用))。datasets/:用于评估的精选查询数据集的集合。
文件夹
css/:UI样式(styles.css).img/:UI图标和图像(MetaMask等)。js/
- interact.js:UI逻辑、消息处理、按钮和MetaMask驱动的流。 - script.js:核心应用程序逻辑:MetaMask连接、MCP动作执行、Claude代理调用、待定tx流。 - walletInteraction.js:通过MetaMask发送本地转账和合约交易;使用签名者部署合约。 - chainsClient.js:用于网络映射的链名/ID助手。 - confirmation.js:UI中的待处理事务小部件和状态更新。
mcp/
- tools.js:注册MCP工具(getBalance、getGasPrice、getTransactions、getPrice、prepareTransaction、deploySC、prepareContractInteraction、列出/描述合同、通过API进行审计、writeContract)。 - contracts.js:将已部署的合同持久化 .data/contracts.storage.json 并公开辅助查询/资源。 - contractInteraction.js:准备对已部署合同的读/写调用;模拟读取和估计气体。 - contractWriter.js:根据自然语言提示生成合同。 - deployContract.js编制Solidity,估算部署天然气/成本;前端使用MetaMask完成。 - prepareTransaction.js:验证、估计和返回本地传输的元数据。 - transactionHistory.js:通过Etherscan-family API获取最近的交易。 - priceUtils.js:检索加密货币价格(CoinGecko)并格式化输出。 - scanContractsApi.js:通过ChainGPT API审核合同,并将文本报告存储在 .reports/.
datasets/
- EvaluationDataset:仅包含相关查询。目标:评估参数提取的正确性,并验证最终的工具响应。 - AblationStudyDataset:50%的相关查询和50%的不相关查询。目标:衡量相关性分类器的有效性和对下游动作选择的影响。
- 运行时根生成的文件夹
- .data/:本地存储(例如。, contracts.storage.json). - .reports/:漏洞扫描报告(送达地址: /reports). - .generated-contracts/:由生成代码的工具保存的合同/工件。
相关性分类器
relevanceClassifier.js:使用本地Claude代理端点。relevanceClassifierGemini.js:使用Gemini API的替代相关性分类器。
______________________________________________________________________
先决条件
- Node.js 18+(ESM支持、fetch和现代Express)。
- 安装了MetaMask扩展的浏览器。
- 可选:Ganache(或另一个本地EVM RPC)用于本地测试。
______________________________________________________________________
环境变量
创建一个 .env 项目根目录中的文件。只设置你需要的东西;标记的按键(可选)解锁额外功能或降低速率限制。
大多数网络都需要
INFURA_API_KEY:用于为许多受支持的链构建RPC URL。
法学硕士和分类
CLAUDE_API_KEY:内置相关性和意图分析代理需要(/api/claude).GEMINI_API_KEY(可选):如果你将相关性分类器切换到Gemini。
探索者和审计
ETHERSCAN_API_KEY(可选):在Etherscan系列浏览器上增加限制并启用更丰富的历史记录。CHAINGPT_API_KEY(可选,但建议用于审计):通过ChainGPT启用智能合约漏洞扫描。
示例 .env:
INFURA_API_KEY=your_infura_key
CLAUDE_API_KEY=your_claude_key
ETHERSCAN_API_KEY=your_etherscan_key # optional
CHAINGPT_API_KEY=your_chaingpt_key # optional
GEMINI_API_KEY=your_gemini_key # optional______________________________________________________________________
本地设置和运行
- 安装依赖项
npm install- 创建
.env如上所示的文件(位于项目根目录)。
- 启动服务器(提供静态文件并在端口3000上公开API)
node server.js- 或者通过VS代码任务:“启动开发服务器”。
- 服务器以静态方式为项目文件夹提供服务。
- 打开用户界面
- 引导到
http://localhost:3000/ai_agent.html.
- MetaMask网络
- 对于公共测试网络(例如以太坊Sepolia、Polygon Amoy、Base/Arbitrum/Optism Sepolia),确保MetaMask与您的行动目标位于同一网络上。
- 对于Ganache的本地测试:
- 启动Ganache http://127.0.0.1:7545 (链ID 1337). - 在MetaMask中添加指向该RPC和链ID的自定义网络。
______________________________________________________________________
使用应用程序
- 在浏览器UI中:
- 点击“连接钱包”,在MetaMask中批准连接。 - 一旦连接,输入框就会激活。问这样的问题: - “显示我的余额” - “向0x发送0.01 ETH…” - “汽油价格是多少?” - “BTC在美元/欧元中是什么?” - “显示我最近的5笔交易” - “列出我部署的合同” - 对于合同: - 使用“部署智能合约”上传 .sol 文件,可选择设置构造函数参数(JSON数组),然后使用MetaMask进行部署。 - 使用“智能合约审核”上传 .sol 文件并运行基于API的审核(需要 CHAINGPT_API_KEY). - 要与之前部署的合约交互,请助理准备一个函数调用;您将通过MetaMask进行确认。
- 交易流程:
- 代理人准备所有交易细节。您将在聊天中看到一个确认问题。 - 提示时在MetaMask中批准;侧边栏显示了挖掘前的待处理事务。
______________________________________________________________________
支撑链
- 以太坊(主网,Sepolia)
- Arbitrum(One,Sepolia)
- 基地(主网、Sepolia)
- 乐观主义(Mainnet、Sepolia)
- Polygon(主网,厦门)
- 雪崩(C链,富士)
- BSC(主网、测试网)
- 甘纳许
完整的映射和RPC端点在中定义 supportedChains.js (许多使用Infura URL构建 INFURA_API_KEY).
______________________________________________________________________
数据和日志
- 合同登记处:
.data/contracts.storage.json. - 审计报告:
.reports/. - 生成的合同:
.generated-contracts/.
______________________________________________________________________
注意事项和提示
- 如果要提交事务,请始终将MetaMask网络与操作的网络相匹配。如果它们不同,应用程序会要求您在MetaMask中切换网络,然后重试。
- Explorer API可能会对请求进行速率限制;设置
ETHERSCAN_API_KEY帮助。 - 不要硬编码您的API密钥;将它们保存在环境变量中
.env文件。
