×

一、BettaFish 简介

项目地址:https://github.com/666ghj/BettaFish

✅ 项目简介

  • BettaFish 是一个 多 Agent 舆情分析助手,目标是打破信息茧房,恢复原始舆情,并预测未来舆情走向。
  • 项目号称 纯 Python 实现,不依赖大框架。
  • 主语言是 Python (~92.8%)
  • 采用 GPL‑2.0 许可证

🧱 架构与模块

主要模块如下:

  1. QueryEngine:负责广度的新闻/网络搜索,国内外舆情数据采集。
  2. MediaEngine:多模态内容分析,包括短视频、图片、文字,支持抖音、快手等平台。
  3. InsightEngine:私有数据库挖掘与情感分析。
  4. ReportEngine:生成多轮分析报告,如“社会热点事件分析”、“品牌舆情监控”等。
  5. ForumEngine:类似论坛机制,让不同 Agent 讨论/反思,避免单一模型偏差。
  6. MindSpider:爬虫系统,用于抓取话题、新闻、评论等信息。

工作流程

  • 用户通过 Flask 提交查询。
  • 多个 Agent(Query、Media、Insight)并行执行分析。
  • ForumEngine 让 Agent 间讨论、反思,形成多视角结果。
  • ReportEngine 整合结果并生成最终报告。

🎯 功能亮点

  • 24×7 AI 爬虫覆盖国内外 10+ 主流社交媒体及海量评论。
  • 多模型协作:5 种专门 Agent + 微调模型 + 统计模型等。
  • 多模态分析:不仅是文字,还有短视频、搜索卡片(天气、股票、日历等)。
  • “论坛”机制避免单模型思维偏差。
  • 可融合企业内部业务数据进行分析。
  • 轻量可扩展,纯 Python 模块化设计,易于集成自定义模型和业务逻辑。

🛠 快速上手 & 需求

  • 操作系统:Windows / Linux / MacOS;推荐 Python 3.9+
  • 启动方式:Docker Compose:docker compose up -d
  • 数据库:推荐 PostgreSQL(MySQL 可行但需调整)
  • 配置:复制 .env.example.env,配置数据库连接 + LLM API Key 等
  • 单独 Agent 测试:支持 Streamlit 前端,分别运行 QueryEngine、MediaEngine、InsightEngine

二、BettaFish 部署

1、创建文件夹及文件

 mkdir /workplaces/bettafish
 ​
 cd /workplaces/bettafish
 nano .env
 # 不需要写入内容,保存退出即可
 ​
 nano docker-compose.yml

2、docker-compose.yml

完全按照官方文件,注意修改镜像源为被注释的南京大学镜像,否则全文件大约10个G,拉取较慢。

 version: "3.9"
 ​
 services:
  bettafish:
    # image: ghcr.io/666ghj/bettafish:latest
    # Speed up mirror
    image: ghcr.nju.edu.cn/666ghj/bettafish:latest
    container_name: bettafish
    restart: unless-stopped
    environment:
      - PYTHONUNBUFFERED=1
      - STREAMLIT_SERVER_ENABLE_FILE_WATCHER=false
    ports:
      - "5000:5000"
      - "8501:8501"
      - "8502:8502"
      - "8503:8503"
    volumes:
      - ./logs:/app/logs
      - ./final_reports:/app/final_reports
      - ./insight_engine_streamlit_reports:/app/insight_engine_streamlit_reports
      - ./media_engine_streamlit_reports:/app/media_engine_streamlit_reports
      - ./query_engine_streamlit_reports:/app/query_engine_streamlit_reports
 ​
  db:
    image: postgres:15
    container_name: bettafish-db
    restart: unless-stopped
    env_file:
      - .env
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-bettafish}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-bettafish}
      POSTGRES_DB: ${POSTGRES_DB:-bettafish}
    ports:
      - "${POSTGRES_PORT:-5444}:5432"
    volumes:
      - ./db_data:/var/lib/postgresql/data

3、访问 Web 界面

docker-compose.yml,映射了以下端口:

端口功能
5000Flask 主应用
8501QueryEngine Streamlit
8502MediaEngine Streamlit
8503InsightEngine Streamlit

三、功能预研

访问主应用5000端口:

 http://192.168.202.180:5000/

1、配置数据库

如果你使用默认 .env 文件,PostgreSQL 已经初始化好:

  • 数据库:bettafish
  • 用户:bettafish
  • 密码:bettafish
  • 端口:5444(映射到宿主机)

你可以通过 psql 或 PgAdmin 连接数据库,查看数据。

 # 进入容器
 docker exec -it bettafish-db psql -U bettafish -d bettafish

1、数据库连接配置

——1——

2、BettaFish 的 LLM/Agent 模型和外部检索工具配置界面

——2——

BettaFish 是一个“多 Agent + LLM + 数据抓取”系统,每个 Agent 都是一个独立的模型实例或调用接口:

Agent作用需要的配置
Insight Agent洞察分析LLM API Key、Base URL、模型名称
Media Agent短视频/图片分析LLM API Key、Base URL、模型名称
Query Agent搜索与信息汇总LLM API Key、Base URL、模型名称
Report Agent报告生成LLM API Key、Base URL、模型名称
Forum HostAgent 间协作LLM API Key、Base URL、模型名称
Keyword OptimizerSQL/关键词优化LLM API Key、Base URL、模型名称
外部检索工具联动搜索/网站抓取Tavily/Bocha 等 API Key

这些 API Key 和 Base URL 都是外部服务提供的,比如 OpenAI GPT 系列、OpenAI 兼容 API、或者你自己部署的私有 LLM。


系统自带吗?

  • 不自带。系统只提供调用逻辑,你必须自己申请或配置 LLM 服务。
  • 如果没有 API Key 或模型 URL,这些 Agent 无法运行,你提交查询会报错或返回空。

如果你只是想 最小化配置、保证系统可启动并能跑一个测试分析流程,其实只需要填 核心的一个或两个 Agent 的 LLM Key,其他可暂时留空。


建议最小配置

模块是否必须说明
Query Agent✅ 必填搜索与信息汇总,是系统获取数据的核心,如果没有它,系统无法抓取文本信息进行分析。
外部检索工具✅ 必填联动搜索/网站抓取,Tavily/Bocha
Report Agent✅ 建议填报告生成模块,如果你想看到最终 PDF/HTML 报告,需要这个 Agent。

目前只搭建了Query Engine和Report Engine两大模块

这两个模块实现了可以爬数据查询+输出报告两大功能,使用同一个大模型 API Key

还有一个必须的是Tavily API Key外部检索工具

联动搜索引擎、网站抓取等在线服务

https://www.tavily.com


3、使用流程

  1. 在 Flask 主界面提交查询:输入你想分析的舆情事件或关键词。
  2. Agent 并行分析:QueryEngine、MediaEngine、InsightEngine 会抓取信息并分析。
  3. ForumEngine 讨论:不同 Agent 对信息进行多角度反思和讨论。
  4. 生成报告:ReportEngine 输出 PDF 或 HTML 报告到 /final_reports

日志和报告路径对应你的 docker-compose.yml

 ./logs                           # 系统日志
 ./final_reports                   # 最终分析报告
 ./query_engine_streamlit_reports # QueryEngine 报告
 ./media_engine_streamlit_reports # MediaEngine 报告
 ./insight_engine_streamlit_reports # InsightEngine 报告

你可以在宿主机直接查看。

4、测试

点击Query Engine(目前只配置了这个),输入想要搜索的资料

——3——

等待……爬取过程比较慢

查看结果方式:

1、成功左边会生成网页版报告

2、可以点击左边右上角的三个点,选择print,输出pdf文件

3、/workplaces/bettafish/query_engine_streamlit_reports/

该目录下会保存生成的报告Markdown格式【效果更好】和JSON格式

——4——

四、常见问题

1、费用情况

(1)大模型 API key 费用

主流大模型基本支持,详见各官网。所有 LLM 调用使用 OpenAI 的 API 接口标准

(2)Tavily

https://www.tavily.com

费用

——5——

体验量

——6——

(3)博查

https://open.bochaai.com

——7——

补充费用情况

https://bocha-ai.feishu.cn/wiki/JYSbwzdPIiFnz4kDYPXcHSDrnZb

2、关于爬虫BettaFish法律风险问题

❌ BettaFish 本身不会去直接访问网页

✔ 它只调用 Tavily / Bocha 等“搜索服务”

✔ 真正去爬网页的是 Tavily、Bocha 的服务器

✔ 你的企业服务器不会主动对外抓取目标网页

BettaFish 的 Query Agent 并不是爬虫,它不会自己访问网页,也不会使用你公司服务器的公网 IP 去爬取网站内容。

它依赖的是 第三方搜索 API(Tavily)

也就是说:

🔥 所有外部网页搜索都是 Tavily 的服务器执行的,不是你的服务器执行的。

你企业服务器只是发起:

 你的服务器 → Tavily API → Tavily 发起搜索/爬取 → 结果返回给你

所以:

项目发起方你的公司 IP 是否暴露
Tavily 搜索查询你的服务器 → Tavily❌ 不暴露,公司 IP 只被 Tavily 看到
网页爬取Tavily → 各种网站❌ 不暴露,你的服务器完全不会访问被查询的网站
Query Agent 生成报告全在本地❌ 完全不暴露

3、为什么选择BettaFish?

🌟 1)BettaFish 的优势(相对于“直接用大模型搜索”)

能力直接问大模型BettaFish说明
实时性❌大模型不能实时联网✔️依靠 Tavily 实时搜索LLM知识落后,BettaFish 能实时查
搜索深度❌只给你一句话结果✔️自动多轮搜索/扩展关键词自动往下挖、查几十个来源
系统化报告❌输出碎片化内容✔️生成结构化分析报告有标题、目录、分析结论
多Agent协同❌单模型不具备✔️Query/Report 角色分工类似多人团队做调研
可控流程❌不可控✔️明确工作流(检索→分析→报告)过程透明,可审计

总结一句话:

BettaFish = 大模型 × 实时搜索 × 多轮调研 × 自动报告生成

是“大模型 + 搜索引擎”的增强版,不是普通对话式 AI。


🔍 2)Tavily 是什么?为什么 BettaFish 离不开 Tavily?

Tavily 是一个 专门为 AI 应用设计的专业 Web 搜索 API

🧠 主要功能

  • 全球网页 搜集数据(不限于 Google/Bing)
  • 自动过滤广告、SEO 垃圾站
  • 自动做网页摘要
  • 自动排序并返回最权威来源
  • 输出 结构化 JSON(适用于 AI 再处理)

不像 Google/Bing 那样返回网页链接,Tavily 返回的是:

 [
  {
    "title": "XXX 新闻",
    "content": "摘要文本…",
    "url": "xxx.com"
  }
 ]

对 AI 非常友好。


⚙️ 3)Tavily 的工作原理(简单版)

你输入一个主题:

“OpenAI 最新发布的模型”

Tavily 会:

① 搜索全网来源

Google、Bing、News、博客、社区等数据源混合检索。

② 自动抽取网页正文

自动剥离广告、导航、评论等噪音。

③ 自动摘要压缩

把网页几千字内容压成几百字。

④ 质量评分与排序

  • 来源权威性
  • 文本可信度
  • 信息新鲜度
  • 是否重复

⑤ 返回结构化结果给 AI

大模型拿到的不是一堆URL,而是干净的文本。

所以 Tavily + 大模型 = 实时 + 干净的数据输入

而不是让模型自己胡扯。


🆚 4)Tavily 与「让大模型自己搜索」相比的优势

大模型本身不具备网络爬虫能力,它只能:

  • 胡乱猜测搜索结果
  • 输出不存在的新闻 / 链接
  • 模拟“仿造的网页内容”

大模型自己无法联网

所有“联网模式”其实都只是调用外部 API。

BettaFish 选 Tavily 因为:

  • Tavily 干净、可控、低成本
  • 返回结构化摘要
  • 已对接各类 AI 框架
  • 速度快

直接让大模型“搜索”其实是在骗自己。


⚠️ 5)为什么你觉得 BettaFish 的结果“不准确”?

有 4 个常见原因:

1)Tavily 的英文搜索强,中文弱

它是美国团队做的,中文网页覆盖少。

→ 对中文舆情效果明显不如 Bing API / 自定义爬虫。

2)BettaFish 默认爬取深度不高

Query Agent 默认只跑几轮搜索

→ 信息覆盖率不够。

3)LLM 质量决定“汇总质量”

如果你使用的模型是:

  • qwen1.5
  • glm3 低版本
  • gpt-3.5

它把多网页内容合成报告时容易丢失细节。

4)提取事实能力有限

大模型天然会:

  •     总结过度  
  •     思维跳跃  
  •     合并不同来源导致错误

这不是 BettaFish 的问题,而是 LLM 的普遍限制。


📌 总结一句话

BettaFish 的真正价值:

自动化地帮你完成“搜索 → 过滤 → 收集 → 整理 → 报告”的全链路。

Tavily 的价值:

提供实时、干净、结构化的网页内容,让大模型不再胡编。

附:官方 BettaFish 一次完整分析流程

——8——

4、LLM配置-更新配置生效方式

注意:一定要重启,再次打开Web页面出现“保存并启动系统”

(1)点击左上角LLM配置

(2)更新完新的秘钥——>点击“保存”

(3)重启

 docker-compose restart battafish

(4)重新进入battafish

确认一下秘钥等配置没有问题——>点击“保存并启动系统”

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

作者

fffff@xf.nn

文章推荐