README.md 36.2 KB
BettaFish Logo 666ghj%2FBettaFish | Trendshift 666ghj%2FBettaFish | Trendshift666ghj%2FBettaFish | Trendshift [![GitHub Stars](https://img.shields.io/github/stars/666ghj/BettaFish?style=flat-square)](https://github.com/666ghj/BettaFish/stargazers) [![GitHub Watchers](https://img.shields.io/github/watchers/666ghj/BettaFish?style=flat-square)](https://github.com/666ghj/BettaFish/watchers) [![GitHub Forks](https://img.shields.io/github/forks/666ghj/BettaFish?style=flat-square)](https://github.com/666ghj/BettaFish/network) [![GitHub Issues](https://img.shields.io/github/issues/666ghj/BettaFish?style=flat-square)](https://github.com/666ghj/BettaFish/issues) [![GitHub Pull Requests](https://img.shields.io/github/issues-pr/666ghj/BettaFish?style=flat-square)](https://github.com/666ghj/BettaFish/pulls) [![GitHub License](https://img.shields.io/github/license/666ghj/BettaFish?style=flat-square)](https://github.com/666ghj/BettaFish/blob/main/LICENSE) [![Version](https://img.shields.io/badge/version-v1.2.1-green.svg?style=flat-square)](https://github.com/666ghj/BettaFish) [![Docker](https://img.shields.io/badge/Docker-Build-2496ED?style=flat-square&logo=docker&logoColor=white)](https://hub.docker.com/) [English](./README-EN.md) | [中文文档](./README.md)

[!IMPORTANT]
查看我们最新发布的预测引擎:MiroFish-简洁通用的群体智能引擎,预测万物

banner

“数据分析三板斧”全线贯通:我们激动的宣布 MiroFish 正式发布!随着最后一块版图补齐,我们构建了从 BettaFish(数据收集与分析)到 MiroFish(全景预测)的完整链路。至此,从原始数据到智能决策的闭环已成,让预见未来成为可能!

⚡ 项目概述

微舆” 是一个从0实现的创新型 多智能体 舆情分析系统,帮助大家破除信息茧房,还原舆情原貌,预测未来走向,辅助决策。用户只需像聊天一样提出分析需求,智能体开始全自动分析 国内外30+主流社媒 与 数百万条大众评论。

“微舆”谐音“微鱼”,BettaFish是一种体型很小但非常好斗、漂亮的鱼,它象征着“小而强大,不畏挑战”

查看系统以“武汉大学舆情”为例,生成的研究报告:武汉大学品牌声誉深度分析报告

查看系统以“武汉大学舆情”为例,一次完整运行的视频:视频-武汉大学品牌声誉深度分析报告

不仅仅体现在报告质量上,相比同类产品,我们拥有🚀六大优势:

  1. AI驱动的全域监控:AI爬虫集群7x24小时不间断作业,全面覆盖微博、小红书、抖音、快手等10+国内外关键社媒。不仅实时捕获热点内容,更能下钻至海量用户评论,让您听到最真实、最广泛的大众声音。

  2. 超越LLM的复合分析引擎:我们不仅依赖设计的5类专业Agent,更融合了微调模型、统计模型等中间件。通过多模型协同工作,确保了分析结果的深度、准度与多维视角。

  3. 强大的多模态能力:突破图文限制,能深度解析抖音、快手等短视频内容,并精准提取现代搜索引擎中的天气、日历、股票等结构化多模态信息卡片,让您全面掌握舆情动态。

  4. Agent“论坛”协作机制:为不同Agent赋予独特的工具集与思维模式,引入辩论主持人模型,通过“论坛”机制进行链式思维碰撞与辩论。这不仅避免了单一模型的思维局限与交流导致的同质化,更催生出更高质量的集体智能与决策支持。

  5. 公私域数据无缝融合:平台不仅分析公开舆情,还提供高安全性的接口,支持您将内部业务数据库与舆情数据无缝集成。打通数据壁垒,为垂直业务提供“外部趋势+内部洞察”的强大分析能力。

  6. 轻量化与高扩展性框架:基于纯Python模块化设计,实现轻量化、一键式部署。代码结构清晰,开发者可轻松集成自定义模型与业务逻辑,实现平台的快速扩展与深度定制。

始于舆情,而不止于舆情。“微舆”的目标,是成为驱动一切业务场景的简洁通用的数据分析引擎。

举个例子. 你只需简单修改Agent工具集的api参数与prompt,就可以把他变成一个金融领域的市场分析系统

附一个比较活跃的L站项目讨论帖:https://linux.do/t/topic/1009280

查看L站佬友做的测评 开源项目(微舆)与manus|minimax|ChatGPT|Perplexity对比

banner 告别传统的数据看板,在“微舆”,一切由一个简单的问题开始,您只需像对话一样,提出您的分析需求

🪄 赞助商

LLM模型API赞助:666ghj%2FBettaFish | Trendshift

AI联网搜索、文件解析及网页内容抓取等智能体核心能力提供商:666ghj%2FBettaFish | Trendshift 安思派开放平台(Anspire Open)是面向智能体时代的领先的基础设施提供商。我们为开发者提供构建强大智能体所需的核心能力栈,现已上线AI联网搜索【多版本,极具竞争力的价格】、文件解析【限免】及网页内容抓取【限免】、云端浏览器自动化(Anspire Browser Agent)【内测】、多轮改写等服务,持续为智能体连接并操作复杂的数字世界提供坚实基础。可无缝集成至Dify、Coze、元器等主流智能体平台。通过透明点数计费体系与模块化设计,为企业提供高效、低成本的定制化支持,加速智能化升级进程。

🏗️ 系统架构

整体架构图

Insight Agent 私有数据库挖掘:私有舆情数据库深度分析AI代理

Media Agent 多模态内容分析:具备强大多模态能力的AI代理

Query Agent 精准信息搜索:具备国内外网页搜索能力的AI代理

Report Agent 智能报告生成:内置模板的多轮报告生成AI代理

banner

一次完整分析流程

步骤 阶段名称 主要操作 参与组件 循环特性
1 用户提问 Flask主应用接收查询 Flask主应用 -
2 并行启动 三个Agent同时开始工作 Query Agent、Media Agent、Insight Agent -
3 初步分析 各Agent使用专属工具进行概览搜索 各Agent + 专属工具集 -
4 策略制定 基于初步结果制定分块研究策略 各Agent内部决策模块 -
5-N 循环阶段 论坛协作 + 深度研究 ForumEngine + 所有Agent 多轮循环
5.1 深度研究 各Agent基于论坛主持人引导进行专项搜索 各Agent + 反思机制 + 论坛引导 每轮循环
5.2 论坛协作 ForumEngine监控Agent发言并生成主持人引导 ForumEngine + LLM主持人 每轮循环
5.3 交流融合 各Agent根据讨论调整研究方向 各Agent + forum_reader工具 每轮循环
N+1 结果整合 Report Agent收集所有分析结果和论坛内容 Report Agent -
N+2 IR中间表示 动态选择模板和样式,多轮生成元数据,装订为IR中间表示 Report Agent + 模板引擎 -
N+3 报告生成 分块进行质量检测,基于IR渲染成交互式 HTML 报告 Report Agent + 装订引擎 -

当前代码结构(截至 2026-04-09)

下面这棵树反映的是当前仓库的真实分层。现在的主开发路径已经从“根目录堆模块”切换到“应用层 + 服务层 + 支撑层 + 运行时目录”的结构,根目录保留的旧目录大多只承担兼容职责。

AI-Agent-Platform/
├─ apps/                         # 面向用户的应用入口层
│  ├─ web_api/                   # Flask + Socket.IO 主站装配入口
│  ├─ web_ui/                    # Vue 3 + Vite + TypeScript 前端工程
│  └─ engine_console/            # Query / Media / Insight 三个 Streamlit 单引擎入口
├─ services/                     # 真实业务实现层
│  ├─ engines/                   # query / media / insight / report / forum 五大引擎
│  ├─ crawler/                   # mindspider、外部爬虫适配层、crawler 服务
│  └─ shared/                    # 共享配置、LLM、日志、工具函数
├─ backend/                      # Flask 蓝图、研究任务 API、爬虫控制 API
├─ scripts/                      # 本地开发、启动、修复、迁移脚本
│  └─ dev/                       # bootstrap / start_local / prepare_local_postgres 等
├─ tools/                        # 报告导出、质量检查、辅助运维工具
├─ infra/                        # Docker / Compose / 本地 requirements 等基础设施文件
├─ research/                     # 研究模型、训练脚本、实验资产
├─ vendor/                       # 第三方源码镜像或子模块(当前为 mediacrawler)
├─ tests/                        # unit / integration / e2e / fixtures
├─ static/                       # 前端构建产物、图片和静态资源
├─ templates/                    # Flask HTML 模板
├─ utils/                        # 运行时路径、兼容 shim、跨模块小工具
├─ var/                          # 日志、报告、数据库、浏览器数据、缓存、备份
└─ start_local.bat               # Windows 本地一键启动入口

当前功能分层说明

  • apps/web_api/ 是整个平台的主装配入口。它负责启动 Flask 主站、注册 backend/ 蓝图、连接 services/engines/report、接管爬虫控制接口,并管理三个 Streamlit 单引擎子进程。
  • apps/web_ui/ 是统一 Web 前端。这里承载 Vue 3 页面、Vite 构建和 TypeScript 代码;本地开发默认通过 Vite dev server 在 9527 提供热更新,部署兼容构建产物仍输出到 static/frontend/
  • apps/engine_console/ 是单引擎调试入口,适合单独启动 Query / Media / Insight 引擎,做开发联调、能力验证和问题定位。
  • services/engines/ 是核心业务层。query 负责广度检索,media 负责多模态分析,insight 负责私有/结构化数据与情感分析,report 负责报告生成,forum 负责多 Agent 协作与主持。
  • services/crawler/ 是爬虫能力层。mindspider 承担主爬虫流程,adapters/ 用于隔离对外部 vendor/mediacrawler 的调用,web/ 预留给爬虫侧 Web 服务边界。
  • services/shared/ 是共享基础设施层。当前已经承接共享配置、LLM 封装、日志与通用工具,是后续继续消除跨模块重复代码的主要落点。
  • backend/ 是 Web 控制层而不是业务核心层。这里主要存放 Flask 蓝图、研究任务路由、爬虫控制路由和配置管理接口。
  • research/ 存放研究与训练资产,不直接承担线上主流程装配职责;vendor/ 明确隔离第三方源码;var/ 专门存放运行时产物,避免日志、数据库和缓存污染源码目录。

推荐入口与职责边界

  • 推荐从 python -m scripts.dev.start_local 启动整个本地开发栈;默认会以前后端分离模式拉起 Vite HMR + Flask API
  • 如需生成供 Flask / Docker 单服务部署继续托管的静态前端,可使用 python -m scripts.dev.start_local --frontend-mode build--build-frontend 仅作为兼容别名保留。
  • 推荐从 python -m apps.web_api 启动后端 API;Web API 的 canonical Python 入口已完全收口到 apps/web_api/
  • 推荐在 apps/web_ui/ 下进行前端开发与构建;历史根目录前端兼容目录已移除。
  • 推荐通过 services.engines.*services.crawler.* 导入真实业务代码;历史根目录兼容包目录已移除,不再作为任何开发入口。
  • 推荐使用 python -m scripts.dev.prepare_local_postgres --check-onlypython -m scripts.dev.prepare_local_postgres --ensure-db --apply-schemapython -m scripts.dev.repair_local_postgres 处理本地数据库准备与修复。

兼容目录说明

T-517 之后,历史根目录兼容包目录与兼容 CLI 目录已经从仓库中移除。T-525 进一步删除了根目录 app.py,当前仅保留 start_local.bat 作为 Windows 一键启动薄入口;Docker 入口也已统一收口到 infra/docker/,真实实现统一分布在 apps/services/tools/infra/research/vendor/

历史目录树(已过时,仅供兼容背景参考)

T-518 之后,主 README 不再内嵌整段旧目录大树,避免继续把已删除的兼容目录误读为当前开发入口。

如需追溯历史迁移背景,请查看:

🚀 快速开始(纯本地,推荐)

1. 准备环境文件

推荐直接复制 .env.local.example.env.local,再填写你自己的模型 API 配置:

# PowerShell
Copy-Item .env.local.example .env.local

如果你同时保留了给 Docker 用的 .env,源码启动会优先读取 .env.local,两套配置可以并存。

2. 启动本地数据库

纯本地模式推荐使用本机 PostgreSQL 15+,默认本地模板已经给出如下参数,也支持按需切换到 MySQL:

配置项 默认值 说明
DB_HOST 127.0.0.1 本机数据库地址
DB_PORT 5432 本机 PostgreSQL 默认端口
DB_USER bettafish 数据库用户名
DB_PASSWORD bettafish 数据库密码
DB_NAME bettafish 数据库名称

说明:.env.local.example 默认仍优先指向系统本地 PostgreSQL 127.0.0.1:5432。如果执行 python -m scripts.dev.repair_local_postgres,仓库会自动创建项目自管实例,并将当前 .env.local 切换到 127.0.0.1:55432

3. 安装依赖

python -m scripts.dev.bootstrap_local

在启动主站前,建议先检查本地 PostgreSQL 是否真的可用:

python -m scripts.dev.prepare_local_postgres --check-only

如果 PostgreSQL 服务已经启动,但数据库或表结构还没准备好,可以执行:

python -m scripts.dev.prepare_local_postgres --ensure-db --apply-schema

该脚本只负责诊断、建库和初始化表结构,不会替你安装 PostgreSQL 系统服务。

如果本机已经有 PostgreSQL,但 5432 上的现成实例账号密码对不上,也可以直接执行:

python -m scripts.dev.repair_local_postgres

该修复脚本会优先复用当前 .env.local 里的 DB_USER / DB_PASSWORD / DB_NAME,在仓库内创建一个项目自管的本地 PostgreSQL 实例,默认落到 var/db/postgres-local/,并把 .env.local 自动切到 127.0.0.1:55432

如果你只想手动执行,等价命令如下:

pip install -r infra/python/requirements-local.txt
playwright install chromium
npm --prefix apps/web_ui install

4. 启动项目

python -m scripts.dev.start_local

Windows 一键启动入口:

start_local.bat

也可以直接执行真实脚本入口:

powershell -ExecutionPolicy Bypass -NoProfile -File .\scripts\dev\start_local_stack.ps1

该脚本会自动处理 .env.local 预检、缺失依赖时的 bootstrap_local、前端依赖检查、5000/9527 端口复用检测,以及本地 PostgreSQL 自修复。默认模式下,后端只提供 API,前端通过 Vite dev server 独立运行并支持热更新;若系统 5432 实例不可用或凭据不匹配,它会自动切换到仓库内的项目自管 PostgreSQL 实例并完成建库 / schema 初始化;若你只想手动排查,也可以继续执行 python -m scripts.dev.prepare_local_postgres --check-onlypython -m scripts.dev.prepare_local_postgres --ensure-db --apply-schemapython -m scripts.dev.repair_local_postgres

  • 前端开发入口:http://127.0.0.1:9527
  • 后端 API:http://127.0.0.1:5000
  • 如需生成供 Flask / Docker 单服务部署使用的静态前端,请执行 python -m scripts.dev.start_local --frontend-mode build

如果 9527 已被其他本地项目占用,可执行 python -m scripts.dev.start_local --frontend-port 9528,或在 Windows 下运行 start_local.bat -FrontendPort 9528

🐳 Docker 兼容启动(可选)

1. 准备 .env

复制一份 .env.example 文件,命名为 .env,并按需配置 .env 文件中的环境变量。

2. 启动项目

执行以下命令在后台启动所有服务:

docker compose -f infra/docker/docker-compose.yml -f infra/docker/docker-compose.override.yml up -d --build

注:镜像拉取速度慢,在 canonical 文件 infra/docker/docker-compose.yml 中,我们已经通过注释的方式提供了备用镜像地址供您替换。根目录 Docker / Compose 兼容副本已移除,请始终使用 infra/docker/ 下的 canonical 文件。

3. Docker 模式下的数据库配置(PostgreSQL)

请按照以下参数配置数据库连接信息,也支持Mysql可自行修改:

配置项 填写值 说明
DB_HOST db 数据库服务名称 (对应 infra/docker/docker-compose.yml 中的服务名)
DB_PORT 5432 默认 PostgreSQL 端口
DB_USER bettafish 数据库用户名
DB_PASSWORD bettafish 数据库密码
DB_NAME bettafish 数据库名称
其他 保持默认 数据库连接池等其他参数请保持默认设置。

大模型配置

我们所有 LLM 调用使用 OpenAI 的 API 接口标准

在完成数据库配置后,请正常配置所有大模型相关的参数,确保系统能够连接到您选择的大模型服务。

完成上述所有配置并保存后,系统即可正常运行。

🔧 源码启动指南

如果你是初次学习一个Agent系统的搭建,可以从一个非常简单的demo开始:Deep Search Agent Demo

环境要求

  • 操作系统: Windows、Linux、MacOS
  • Python版本: 3.9+
  • Conda: Anaconda或Miniconda
  • 数据库: PostgreSQL(推荐)或MySQL
  • 内存: 建议2GB以上

1. 创建环境

如果使用Conda

# 创建conda环境
conda create -n your_conda_name python=3.11
conda activate your_conda_name

如果使用uv

# 创建uv环境
uv venv --python 3.11 # 创建3.11环境

2. 安装 PDF 导出所需系统依赖(可选)

这部分有详细的配置说明:配置所需依赖

3. 安装依赖包

如果跳过了步骤2,weasyprint库可能无法安装,PDF功能可能无法正常使用。

# 基础依赖安装
pip install -r requirements.txt

# uv版本命令(更快速安装)
uv pip install -r requirements.txt
# 如果不想使用本地情感分析模型(算力需求很小,默认安装cpu版本),可以将该文件中的"机器学习"部分注释掉再执行指令

4. 安装Playwright浏览器驱动

# 安装浏览器驱动(用于爬虫功能)
playwright install chromium

5. 配置本地环境与数据库

推荐复制项目根目录 .env.local.example 文件,命名为 .env.local

如果你还要保留 Docker 启动,请继续把 .env 留给 compose;纯本地启动会优先读取 .env.local

编辑 .env.local 文件,填入您的 API 密钥(您也可以选择自己的模型、搜索代理,详情见根目录 .env.example.env.local.example 文件内或 services/shared/config/app_settings.py 中的字段说明):

# ====================== BettaFish 本地启动 ======================
HOST=127.0.0.1
PORT=5000

# ====================== 数据库配置 ======================
DB_HOST=127.0.0.1
DB_PORT=5432
DB_USER=bettafish
DB_PASSWORD=bettafish
DB_NAME=bettafish
# 数据库字符集,推荐utf8mb4,兼容emoji
DB_CHARSET=utf8mb4
# 数据库类型 postgresql 或 mysql
DB_DIALECT=postgresql
# 数据库不需要手工初始化,执行启动脚本时会自动检测

# ====================== LLM配置 ======================
# 您可以更改每个部分LLM使用的API,只要兼容OpenAI请求格式都可以
# 配置文件内部给了每一个Agent的推荐LLM,初次部署请先参考推荐设置

# Insight Agent
INSIGHT_ENGINE_API_KEY=
INSIGHT_ENGINE_BASE_URL=
INSIGHT_ENGINE_MODEL_NAME=

# Media Agent
...

6. 启动系统

6.1 完整系统启动(推荐)

# 在项目根目录下,激活conda环境
conda activate your_conda_name

# 默认以前后端分离模式启动:Vite 热更新 + Flask API
python -m scripts.dev.start_local

uv 版本启动命令

# 在项目根目录下,激活uv环境
.venv\Scripts\activate

# 默认以前后端分离模式启动:Vite 热更新 + Flask API
python -m scripts.dev.start_local

如需单独启动后端,可使用 python -m apps.web_api。默认仍推荐本地启动脚本 python -m scripts.dev.start_local

注1:如果你需要为 Flask / Docker 单服务部署生成静态前端产物,可执行 python -m scripts.dev.start_local --frontend-mode build;兼容别名 --build-frontend 仍然可用,但不再作为本地开发主入口。

注2:数据爬取需要单独操作,见6.3指引

注3:如果你是第一次在本机拉起项目,建议先运行 python -m scripts.dev.bootstrap_local,它会把 Python 依赖、Playwright 浏览器和前端依赖一次性准备好。

注4:Windows 下可直接运行根目录 start_local.bat。它会转发到 scripts/dev/start_local_stack.ps1,默认拉起 9527 前端热更新服务和 5000 后端 API,并复用纯本地启动链路中的依赖预检、PostgreSQL 诊断与自动修复逻辑。

注4.1:如果 9527 已被占用,可改用 start_local.bat -FrontendPort 9528,或直接执行 python -m scripts.dev.start_local --frontend-port 9528

注5:如果你已经装好了 PostgreSQL,但还不确定数据库和 schema 是否就绪,可运行 python -m scripts.dev.prepare_local_postgres --check-only;如需自动建库和初始化表结构,可运行 python -m scripts.dev.prepare_local_postgres --ensure-db --apply-schema

访问 http://127.0.0.1:9527 使用前端,后端 API 位于 http://127.0.0.1:5000

6.2 单独启动某个Agent

# 启动QueryEngine
streamlit run apps/engine_console/query_engine_streamlit_app.py --server.port 8503

# 启动MediaEngine  
streamlit run apps/engine_console/media_engine_streamlit_app.py --server.port 8502

# 启动InsightEngine
streamlit run apps/engine_console/insight_engine_streamlit_app.py --server.port 8501

6.3 爬虫系统单独使用

这部分有详细的配置文档:MindSpider使用说明 推荐从项目根目录使用 python -m services.crawler.mindspider.main --status

banner MindSpider 运行示例
# 进入爬虫目录
cd services/crawler/mindspider

# 项目初始化
python main.py --setup

# 运行话题提取(获取热点新闻和关键词)
python main.py --broad-topic

# 运行完整爬虫流程
python main.py --complete --date 2024-01-20

# 仅运行话题提取
python main.py --broad-topic --date 2024-01-20

# 仅运行深度爬取
python main.py --deep-sentiment --platforms xhs dy wb

6.4 命令行报告生成工具

该工具会跳过三个分析引擎的运行阶段,直接读取它们的最新日志文件,并在无需 Web 界面的情况下生成综合报告(同时省略文件增量校验步骤),默认会在 PDF 之后自动生成 Markdown(可用参数关闭)。通常用于对报告生成结果不满意、需要快速重试的场景,或在调试 Report Engine 时启用。

# 基本使用(自动从文件名提取主题)
python -m tools.reports.report_engine_only

# 指定报告主题
python -m tools.reports.report_engine_only --query "土木工程行业分析"

# 跳过PDF生成(即使系统支持)
python -m tools.reports.report_engine_only --skip-pdf

# 跳过Markdown生成
python -m tools.reports.report_engine_only --skip-markdown

# 显示详细日志
python -m tools.reports.report_engine_only --verbose

# 查看帮助信息
python -m tools.reports.report_engine_only --help

功能说明:

  1. 自动检查依赖:程序会自动检查PDF生成所需的系统依赖,如果缺失会给出安装提示
  2. 获取最新文件:自动从三个引擎目录(var/reports/engines/insight/var/reports/engines/media/var/reports/engines/query/)获取最新的分析报告
  3. 文件确认:显示所有选择的文件名、路径和修改时间,等待用户确认(默认输入 y 继续,输入 n 退出)
  4. 直接生成报告:跳过文件增加审核程序,直接调用Report Engine生成综合报告
  5. 自动保存文件
    • HTML报告保存到 var/reports/final/ 目录
    • PDF报告(如果有依赖)保存到 var/reports/final/pdf/ 目录
    • Markdown报告(可用 --skip-markdown 关闭)保存到 var/reports/final/md/ 目录
    • 文件命名格式:final_report_{主题}_{时间戳}.html/pdf/md

注意事项:

  • 确保三个引擎目录中至少有一个包含.md报告文件
  • 命令行工具与Web界面相互独立,不会相互影响
  • PDF生成需要安装系统依赖,详见上文"安装 PDF 导出所需系统依赖"部分

快速重渲染最新结果:

  • python -m tools.reports.regenerate_latest_html / python -m tools.reports.regenerate_latest_md:从 CHAPTER_OUTPUT_DIR 中最新一次运行的章节 JSON 重装订 Document IR,并直接渲染 HTML 或 Markdown。
  • python -m tools.reports.regenerate_latest_pdf:读取 var/reports/final/ir 里最新的 IR,使用 SVG 矢量图表重新导出 PDF。

⚙️ 高级配置(已过时,已经统一为项目根目录.env文件管理,其他子agent自动继承根目录配置)

修改关键参数

Agent配置参数

每个Agent都有专门的配置文件,可根据需求调整,下面是部分示例:

# services/engines/query/utils/config.py
class Config:
    max_reflections = 2           # 反思轮次
    max_search_results = 15       # 最大搜索结果数
    max_content_length = 8000     # 最大内容长度

# services/engines/media/utils/config.py  
class Config:
    comprehensive_search_limit = 10  # 综合搜索限制
    web_search_limit = 15           # 网页搜索限制

# services/engines/insight/utils/config.py
class Config:
    default_search_topic_globally_limit = 200    # 全局搜索限制
    default_get_comments_limit = 500             # 评论获取限制
    max_search_results_for_llm = 50              # 传给LLM的最大结果数

情感分析模型配置

# services/engines/insight/tools/sentiment_analyzer.py
SENTIMENT_CONFIG = {
    'model_type': 'multilingual',     # 可选: 'bert', 'multilingual', 'qwen'等
    'confidence_threshold': 0.8,      # 置信度阈值
    'batch_size': 32,                 # 批处理大小
    'max_sequence_length': 512,       # 最大序列长度
}

接入不同的LLM模型

支持任意 openAI 调用格式的 LLM 提供商,只需要在 .env.local 中填写对应的 KEY、BASE_URL、MODEL_NAME 即可;字段定义可参考 services/shared/config/app_settings.py

什么是openAI调用格式?下面提供一个简单的例子:

from openai import OpenAI

client = OpenAI(api_key="your_api_key", 
               base_url="https://aihubmix.com/v1")

response = client.chat.completions.create(
   model="gpt-4o-mini",
   messages=[
       {'role': 'user', 
        'content': "推理模型会给市场带来哪些新的机会"}
   ],
)

complete_response = response.choices[0].message.content
print(complete_response)

更改情感分析模型

系统集成了多种情感分析方法,可根据需求选择:

多语言情感分析研究示例现已迁移到 research/sentiment_models/WeiboMultilingualSentiment/。 InsightEngine 运行时使用的多语言情感模型工作目录现由 INSIGHT_SENTIMENT_MODEL_DIR 控制,默认值已切到 var/models/insight_weibo_multilingual

1. 多语言情感分析

cd research/sentiment_models/WeiboMultilingualSentiment
python predict.py --text "This product is amazing!" --lang "en"

2. 小参数Qwen3微调

cd research/sentiment_models/WeiboSentiment_SmallQwen
python predict_universal.py --text "这次活动办得很成功"

3. 基于BERT的微调模型

# 使用BERT中文模型
cd research/sentiment_models/WeiboSentiment_Finetuned/BertChinese-Lora
python predict.py --text "这个产品真的很不错"

4. GPT-2 LoRA微调模型

cd research/sentiment_models/WeiboSentiment_Finetuned/GPT2-Lora
python predict.py --text "今天心情不太好"

5. 传统机器学习方法

cd research/sentiment_models/WeiboSentiment_MachineLearning
python predict.py --model_type "svm" --text "服务态度需要改进"

接入自定义业务数据库

1. 修改数据库连接配置

如果你准备扩展业务数据库能力,请先在 services/shared/config/app_settings.py 中补充对应字段,再把实际值写入 .env.local

# 在 `.env.local` 中提供业务数据库配置
BUSINESS_DB_HOST=your_business_db_host
BUSINESS_DB_PORT=3306
BUSINESS_DB_USER=your_business_user
BUSINESS_DB_PASSWORD=your_business_password
BUSINESS_DB_NAME=your_business_database

2. 创建自定义数据访问工具

# services/engines/insight/tools/custom_db_tool.py
from services.shared.config import settings

class CustomBusinessDBTool:
    """自定义业务数据库查询工具"""

    def __init__(self):
        self.connection_config = {
            'host': settings.BUSINESS_DB_HOST,
            'port': settings.BUSINESS_DB_PORT,
            'user': settings.BUSINESS_DB_USER,
            'password': settings.BUSINESS_DB_PASSWORD,
            'database': settings.BUSINESS_DB_NAME,
        }

    def search_business_data(self, query: str, table: str):
        """查询业务数据"""
        # 实现您的业务逻辑
        pass

    def get_customer_feedback(self, product_id: str):
        """获取客户反馈数据"""
        # 实现客户反馈查询逻辑
        pass

3. 集成到InsightEngine

# services/engines/insight/agent.py 中集成自定义工具
from .tools.custom_db_tool import CustomBusinessDBTool

class DeepSearchAgent:
    def __init__(self, config=None):
        # ... 其他初始化代码
        self.custom_db_tool = CustomBusinessDBTool()

    def execute_custom_search(self, query: str):
        """执行自定义业务数据搜索"""
        return self.custom_db_tool.search_business_data(query, "your_table")

自定义报告模板

1. 在Web界面中上传

系统支持上传自定义模板文件(.md或.txt格式),可在生成报告时选择使用。

2. 创建模板文件

services/engines/report/report_template/ 目录下创建新的模板,我们的Agent会自行选用最合适的模板。

🤝 贡献指南

我们欢迎所有形式的贡献!

请阅读以下贡献指南:

🦖 下一步开发计划

现在系统完成了最后一步预测!访问查看【MiroFish-预测万物】:https://github.com/666ghj/MiroFish

banner banner

⚠️ 免责声明

重要提醒:本项目仅供学习、学术研究和教育目的使用

  1. 合规性声明

    • 本项目中的所有代码、工具和功能均仅供学习、学术研究和教育目的使用
    • 严禁将本项目用于任何商业用途或盈利性活动
    • 严禁将本项目用于任何违法、违规或侵犯他人权益的行为
  2. 爬虫功能免责

    • 项目中的爬虫功能仅用于技术学习和研究目的
    • 使用者必须遵守目标网站的robots.txt协议和使用条款
    • 使用者必须遵守相关法律法规,不得进行恶意爬取或数据滥用
    • 因使用爬虫功能产生的任何法律后果由使用者自行承担
  3. 数据使用免责

    • 项目涉及的数据分析功能仅供学术研究使用
    • 严禁将分析结果用于商业决策或盈利目的
    • 使用者应确保所分析数据的合法性和合规性
  4. 技术免责

    • 本项目按"现状"提供,不提供任何明示或暗示的保证
    • 作者不对使用本项目造成的任何直接或间接损失承担责任
    • 使用者应自行评估项目的适用性和风险
  5. 责任限制

    • 使用者在使用本项目前应充分了解相关法律法规
    • 使用者应确保其使用行为符合当地法律法规要求
    • 因违反法律法规使用本项目而产生的任何后果由使用者自行承担

请在使用本项目前仔细阅读并理解上述免责声明。使用本项目即表示您已同意并接受上述所有条款。

📄 许可证

本项目采用 GPL-2.0许可证。详细信息请参阅LICENSE文件。

🎉 支持与联系

获取帮助

常见问题解答:https://github.com/666ghj/BettaFish/issues/185

联系方式

  • 📧 邮箱:hangjiang@bupt.edu.cn

商务合作

  • 企业定制开发
  • 大数据服务
  • 学术合作
  • 技术培训

👥 贡献者

感谢以下优秀的贡献者们:

Contributors

🌟 加入官方交流群

欢迎加入我们的技术交流QQ群! BettaFish 技术交流群二维码

📈 项目统计

Star History Chart

Alt