程序员干货|Web3智能Agent实战,链上监控技术拆解🔥

6 阅读7分钟

💡合规声明:本文仅为Web3+AI技术案例分享,无任何投资建议、无交易诱导,所有代码仅作技术学习参考,严禁用于真实资金操作!

💡 开篇直击:AI Agent到底能玩出什么新花样?

还在觉得Web3和AI是两张皮?这套去中心化预测市场智能监控系统,直接把大模型做成“全自动技术管家”,不用硬写复杂策略,AI自己看懂逻辑、分析数据、执行流程,纯技术视角拆解落地思路,小白也能看懂硬核逻辑!


🎯 核心场景:预测市场的技术切入点

以Polymarket这类去中心化预测平台为例,平台采用YES/NO二元代币机制,理论上两类代币价格总和应趋近固定值。但受市场流动性、信息差、接口延迟影响,价格关系会出现短期偏离,这不是套利机会,而是技术层面的价格异常监控场景,也是AI Agent发挥作用的核心突破口。

传统量化全靠硬编码规则,改策略就要改代码;咱们这套方案,直接用大语言模型做决策大脑,自然语言就能下达指令,彻底降低Web3工具开发门槛!


⚙️ 系统架构:4大模块闭环,稳如泰山

全程模块化设计,感知-决策-执行全链路打通,4个核心工具各司其职,技术逻辑超清晰👇

  • 市场扫描工具:实时对接平台接口,抓取市场数据、代币价格、标的信息,相当于AI的“眼睛”
  • 余额核查工具:前置风控环节,链上余额实时查询,杜绝交易失败、异常调用
  • 深度分析工具:调取订单簿数据,分析买卖盘档位,判断数据有效性
  • 指令执行工具:严格遵循风控规则,完成标准化操作,全程无越界行为

✅ 硬核风控设计(技术安全天花板)

  • 单笔操作额度硬性封顶,哪怕指令异常也无法突破
  • 金额-份数自动换算,适配平台接口规则,避免参数错误
  • 余额前置校验,从源头杜绝无效调用、链上失败损耗

🤖 AI决策层:大模型接管策略逻辑

选用DeepSeek-V3大模型,搭配LangChain框架做Agent编排,开启函数调用功能,让AI拥有自主调用工具的能力:

收到指令→AI判断用什么工具→按顺序执行→解析返回数据→做出下一步动作,全程无需人工干预,纯自动化技术流程。

关键细节:模型温度设为0,输出全确定性,杜绝随机操作、错误决策,保证技术稳定性。


🔍 技术实现:从数据监控到安全执行

1. 市场数据抓取(标准化接口对接)

通过平台GammaAPI提取结构化数据,包含市场标题、代币ID、双边价格、结果选项,AI拿到数据后快速做价格拟合分析,识别异常波动。

2. 订单簿深度分析(技术研判)

不只看表面价格,更要分析买卖盘深度,判断数据异常是否具备可观测性,排除流动性不足导致的无效信号,这是技术方案严谨性的关键。

3. 安全指令机制(三重防护)

  • 额度校验:超限额直接拒绝执行
  • 份数校验:金额不足直接终止操作
  • 限价模式:锁定操作价格,避免参数偏差

🔄 无人值守运行:24小时技术监控

主循环+冷却机制设计,兼顾稳定性与成本控制,工程细节拉满👇

  • 定时轮询:每2分钟执行一次扫描,规避API频率限制
  • 成本控制:减少无效模型调用,降低Token损耗
  • 异常容错:报错自动休眠30秒,避免错误雪崩,系统自愈

最绝的是自然语言指令:不用改代码,直接用中文下达监控指令,AI就能精准执行,非技术人员也能玩转Web3+AI工具!


⚠️ 技术风险与合规提示(必看)

已落地的技术防护

风险类型技术防护措施
操作超限风险单笔额度硬性上限
无效调用风险前置余额核查
参数偏差风险限价模式锁定参数
频繁调用风险冷却期强制休眠

未解决的技术局限

  • 智能合约底层漏洞风险(属于平台底层问题)
  • 接口数据延迟、流动性不足导致信号失效
  • 大模型解析数据偏差、决策误判

再次强调:代码仅用于技术学习、本地测试,严禁用于真实场景、真实资金操作!上线前必须做安全审计、模拟测试,责任自负。


📊 技术栈总结(干货速存)

技术层级选型工具核心作用
链上交互ethers.jsPolygon网络连接、余额查询
市场数据@polymarket/clob-client接口对接、数据调取
AI编排LangChainAgent搭建、工具调用管理
大模型DeepSeek-V3逻辑理解、决策推理
运行环境Node.js+dotenv环境配置、自动化守护

📊代码实例

1.Tools

 import { ethers } from "ethers";
import { ClobClient } from "@polymarket/clob-client";
import { z } from "zod";
import dotenv from 'dotenv';
import { DynamicStructuredTool } from "@langchain/core/tools";

dotenv.config();

// --- 初始化驱动 ---
const provider = new ethers.JsonRpcProvider(process.env.POLYGON_RPC_URL);
const wallet = new ethers.Wallet(process.env.PRIVATE_KEY, provider);
const client = new ClobClient(
    "https://clob.polymarket.com", 
    137,
    wallet,
    {
        apiKey: process.env.POLY_API_KEY,
        apiSecret: process.env.POLY_API_SECRET,
        apiPassphrase: process.env.POLY_PASS_PHRASE,
    }
);

// 1. 搜索工具(修正 URL 和数据结构)
const searchMarketTool = new DynamicStructuredTool({
  name: "search_polymarket",
  description: "搜索 Polymarket 市场。返回包含 YES 和 NO TokenID 及价格的市场列表,用于计算套利空间(YES价格 + NO价格 偏离 1.0)。",
  schema: z.object({
    query: z.string().describe("关键词,如 'Election'")
  }),
  func: async ({ query }) => {
    try {
      // 修正后的 Gamma API URL
      const url = `https://gamma-api.polymarket.com{encodeURIComponent(query)}`;
      const response = await fetch(url);
      const data = await response.json();
      
      // 提取完整的市场对比数据
      return JSON.stringify(data.slice(0, 3).map(event => ({
        title: event.title,
        markets: event.markets.map(m => ({
          question: m.question,
          // 同时返回 YES 和 NO 的 TokenID 供 Agent 对比
          clobTokenId: m.clobTokenId, 
          prices: m.outcomePrices, // 通常 [YES价格, NO价格]
          outcomes: m.outcomes // 通常 ["Yes", "No"]
        }))
      })));
    } catch (error) {
      return `搜索失败: ${error.message}`;
    }
  },
});

// 2. 余额查询工具(新增:防止透支报错)
const getWalletBalanceTool = new DynamicStructuredTool({
    name: "get_wallet_balance",
    description: "查询当前钱包在 Polygon 网络上的 USDC 余额。",
    schema: z.object({}), // 无需参数
    func: async () => {
        try {
            // Polymarket 主要使用 USDC (Polygon 上的地址)
            const usdcAddress = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174";
            const abi = ["function balanceOf(address) view returns (uint256)"];
            const contract = new ethers.Contract(usdcAddress, abi, provider);
            const balance = await contract.balanceOf(wallet.address);
            return `当前钱包余额: ${ethers.formatUnits(balance, 6)} USDC`;
        } catch (e) {
            return `查询余额失败: ${e.message}`;
        }
    }
});

// 3. 下单工具(修正:金额到份数的换算)
const executeOrderTool = new DynamicStructuredTool({
    name: "execute_polymarket_order",
    description: "在 Polymarket 下达限价单。注意:amount 是你想投入的美元金额,我会自动换算成购买份数。",
    schema: z.object({
        tokenId: z.string().describe("目标的 Token ID"),
        price: z.number().describe("下单价格/赔率 (0.01-0.99)"),
        total_dollars: z.number().describe("准备投入的总美元金额"),
        side: z.enum(["BUY", "SELL"])
    }),
    func: async ({ tokenId, price, total_dollars, side }) => {
        try {
            // 风控:硬性上限
            if (total_dollars > 50) return "拒绝执行:单笔金额严禁超过 50 USDC。";
            
            // 换算:Polymarket API 需要的是 size (份数)
            // 份数 = 投入金额 / 单价
            const size = Math.floor(total_dollars / price);
            
            if (size <= 0) return "错误:投入金额不足以购买 1 份。";

            const order = await client.createOrder({
                tokenID: tokenId,
                price: price,
                side: side.toUpperCase(),
                size: size,
            });
            
            // 重要:如果是第一次测试,可以将下一行改为 return JSON.stringify(order) 进行空跑
            const response = await client.postOrder(order);
            return `订单提交成功!ID: ${response.orderID}, 购买份数: ${size}`;
        } catch (e) {
            return `交易失败: ${e.message}`;
        }
    }
});

// 4. 订单簿查询(保持不变)
const getOrderBookTool = new DynamicStructuredTool({
    name: "get_market_orderbook",
    description: "获取买卖盘深度。",
    schema: z.object({ tokenId: z.string() }),
    func: async ({ tokenId }) => {
        try {
            const book = await client.getOrderBook(tokenId);
            return JSON.stringify({ asks: book.asks.slice(0, 2), bids: book.bids.slice(0, 2) });
        } catch (e) { return `获取深度失败: ${e.message}`; }
    }
});

export const Tools = {
    searchMarketTool,
    getWalletBalanceTool,
    getOrderBookTool,
    executeOrderTool
};

2.Agent智能体

import dotenv from 'dotenv';

import { ChatOpenAI } from "@langchain/openai";
import { AgentExecutor, createOpenAIFunctionsAgent } from "langchain/agents";
import { ChatPromptTemplate, MessagesPlaceholder } from "@langchain/core/prompts";
dotenv.config();
import { Tools } from "./tools.js";
// AgentExecutor.js 中修改这一行
const { searchMarketTool, getWalletBalanceTool, getOrderBookTool, executeOrderTool } = Tools;

const allTools = [searchMarketTool,getWalletBalanceTool, getOrderBookTool, executeOrderTool].filter(
 (tool) => tool !== undefined
);
// 检查工具数量是否符合预期
if (allTools.length < 4) {
 throw new Error(`工具加载不完整!期望 4 个,实际加载了 ${allTools.length} 个。`);
}

// 定义策略逻辑
async function startAutoTrading(strategyGoal) {
   // --- 1. 定义策略目标 ---
   const prompt = ChatPromptTemplate.fromMessages([
       ["system", `你是一个专业的无人值守套利机器人。
       你的任务是:
       1. 扫描市场。
       2. 分析买卖深度,寻找价格差或不合理的赔率。
       3. 计算预期收益率(需扣除交易成本)。
       4. 只有在收益率 > 3% 且单笔风险 < 50 刀时才下单。
       5. 每一轮操作后,总结你的动作。`],
       ["human", "{input}"],
       new MessagesPlaceholder("agent_scratchpad"),
   ]);
   // --- 2. 配置 DeepSeek 模型 ---
   const llm = new ChatOpenAI({ 
     apiKey: process.env.DEEPSEEK_API_KEY,
     configuration: {
       baseURL: "https://api.deepseek.com",
     },
     modelName: "deepseek-chat",
     temperature: 0,
   });
   const agent = await createOpenAIFunctionsAgent({ llm, tools: allTools, prompt });
   const executor = new AgentExecutor({ agent, tools: allTools, verbose: true });

   console.log("🚀 全自动交易机器人已启动...");

   while (true) {
       try {
           console.log(`\n[${new Date().toLocaleTimeString()}] 开始新一轮扫描...`);
           
           await executor.invoke({ 
               input: strategyGoal 
           });

           // 强制休眠 2 分钟,防止 API 频率受限或产生过多 token 费用
           console.log("⏳ 扫描结束,进入观察期...");
           await new Promise(resolve => setTimeout(resolve, 120000));
       } catch (error) {
           console.error("❌ 循环中出现异常:", error.message);
           await new Promise(resolve => setTimeout(resolve, 30000)); // 遇到错误休息 30 秒
       }
   }
}

// 启动!
startAutoTrading("搜索关于『2024美国大选』的市场,寻找 YES 和 NO 之间价格加总偏离 1.0 太多的套利机会,并执行操作。");

✨ 结语:Web3+AI的未来方向

这套方案的核心价值,不是让AI做交易决策,而是让AI理解规则、执行流程、管控风险,把复杂的Web3操作变成简单的指令交互。

未来可拓展方向:多市场并行监控、动态频率调整、历史数据学习优化、多协议技术联动,纯技术探索空间拉满!