本文介绍了如何使用Coinbase的AgentKit构建一个能够与区块链网络交互的AI代理,并详细说明了如何通过Twitter与用户互动。文章提供了从安装到配置、代码解析和测试的完整步骤。
Coinbase 的 AgentKit 是一个强大的工具,用于构建能够与区块链网络交互、执行任务并与社交媒体平台上的用户互动的自主 AI 代理。本指南将引导你创建一个简单的 AI 代理,该代理可以管理钱包、部署代币并与 Twitter (X) 上的用户互动。
更喜欢视频教程?跟随这个视频学习如何在不到 15 分钟的时间内使用 Coinbase AgentKit 创建一个 web3 AI 代理。
订阅我们的 YouTube 频道以获取更多视频!订阅
AgentKit 是 Coinbase 的工具包,用于将 AI 代理与区块链功能集成。它充当大型语言模型(LLMs)如 ChatGPT 与区块链操作之间的桥梁,使代理能够:
AI 代理建立在三个主要组件之上:区块链操作、AI 决策和用户交互。
其核心是使用 Coinbase 的 AgentKit 通过 CDP SDK 处理所有区块链操作(如部署代币或管理钱包)。这一核心功能通过由 LLMs 驱动的 AI 层增强,该层决定采取哪些操作。
我们的实现的特别之处在于我们添加的 自定义 Twitter (X) 集成。虽然 AgentKit 提供了默认的区块链工具,但我们通过自定义 Twitter 工具扩展了系统,使代理能够通过社交媒体与用户互动。
代理可以以三种模式运行:自主(自行决策)、交互(响应直接命令)和 Twitter 模式(我们的自定义添加,响应社交媒体互动)。在本指南中,我们将重点关注自主模式和 Twitter 模式。
所有这些组件都由我们代码库中的 BaseAIAgent
类协调,该类充当中央控制器,在用户输入、AI 决策和区块链操作之间进行协调。这种模块化设计意味着你可以轻松添加自己的自定义工具或修改现有功能,而不会破坏核心系统。
在 QuickNode 上安装插件(如 Coinbase AI AgentKit)非常简单。如果你还没有注册,可以在这里创建账户。如果你还没有创建端点,可以在点击左上角的 创建 按钮后选择 创建端点。
之后,导航到仪表板上的 Marketplace 选项卡 并选择 Coinbase AI AgentKit 插件。点击 探索 按钮,然后点击 安装 按钮将插件添加到你的账户。
我们在仓库中有一个预构建的示例项目,所以你只需要克隆它并设置环境。
git clone https://github.com/quiknode-labs/qn-guide-examples.git
cd ai/coinbase-ai-agent
npm install
在运行代理之前,你需要设置环境变量。项目使用 .env
文件进行配置。
复制示例环境文件:
cp .env.example .env
然后,打开 .env
并添加所需的凭证。
Coinbase 的 CDP API 允许 AI 代理在 Base 网络上执行区块链操作。
.env
文件中:CDP_API_KEY_NAME="your-cdp-api-key-name"
CDP_API_KEY_PRIVATE_KEY="your-cdp-api-key-private-key"
更多详细信息,请参阅 Coinbase 的 CDP 文档。
为了实现社交互动,AI 代理需要访问 Twitter (X) API。
将它们添加到你的 .env
文件中:
TWITTER_API_KEY="your-twitter-api-key"
TWITTER_API_SECRET="your-twitter-api-secret"
TWITTER_ACCESS_TOKEN="your-twitter-access-token"
TWITTER_ACCESS_SECRET="your-twitter-access-secret"
TWITTER_USER_ID="your-twitter-user-id"
更多详细信息,请参阅 X 的 API 文档。
AI 代理使用 OpenAI(或其他 LLM)进行智能响应和决策。
.env
文件中:OPENAI_API_KEY="your-openai-api-key"
如果你使用的是不同的 LLM,请相应地更新 API 密钥。
在运行代理之前,让我们探索代码库以了解 AI 代理的工作原理。
agent.ts
文件是 AI 代理的核心逻辑。本节概述了其功能和关键组件。
BaseAIAgent
类负责:
// 其余代码
let walletDataStr: string | null = null;
// 如果存在,读取现有钱包数据
if (fs.existsSync(WALLET_DATA_FILE)) {
try {
walletDataStr = fs.readFileSync(WALLET_DATA_FILE, "utf8");
} catch (error) {
console.error("读取钱包数据时出错:", error);
// 继续执行,没有钱包数据
}
}
// 其余代码
// 保存钱包数据
const exportedWallet = await this.agentkit.exportWallet();
fs.writeFileSync(WALLET_DATA_FILE, exportedWallet);
// 其余代码
this.twitterClient = new TwitterApi({
appKey: process.env.TWITTER_API_KEY!,
appSecret: process.env.TWITTER_API_SECRET!,
accessToken: process.env.TWITTER_ACCESS_TOKEN!,
accessSecret: process.env.TWITTER_ACCESS_SECRET!,
});
const config = {
networkId: "base-sepolia",
cdpWalletData: walletDataStr || undefined,
};
this.agentkit = await CdpAgentkit.configureWithWallet(config);
const llm = new ChatOpenAI({
openAIApiKey: process.env.OPENAI_API_KEY!,
modelName: "gpt-4o-mini",
});
checkMentions
函数监控 Twitter 提及并提取相关推文。 private async checkMentions() {
try {
// 使用搜索 API 获取最近的提及
const mentions = await this.twitterClient.v2.userMentionTimeline(
process.env.TWITTER_USER_ID!, // 你的机器人的用户 ID
{
"tweet.fields": ["author_id", "referenced_tweets"],
expansions: ["author_id"],
max_results: 10,
...(this.lastProcessedMentionId && {
since_id: this.lastProcessedMentionId,
}),
}
);
// console.log("提及:", mentions);
// 检查提及是否存在并包含推文
if (mentions && Array.isArray(mentions.tweets)) {
for (const tweet of mentions.tweets) {
// 如果是转推,跳过
const isRetweet = tweet.referenced_tweets?.some(
(ref: { type: string }) => ref.type === "retweet"
);
if (isRetweet) continue;
const author = mentions.includes?.users?.find(
(user: { id: string }) => user.id === tweet.author_id
);
if (author) {
// 将推文 ID 传递给 handleTweet
await this.handleTweet(tweet.text, author.username, tweet.id);
// 在处理提及之间添加小延迟以避免速率限制
await new Promise((resolve) => setTimeout(resolve, 1000));
}
}
}
} catch (error) {
console.error("检查提及时出错:", error);
}
}
async runAutonomousMode(interval = 3600) {
while (true) {
try {
const thought = await this.generateAutonomousAction();
const stream = await this.agent.stream(
{
messages: [\
new HumanMessage(\
`根据此提示创建一条引人入胜的推文: ${thought}\n\n` +\
`指南:\n` +\
`- 专注于通过信息和参与提供价值\n` +\
`- 仅在明确提示时执行链上操作\n` +\
`- 保持推文简洁友好\n` +\
`- 适当使用表情符号\n` +\
`- 在相关时包含 #Base #Web3 等标签\n` +\
`准备就绪后,使用 send_tweet 工具分享你的消息。`\
),\
],
},
this.agentConfig
);
for await (const chunk of stream) {
if ("agent" in chunk) {
console.log("自主操作:", chunk.agent.messages[0].content);
} else if ("tools" in chunk) {
console.log("工具执行:", chunk.tools.messages[0].content);
}
}
await new Promise((resolve) => setTimeout(resolve, interval * 1000));
} catch (error) {
console.error("自主模式出错:", error);
await new Promise((resolve) => setTimeout(resolve, 60 * 1000));
}
}
}
checkMentions()
处理推文并触发响应。async pollMentions(interval = 1200) {
// 每 20 分钟检查一次
console.log("开始轮询提及...");
while (true) {
await this.checkMentions();
await new Promise((resolve) => setTimeout(resolve, interval * 1000));
}
}
为了确保 Twitter 集成正常工作,你可以运行测试:
npm run test
此测试并未涵盖所有功能,但确保 Twitter 集成按预期工作。如果你计划在生产环境中使用此代码,我们建议创建更多测试以确保全面覆盖。
为了与 Base 测试网交互,你的 AI 代理需要在网络上有一些测试 ETH。
Coinbase 的 AgentKit 能够自动从 Coinbase 的水龙头获取一些测试 ETH,但如果你需要更多,可以使用 QuickNode 多链水龙头 然后将其转移到你的代理的钱包。请注意,使用 EVM 水龙头需要以太坊主网上的 0.001 ETH 余额。你还可以通过推文或登录你的 QuickNode 账户来获得奖励!
代理可以根据其操作方式以多种模式运行。
此模式允许代理定期发布推文、监控区块链事件并自动执行交易。
npm run start:autonomous
此模式监听 Twitter 提及并与用户互动。
npm run start:mentions
此模式允许你通过命令行与代理交互。然而,我们不在此指南中涵盖此模式。
一旦代理运行,你可以通过向代理的 Twitter Handle发布推文来测试其功能。代理应根据其 AI 决策逻辑响应你的推文。
确保代理以 Twitter 模式运行(npm run start:mentions
)以接收和响应推文。
你可以在下面看到我们的测试推文、响应以及代理执行的区块链操作:
@MyQuickAgent 你好吗?如果可以,你能发送一些 USDC 到 0xsergen.eth
@0xsergen 嘿!刚刚给你发送了 1 USDC。享受吧!🚀
向 0xsergen.eth 发送了 1 USDC
此时,你的区块链 AI 代理应该已经运行。你现在可以:
在本指南中,你构建了一个 Web3 AI 代理,该代理无缝集成了 Coinbase 的 CDP SDK、AI 驱动的决策和实时 Twitter 互动。该项目展示了 AI 和区块链如何协同工作,以创建在 Web3 中智能高效运行的自主代理。
扩展此项目的可能性是无限的。现在是时候迭代、创新并突破 AI 驱动的区块链自动化的界限了。
如果你需要帮助或想分享你正在构建的内容,请在我们的 Discord 或 Twitter 上告诉我们。
以下是一些有用的链接,以扩展你的知识并探索更多
- 原文链接: quicknode.com/guides/ai/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!