AI Trading Agent Gemini 详细部署教程

项目概述

ai-trading-agent-gemini 是一个 AI 交易代理应用,能够将社交媒体情绪分析转化为可执行的交易信号。它整合了 LunarCrush 社交数据、Google Gemini AI 分析能力、Supabase 实时数据库以及 Inngest 后台任务处理。

技术栈:Next.js 15 + TypeScript + Tailwind CSS v4 + Supabase (PostgreSQL) + Inngest + Google Gemini AI + LunarCrush API

整个系统通过一个 7 步后台工作流处理社交数据,并实时向用户界面推送进度。你可以选择本地开发部署或生产环境部署。


部署前准备

硬件与软件要求

项目 要求
Node.js 18+
操作系统 Windows / macOS / Linux
代码编辑器 VS Code(推荐)
预计时间 20-30 分钟

必需的 API 密钥(5 个)

服务 用途 费用
LunarCrush 社交媒体情绪数据 需订阅
Google Gemini AI 分析 有免费额度
Supabase 数据库与实时订阅 有免费额度
Inngest 后台任务处理 有免费额度

第一步:项目安装

打开终端,执行以下命令克隆并安装项目:

1
2
3
4
5
6
7
8
9
# 克隆仓库
git clone https://github.com/danilobatson/ai-trading-agent-gemini.git
cd ai-trading-agent-gemini

# 安装依赖
npm install

# 创建环境变量文件
cp .env.example .env.local

第二步:配置 LunarCrush API

LunarCrush 提供加密货币的实时社交情绪数据,包含 AltRank™ 和 Galaxy Score™ 等专有指标。

  1. 访问 lunarcrush.com/signup 注册账户
  2. 选择合适的订阅计划(Individual 计划适合本项目)
  3. 在控制面板中生成 API Key
  4. 将密钥添加到 .env.local 文件:
1
LUNARCRUSH_API_KEY=lc_你的密钥

核心指标说明

  • Mentions:社交帖子量(24小时)
  • Interactions:总社交互动量
  • Creators:独立内容创作者数量
  • AltRank™:市场+社交综合排名
  • Galaxy Score™:资产健康度指标(0-100)

第三步:配置 Google Gemini AI

Gemini 负责根据社交模式生成交易建议。

  1. 访问 aistudio.google.com
  2. 创建新项目或选择现有项目
  3. 进入 API KeysCreate API Key
  4. 将密钥添加到 .env.local
1
GOOGLE_GEMINI_API_KEY=你的Gemini密钥

第四步:配置 Supabase 数据库

Supabase 提供 PostgreSQL 数据库和实时订阅功能,用于实时进度追踪。

  1. 访问 supabase.com,点击 Start your project
  2. 创建新项目:
    • 项目名称:ai-trading-agent
    • 数据库密码:安全保存
    • 区域:选择最近的区域
  3. 进入 Project Overview,复制 Project URLanon public key
  4. 添加到 .env.local
1
2
NEXT_PUBLIC_SUPABASE_URL=https://你的项目.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=你的anon密钥

第五步:创建数据库表结构

  1. 在 Supabase 控制面板中,进入 SQL Editor
  2. 点击 New query
  3. 复制并粘贴以下完整脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
-- 交易信号表
CREATE TABLE trading_signals (
id TEXT PRIMARY KEY,
symbol TEXT NOT NULL,
signal TEXT NOT NULL CHECK (signal IN ('BUY', 'SELL', 'HOLD')),
confidence INTEGER NOT NULL CHECK (confidence >= 0 AND confidence <= 100),
reasoning TEXT NOT NULL,
metrics JSONB NOT NULL,
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 索引
CREATE INDEX idx_trading_signals_symbol ON trading_signals (symbol);
CREATE INDEX idx_trading_signals_created_at ON trading_signals (created_at DESC);
CREATE INDEX idx_trading_signals_signal ON trading_signals (signal);

-- 分析任务表
CREATE TABLE analysis_jobs (
id TEXT PRIMARY KEY,
status TEXT NOT NULL DEFAULT 'started',
current_step TEXT DEFAULT 'Initializing...',
step_message TEXT DEFAULT 'Starting analysis...',
progress_percentage INTEGER DEFAULT 0,
event_data JSONB,
signals_generated INTEGER DEFAULT 0,
alerts_generated INTEGER DEFAULT 0,
duration_ms INTEGER,
started_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
completed_at TIMESTAMP WITH TIME ZONE,
updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 索引
CREATE INDEX idx_analysis_jobs_status ON analysis_jobs (status);
CREATE INDEX analysis_jobs_progress_idx ON analysis_jobs (status, started_at DESC, progress_percentage);
  1. 点击 Run 执行脚本
  2. 进入 Table Editor 验证 trading_signalsanalysis_jobs 两张表已创建

第六步:配置 Inngest 后台任务

Inngest 负责处理 AI 分析流水线,实现实时进度追踪。

  1. 访问 inngest.com,点击 Sign up 注册
  2. 创建新应用:ai-trading-agent
  3. 进入 SettingsKeys,复制:
    • Event Key(以 inngest_ 开头)
    • Signing Key(以 signkey_ 开头)
  4. 添加到 .env.local
1
2
INNGEST_EVENT_KEY=inngest_你的Event密钥
INNGEST_SIGNING_KEY=signkey_你的Signing密钥

第七步:验证环境变量

最终 .env.local 文件应包含以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
# LunarCrush API(必需)
LUNARCRUSH_API_KEY=lc_your_key_here

# Google Gemini AI(必需)
GOOGLE_GEMINI_API_KEY=your_gemini_key_here

# Supabase 数据库(必需)
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key_here

# Inngest 后台任务(必需)
INNGEST_EVENT_KEY=inngest_your_event_key_here
INNGEST_SIGNING_KEY=signkey_your_signing_key_here

本地运行与测试

启动开发服务器

需要打开两个终端窗口:

终端 1 - 启动 Next.js 应用

1
npm run dev

访问 http://localhost:3000

终端 2 - 启动 Inngest 开发服务器

1
npm run inngest:dev

访问 http://localhost:8288 查看任务监控

测试完整流程

  1. 打开 http://localhost:3000
  2. 点击 Generate Trading Signals
  3. 观察实时进度(7 步分析流程):
    • 初始化分析(14%)
    • 准备符号列表(28%)
    • 获取社交数据(42%)
    • AI 信号生成(57%)
    • 保存到数据库(71%)
    • 生成摘要(85%)
    • 完成分析(100%)
  4. http://localhost:8288 查看 Inngest 任务执行详情
  5. 分析完成后,交易信号会自动显示

生产环境部署

方案一:部署到 Vercel(推荐)

Vercel 与 Next.js 无缝集成,是最简单的部署方式。

步骤 1:安装 Vercel CLI

1
npm i -g vercel

步骤 2:部署到生产环境

1
vercel --prod

步骤 3:配置环境变量

  1. 进入 Vercel 项目控制面板 → SettingsEnvironment Variables
  2. 添加以下变量:
变量名
LUNARCRUSH_API_KEY 你的 LunarCrush 密钥
GOOGLE_GEMINI_API_KEY 你的 Gemini 密钥
NEXT_PUBLIC_SUPABASE_URL 你的 Supabase URL
NEXT_PUBLIC_SUPABASE_ANON_KEY 你的 Supabase anon 密钥
INNGEST_EVENT_KEY 你的 Inngest Event 密钥
INNGEST_SIGNING_KEY 你的 Inngest Signing 密钥

步骤 4:配置 Inngest 生产环境

  1. 在 Inngest 控制面板创建生产应用
  2. 添加生产 URL:https://你的应用.vercel.app/api/inngest
  3. 更新环境变量为生产密钥

步骤 5:Supabase 生产配置

  • 数据库会自动扩展
  • 建议启用 Row Level Security (RLS) 增强安全性
  • 在 Supabase 控制面板监控使用情况

方案二:使用 Docker 部署

如果你希望在任何支持 Docker 的环境中部署,可以使用 Docker 方案。

步骤 1:创建 Dockerfile

在项目根目录创建 Dockerfile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
FROM node:22-alpine AS deps
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci

FROM node:22-alpine AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build

FROM node:22-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static
EXPOSE 3000
CMD ["node", "server.js"]

步骤 2:创建 docker-compose.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: '3.8'

services:
app:
build: .
ports:
- "3000:3000"
env_file:
- .env.local
restart: unless-stopped
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s

步骤 3:修改 next.config.ts

确保启用 standalone 输出模式:

1
2
3
4
5
6
const nextConfig = {
output: 'standalone',
// ... 其他配置
};

export default nextConfig;

步骤 4:构建并运行

1
2
3
4
5
6
7
8
9
10
11
# 构建镜像
docker compose build

# 启动服务
docker compose up -d

# 查看日志
docker compose logs -f

# 停止服务
docker compose down

注意:在 Docker 部署中,Inngest 开发服务器无法使用 npm run inngest:dev 方式启动。你需要使用 Inngest 的云端服务,并将 webhook 端点配置为 https://你的域名/api/inngest


方案三:部署到 Railway

Railway 提供简单的容器化部署体验。

  1. 访问 railway.app 并登录
  2. 点击 New ProjectDeploy from GitHub repo
  3. 选择你的 ai-trading-agent-gemini 仓库
  4. Variables 标签页添加所有环境变量
  5. Railway 会自动检测 Next.js 项目并完成部署

常见问题排查

问题 症状 解决方案
Inngest 函数未触发 进度卡在 0%,无任务创建 检查 INNGEST_EVENT_KEYINNGEST_SIGNING_KEY,确保 npm run inngest:dev 正在运行
数据库连接错误 “Database connection failed” 检查 Supabase URL/key,验证表已创建,检查网络连接
LunarCrush 401 未授权 “Invalid API key” 错误 验证 API 密钥格式(lc_... 开头),确认订阅有效
Gemini AI 错误 “AI analysis failed” 检查 Google AI API 密钥,验证配额限制
实时更新不工作 进度不更新,信号不显示 确保 Supabase anon 密钥权限正确,检查浏览器控制台
速率限制(429 错误) 分析中途失败 LunarCrush Individual 计划限制 10 请求/分钟,添加延迟或升级计划

API 速率限制参考

LunarCrush API 限制

  • Individual 计划:10 请求/分钟,2000 次/天
  • Builder 计划:100 请求/分钟,20000 次/天

Google Gemini 限制

  • 免费层:15 请求/分钟,1500 次/天
  • 付费层:1000 请求/分钟

调试工作流程

如果应用无法正常工作,按顺序检查:

  1. 检查环境变量.env.local 中 5 个必需密钥是否完整
  2. 验证数据库表:在 Supabase SQL Editor 中运行 SQL 脚本
  3. 确认 API 订阅:LunarCrush 计划有效,Gemini 配额充足
  4. 测试 Inngest 连接:确保开发服务器运行在 localhost:8288
  5. 检查浏览器控制台:查看 JavaScript 错误或网络请求失败
  6. 监控数据库活动:在 Supabase 日志中查看实时事件
  7. 重启开发服务器:停止并重新启动两个终端

架构概览

技术组件

组件 技术 用途
前端 Next.js 15 + React 19 + TypeScript 现代 Web 应用,服务端组件
样式 Tailwind CSS v4 响应式 UI
后台任务 Inngest 多步骤 AI 工作流处理
数据库 Supabase (PostgreSQL) 实时数据存储与订阅
AI 分析 Google Gemini 交易信号生成
社交数据 LunarCrush API 加密货币情绪分析

数据流

text

1
2
3
用户触发分析 → Inngest 后台任务 → LunarCrush API → 社交指标

Google Gemini AI → 交易信号 → Supabase 数据库 → 实时 UI 更新

关键文件结构

text

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
src/
├── app/
│ ├── api/
│ │ ├── signals/route.ts # 获取交易信号
│ │ ├── trigger/route.ts # 启动分析流水线
│ │ ├── job-status/route.ts # 检查任务进度
│ │ └── inngest/route.ts # Inngest webhook 端点
│ ├── layout.tsx
│ └── page.tsx # 实时 UI 主面板
├── functions/
│ └── signal-analysis.ts # 7 步 Inngest 工作流
├── hooks/
│ └── useJobProgress.ts # Supabase 进度订阅
├── lib/
│ ├── lunarcrush.ts # LunarCrush API 客户端
│ ├── gemini.ts # Google AI 集成
│ ├── supabase.ts # 数据库操作
│ ├── inngest.ts # 后台任务客户端
│ └── signal-generator.ts # 信号生成逻辑
└── types/
└── trading.ts # TypeScript 接口定义

性能与扩展建议

当前性能指标

  • 首次加载:约 500ms
  • 实时更新:Supabase 订阅延迟 <100ms
  • AI 处理:完整 5 个符号分析约 30-45 秒
  • 后台任务:Inngest 自动重试处理

高负载扩展建议

  • LunarCrush API:升级到 Builder 计划(100 请求/分钟)
  • 数据库:实现连接池和读取副本
  • AI 处理:批量请求并实现响应缓存
  • 后台任务:Inngest 随使用层级自动扩展

总结

本项目采用现代 AI 集成模式,通过四个核心服务的协同工作实现完整的交易信号生成流程。部署的关键在于正确配置五个 API 密钥并确保 Inngest 开发服务器与 Next.js 应用同时运行。

对于快速验证,Vercel 部署是最简单的选择;如果需要完全控制部署环境,Docker 方案提供了更大的灵活性。