Twitter 圈内行情信息-情感分析系统

设计说明文章地址:Gin+GORM实现聚合推特数据进行情感分析 技术设计-将持续更新并且开源

开源地址:github开源地址

以下是基于上述技术方案的分阶段实现计划,从环境搭建到核心功能落地,逐步推进项目开发,确保每一步可验证、可迭代:

在这里插入图片描述

阶段1:环境与基础配置(1-2天)

目标:搭建开发环境,完成账号注册和基础工具准备,确保后续功能能正常开发。

步骤1:注册必要账号与获取权限
  • 注册Twitter开发者账号:访问 https://developer.x.com/,创建项目,获取API KeyAPI SecretAccess TokenAccess Token Secret(用于调用Twitter API)。

  • 记录关键信息:整理上述Token到本地配置文件(如config.yaml),注意保密(后续用环境变量或加密存储)。

步骤2:搭建本地开发环境
  • 安装Go:确保Go 1.21+版本(go version验证),配置GOPATH

  • 安装数据库:

    • MySQL:本地部署或用Docker(docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0),创建数据库(如twitter_sentiment)。

    • Qdrant:用Docker部署(docker run -p 6333:6333 -p 6334:6334 qdrant/qdrant),访问http://localhost:6333/dashboard确认启动成功。

  • 安装必要工具:

    • Git(版本控制)、Postman(API调试)、Docker(容器化工具)。
步骤3:初始化Go项目结构
  • 创建项目目录:

    twitter-sentiment/
    

├── cmd/ # 程序入口
│ └── api/ # 主服务入口
├── internal/ # 内部模块
│ ├── config/ # 配置解析
│ ├── twitter/ # 推特数据拉取
│ ├── embedding/ # 文本向量生成
│ ├── sentiment/ # 情感分析
│ ├── storage/ # 存储(MySQL+Qdrant)
│ └── server/ # HTTP服务(Gin)
├── pkg/ # 公共工具
│ ├── logger/ # 日志
│ └── retry/ # 重试逻辑
├── configs/ # 配置文件(config.yaml)
└── go.mod # 依赖管理


- 初始化`go.mod`:  

```Bash
go mod init github.com/你的用户名/twitter-sentiment
  • 引入核心依赖:

      go get github.com/gin-gonic/gin
      go get gorm.io/gorm
      go get gorm.io/driver/mysql
      go get github.com/robfig/cron/v3
      go get github.com/qdrant/go-client
      go get github.com/dghubble/go-twitter/twitter
      go get github.com/dghubble/oauth1
    

阶段2:核心存储与基础模型设计(1-2天)

目标:完成MySQL表结构设计、Qdrant向量集合定义,确保数据能正常存储。

步骤1:设计MySQL表结构并初始化
  • 用GORM定义模型(internal/storage/mysql/models.go):实现Influencer(大V信息)和TweetSentiment(情感分析结果)模型(参考前文结构)。

  • 编写数据库初始化逻辑(internal/storage/mysql/init.go):连接MySQL,自动迁移表结构(db.AutoMigrate(&Influencer{}, &TweetSentiment{}))。

  • 测试:运行初始化代码,检查MySQL中是否生成对应表。

步骤2:设计Qdrant向量集合
  • 编写Qdrant客户端初始化逻辑(internal/storage/qdrant/client.go):连接本地Qdrant服务,创建 tweets_embeddings集合(定义向量维度384,相似度计算方式为余弦距离)。

  • 测试:调用创建集合接口,通过Qdrant Dashboard确认集合创建成功。

步骤3:编写基础配置解析
  • 编写配置文件(configs/config.yaml):包含MySQL连接信息、Qdrant地址、Twitter API Token、定时任务频率等。

  • 实现配置解析逻辑(internal/config/config.go):用github.com/spf13/viper读取yaml配置,解析为Go结构体。

阶段3:推特数据拉取功能(2-3天)

目标:实现从Twitter拉取指定大V的推文,并处理为后续可用的格式。

步骤1:实现Twitter API客户端
  • internal/twitter/client.go中封装客户端:用go-twitteroauth1初始化客户端,支持通过用户名获取用户ID(需调用users/by/username接口)。

  • 测试:写一个简单函数,传入大V用户名(如“elonmusk”),验证能否获取用户ID。

步骤2:实现推文增量拉取逻辑
  • 核心函数(internal/twitter/fetcher.go):

    • 输入:大V的Twitter ID、上次拉取的最后一条推文ID(避免重复拉取)。

    • 逻辑:调用userTimeline接口,排除转发和回复,获取原创推文。

    • 输出:推文列表(包含ID、文本、发布时间、点赞数等)。

  • 测试:拉取某个大V的最新10条推文,打印结果确认数据正确。

步骤3:集成定时任务框架
  • internal/server/cron.go中初始化cron:添加定时任务(如每30分钟执行一次),任务逻辑为“获取所有订阅大V→并发拉取推文”。

  • 测试:手动触发任务,检查是否能正常拉取并打印推文。

阶段4:文本向量生成与存储(2-3天)

目标:将拉取的推文文本转换为向量,存储到Qdrant并关联元数据。

步骤1:部署文本Embedding服务(Python辅助)
  • 用Python+FastAPI封装sentence-transformers模型

  • 启动服务:uvicorn main:app --host 0.0.0.0 --port 8000,测试接口(POST http://localhost:8000/embed,传入文本返回向量)。

步骤2:Go调用Embedding服务
  • internal/embedding/client.go中实现调用逻辑:发送HTTP请求到Python服务,解析响应获取向量([]float32)。

  • 测试:传入一条推文文本,验证能否获取384维向量。

步骤3:向量存储到Qdrant
  • 编写存储逻辑(internal/storage/qdrant/store.go):对每条推文,生成向量后,调用Qdrant的UpsertPoints接口,存储向量及元数据(推文ID、内容、发布时间、大V ID)。

  • 测试:拉取一条推文,生成向量并存储,通过Qdrant Dashboard查询确认存储成功。

阶段5:情感分析功能(2-3天)

目标:结合向量相似性检索和基础模型,计算推文情感得分并存储到MySQL。

步骤1:实现基础情感得分计算
  • prose库(github.com/jdkato/prose)分析文本情感:在internal/sentiment/basic.go中,对推文文本进行分词,计算基础情感得分(-1~1)。

  • 测试:输入正面/负面文本(如“Bitcoin will surge!”“Bitcoin will crash!”),验证得分是否符合预期。

步骤2:结合Qdrant相似性检索优化得分
  • 编写相似推文查询逻辑(internal/sentiment/similar.go):对新推文向量,在Qdrant中查询Top5相似历史推文,获取其情感标签(若有),加权调整基础得分。

  • 规则示例:若3条相似推文为正面,则基础得分+0.2;若2条为负面,则-0.1。

步骤3:存储情感分析结果到MySQL
  • 编写存储逻辑(internal/storage/mysql/store.go):将推文ID、大V ID、内容、发布时间、情感得分、标签(positive/negative/neutral)存入TweetSentiment表。

  • 测试:对一条推文完成“拉取→向量生成→情感分析→存储”全流程,检查MySQL中是否有记录。

阶段6:API服务与前端对接准备(1-2天)

目标:提供HTTP API供前端查询数据,完成核心功能闭环。

步骤1:实现Gin API接口
  • internal/server/handler.go中定义接口:

    • GET /api/influencers:获取所有订阅大V列表。

    • GET /api/influencers/{id}/tweets:获取指定大V的推文及情感分析结果(支持分页、按时间筛选)。

    • POST /api/influencers:添加新的订阅大V(需传入Twitter用户名)。

  • 测试:用Postman调用接口,验证返回数据格式正确。

步骤2:集成所有模块,启动完整服务
  • cmd/api/main.go中整合各模块:初始化配置→连接数据库→启动cron定时任务→启动Gin服务。

  • 测试:运行服务,观察日志确认定时任务正常执行,API能返回最新分析结果。

阶段7:测试与优化(2-3天)

目标:修复bug,优化性能和分析精度,确保系统稳定运行。

步骤1:功能测试
  • 测试场景:

    • 添加大V后,是否能自动拉取其推文?

    • 情感分析结果是否合理(人工抽检100条推文)?

    • API是否能正确返回数据,无重复或缺失?

步骤2:性能优化
  • 优化拉取频率:对活跃大V(每日推文>5条)每15分钟拉取一次,低频大V每2小时一次。

  • 缓存热门数据:用Redis缓存大V列表和最新推文(10分钟过期),减少数据库压力。

步骤3:精度优化
  • 扩充领域词典:收集比特币相关情感词(如“bullish”“bearish”“FOMO”),手动标注500条推文,微调情感分析规则。

最终交付物

  • 可运行的Go服务(包含定时任务、API、数据处理逻辑)。

  • 初始化脚本(数据库表、Qdrant集合创建)。

  • 接口文档(供前端对接)。

按此计划,总开发周期约12-18天,可根据实际进度调整各阶段时间,优先保证“拉取→分析→存储→API”核心流程跑通。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐