当前位置: 首页 > article >正文

基于MCP协议的EVM区块链交互服务器:为AI智能体赋能Web3操作

1. 项目概述为AI智能体打开区块链世界的大门如果你正在构建一个AI智能体并且希望它能像人类开发者一样自由地查询以太坊上的余额、读取智能合约的状态甚至帮你执行一笔代币转账那么你很可能需要一个桥梁来连接AI的“思考”与区块链的“执行”。这正是mcpdotdirect/evm-mcp-server项目的核心价值所在。它是一个基于 Model Context Protocol (MCP) 的服务器专门为大型语言模型LLMs和AI智能体提供了与60多个EVM兼容区块链网络交互的统一接口。简单来说这个项目把复杂的区块链RPC调用、合约ABI解析、交易签名等底层操作封装成了22个标准化的“工具”和10个引导式的“提示词”。你的AI助手比如Claude、Cursor的AI功能无需理解Solidity或Web3.js的细节只需要通过自然语言发出指令这个MCP服务器就能在后台完成所有繁重的工作。无论是检查Vitalik的ETH余额直接用vitalik.eth这个ENS域名还是查询某个DeFi合约的APY甚至是帮你签署一笔授权交易它都能胜任。这极大地降低了AI应用接入区块链能力的门槛让开发者可以更专注于业务逻辑和用户体验而不是纠结于如何让AI调用一个JSON-RPC接口。2. 核心架构与设计思路拆解2.1 为什么是MCP协议层的标准化价值在接触这个项目之前你可能尝试过直接让AI调用Web3库或者自己写一套复杂的API网关。前者对AI的上下文理解和代码生成能力要求极高且容易出错后者则意味着沉重的开发和维护负担。MCP的出现正是为了解决“如何让AI安全、可靠地使用工具”这个根本问题。MCP定义了一套标准协议用于描述工具Tools、资源Resources和提示词Prompts。evm-mcp-server完全遵循这一协议这意味着任何兼容MCP的客户端如Claude Desktop、Cursor、MCP Inspector都能即插即用地发现并使用它提供的所有区块链能力。这种设计带来了几个关键优势声明式接口服务器通过一个清单manifest向客户端宣告“我能做这些事”。客户端无需预编译或硬编码就能动态加载和理解这些功能。类型安全与自描述每个工具都明确定义了输入参数的类型如string,number,address和描述。AI能根据这些描述更准确地理解何时以及如何使用该工具。统一的通信机制无论是通过标准输入输出stdio还是HTTPSSE通信格式都是统一的JSON-RPC简化了客户端集成。这个项目的架构可以看作是一个“区块链能力适配层”。底层使用业界成熟的viem库处理与各种EVM链的通信上层则按照MCP的规范将viem的功能包装成一个个独立的工具。这种设计确保了核心区块链交互的稳定性和性能同时通过MCP协议实现了对AI生态的友好接入。2.2 多链支持的实现策略从硬编码到动态发现支持60多条链听起来是个庞大的工程。该项目采用了一种务实而高效的策略预定义链配置 动态RPC客户端管理。在src/core/chains.ts文件中你会找到一个庞大的链信息对象。每条链不仅包含了标准的id、name、nativeCurrency还预置了多个公共RPC端点。这是保证服务可用性的关键。当一个工具调用指定了network: optimism时服务器会根据这个配置初始化一个连接到Optimism网络的viem客户端。实操心得RPC节点的选择与降级在实际部署中完全依赖公共RPC节点可能存在速率限制或单点故障风险。虽然项目预置了多个备选节点但对于生产环境我强烈建议配置自己的节点服务商如Infura、Alchemy、QuickNode的URL。你可以修改chains.ts或者更优雅地通过环境变量动态覆盖特定链的RPC URL。一个常见的模式是设置ETHEREUM_RPC_URL、OPTIMISM_RPC_URL等环境变量在客户端初始化时优先使用这些配置。2.3 钱包管理的安全哲学私钥与助记词的权衡项目提供了两种钱包配置方式直接提供私钥或提供BIP-39助记词。从安全性和可用性角度它们各有优劣私钥 (EVM_PRIVATE_KEY)简单直接对应一个确定的以太坊地址。适合脚本、机器人或单一用途的服务。但其安全性完全依赖于私钥本身的保管一旦泄露对应的地址就完全失控。助记词 (EVM_MNEMONIC)配合EVM_ACCOUNT_INDEX可以从一个助记词派生出无数个地址遵循BIP-44路径m/44/60/0/0/{index}。这更适合管理多个测试账户或具有层级结构的钱包。安全警告助记词是所有派生私钥的根泄露助记词意味着泄露所有派生账户风险更高。在代码层面服务器在启动时会检查这两个环境变量。如果同时存在私钥的优先级高于助记词。钱包实例仅在需要执行写操作发送交易、签名时才会被创建和使用。对于只读操作查询余额、读取合约根本不需要钱包这符合最小权限原则。3. 核心工具解析与使用要点3.1 智能合约交互的“魔法”自动ABI获取对于AI智能体而言理解并构造一个正确的合约调用是最大的挑战之一因为这需要预先知道合约的ABI应用二进制接口。evm-mcp-server最巧妙的设计之一就是通过get_contract_abi工具和集成在read_contract/write_contract中的自动获取逻辑几乎消除了这个障碍。其工作原理如下当调用read_contract且未提供abiJson参数时工具会首先尝试从内置的简易公共ABI库中查找常见函数如balanceOf,symbol,name。如果未找到且配置了ETHERSCAN_API_KEY工具会自动调用get_contract_abi通过Etherscan的V2 API该API支持项目列表中的60多条链获取完整ABI。获取到ABI后viem库会对其进行解析找到匹配functionName的函数片段并自动将输入的args编码成区块链能理解的调用数据。这意味着AI只需要知道“我想调用合约X的Y函数参数是Z”服务器就能处理剩下的一切。例如AI可以这样请求“读取Uniswap V2工厂合约0x5C69...下的allPairsLength函数。” 服务器会自动获取ABI执行调用并返回结果。注意事项API限制与缓存Etherscan的免费API有每日调用次数限制通常5万次/天。在频繁调用未知合约的场景下很容易触发限流。建议缓存ABI对于常用的合约可以将获取到的ABI缓存到本地数据库或文件中避免重复查询。备用数据源可以考虑集成其他链上数据源如Blockscout、Covalent作为备用或者使用The Graph进行索引查询。提示AI在给AI的提示词中可以加入“对于常见协议如Uniswap, Aave, USDC优先使用已知的、已验证的合约地址”。3.2 ENS集成让地址对人类和AI都更友好所有接受地址参数的工具都支持ENS域名。这是提升AI交互体验的一个巨大进步。对比以下两种指令“查询地址0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045的ETH余额。”“查询vitalik.eth的ETH余额。”显然后者对人类和AI都更自然。服务器在接收到参数后会先判断其是否为有效的ENS域名通常以.eth结尾或符合其他TLD如.xyz。如果是则调用resolve_ens_name工具内部使用viem的getEnsAddress方法将其解析为标准的42字符地址再进行后续操作。避坑指南跨链ENS解析需要注意的是ENS解析主要依赖于以太坊主网。虽然一些L2如Optimism、Arbitrum通过桥接或自定义解析器也提供了一定程度的ENS支持但并非所有链上的所有工具都能保证ENS解析成功。在涉及非主网操作时最稳妥的方式是让AI先在主网上解析出地址再将地址用于目标链的操作。或者在工具调用失败时提供清晰的错误信息提示用户“ENS解析失败请尝试使用完整的以太坊地址”。3.3 批量查询利器Multicall优化区块链上的每一次RPC调用都有延迟对于需要查询多个数据的AI应用来说串行调用是不可接受的。multicall工具解决了这个问题。它利用了一个叫做“Multicall3”的智能合约允许将多个只读view/pure调用打包进一个交易中发送给节点节点在同一区块状态下执行所有调用并返回结果。例如一个DeFi看板AI可能需要同时获取用户在不同池子里的流动性、质押奖励和代币价格。没有multicall这可能需要几十次独立的RPC调用。使用multicall只需一次。在tools.ts的实现中它接收一个calls数组每个元素包含contractAddress,functionName,args。服务器会为每个调用编码数据然后通过viem的multicall方法一次性发送。实操心得设置合理的Gas与超时尽管multicall是只读的不消耗Gas但复杂的批量调用仍可能因为RPC节点处理超时而失败。在调用multicall工具时可以考虑通过环境变量或配置项为viem客户端设置更长的timeout和batch.size。对于非常重要的查询还可以实现一个重试机制当批量调用失败时自动退化为串行调用虽然慢但更可靠。4. 从零到一的部署与集成实战4.1 环境搭建与配置详解假设我们想在本地开发环境运行这个服务器并与Cursor编辑器集成。以下是详细步骤步骤一安装与依赖项目推荐使用Bun因为它启动更快对TypeScript支持更好。如果你没有Bun用Node.js也可以。# 使用 Bun (推荐) curl -fsSL https://bun.sh/install | bash # 重启终端后 bun --version # 克隆项目 git clone https://github.com/mcpdotdirect/mcp-evm-server.git cd mcp-evm-server # 安装依赖 bun install步骤二关键环境变量配置创建项目根目录下的.env文件确保该文件已被.gitignore忽略防止密钥泄露。# .env 文件示例 # 方式一使用助记词更灵活可管理多个账户 EVM_MNEMONICyour twelve or twenty four word mnemonic phrase here EVM_ACCOUNT_INDEX0 # 使用助记词派生的第一个账户 # 方式二使用私钥更简单直接 # EVM_PRIVATE_KEY0x你的64位十六进制私钥可带0x前缀 # Etherscan API Key (用于自动获取ABI强烈建议申请) ETHERSCAN_API_KEYYourApiKeyToken安全警告EVM_MNEMONIC或EVM_PRIVATE_KEY是访问你加密资产的全部凭证。切勿将它们提交到任何公开的代码仓库。对于生产环境应使用安全的密钥管理服务如AWS Secrets Manager, HashiCorp Vault或硬件钱包集成来注入这些密钥。步骤三运行服务器你可以选择两种模式运行Stdio模式适用于CLI工具或桌面应用如Claude Desktop集成。bun startHTTP模式适用于Web应用或需要远程连接的情况。bun start:http默认HTTP服务器运行在http://localhost:3001并提供了SSE端点http://localhost:3001/sse供MCP客户端连接。4.2 与Cursor编辑器的深度集成Cursor通过其内置的MCP客户端支持可以无缝连接本地运行的evm-mcp-server让AI助手具备区块链能力。配置方法项目级推荐 在项目根目录创建.cursor/mcp.json文件。这种配置是项目级别的方便团队共享。{ mcpServers: { evm-mcp-server: { command: bun, args: [run, start], env: { EVM_MNEMONIC: your_mnemonic_here, ETHERSCAN_API_KEY: your_api_key_here } } } }配置解析command: 启动服务器的命令这里是bun。args: 传递给命令的参数[run, start]对应执行package.json中的start脚本。env: 在这里直接定义环境变量比在系统环境里设置更安全、更项目化。Cursor会在启动服务器进程时注入这些变量。配置方法全局级 你也可以在Cursor的设置界面Settings - Features - MCP Servers中全局添加。但出于安全考虑不建议在此处填写真实的助记词或私钥。集成后的使用场景 配置成功后重启Cursor或打开项目。现在你可以在编辑器里直接向AI提问“帮我查一下vitalik.eth在以太坊主网还有多少ETH”“在Sepolia测试网上给我的地址转0.1 Sepolia ETH。”“读取一下Uniswap V2在以太坊上的工厂合约地址0x5C69...里一共有多少个交易对了”AI会理解你的意图自动调用相应的MCP工具并将结果以自然语言的形式返回给你。整个过程你不需要写一行Web3代码。4.3 实战构建一个自动化的空投检查脚本让我们通过一个更复杂的例子看看如何利用这些工具组合成一个实用的工作流。假设你参与了一个项目的测试网活动获得了多个空投资格现在想用一个脚本快速检查所有地址的余额。虽然AI可以交互式地帮你但有时一个脚本更高效。我们可以利用MCP服务器的HTTP模式用Node.js写一个检查脚本。// check_airdrops.js import { McpClient } from modelcontextprotocol/sdk-client; import { StdioClientTransport } from modelcontextprotocol/sdk-client/stdio.js; import { spawn } from child_process; async function main() { // 1. 启动MCP服务器进程HTTP模式或Stdio模式均可 // 这里以Stdio模式为例直接作为子进程启动 const serverProcess spawn(bun, [run, start], { stdio: [pipe, pipe, inherit], // 继承stderr以便查看错误 env: { ...process.env, EVM_MNEMONIC: process.env.YOUR_MNEMONIC } // 从外部环境变量传密钥 }); // 2. 创建MCP客户端并连接到服务器进程 const transport new StdioClientTransport({ command: node, // 占位符实际通信已通过spawn建立 args: [], process: serverProcess // 直接连接到我们启动的进程 }); const client new McpClient({ transport }); await client.connect(); // 3. 定义要检查的地址和网络列表 const checkList [ { ens: myaddress.eth, network: ethereum }, { address: 0x1234..., network: optimism }, { address: 0xabcd..., network: arbitrum-sepolia }, ]; console.log(开始检查空投余额...\n); // 4. 批量查询余额 for (const item of checkList) { try { const address item.ens || item.address; console.log(检查 ${address} 在 ${item.network} 上的余额...); const result await client.invokeTool(get_balance, { address: address, network: item.network, }); // 5. 格式化输出结果 // 注意result.balance 可能是BigInt形式的字符串需要根据链的decimals格式化 // 这里简化处理直接输出原始值和单位 const chainNativeSymbol result.symbol || ETH; // 实际应从chain info获取 console.log( 余额: ${result.formatted || result.raw} ${chainNativeSymbol}); console.log( (原始值: ${result.raw})\n); } catch (error) { console.error( 查询失败: ${error.message}\n); } } // 6. 断开连接并关闭服务器 await client.close(); serverProcess.kill(); console.log(检查完毕。); } main().catch(console.error);这个脚本展示了如何以编程方式连接并使用MCP服务器。在实际生产环境中你可能会使用HTTP模式的SSE连接以便服务器长时间运行供多个客户端或脚本使用。5. 高级特性与安全实践5.1 消息签名与链下认证sign_message和sign_typed_data是两个强大的工具它们使AI能够代表用户进行链下签名。这在以下场景非常有用Sign-In with Ethereum (SIWE)让用户通过签名一条标准消息来登录Web3应用。AI可以协助生成待签名的消息。授权签名 (EIP-712)许多DeFi协议如Uniswap的Permit2使用EIP-712结构化数据来实现免Gas费的授权。AI可以构造出符合规范的typedData然后调用sign_typed_data工具让用户钱包签名。数据完整性证明对任何链下数据如数据库记录、文件哈希进行签名以证明其由特定地址的所有者认可。安全警示这是整个系统中最需要谨慎对待的功能。永远不要让AI在未经用户明确理解和同意的情况下签署任何交易或消息。在实现上任何调用签名工具的请求都应该在前端或中间件层触发一个钱包如MetaMask的弹窗确认让用户亲眼看到他们将要签署的内容。MCP服务器本身只是一个签名执行器必须与一个负责用户意图验证和确认的上层应用配合使用。5.2 错误处理与监控区块链操作充满不确定性RPC节点无响应、交易被拒绝、Gas不足、合约异常……一个健壮的AI应用必须能妥善处理这些错误。服务器工具的设计通常会将错误包装成结构化的JSON响应。例如一个失败的交易可能返回{ error: Transaction execution reverted, details: Error: Insufficient balance for transfer., txHash: 0x..., network: sepolia }在你的AI应用或集成层你需要解析这些错误并将其转化为对人类或AI友好的提示。例如RPC错误提示“网络连接超时请稍后重试或检查你的网络连接。”Gas不足提示“交易预估Gas费失败可能是因为当前网络拥堵。请尝试提高Gas价格或稍后再试。”合约回滚提示“交易被合约拒绝。原因可能是余额不足、授权额度不够、或不符合合约规则。”建议为MCP服务器添加日志记录如使用Winston或Pino库记录所有工具调用、参数和结果注意过滤敏感参数如私钥。这有助于事后审计和问题排查。5.3 性能优化与扩展建议随着支持的链和工具增多服务器可能面临性能压力。以下是一些优化思路RPC连接池为每条链维护一个稳定的RPC客户端连接池而不是每次调用都新建连接。viem客户端本身是轻量的但保持长连接可以减少握手开销。ABI缓存层如前所述实现一个Redis或内存缓存将获取到的合约ABI缓存起来并设置合理的TTL例如24小时。这能极大减少对Etherscan API的调用。工具懒加载并非所有工具都需要在服务器启动时就完全初始化。可以考虑按需初始化某些重型依赖。支持自定义链项目通过chains.ts硬编码了链信息。你可以修改它来添加自定义的RPC节点或私有链。更好的方式是设计一个配置接口允许通过环境变量或配置文件动态添加链。实现权限控制当前工具对所有连接客户端开放。在生产环境中你可能需要基于API密钥、JWT令牌或IP白名单对不同客户端的访问权限进行控制例如只允许某些客户端调用写操作。6. 常见问题与故障排查实录在实际部署和使用evm-mcp-server的过程中你可能会遇到以下典型问题。这里记录了我的排查经验和解决方案。6.1 连接与启动问题问题现象可能原因排查步骤与解决方案运行bun start后立即退出无错误信息。1. 端口被占用默认3000/3001。2. 关键环境变量缺失如RPC_URL但项目有默认值此可能性低。3. Bun/Node版本不兼容。1. 检查端口lsof -i :3000(或3001)。2. 使用bun run start:http并加上--port 3002指定新端口。3. 确认Bun版本 1.0.0 或 Node 20。使用bun --version或node --v。Cursor无法连接MCP服务器提示“Connection failed”。1..cursor/mcp.json配置错误。2. 服务器进程未启动。3. 环境变量在Cursor中未生效。1. 检查mcp.json的语法确保路径和参数正确。可以先用命令行手动运行bun run start看服务器能否独立启动。2. 在Cursor的MCP Servers设置界面查看服务器日志如果有。3. 尝试在mcp.json的env字段中直接填写测试用的环境变量排除系统环境变量问题。HTTP模式服务器启动成功但SSE连接失败。1. 客户端连接的URL错误。2. 跨域问题如果客户端是浏览器。3. 服务器防火墙阻止了端口。1. 确认连接URL是http://localhost:3001/sse不是/。2. 检查服务器日志看是否有CORS错误。需要在http-server.ts中正确配置CORS头。3. 用curl http://localhost:3001/sse测试是否能建立连接。6.2 工具调用与区块链交互问题问题现象可能原因排查步骤与解决方案read_contract或write_contract失败提示“Function not found in ABI”。1. 合约地址错误。2. 函数名拼写错误或大小写问题。3. 自动获取的ABI不包含该函数可能是代理合约或未验证合约。1. 在区块浏览器上确认合约地址正确无误。2. 检查函数名是否与合约源码中完全一致Solidity函数名是大小写敏感的。3. 手动调用get_contract_abi工具查看获取到的ABI确认目标函数是否存在。对于代理合约需要读取实现implementation地址的ABI。transfer_native或transfer_erc20交易一直处于pending状态。1. Gas价格设置过低。2. 发送账户余额不足包括不足以支付Gas费。3. 非ce链的Gas费机制特殊如Polygon。1. 先调用get_gas_price工具获取当前网络建议的Gas价格在发起交易时适当调高。2. 调用get_balance确认发送地址有足够的原生代币支付交易费和转账金额。3. 对于某些链可能需要手动指定maxFeePerGas和maxPriorityFeePerGas项目默认可能只用了基础配置。需要修改transfer.ts中的交易构建逻辑。ENS解析失败提示“ENS name not found”。1. ENS域名输入错误或尚未注册。2. 当前连接的RPC节点不支持ENS解析一些L2或测试网的节点可能不支持。3. 网络参数错误在主网解析却指定了测试网。1. 在 app.ens.domains 上确认域名是否存在且已设置解析器。2. 尝试切换到该网络的官方公共RPC或Infura/Alchemy的节点它们通常有更好的ENS支持。3. ENS解析主要在以太坊主网进行。确保调用resolve_ens_name时network参数设置为ethereum无论你后续要在哪条链上操作。解析出地址后再将地址用于其他链的工具。调用需要签名的工具如sign_message时服务器报错“Wallet not configured”。1. 环境变量EVM_PRIVATE_KEY或EVM_MNEMONIC未设置或设置错误。2. 私钥/助记词格式不正确。3. 从助记词派生指定索引的账户失败。1. 检查.env文件是否已加载或环境变量是否在启动进程的环境中正确设置。可以用console.log(process.env.EVM_MNEMONIC?.substring(0, 5))在代码中调试生产环境切勿记录完整密钥。2. 私钥必须是64位十六进制字符带或不带0x前缀。助记词必须是12或24个有效的BIP-39单词。3. 检查EVM_ACCOUNT_INDEX是否为数字。尝试将其设为0。6.3 性能与稳定性问题问题现象可能原因排查步骤与解决方案频繁出现“Rate limit exceeded”错误尤其是在使用自动ABI获取时。Etherscan免费API调用频率超限。1.申请多个API Key并轮询这是最直接的解决方案。在代码中维护一个API Key池每次调用时随机选取一个。2.实现ABI缓存这是必须的。将成功获取的ABI以合约地址_网络ID为键存储到本地文件或数据库并设置较长的过期时间如30天。在获取ABI前先查缓存。3.限制调用频率在服务器端为get_contract_abi工具添加一个简单的速率限制中间件。在多链并发查询时响应变慢甚至超时。1. 公共RPC节点性能瓶颈或限流。2. 服务器资源CPU/内存不足。3. 未使用批量查询multicall。1.升级RPC服务对于高频使用的生产环境投资付费的RPC服务如Alchemy, Infura的付费套餐是值得的它们提供更高的调用速率和稳定性。2.监控与扩容监控服务器的资源使用情况。如果并发请求多考虑使用PM2等进程管理器启动多个实例并用Nginx做负载均衡。3.优化查询模式教育AI或调整提示词让其在可能的情况下优先使用multicall工具进行批量查询。经过几个月的实际使用和调优我发现evm-mcp-server项目为AI与区块链的交互提供了一个极其坚实和灵活的基础。它的价值不在于某个炫酷的功能而在于将一套复杂、分散的能力通过一个标准化、声明式的协议完美地封装起来。这让我能够将精力从“如何让AI调用合约”转移到“如何设计更智能的区块链应用逻辑”上。如果你也正在探索AI与Web3的结合这个项目是一个绝佳的起点。从理解它的设计开始逐步根据自己的业务需求进行定制和扩展你会发现自己正在构建的是未来人机协同的区块链交互新范式。

相关文章:

基于MCP协议的EVM区块链交互服务器:为AI智能体赋能Web3操作

1. 项目概述:为AI智能体打开区块链世界的大门 如果你正在构建一个AI智能体,并且希望它能像人类开发者一样,自由地查询以太坊上的余额、读取智能合约的状态,甚至帮你执行一笔代币转账,那么你很可能需要一个桥梁来连接A…...

RAG 实战:给 AI 接上私有知识库的完整方案

上一篇我们聊了 Agent 动态路由——任务交接时怎么把控流向。这次换个方向,聊一个大家问得最多的问题:怎么让 AI 能回答你自己公司的文档、产品手册、内部 Wiki? 你可能试过直接把文档塞进 System Prompt,结果 token 超限了。你也…...

ARM CP15协处理器架构与缓存控制技术详解

1. ARM CP15协处理器架构解析在ARMv7架构中,CP15协处理器承担着系统控制的核心职能。作为特权模式下才能访问的硬件模块,它通过一组专用寄存器实现对内存管理单元(MMU)、缓存子系统、TLB等关键组件的精细控制。与通用寄存器不同&a…...

小米手表表盘设计终极指南:用Mi-Create打造你的专属表盘

小米手表表盘设计终极指南:用Mi-Create打造你的专属表盘 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 还在为小米手表找不到心仪的表盘而烦恼吗&…...

光伏组件封装产线自动化通讯方案:三菱A系列PLC以太网多节点互联案例

一、行业背景与项目概况1.1 光伏行业技术需求光伏产业是实现“双碳”目标的核心支撑,光伏组件封装产线需实现电池片焊接、层压、裁切、检测等工序的高度自动化与数据互联互通,核心诉求涵盖设备协同联动、数据实时采集、远程运维效率提升,以保…...

我与AI的对话:当教科书思维撞上第一性原理 关于机器学习

一次让我重新思考“正确”的对话最近,我和AI进行了一次对话。起初我只是随口做了一个类比:“无监督学习和监督学习的分类,就像深度学习和机器学习一样。”AI立刻纠正我:这个类比不准确。它解释说,监督/无监督是按“是否…...

大模型API缓存的底层原理:从显存到网关

一、一个直觉引发的思考最近和一位朋友聊到API的缓存,他提出了一个很敏锐的问题:“其实tokens缓存都是假的吧?LLM本身就是无状态的。这种缓存只是一种计费规则。实际上跟上下文显存空间有关,你来用,他那边就会给你开一…...

一种通用的前端复刻思路:提取 UI 结构数据,交给 AI 生成代码

有时需要复刻一个已有的界面——可能是某个网页、一个 App 页面,或者微信小程序。传统做法是对着截图手动写代码,费时且还原度不稳定。最近试了一种方式:先把目标界面的 UI 结构数据提取出来,同时截一张高清截图,两者一…...

5分钟终极指南:一键解密网易云NCM音乐文件,免费高效转换音频格式

5分钟终极指南:一键解密网易云NCM音乐文件,免费高效转换音频格式 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经下载了网易云音乐,却发现文件是加密的NCM格式,无法在其他播…...

JavaScript中利用宏任务拆分阻塞任务的实操案例

...

AutoJS无限制版安装使用教程:附送礼物与私信自动化脚本完整源码分享

AutoJS无限制版安装使用教程:附送礼物与私信自动化脚本完整源码分享 作为一名每天都在各种APP里“摸鱼”的打工人,我最近发现那些重复性的点击操作简直是在浪费生命。比如刷直播间、自动领福利、或者是给喜欢的博主发私信,点多了手都酸。 为了彻底解放双手,我研究了一下 A…...

EvaDB:用SQL桥接数据库与AI模型,构建声明式数据处理流水线

1. 项目概述:当数据库遇上AI,EvaDB想解决什么?如果你最近在关注AI应用开发,尤其是想让大语言模型(LLM)或者计算机视觉模型(CV Model)直接处理你的业务数据,那你大概率会遇…...

图记忆技术:构建LLM智能体的结构化记忆系统

1. 项目概述:图记忆库的兴起与价值如果你最近在关注大语言模型(LLM)和智能体(Agent)的前沿进展,那么“图”这个概念一定频繁地出现在你的视野里。从知识图谱到图神经网络,再到现在的图记忆&…...

医疗AI中的癌症生存率预测:神经网络模型构建与实践

1. 项目背景与核心目标癌症生存率预测一直是医疗AI领域的重要研究方向。基于临床数据构建神经网络模型,能够帮助医生更准确地评估患者预后情况,为个性化治疗方案制定提供数据支持。这个项目需要处理典型的医疗结构化数据,包含患者 demographi…...

图像分类中像素缩放算法选择与优化实践

1. 图像分类任务中的像素缩放方法概述在计算机视觉领域,像素缩放是图像预处理环节中最基础却至关重要的步骤。当我们把原始图像输入卷积神经网络(CNN)进行训练或推理时,绝大多数情况下都需要先将图像调整为统一尺寸。这个看似简单的操作,实际…...

Golioth ESP-IDF SDK:ESP32云端连接开发实战指南

1. Golioth ESP-IDF SDK:为ESP32开发者打造的云端连接利器作为一名长期深耕物联网领域的开发者,我最近在项目中频繁使用ESP32系列芯片,而Golioth新推出的ESP-IDF SDK彻底改变了我的开发体验。这个开源工具包让ESP32硬件与Golioth Cloud的连接…...

OpenPose与Stable Diffusion协同生成姿态控制图像

1. 项目概述:OpenPose与Stable Diffusion的协同工作流去年在开发一个动画项目时,我需要批量生成风格统一但姿态各异的人物图像。传统手动调整不仅效率低下,而且难以保持角色比例的一致性。这时OpenPose与Stable Diffusion的组合方案完美解决了…...

Python机器学习数据预处理实战与Scikit-Learn技巧

1. 数据预处理在机器学习中的核心价值用Python和Scikit-Learn做机器学习时,原始数据就像未经雕琢的玉石——潜在价值巨大但需要精细处理。我在金融风控和医疗影像分析项目中深刻体会到:数据预处理的质量直接决定模型效果上限,其重要性往往超过…...

机器学习核心概念与实践指南

1. 机器学习领域的边界与定位 作为一名在数据科学领域摸爬滚打多年的从业者,我经常被问到这样一个问题:"机器学习到底是什么?它和人工智能、数据挖掘有什么区别?"这个问题看似简单,但要准确回答却需要理清整…...

Reqwest 兼顾简洁与高性能的现代 HTTP 客户端

Reqwest 兼顾简洁与高性能的现代 HTTP 客户端 HTTP 客户端的选择往往面临易用性与性能的权衡,要么接口繁琐但性能出众,要么用法简洁却难以应对高并发场景。Reqwest 基于 Rust 异步运行时 tokio 构建,封装了简洁直观的 API,既能让…...

基于强化学习的浏览器自动化智能体:HyperAgent 架构与实战

1. 项目概述:当强化学习遇见浏览器自动化 最近在开源社区里,一个名为 hyperbrowserai/HyperAgent 的项目引起了我的注意。乍一看,这像是一个将“超”和“浏览器”结合的名字,很容易让人联想到某种增强版的浏览器工具。但深入探究…...

LoRA技术在Stable Diffusion中的高效微调与应用实践

1. LoRA技术概述与Stable Diffusion适配性LoRA(Low-Rank Adaptation)作为大模型微调领域的突破性技术,在Stable Diffusion生态中展现出独特价值。其核心原理是通过低秩矩阵分解,在原始模型参数旁添加可训练的小型适配层。具体到文…...

AI驱动开发工具全景解析:从GitHub Copilot到工作流重构

1. 项目概述:当AI成为你的编程搭档如果你是一名开发者,最近可能已经感受到了身边的变化。以前,我们写代码、查文档、调试Bug,大部分时间都在和IDE、搜索引擎、以及偶尔的Stack Overflow打交道。但现在,一个全新的“同事…...

《100个“反常识”经验11:删了30万行数据表还是那么大?》

本期摘要你用DELETE删了30万行数据,df -h一看磁盘空间没变,表文件还是那么大。这不是Bug,是InnoDB存储引擎的设计特性:DELETE只标记删除,不释放磁盘空间,留下的位置叫“空洞”。真正释放空间需要执行OPTIMI…...

LightGlue深度解析:从自适应剪枝到高速特征匹配的实战指南

LightGlue深度解析:从自适应剪枝到高速特征匹配的实战指南 【免费下载链接】LightGlue LightGlue: Local Feature Matching at Light Speed (ICCV 2023) 项目地址: https://gitcode.com/gh_mirrors/li/LightGlue 在计算机视觉领域,特征匹配作为三…...

MLP、CNN与RNN选型指南:深度学习三大经典网络解析

1. 神经网络选型指南:MLP、CNN与RNN的适用场景解析作为从业十余年的深度学习工程师,我经常被问到同一个问题:"我的项目该用哪种神经网络?"这确实是个值得深入探讨的话题。在本文中,我将结合工业界实战经验&a…...

分布式量子计算:架构演进与关键技术解析

1. 分布式量子计算的核心概念与技术演进量子计算正经历从单量子处理器(QPU)向多节点协同的分布式架构演进的关键阶段。这种转变类似于经典计算从单机走向集群的历史进程,但量子领域面临的挑战更为复杂。分布式量子计算的核心在于通过量子网络…...

Saga分布式事务:补偿事务与协同式的实现对比

Saga分布式事务:补偿事务与协同式的实现对比 在微服务架构中,分布式事务的处理一直是技术难点之一。Saga模式作为一种流行的解决方案,通过将长事务拆分为多个本地事务,并采用补偿或协同机制来保证最终一致性。本文将对比Saga的两…...

LibreDWG:开源CAD格式解析如何打破工程数据壁垒

LibreDWG:开源CAD格式解析如何打破工程数据壁垒 【免费下载链接】libredwg Official mirror of libredwg. With CI hooks and nightly releases. PRs ok 项目地址: https://gitcode.com/gh_mirrors/li/libredwg 你是否曾因无法打开一个DWG文件而陷入困境&…...

神经网络函数逼近原理与实践:从理论到代码实现

1. 神经网络作为函数逼近算法的本质在机器学习领域,监督学习的核心任务可以抽象为函数逼近问题。想象你手中有一本神秘的密码本,左边是各种加密信息(输入),右边是对应的解密内容(输出)。虽然你不…...