[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1202":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":37,"readmeContent":38,"aiSummary":39,"trendingCount":16,"starSnapshotCount":16,"syncStatus":40,"lastSyncTime":41,"discoverSource":42},1202,"BettaFish","666ghj\u002FBettaFish","666ghj","微舆：人人可用的多Agent舆情分析助手，打破信息茧房，还原舆情原貌，预测未来走向，辅助决策！从0实现，不依赖任何框架。","https:\u002F\u002Fdeepwiki.com\u002F666ghj\u002FBettaFish",null,"Python",41344,7590,228,3,0,14,134,477,83,45,"GNU General Public License v2.0",false,"main",true,[27,28,29,30,31,32,33,34,35,36],"agent-framework","data-analysis","deep-research","deep-search","llms","multi-agent-system","nlp","public-opinion-analysis","python3","sentiment-analysis","2026-06-12 02:00:24","\u003Cdiv align=\"center\">\n\n\u003Cimg src=\"static\u002Fimage\u002Flogo_compressed.png\" alt=\"BettaFish Logo\" width=\"100%\">\n\n\u003Ca href=\"https:\u002F\u002Ftrendshift.io\u002Frepositories\u002F15286\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Ftrendshift.io\u002Fapi\u002Fbadge\u002Frepositories\u002F15286\" alt=\"666ghj%2FBettaFish | Trendshift\" style=\"width: 250px; height: 55px;\" width=\"250\" height=\"55\"\u002F>\u003C\u002Fa>\n\n\u003Ca href=\"https:\u002F\u002Faihubmix.com\u002F?aff=8Ds9\" target=\"_blank\">\u003Cimg src=\".\u002Fstatic\u002Fimage\u002Flogo_aihubmix.png\" alt=\"666ghj%2FBettaFish | Trendshift\" height=\"40\"\u002F>\u003C\u002Fa>&ensp;\n\u003Ca href=\"https:\u002F\u002Fopen.anspire.cn\u002F?share_code=3E1FUOUH\" target=\"_blank\">\u003Cimg src=\".\u002Fstatic\u002Fimage\u002Flogo_anspire.png\" alt=\"666ghj%2FBettaFish | Trendshift\" height=\"40\"\u002F>\u003C\u002Fa>\n\n[![GitHub Stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002F666ghj\u002FBettaFish?style=flat-square)](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish\u002Fstargazers)\n[![GitHub Watchers](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fwatchers\u002F666ghj\u002FBettaFish?style=flat-square)](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish\u002Fwatchers)\n[![GitHub Forks](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fforks\u002F666ghj\u002FBettaFish?style=flat-square)](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish\u002Fnetwork)\n[![GitHub Issues](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues\u002F666ghj\u002FBettaFish?style=flat-square)](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish\u002Fissues)\n[![GitHub Pull Requests](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fissues-pr\u002F666ghj\u002FBettaFish?style=flat-square)](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish\u002Fpulls)\n\n[![GitHub License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002F666ghj\u002FBettaFish?style=flat-square)](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish\u002Fblob\u002Fmain\u002FLICENSE)\n[![Version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fversion-v1.2.1-green.svg?style=flat-square)](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish)\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-Build-2496ED?style=flat-square&logo=docker&logoColor=white)](https:\u002F\u002Fhub.docker.com\u002F)\n\n\n\n[English](.\u002FREADME-EN.md) | [中文文档](.\u002FREADME.md)\n\n\u003C\u002Fdiv>\n\n> [!IMPORTANT]  \n> 查看我们最新发布的预测引擎：[MiroFish-简洁通用的群体智能引擎，预测万物](https:\u002F\u002Fgithub.com\u002F666ghj\u002FMiroFish)\n> \n> \u003Cimg src=\"static\u002Fimage\u002FMiroFish_logo_compressed.jpeg\" alt=\"banner\" width=\"300\">\n>\n> “数据分析三板斧”全线贯通：我们激动的宣布 MiroFish 正式发布！随着最后一块版图补齐，我们构建了从 BettaFish（数据收集与分析）到 MiroFish（全景预测）的完整链路。至此，从原始数据到智能决策的闭环已成，让预见未来成为可能！\n\n## ⚡ 项目概述\n\n“**微舆**” 是一个从0实现的创新型 多智能体 舆情分析系统，帮助大家破除信息茧房，还原舆情原貌，预测未来走向，辅助决策。用户只需像聊天一样提出分析需求，智能体开始全自动分析 国内外30+主流社媒 与 数百万条大众评论。\n\n> “微舆”谐音“微鱼”，BettaFish是一种体型很小但非常好斗、漂亮的鱼，它象征着“小而强大，不畏挑战”\n\n查看系统以“武汉大学舆情”为例，生成的研究报告：[武汉大学品牌声誉深度分析报告](.\u002Ffinal_reports\u002Ffinal_report__20250827_131630.html)\n\n查看系统以“武汉大学舆情”为例，一次完整运行的视频：[视频-武汉大学品牌声誉深度分析报告](https:\u002F\u002Fwww.bilibili.com\u002Fvideo\u002FBV1TH1WBxEWN\u002F?vd_source=da3512187e242ce17dceee4c537ec7a6#reply279744466833)\n\n不仅仅体现在报告质量上，相比同类产品，我们拥有🚀六大优势：\n\n1. **AI驱动的全域监控**：AI爬虫集群7x24小时不间断作业，全面覆盖微博、小红书、抖音、快手等10+国内外关键社媒。不仅实时捕获热点内容，更能下钻至海量用户评论，让您听到最真实、最广泛的大众声音。\n\n2. **超越LLM的复合分析引擎**：我们不仅依赖设计的5类专业Agent，更融合了微调模型、统计模型等中间件。通过多模型协同工作，确保了分析结果的深度、准度与多维视角。\n\n3. **强大的多模态能力**：突破图文限制，能深度解析抖音、快手等短视频内容，并精准提取现代搜索引擎中的天气、日历、股票等结构化多模态信息卡片，让您全面掌握舆情动态。\n\n4. **Agent“论坛”协作机制**：为不同Agent赋予独特的工具集与思维模式，引入辩论主持人模型，通过“论坛”机制进行链式思维碰撞与辩论。这不仅避免了单一模型的思维局限与交流导致的同质化，更催生出更高质量的集体智能与决策支持。\n\n5. **公私域数据无缝融合**：平台不仅分析公开舆情，还提供高安全性的接口，支持您将内部业务数据库与舆情数据无缝集成。打通数据壁垒，为垂直业务提供“外部趋势+内部洞察”的强大分析能力。\n\n6. **轻量化与高扩展性框架**：基于纯Python模块化设计，实现轻量化、一键式部署。代码结构清晰，开发者可轻松集成自定义模型与业务逻辑，实现平台的快速扩展与深度定制。\n\n**始于舆情，而不止于舆情**。“微舆”的目标，是成为驱动一切业务场景的简洁通用的数据分析引擎。\n\n> 举个例子. 你只需简单修改Agent工具集的api参数与prompt，就可以把他变成一个金融领域的市场分析系统\n>\n> 附一个比较活跃的L站项目讨论帖：https:\u002F\u002Flinux.do\u002Ft\u002Ftopic\u002F1009280\n>\n> 查看L站佬友做的测评 [开源项目(微舆)与manus|minimax|ChatGPT|Perplexity对比](https:\u002F\u002Flinux.do\u002Ft\u002Ftopic\u002F1148040)\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"static\u002Fimage\u002Fsystem_schematic.png\" alt=\"banner\" width=\"800\">\n\n告别传统的数据看板，在“微舆”，一切由一个简单的问题开始，您只需像对话一样，提出您的分析需求\n\u003C\u002Fdiv>\n\n## 🪄 赞助商\n\nLLM模型API赞助：\u003Ca href=\"https:\u002F\u002Faihubmix.com\u002F?aff=8Ds9\" target=\"_blank\">\u003Cimg src=\".\u002Fstatic\u002Fimage\u002Flogo_aihubmix.png\" alt=\"666ghj%2FBettaFish | Trendshift\" height=\"40\"\u002F>\u003C\u002Fa>\n\n\u003Cdetails>\n\u003Csummary>AI联网搜索、文件解析及网页内容抓取等智能体核心能力提供商：\u003C\u002Fa>\u003Cspan style=\"margin-left: 10px\">\u003Ca href=\"https:\u002F\u002Fopen.anspire.cn\u002F?share_code=3E1FUOUH\" target=\"_blank\">\u003Cimg src=\".\u002Fstatic\u002Fimage\u002Flogo_anspire.png\" alt=\"666ghj%2FBettaFish | Trendshift\" height=\"50\"\u002F>\u003C\u002Fa>\u003C\u002Fsummary>\n安思派开放平台(Anspire Open)是面向智能体时代的领先的基础设施提供商。我们为开发者提供构建强大智能体所需的核心能力栈，现已上线AI联网搜索【多版本，极具竞争力的价格】、文件解析【限免】及网页内容抓取【限免】、云端浏览器自动化（Anspire Browser Agent）【内测】、多轮改写等服务，持续为智能体连接并操作复杂的数字世界提供坚实基础。可无缝集成至Dify、Coze、元器等主流智能体平台。通过透明点数计费体系与模块化设计，为企业提供高效、低成本的定制化支持，加速智能化升级进程。\n\u003C\u002Fdetails>\n\n## 🏗️ 系统架构\n\n### 整体架构图\n\n**Insight Agent** 私有数据库挖掘：私有舆情数据库深度分析AI代理\n\n**Media Agent** 多模态内容分析：具备强大多模态能力的AI代理\n\n**Query Agent** 精准信息搜索：具备国内外网页搜索能力的AI代理\n\n**Report Agent** 智能报告生成：内置模板的多轮报告生成AI代理\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"static\u002Fimage\u002Fframework.png\" alt=\"banner\" width=\"800\">\n\u003C\u002Fdiv>\n\n### 一次完整分析流程\n\n| 步骤 | 阶段名称 | 主要操作 | 参与组件 | 循环特性 |\n|------|----------|----------|----------|----------|\n| 1 | 用户提问 | Flask主应用接收查询 | Flask主应用 | - |\n| 2 | 并行启动 | 三个Agent同时开始工作 | Query Agent、Media Agent、Insight Agent | - |\n| 3 | 初步分析 | 各Agent使用专属工具进行概览搜索 | 各Agent + 专属工具集 | - |\n| 4 | 策略制定 | 基于初步结果制定分块研究策略 | 各Agent内部决策模块 | - |\n| 5-N | **循环阶段** | **论坛协作 + 深度研究** | **ForumEngine + 所有Agent** | **多轮循环** |\n| 5.1 | 深度研究 | 各Agent基于论坛主持人引导进行专项搜索 | 各Agent + 反思机制 + 论坛引导 | 每轮循环 |\n| 5.2 | 论坛协作 | ForumEngine监控Agent发言并生成主持人引导 | ForumEngine + LLM主持人 | 每轮循环 |\n| 5.3 | 交流融合 | 各Agent根据讨论调整研究方向 | 各Agent + forum_reader工具 | 每轮循环 |\n| N+1 | 结果整合 | Report Agent收集所有分析结果和论坛内容 | Report Agent | - |\n| N+2 | IR中间表示 | 动态选择模板和样式，多轮生成元数据，装订为IR中间表示 | Report Agent + 模板引擎 | - |\n| N+3 | 报告生成 | 分块进行质量检测，基于IR渲染成交互式 HTML 报告 | Report Agent + 装订引擎 | - |\n\n### 项目代码结构树\n\n```\nBettaFish\u002F\n├── QueryEngine\u002F                            # 国内外新闻广度搜索Agent\n│   ├── agent.py                            # Agent主逻辑，协调搜索与分析流程\n│   ├── llms\u002F                               # LLM接口封装\n│   ├── nodes\u002F                              # 处理节点：搜索、格式化、总结等\n│   ├── tools\u002F                              # 国内外新闻搜索工具集\n│   ├── utils\u002F                              # 工具函数\n│   ├── state\u002F                              # 状态管理\n│   ├── prompts\u002F                            # 提示词模板\n│   └── ...\n├── MediaEngine\u002F                            # 强大的多模态理解Agent\n│   ├── agent.py                            # Agent主逻辑，处理视频\u002F图片等多模态内容\n│   ├── llms\u002F                               # LLM接口封装\n│   ├── nodes\u002F                              # 处理节点：搜索、格式化、总结等\n│   ├── tools\u002F                              # 多模态搜索工具集\n│   ├── utils\u002F                              # 工具函数\n│   ├── state\u002F                              # 状态管理\n│   ├── prompts\u002F                            # 提示词模板\n│   └── ...\n├── InsightEngine\u002F                          # 私有数据库挖掘Agent\n│   ├── agent.py                            # Agent主逻辑，协调数据库查询与分析\n│   ├── llms\u002F                               # LLM接口封装\n│   │   └── base.py                         # 统一的OpenAI兼容客户端\n│   ├── nodes\u002F                              # 处理节点：搜索、格式化、总结等\n│   │   ├── base_node.py                    # 基础节点类\n│   │   ├── search_node.py                  # 搜索节点\n│   │   ├── formatting_node.py              # 格式化节点\n│   │   ├── report_structure_node.py        # 报告结构节点\n│   │   └── summary_node.py                 # 总结节点\n│   ├── tools\u002F                              # 数据库查询和分析工具集\n│   │   ├── keyword_optimizer.py            # Qwen关键词优化中间件\n│   │   ├── search.py                       # 数据库操作工具集（话题搜索、评论获取等）\n│   │   └── sentiment_analyzer.py           # 情感分析集成工具\n│   ├── utils\u002F                              # 工具函数\n│   │   ├── config.py                       # 配置管理\n│   │   ├── db.py                           # SQLAlchemy异步引擎与只读查询封装\n│   │   └── text_processing.py              # 文本处理工具\n│   ├── state\u002F                              # 状态管理\n│   │   └── state.py                        # Agent状态定义\n│   ├── prompts\u002F                            # 提示词模板\n│   │   └── prompts.py                      # 各类提示词\n│   └── __init__.py\n├── ReportEngine\u002F                           # 多轮报告生成Agent\n│   ├── agent.py                            # 总调度器：模板选择→布局→篇幅→章节→渲染\n│   ├── flask_interface.py                  # Flask\u002FSSE入口，管理任务排队与流式事件\n│   ├── llms\u002F                               # OpenAI兼容LLM封装\n│   │   └── base.py                         # 统一的流式\u002F重试客户端\n│   ├── core\u002F                               # 核心功能：模板解析、章节存储、文档装订\n│   │   ├── template_parser.py              # Markdown模板切片与slug生成\n│   │   ├── chapter_storage.py              # 章节run目录、manifest与raw流写入\n│   │   └── stitcher.py                     # Document IR装订器，补齐锚点\u002F元数据\n│   ├── ir\u002F                                 # 报告中间表示（IR）契约与校验\n│   │   ├── schema.py                       # 块\u002F标记Schema常量定义\n│   │   └── validator.py                    # 章节JSON结构校验器\n│   ├── nodes\u002F                              # 全流程推理节点\n│   │   ├── base_node.py                    # 节点基类+日志\u002F状态钩子\n│   │   ├── template_selection_node.py      # 模板候选收集与LLM筛选\n│   │   ├── document_layout_node.py         # 标题\u002F目录\u002F主题设计\n│   │   ├── word_budget_node.py             # 篇幅规划与章节指令生成\n│   │   └── chapter_generation_node.py      # 章节级JSON生成+校验\n│   ├── prompts\u002F                            # 提示词库与Schema说明\n│   │   └── prompts.py                      # 模板选择\u002F布局\u002F篇幅\u002F章节提示词\n│   ├── renderers\u002F                          # IR渲染器\n│   │   ├── html_renderer.py                # Document IR→交互式HTML\n│   │   ├── pdf_renderer.py                 # HTML→PDF导出（WeasyPrint）\n│   │   ├── pdf_layout_optimizer.py         # PDF布局优化器\n│   │   └── chart_to_svg.py                 # 图表转SVG工具\n│   ├── state\u002F                              # 任务\u002F元数据状态模型\n│   │   └── state.py                        # ReportState与序列化工具\n│   ├── utils\u002F                              # 配置与辅助工具\n│   │   ├── config.py                       # Pydantic Settings与打印助手\n│   │   ├── dependency_check.py             # 依赖检查工具\n│   │   ├── json_parser.py                  # JSON解析工具\n│   │   ├── chart_validator.py              # 图表校验工具\n│   │   └── chart_repair_api.py             # 图表修复API\n│   ├── report_template\u002F                    # Markdown模板库\n│   │   ├── 企业品牌声誉分析报告.md\n│   │   └── ...\n│   └── __init__.py\n├── ForumEngine\u002F                            # 论坛引擎：Agent协作机制\n│   ├── monitor.py                          # 日志监控和论坛管理核心\n│   ├── llm_host.py                         # 论坛主持人LLM模块\n│   └── __init__.py\n├── MindSpider\u002F                             # 社交媒体爬虫系统\n│   ├── main.py                             # 爬虫主程序入口\n│   ├── config.py                           # 爬虫配置文件\n│   ├── BroadTopicExtraction\u002F               # 话题提取模块\n│   │   ├── main.py                         # 话题提取主程序\n│   │   ├── database_manager.py             # 数据库管理器\n│   │   ├── get_today_news.py               # 今日新闻获取\n│   │   └── topic_extractor.py              # 话题提取器\n│   ├── DeepSentimentCrawling\u002F              # 深度舆情爬取模块\n│   │   ├── main.py                         # 深度爬取主程序\n│   │   ├── keyword_manager.py              # 关键词管理器\n│   │   ├── platform_crawler.py             # 平台爬虫管理\n│   │   └── MediaCrawler\u002F                   # 社媒爬虫核心\n│   │       ├── main.py\n│   │       ├── config\u002F                     # 各平台配置\n│   │       ├── media_platform\u002F             # 各平台爬虫实现\n│   │       └── ...\n│   └── schema\u002F                             # 数据库结构定义\n│       ├── db_manager.py                   # 数据库管理器\n│       ├── init_database.py                # 数据库初始化脚本\n│       ├── mindspider_tables.sql           # 数据库表结构SQL\n│       ├── models_bigdata.py               # 大规模媒体舆情表的SQLAlchemy映射\n│       └── models_sa.py                    # DailyTopic\u002FTask等扩展表ORM模型\n├── SentimentAnalysisModel\u002F                 # 情感分析模型集合\n│   ├── WeiboSentiment_Finetuned\u002F           # 微调BERT\u002FGPT-2模型\n│   │   ├── BertChinese-Lora\u002F               # BERT中文LoRA微调\n│   │   │   ├── train.py\n│   │   │   ├── predict.py\n│   │   │   └── ...\n│   │   └── GPT2-Lora\u002F                      # GPT-2 LoRA微调\n│   │       ├── train.py\n│   │       ├── predict.py\n│   │       └── ...\n│   ├── WeiboMultilingualSentiment\u002F         # 多语言情感分析\n│   │   ├── train.py\n│   │   ├── predict.py\n│   │   └── ...\n│   ├── WeiboSentiment_SmallQwen\u002F           # 小参数Qwen3微调\n│   │   ├── train.py\n│   │   ├── predict_universal.py\n│   │   └── ...\n│   └── WeiboSentiment_MachineLearning\u002F     # 传统机器学习方法\n│       ├── train.py\n│       ├── predict.py\n│       └── ...\n├── SingleEngineApp\u002F                        # 单独Agent的Streamlit应用\n│   ├── query_engine_streamlit_app.py       # QueryEngine独立应用\n│   ├── media_engine_streamlit_app.py       # MediaEngine独立应用\n│   └── insight_engine_streamlit_app.py     # InsightEngine独立应用\n├── query_engine_streamlit_reports\u002F         # QueryEngine单应用运行输出\n├── media_engine_streamlit_reports\u002F         # MediaEngine单应用运行输出\n├── insight_engine_streamlit_reports\u002F       # InsightEngine单应用运行输出\n├── templates\u002F                              # Flask前端模板\n│   └── index.html                          # 主界面HTML\n├── static\u002F                                 # 静态资源\n│   ├── image\u002F                              # 图片资源\n│   │   └── ...\n│   ├── Partial README for PDF Exporting\u002F   # PDF导出依赖配置说明\n│   └── v2_report_example\u002F                  # 报告渲染示例\n│       └── report_all_blocks_demo\u002F         # 全块类型演示（HTML\u002FPDF\u002FMD）\n├── logs\u002F                                   # 运行日志目录\n├── final_reports\u002F                          # 最终生成的报告文件\n│   ├── ir\u002F                                 # 报告IR JSON文件\n│   └── *.html                              # 最终HTML报告\n├── utils\u002F                                  # 通用工具函数\n│   ├── forum_reader.py                     # Agent间论坛通信工具\n│   ├── github_issues.py                    # 统一生成GitHub Issue链接与错误提示\n│   └── retry_helper.py                     # 网络请求重试机制工具\n├── tests\u002F                                  # 单元测试与集成测试\n│   ├── run_tests.py                        # pytest入口脚本\n│   ├── test_monitor.py                     # ForumEngine监控单元测试\n│   ├── test_report_engine_sanitization.py  # ReportEngine安全性测试\n│   └── ...\n├── app.py                                  # Flask主应用入口\n├── config.py                               # 全局配置文件\n├── .env.example                            # 环境变量示例文件\n├── docker-compose.yml                      # Docker多服务编排配置\n├── Dockerfile                              # Docker镜像构建文件\n├── requirements.txt                        # Python依赖包清单\n├── regenerate_latest_html.py               # 使用最新章节重装订并渲染HTML\n├── regenerate_latest_md.py                 # 使用最新章节重装订并渲染Markdown\n├── regenerate_latest_pdf.py                # PDF重新生成工具脚本\n├── report_engine_only.py                   # Report Engine命令行版本\n├── README.md                               # 中文说明文档\n├── README-EN.md                            # 英文说明文档\n├── CONTRIBUTING.md                         # 中文贡献指南\n├── CONTRIBUTING-EN.md                      # 英文贡献指南\n└── LICENSE                                 # GPL-2.0开源许可证\n```\n\n## 🚀 快速开始（Docker）\n\n### 1. 启动项目\n\n复制一份 `.env.example` 文件，命名为 `.env` ，并按需配置 `.env` 文件中的环境变量\n\n执行以下命令在后台启动所有服务：\n\n```bash\ndocker compose up -d\n```\n\n> **注：镜像拉取速度慢**，在原 `docker-compose.yml` 文件中，我们已经通过**注释**的方式提供了备用镜像地址供您替换\n\n### 2. 配置说明\n\n#### 数据库配置（PostgreSQL）\n\n请按照以下参数配置数据库连接信息，也支持Mysql可自行修改：\n\n| 配置项 | 填写值 | 说明 |\n| :--- | :--- | :--- |\n| `DB_HOST` | `db` | 数据库服务名称 (对应 `docker-compose.yml` 中的服务名) |\n| `DB_PORT` | `5432` | 默认 PostgreSQL 端口 |\n| `DB_USER` | `bettafish` | 数据库用户名 |\n| `DB_PASSWORD` | `bettafish` | 数据库密码 |\n| `DB_NAME` | `bettafish` | 数据库名称 |\n| **其他** | **保持默认** | 数据库连接池等其他参数请保持默认设置。 |\n\n#### 大模型配置\n\n> 我们所有 LLM 调用使用 OpenAI 的 API 接口标准\n\n在完成数据库配置后，请正常配置**所有大模型相关的参数**，确保系统能够连接到您选择的大模型服务。\n\n完成上述所有配置并保存后，系统即可正常运行。\n\n## 🔧 源码启动指南\n\n> 如果你是初次学习一个Agent系统的搭建，可以从一个非常简单的demo开始：[Deep Search Agent Demo](https:\u002F\u002Fgithub.com\u002F666ghj\u002FDeepSearchAgent-Demo)\n\n### 环境要求\n\n- **操作系统**: Windows、Linux、MacOS\n- **Python版本**: 3.9+\n- **Conda**: Anaconda或Miniconda\n- **数据库**: PostgreSQL（推荐）或MySQL\n- **内存**: 建议2GB以上\n\n### 1. 创建环境\n\n#### 如果使用Conda\n\n```bash\n# 创建conda环境\nconda create -n your_conda_name python=3.11\nconda activate your_conda_name\n```\n\n#### 如果使用uv\n\n```bash\n# 创建uv环境\nuv venv --python 3.11 # 创建3.11环境\n```\n\n### 2. 安装 PDF 导出所需系统依赖（可选）\n\n这部分有详细的配置说明：[配置所需依赖](.\u002Fstatic\u002FPartial%20README%20for%20PDF%20Exporting\u002FREADME.md)\n\n### 3. 安装依赖包\n\n> 如果跳过了步骤2，weasyprint库可能无法安装，PDF功能可能无法正常使用。\n\n```bash\n# 基础依赖安装\npip install -r requirements.txt\n\n# uv版本命令（更快速安装）\nuv pip install -r requirements.txt\n# 如果不想使用本地情感分析模型（算力需求很小，默认安装cpu版本），可以将该文件中的\"机器学习\"部分注释掉再执行指令\n```\n\n### 4. 安装Playwright浏览器驱动\n\n```bash\n# 安装浏览器驱动（用于爬虫功能）\nplaywright install chromium\n```\n\n### 5. 配置LLM与数据库\n\n复制一份项目根目录 `.env.example` 文件，命名为 `.env`\n\n编辑 `.env` 文件，填入您的API密钥（您也可以选择自己的模型、搜索代理，详情见根目录.env.example文件内或根目录config.py中的说明）：\n\n```yml\n# ====================== 数据库配置 ======================\n# 数据库主机，例如localhost 或 127.0.0.1\nDB_HOST=your_db_host\n# 数据库端口号，默认为3306\nDB_PORT=3306\n# 数据库用户名\nDB_USER=your_db_user\n# 数据库密码\nDB_PASSWORD=your_db_password\n# 数据库名称\nDB_NAME=your_db_name\n# 数据库字符集，推荐utf8mb4，兼容emoji\nDB_CHARSET=utf8mb4\n# 数据库类型postgresql或mysql\nDB_DIALECT=postgresql\n# 数据库不需要初始化，执行app.py时会自动检测\n\n# ====================== LLM配置 ======================\n# 您可以更改每个部分LLM使用的API，只要兼容OpenAI请求格式都可以\n# 配置文件内部给了每一个Agent的推荐LLM，初次部署请先参考推荐设置\n\n# Insight Agent\nINSIGHT_ENGINE_API_KEY=\nINSIGHT_ENGINE_BASE_URL=\nINSIGHT_ENGINE_MODEL_NAME=\n\n# Media Agent\n...\n```\n\n### 6. 启动系统\n\n#### 6.1 完整系统启动（推荐）\n\n```bash\n# 在项目根目录下，激活conda环境\nconda activate your_conda_name\n\n# 启动主应用即可\npython app.py\n```\n\nuv 版本启动命令 \n```bash\n# 在项目根目录下，激活uv环境\n.venv\\Scripts\\activate\n\n# 启动主应用即可\npython app.py\n```\n\n> 注1：一次运行终止后，streamlit app可能结束异常仍然占用端口，此时搜索占用端口的进程kill掉即可\n\n> 注2：数据爬取需要单独操作，见6.3指引\n\n访问 http:\u002F\u002Flocalhost:5000 即可使用完整系统\n\n#### 6.2 单独启动某个Agent\n\n```bash\n# 启动QueryEngine\nstreamlit run SingleEngineApp\u002Fquery_engine_streamlit_app.py --server.port 8503\n\n# 启动MediaEngine  \nstreamlit run SingleEngineApp\u002Fmedia_engine_streamlit_app.py --server.port 8502\n\n# 启动InsightEngine\nstreamlit run SingleEngineApp\u002Finsight_engine_streamlit_app.py --server.port 8501\n```\n\n#### 6.3 爬虫系统单独使用\n\n这部分有详细的配置文档：[MindSpider使用说明](.\u002FMindSpider\u002FREADME.md)\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"MindSpider\\img\\example.png\" alt=\"banner\" width=\"600\">\n\nMindSpider 运行示例\n\u003C\u002Fdiv>\n\n```bash\n# 进入爬虫目录\ncd MindSpider\n\n# 项目初始化\npython main.py --setup\n\n# 运行话题提取（获取热点新闻和关键词）\npython main.py --broad-topic\n\n# 运行完整爬虫流程\npython main.py --complete --date 2024-01-20\n\n# 仅运行话题提取\npython main.py --broad-topic --date 2024-01-20\n\n# 仅运行深度爬取\npython main.py --deep-sentiment --platforms xhs dy wb\n```\n\n#### 6.4 命令行报告生成工具\n\n该工具会跳过三个分析引擎的运行阶段，直接读取它们的最新日志文件，并在无需 Web 界面的情况下生成综合报告（同时省略文件增量校验步骤），默认会在 PDF 之后自动生成 Markdown（可用参数关闭）。通常用于对报告生成结果不满意、需要快速重试的场景，或在调试 Report Engine 时启用。\n\n```bash\n# 基本使用（自动从文件名提取主题）\npython report_engine_only.py\n\n# 指定报告主题\npython report_engine_only.py --query \"土木工程行业分析\"\n\n# 跳过PDF生成（即使系统支持）\npython report_engine_only.py --skip-pdf\n\n# 跳过Markdown生成\npython report_engine_only.py --skip-markdown\n\n# 显示详细日志\npython report_engine_only.py --verbose\n\n# 查看帮助信息\npython report_engine_only.py --help\n```\n\n**功能说明：**\n\n1. **自动检查依赖**：程序会自动检查PDF生成所需的系统依赖，如果缺失会给出安装提示\n2. **获取最新文件**：自动从三个引擎目录（`insight_engine_streamlit_reports`、`media_engine_streamlit_reports`、`query_engine_streamlit_reports`）获取最新的分析报告\n3. **文件确认**：显示所有选择的文件名、路径和修改时间，等待用户确认（默认输入 `y` 继续，输入 `n` 退出）\n4. **直接生成报告**：跳过文件增加审核程序，直接调用Report Engine生成综合报告\n5. **自动保存文件**：\n   - HTML报告保存到 `final_reports\u002F` 目录\n   - PDF报告（如果有依赖）保存到 `final_reports\u002Fpdf\u002F` 目录\n   - Markdown报告（可用 `--skip-markdown` 关闭）保存到 `final_reports\u002Fmd\u002F` 目录\n   - 文件命名格式：`final_report_{主题}_{时间戳}.html\u002Fpdf\u002Fmd`\n\n**注意事项：**\n\n- 确保三个引擎目录中至少有一个包含`.md`报告文件\n- 命令行工具与Web界面相互独立，不会相互影响\n- PDF生成需要安装系统依赖，详见上文\"安装 PDF 导出所需系统依赖\"部分\n\n**快速重渲染最新结果：**\n\n- `regenerate_latest_html.py` \u002F `regenerate_latest_md.py`：从 `CHAPTER_OUTPUT_DIR` 中最新一次运行的章节 JSON 重装订 Document IR，并直接渲染 HTML 或 Markdown。\n- `regenerate_latest_pdf.py`：读取 `final_reports\u002Fir` 里最新的 IR，使用 SVG 矢量图表重新导出 PDF。\n\n## ⚙️ 高级配置（已过时，已经统一为项目根目录.env文件管理，其他子agent自动继承根目录配置）\n\n### 修改关键参数\n\n#### Agent配置参数\n\n每个Agent都有专门的配置文件，可根据需求调整，下面是部分示例：\n\n```python\n# QueryEngine\u002Futils\u002Fconfig.py\nclass Config:\n    max_reflections = 2           # 反思轮次\n    max_search_results = 15       # 最大搜索结果数\n    max_content_length = 8000     # 最大内容长度\n    \n# MediaEngine\u002Futils\u002Fconfig.py  \nclass Config:\n    comprehensive_search_limit = 10  # 综合搜索限制\n    web_search_limit = 15           # 网页搜索限制\n    \n# InsightEngine\u002Futils\u002Fconfig.py\nclass Config:\n    default_search_topic_globally_limit = 200    # 全局搜索限制\n    default_get_comments_limit = 500             # 评论获取限制\n    max_search_results_for_llm = 50              # 传给LLM的最大结果数\n```\n\n#### 情感分析模型配置\n\n```python\n# InsightEngine\u002Ftools\u002Fsentiment_analyzer.py\nSENTIMENT_CONFIG = {\n    'model_type': 'multilingual',     # 可选: 'bert', 'multilingual', 'qwen'等\n    'confidence_threshold': 0.8,      # 置信度阈值\n    'batch_size': 32,                 # 批处理大小\n    'max_sequence_length': 512,       # 最大序列长度\n}\n```\n\n### 接入不同的LLM模型\n\n支持任意openAI调用格式的LLM提供商，只需要在\u002Fconfig.py中填写对应的KEY、BASE_URL、MODEL_NAME即可。\n\n> 什么是openAI调用格式？下面提供一个简单的例子：\n>```python\n>from openai import OpenAI\n>\n>client = OpenAI(api_key=\"your_api_key\", \n>                base_url=\"https:\u002F\u002Faihubmix.com\u002Fv1\")\n>\n>response = client.chat.completions.create(\n>    model=\"gpt-4o-mini\",\n>    messages=[\n>        {'role': 'user', \n>         'content': \"推理模型会给市场带来哪些新的机会\"}\n>    ],\n>)\n>\n>complete_response = response.choices[0].message.content\n>print(complete_response)\n>```\n\n### 更改情感分析模型\n\n系统集成了多种情感分析方法，可根据需求选择：\n\n#### 1. 多语言情感分析\n\n```bash\ncd SentimentAnalysisModel\u002FWeiboMultilingualSentiment\npython predict.py --text \"This product is amazing!\" --lang \"en\"\n```\n\n#### 2. 小参数Qwen3微调\n\n```bash\ncd SentimentAnalysisModel\u002FWeiboSentiment_SmallQwen\npython predict_universal.py --text \"这次活动办得很成功\"\n```\n\n#### 3. 基于BERT的微调模型\n\n```bash\n# 使用BERT中文模型\ncd SentimentAnalysisModel\u002FWeiboSentiment_Finetuned\u002FBertChinese-Lora\npython predict.py --text \"这个产品真的很不错\"\n```\n\n#### 4. GPT-2 LoRA微调模型\n\n```bash\ncd SentimentAnalysisModel\u002FWeiboSentiment_Finetuned\u002FGPT2-Lora\npython predict.py --text \"今天心情不太好\"\n```\n\n#### 5. 传统机器学习方法\n\n```bash\ncd SentimentAnalysisModel\u002FWeiboSentiment_MachineLearning\npython predict.py --model_type \"svm\" --text \"服务态度需要改进\"\n```\n\n### 接入自定义业务数据库\n\n#### 1. 修改数据库连接配置\n\n```python\n# config.py 中添加您的业务数据库配置\nBUSINESS_DB_HOST = \"your_business_db_host\"\nBUSINESS_DB_PORT = 3306\nBUSINESS_DB_USER = \"your_business_user\"\nBUSINESS_DB_PASSWORD = \"your_business_password\"\nBUSINESS_DB_NAME = \"your_business_database\"\n```\n\n#### 2. 创建自定义数据访问工具\n\n```python\n# InsightEngine\u002Ftools\u002Fcustom_db_tool.py\nclass CustomBusinessDBTool:\n    \"\"\"自定义业务数据库查询工具\"\"\"\n    \n    def __init__(self):\n        self.connection_config = {\n            'host': config.BUSINESS_DB_HOST,\n            'port': config.BUSINESS_DB_PORT,\n            'user': config.BUSINESS_DB_USER,\n            'password': config.BUSINESS_DB_PASSWORD,\n            'database': config.BUSINESS_DB_NAME,\n        }\n    \n    def search_business_data(self, query: str, table: str):\n        \"\"\"查询业务数据\"\"\"\n        # 实现您的业务逻辑\n        pass\n    \n    def get_customer_feedback(self, product_id: str):\n        \"\"\"获取客户反馈数据\"\"\"\n        # 实现客户反馈查询逻辑\n        pass\n```\n\n#### 3. 集成到InsightEngine\n\n```python\n# InsightEngine\u002Fagent.py 中集成自定义工具\nfrom .tools.custom_db_tool import CustomBusinessDBTool\n\nclass DeepSearchAgent:\n    def __init__(self, config=None):\n        # ... 其他初始化代码\n        self.custom_db_tool = CustomBusinessDBTool()\n    \n    def execute_custom_search(self, query: str):\n        \"\"\"执行自定义业务数据搜索\"\"\"\n        return self.custom_db_tool.search_business_data(query, \"your_table\")\n```\n\n### 自定义报告模板\n\n#### 1. 在Web界面中上传\n\n系统支持上传自定义模板文件（.md或.txt格式），可在生成报告时选择使用。\n\n#### 2. 创建模板文件\n\n在 `ReportEngine\u002Freport_template\u002F` 目录下创建新的模板，我们的Agent会自行选用最合适的模板。\n\n## 🤝 贡献指南\n\n我们欢迎所有形式的贡献！\n\n**请阅读以下贡献指南：**  \n- [CONTRIBUTING.md](.\u002FCONTRIBUTING.md)\n\n## 🦖 下一步开发计划\n\n现在系统完成了最后一步预测！访问查看【MiroFish-预测万物】：https:\u002F\u002Fgithub.com\u002F666ghj\u002FMiroFish\n\n\u003Cdiv align=\"center\">\n\u003Cimg src=\"static\u002Fimage\u002FMiroFish_logo_compressed.jpeg\" alt=\"banner\" width=\"800\">\n\u003Cimg src=\"static\u002Fimage\u002Fbanner_compressed.png\" alt=\"banner\" width=\"800\">\n\u003C\u002Fdiv>\n\n## ⚠️ 免责声明\n\n**重要提醒：本项目仅供学习、学术研究和教育目的使用**\n\n1. **合规性声明**：\n   - 本项目中的所有代码、工具和功能均仅供学习、学术研究和教育目的使用\n   - 严禁将本项目用于任何商业用途或盈利性活动\n   - 严禁将本项目用于任何违法、违规或侵犯他人权益的行为\n\n2. **爬虫功能免责**：\n   - 项目中的爬虫功能仅用于技术学习和研究目的\n   - 使用者必须遵守目标网站的robots.txt协议和使用条款\n   - 使用者必须遵守相关法律法规，不得进行恶意爬取或数据滥用\n   - 因使用爬虫功能产生的任何法律后果由使用者自行承担\n\n3. **数据使用免责**：\n   - 项目涉及的数据分析功能仅供学术研究使用\n   - 严禁将分析结果用于商业决策或盈利目的\n   - 使用者应确保所分析数据的合法性和合规性\n\n4. **技术免责**：\n   - 本项目按\"现状\"提供，不提供任何明示或暗示的保证\n   - 作者不对使用本项目造成的任何直接或间接损失承担责任\n   - 使用者应自行评估项目的适用性和风险\n\n5. **责任限制**：\n   - 使用者在使用本项目前应充分了解相关法律法规\n   - 使用者应确保其使用行为符合当地法律法规要求\n   - 因违反法律法规使用本项目而产生的任何后果由使用者自行承担\n\n**请在使用本项目前仔细阅读并理解上述免责声明。使用本项目即表示您已同意并接受上述所有条款。**\n\n## 📄 许可证\n\n本项目采用 [GPL-2.0许可证](LICENSE)。详细信息请参阅LICENSE文件。\n\n## 🎉 支持与联系\n\n### 获取帮助\n\n常见问题解答：https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish\u002Fissues\u002F185\n\n- **项目主页**：[GitHub仓库](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish)\n- **问题反馈**：[Issues页面](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish\u002Fissues)\n- **功能建议**：[Discussions页面](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish\u002Fdiscussions)\n\n### 联系方式\n\n- 📧 **邮箱**：hangjiang@bupt.edu.cn\n\n### 商务合作\n\n- **企业定制开发**\n- **大数据服务**\n- **学术合作**\n- **技术培训**\n\n## 👥 贡献者\n\n感谢以下优秀的贡献者们：\n\n[![Contributors](https:\u002F\u002Fcontrib.rocks\u002Fimage?repo=666ghj\u002FBettaFish)](https:\u002F\u002Fgithub.com\u002F666ghj\u002FBettaFish\u002Fgraphs\u002Fcontributors)\n\n## 🌟 加入官方交流群\n\n\u003Cdiv align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fcapsule-render.vercel.app\u002Fapi?type=waving&color=gradient&height=200&section=header&text=欢迎加入我们的技术交流QQ群！&fontSize=40&fontAlignY=35&desc=扫描下方二维码加入群聊&descAlignY=55\" alt=\"欢迎加入我们的技术交流QQ群！\" style=\"width:60%; max-width:900px; display:block; margin:0 auto;\">\n  \u003Cimg src=\"static\u002Fimage\u002FQQ_Light_Horizenal.png\" alt=\"BettaFish 技术交流群二维码\" style=\"width:60%; max-width:360px; display:block; margin:20px auto 0;\">\n\u003C\u002Fdiv>\n\n## 📈 项目统计\n\n\u003Ca href=\"https:\u002F\u002Fwww.star-history.com\u002F#666ghj\u002FBettaFish&type=date&legend=top-left\">\n \u003Cpicture>\n   \u003Csource media=\"(prefers-color-scheme: dark)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=666ghj\u002FBettaFish&type=date&theme=dark&legend=top-left\" \u002F>\n   \u003Csource media=\"(prefers-color-scheme: light)\" srcset=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=666ghj\u002FBettaFish&type=date&legend=top-left\" \u002F>\n   \u003Cimg alt=\"Star History Chart\" src=\"https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=666ghj\u002FBettaFish&type=date&legend=top-left\" \u002F>\n \u003C\u002Fpicture>\n\u003C\u002Fa>\n\n![Alt](https:\u002F\u002Frepobeats.axiom.co\u002Fapi\u002Fembed\u002Fe04e3eea4674edc39c148a7845c8d09c1b7b1922.svg \"Repobeats analytics image\")\n","微舆是一个从零实现的多智能体舆情分析系统，旨在打破信息茧房，还原舆情原貌，并预测未来走向以辅助决策。其核心功能包括AI驱动的全域监控、超越LLM的复合分析引擎以及强大的多模态解析能力。该系统能够7x24小时不间断地抓取并分析来自微博、小红书等国内外主流社交媒体平台的数据，同时支持短视频内容和结构化多模态信息卡片的解析。通过引入独特的Agent“论坛”协作机制，微舆能够在多种场景下提供高质量的数据分析与决策支持服务，适用于企业品牌管理、市场调研及公共事务处理等领域。",2,"2026-06-11 02:42:15","top_all"]