[!IMPORTANT]
查看我们最新发布的预测引擎:MiroFish-简洁通用的群体智能引擎,预测万物“数据分析三板斧”全线贯通:我们激动的宣布 MiroFish 正式发布!随着最后一块版图补齐,我们构建了从 BettaFish(数据收集与分析)到 MiroFish(全景预测)的完整链路。至此,从原始数据到智能决策的闭环已成,让预见未来成为可能!
⚡ 项目概述
“微舆” 是一个从0实现的创新型 多智能体 舆情分析系统,帮助大家破除信息茧房,还原舆情原貌,预测未来走向,辅助决策。用户只需像聊天一样提出分析需求,智能体开始全自动分析 国内外30+主流社媒 与 数百万条大众评论。
“微舆”谐音“微鱼”,BettaFish是一种体型很小但非常好斗、漂亮的鱼,它象征着“小而强大,不畏挑战”
查看系统以“武汉大学舆情”为例,生成的研究报告:武汉大学品牌声誉深度分析报告
查看系统以“武汉大学舆情”为例,一次完整运行的视频:视频-武汉大学品牌声誉深度分析报告
不仅仅体现在报告质量上,相比同类产品,我们拥有🚀六大优势:
AI驱动的全域监控:AI爬虫集群7x24小时不间断作业,全面覆盖微博、小红书、抖音、快手等10+国内外关键社媒。不仅实时捕获热点内容,更能下钻至海量用户评论,让您听到最真实、最广泛的大众声音。
超越LLM的复合分析引擎:我们不仅依赖设计的5类专业Agent,更融合了微调模型、统计模型等中间件。通过多模型协同工作,确保了分析结果的深度、准度与多维视角。
强大的多模态能力:突破图文限制,能深度解析抖音、快手等短视频内容,并精准提取现代搜索引擎中的天气、日历、股票等结构化多模态信息卡片,让您全面掌握舆情动态。
Agent“论坛”协作机制:为不同Agent赋予独特的工具集与思维模式,引入辩论主持人模型,通过“论坛”机制进行链式思维碰撞与辩论。这不仅避免了单一模型的思维局限与交流导致的同质化,更催生出更高质量的集体智能与决策支持。
公私域数据无缝融合:平台不仅分析公开舆情,还提供高安全性的接口,支持您将内部业务数据库与舆情数据无缝集成。打通数据壁垒,为垂直业务提供“外部趋势+内部洞察”的强大分析能力。
轻量化与高扩展性框架:基于纯Python模块化设计,实现轻量化、一键式部署。代码结构清晰,开发者可轻松集成自定义模型与业务逻辑,实现平台的快速扩展与深度定制。
始于舆情,而不止于舆情。“微舆”的目标,是成为驱动一切业务场景的简洁通用的数据分析引擎。
举个例子. 你只需简单修改Agent工具集的api参数与prompt,就可以把它变成一个金融领域的市场分析系统
附一个比较活跃的L站项目讨论帖:https://linux.do/t/topic/1009280
查看L站佬友做的测评 开源项目(微舆)与manus|minimax|ChatGPT|Perplexity对比
🪄 赞助商
AI联网搜索、文件解析及网页内容抓取等智能体核心能力提供商:
安思派开放平台(Anspire Open)是面向智能体时代的领先的基础设施提供商。我们为开发者提供构建强大智能体所需的核心能力栈,现已上线AI联网搜索【多版本,极具竞争力的价格】、文件解析【限免】及网页内容抓取【限免】、云端浏览器自动化(Anspire Browser Agent)【内测】、多轮改写等服务,持续为智能体连接并操作复杂的数字世界提供坚实基础。可无缝集成至Dify、Coze、元器等主流智能体平台。通过透明点数计费体系与模块化设计,为企业提供高效、低成本的定制化支持,加速智能化升级进程。
🏗️ 系统架构
整体架构图
Insight Agent 私有数据库挖掘:私有舆情数据库深度分析AI代理
Media Agent 多模态内容分析:具备强大多模态能力的AI代理
Query Agent 精准信息搜索:具备国内外网页搜索能力的AI代理
Report Agent 智能报告生成:内置模板的多轮报告生成AI代理
一次完整分析流程
| 步骤 | 阶段名称 | 主要操作 | 参与组件 | 循环特性 |
|---|---|---|---|---|
| 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 + 装订引擎 | - |
项目代码结构树
/* Detailed source-code truncated for AI context efficiency. */🚀 快速开始(Docker)
1. 启动项目
复制一份 .env.example 文件,命名为 .env ,并按需配置 .env 文件中的环境变量
执行以下命令在后台启动所有服务:
docker compose up -d注:镜像拉取速度慢,在原
docker-compose.yml文件中,我们已经通过注释的方式提供了备用镜像地址供您替换
2. 配置说明
数据库配置(PostgreSQL)
请按照以下参数配置数据库连接信息,也支持Mysql可自行修改:
| 配置项 | 填写值 | 说明 |
|---|---|---|
DB_HOST |
db |
数据库服务名称 (对应 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 chromium5. 配置LLM与数据库
复制一份项目根目录 .env.example 文件,命名为 .env
编辑 .env 文件,填入您的API密钥(您也可以选择自己的模型、搜索代理,详情见根目录.env.example文件内或根目录config.py中的说明):
# ====================== 数据库配置 ======================
# 数据库主机,例如localhost 或 127.0.0.1
DB_HOST=your_db_host
# 数据库端口号,postgresql默认为5432,mysql默认为3306
DB_PORT=5432
# 数据库用户名
DB_USER=your_db_user
# 数据库密码
DB_PASSWORD=your_db_password
# 数据库名称
DB_NAME=your_db_name
# 数据库字符集,推荐utf8mb4,兼容emoji
DB_CHARSET=utf8mb4
# 数据库类型postgresql或mysql
DB_DIALECT=postgresql
# 数据库不需要初始化,执行app.py时会自动检测
# ====================== 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
# 启动主应用即可
python app.pyuv 版本启动命令
# 在项目根目录下,激活uv环境
.venv\Scripts\activate
# 启动主应用即可
python app.py注1:一次运行终止后,streamlit app可能结束异常仍然占用端口,此时搜索占用端口的进程kill掉即可
注2:数据爬取需要单独操作,见6.3指引
访问 http://localhost:5000 即可使用完整系统
6.2 单独启动某个Agent
# 启动QueryEngine
streamlit run SingleEngineApp/query_engine_streamlit_app.py --server.port 8503
# 启动MediaEngine
streamlit run SingleEngineApp/media_engine_streamlit_app.py --server.port 8502
# 启动InsightEngine
streamlit run SingleEngineApp/insight_engine_streamlit_app.py --server.port 85016.3 爬虫系统单独使用
这部分有详细的配置文档:MindSpider使用说明
# 进入爬虫目录
cd 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 wb6.4 命令行报告生成工具
该工具会跳过三个分析引擎的运行阶段,直接读取它们的最新日志文件,并在无需 Web 界面的情况下生成综合报告(同时省略文件增量校验步骤),默认会在 PDF 之后自动生成 Markdown(可用参数关闭)。通常用于对报告生成结果不满意、需要快速重试的场景,或在调试 Report Engine 时启用。
# 基本使用(自动从文件名提取主题)
python report_engine_only.py
# 指定报告主题
python report_engine_only.py --query "土木工程行业分析"
# 跳过PDF生成(即使系统支持)
python report_engine_only.py --skip-pdf
# 跳过Markdown生成
python report_engine_only.py --skip-markdown
# 显示详细日志
python report_engine_only.py --verbose
# 查看帮助信息
python report_engine_only.py --help功能说明:
- 自动检查依赖:程序会自动检查PDF生成所需的系统依赖,如果缺失会给出安装提示
- 获取最新文件:自动从三个引擎目录(
insight_engine_streamlit_reports、media_engine_streamlit_reports、query_engine_streamlit_reports)获取最新的分析报告 - 文件确认:显示所有选择的文件名、路径和修改时间,等待用户确认(默认输入
y继续,输入n退出) - 直接生成报告:跳过文件增加审核程序,直接调用Report Engine生成综合报告
- 自动保存文件:
- HTML报告保存到
final_reports/目录 - PDF报告(如果有依赖)保存到
final_reports/pdf/目录 - Markdown报告(可用
--skip-markdown关闭)保存到final_reports/md/目录 - 文件命名格式:
final_report_{主题}_{时间戳}.html/pdf/md
- HTML报告保存到
注意事项:
- 确保三个引擎目录中至少有一个包含
.md报告文件 - 命令行工具与Web界面相互独立,不会相互影响
- PDF生成需要安装系统依赖,详见上文"安装 PDF 导出所需系统依赖"部分
快速重渲染最新结果:
regenerate_latest_html.py/regenerate_latest_md.py:从CHAPTER_OUTPUT_DIR中最新一次运行的章节 JSON 重装订 Document IR,并直接渲染 HTML 或 Markdown。regenerate_latest_pdf.py:读取final_reports/ir里最新的 IR,使用 SVG 矢量图表重新导出 PDF。
⚙️ 高级配置(已过时,已经统一为项目根目录.env文件管理,其他子agent自动继承根目录配置)
修改关键参数
Agent配置参数
每个Agent都有专门的配置文件,可根据需求调整,下面是部分示例:
# QueryEngine/utils/config.py
class Config:
max_reflections = 2 # 反思轮次
max_search_results = 15 # 最大搜索结果数
max_content_length = 8000 # 最大内容长度
# MediaEngine/utils/config.py
class Config:
comprehensive_search_limit = 10 # 综合搜索限制
web_search_limit = 15 # 网页搜索限制
# InsightEngine/utils/config.py
class Config:
default_search_topic_globally_limit = 200 # 全局搜索限制
default_get_comments_limit = 500 # 评论获取限制
max_search_results_for_llm = 50 # 传给LLM的最大结果数情感分析模型配置
# InsightEngine/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提供商,只需要在/config.py中填写对应的KEY、BASE_URL、MODEL_NAME即可。
什么是openAI调用格式?下面提供一个简单的例子:
pythonfrom 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)
更改情感分析模型
系统集成了多种情感分析方法,可根据需求选择:
1. 多语言情感分析
cd SentimentAnalysisModel/WeiboMultilingualSentiment
python predict.py --text "This product is amazing!" --lang "en"2. 小参数Qwen3微调
cd SentimentAnalysisModel/WeiboSentiment_SmallQwen
python predict_universal.py --text "这次活动办得很成功"3. 基于BERT的微调模型
# 使用BERT中文模型
cd SentimentAnalysisModel/WeiboSentiment_Finetuned/BertChinese-Lora
python predict.py --text "这个产品真的很不错"4. GPT-2 LoRA微调模型
cd SentimentAnalysisModel/WeiboSentiment_Finetuned/GPT2-Lora
python predict.py --text "今天心情不太好"5. 传统机器学习方法
cd SentimentAnalysisModel/WeiboSentiment_MachineLearning
python predict.py --model_type "svm" --text "服务态度需要改进"接入自定义业务数据库
1. 修改数据库连接配置
# config.py 中添加您的业务数据库配置
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. 创建自定义数据访问工具
# InsightEngine/tools/custom_db_tool.py
class CustomBusinessDBTool:
"""自定义业务数据库查询工具"""
def __init__(self):
self.connection_config = {
'host': config.BUSINESS_DB_HOST,
'port': config.BUSINESS_DB_PORT,
'user': config.BUSINESS_DB_USER,
'password': config.BUSINESS_DB_PASSWORD,
'database': config.BUSINESS_DB_NAME,
}
def search_business_data(self, query: str, table: str):
"""查询业务数据"""
# 实现您的业务逻辑
pass
def get_customer_feedback(self, product_id: str):
"""获取客户反馈数据"""
# 实现客户反馈查询逻辑
pass3. 集成到InsightEngine
# InsightEngine/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. 创建模板文件
在 ReportEngine/report_template/ 目录下创建新的模板,我们的Agent会自行选用最合适的模板。
🤝 贡献指南
我们欢迎所有形式的贡献!
请阅读以下贡献指南:
🦖 下一步开发计划
现在系统完成了最后一步预测!访问查看【MiroFish-预测万物】:https://github.com/666ghj/MiroFish
⚠️ 免责声明
重要提醒:本项目仅供学习、学术研究和教育目的使用
合规性声明:
- 本项目中的所有代码、工具和功能均仅供学习、学术研究和教育目的使用
- 严禁将本项目用于任何商业用途或盈利性活动
- 严禁将本项目用于任何违法、违规或侵犯他人权益的行为
爬虫功能免责:
- 项目中的爬虫功能仅用于技术学习和研究目的
- 使用者必须遵守目标网站的robots.txt协议和使用条款
- 使用者必须遵守相关法律法规,不得进行恶意爬取或数据滥用
- 因使用爬虫功能产生的任何法律后果由使用者自行承担
数据使用免责:
- 项目涉及的数据分析功能仅供学术研究使用
- 严禁将分析结果用于商业决策或盈利目的
- 使用者应确保所分析数据的合法性和合规性
技术免责:
- 本项目按"现状"提供,不提供任何明示或暗示的保证
- 作者不对使用本项目造成的任何直接或间接损失承担责任
- 使用者应自行评估项目的适用性和风险
责任限制:
- 使用者在使用本项目前应充分了解相关法律法规
- 使用者应确保其使用行为符合当地法律法规要求
- 因违反法律法规使用本项目而产生的任何后果由使用者自行承担
请在使用本项目前仔细阅读并理解上述免责声明。使用本项目即表示您已同意并接受上述所有条款。
📄 许可证
本项目采用 GPL-2.0许可证。详细信息请参阅LICENSE文件。
🎉 支持与联系
获取帮助
常见问题解答:https://github.com/666ghj/BettaFish/issues/700
- 项目主页:GitHub仓库
- 问题反馈:Issues页面
- 功能建议:Discussions页面
联系方式
- 📧 邮箱:[email protected]
商务合作
- 企业定制开发
- 大数据服务
- 学术合作
- 技术培训
👥 贡献者
感谢以下优秀的贡献者们: