💡合规声明:本文仅为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.js | Polygon网络连接、余额查询 |
| 市场数据 | @polymarket/clob-client | 接口对接、数据调取 |
| AI编排 | LangChain | Agent搭建、工具调用管理 |
| 大模型 | 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操作变成简单的指令交互。
未来可拓展方向:多市场并行监控、动态频率调整、历史数据学习优化、多协议技术联动,纯技术探索空间拉满!