From fd6ffaa0127d732ec16afcacb6d411ad1ccd778d Mon Sep 17 00:00:00 2001 From: JasonDylan Date: Wed, 12 Nov 2025 14:55:23 +0800 Subject: [PATCH 1/5] =?UTF-8?q?fix:=20correctly=20load=20environment=20var?= =?UTF-8?q?iables=20in=20docker-compose=20/=20fix:=20docker-compose=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Docker=20=E9=83=A8=E7=BD=B2=E6=97=B6?= =?UTF-8?q?=E7=BD=91=E9=A1=B5=E9=85=8D=E7=BD=AE=E4=BF=AE=E6=94=B9=E6=97=A0?= =?UTF-8?q?=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index 7210aff..a6e804c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,6 +18,7 @@ services: volumes: - ./logs:/app/logs - ./final_reports:/app/final_reports + - ./.env:/app/.env - ./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 From 9d6e4946e8755d6bb90a56cfbac07086cd5aec51 Mon Sep 17 00:00:00 2001 From: 666ghj <670939375@qq.com> Date: Thu, 13 Nov 2025 17:33:58 +0800 Subject: [PATCH 2/5] Update operation guide in UI and config file. --- .env.example | 38 ++++++++++++----------------------- config.py | 47 ++++++++++++++++++++++++-------------------- templates/index.html | 16 +++++++-------- 3 files changed, 47 insertions(+), 54 deletions(-) diff --git a/.env.example b/.env.example index d0962b5..6b5b5f5 100644 --- a/.env.example +++ b/.env.example @@ -21,55 +21,43 @@ DB_CHARSET=utf8mb4 DB_DIALECT=postgresql # ======================= LLM 相关 ======================= +# 您可以更改每个部分LLM使用的API,🚩只要兼容OpenAI请求格式都可以,定义好KEY、BASE_URL与MODEL_NAME即可正常使用。 +# 重要提醒:我们强烈推荐您先使用推荐的配置申请API,先跑通再进行您的更改! # 我们的LLM模型API赞助商有:https://share.302.ai/P66Qe3、https://aihubmix.com/?aff=8Ds9,提供了非常全面的模型api -# Insight Agent(推荐Kimi,https://platform.moonshot.cn/)API密钥,用于主LLM +# Insight Agent(推荐kimi-k2,官方申请地址:https://platform.moonshot.cn/) INSIGHT_ENGINE_API_KEY= -# Insight Agent LLM接口BaseUrl,可自定义厂商API INSIGHT_ENGINE_BASE_URL= -# Insight Agent LLM模型名称,如kimi-k2-0711-preview INSIGHT_ENGINE_MODEL_NAME= -# Media Agent(推荐Gemini,推荐中转厂商 https://aihubmix.com/?aff=8Ds9)API密钥 +# Media Agent(推荐Gemini-2.5-pro,中转厂商申请地址:https://aihubmix.com/?aff=8Ds9) MEDIA_ENGINE_API_KEY= -# Media Agent LLM接口BaseUrl MEDIA_ENGINE_BASE_URL= -# Media Agent LLM模型名称,如gemini-2.5-pro MEDIA_ENGINE_MODEL_NAME= -# MindSpider Agent API密钥(推荐Deepseek) -MINDSPIDER_API_KEY= -# MindSpider LLM接口BaseUrl -MINDSPIDER_BASE_URL= -# MindSpider LLM模型名称,如deepseek-chat -MINDSPIDER_MODEL_NAME= - -# Query Agent(推荐DeepSeek,https://www.deepseek.com/)API密钥 +# Query Agent(推荐deepseek-chat,官方申请地址:https://platform.deepseek.com/) QUERY_ENGINE_API_KEY= -# Query Agent LLM接口BaseUrl QUERY_ENGINE_BASE_URL= -# Query Agent LLM模型,如deepseek-reasoner QUERY_ENGINE_MODEL_NAME= -# Report Agent(推荐Gemini,推荐中转厂商 https://aihubmix.com/?aff=8Ds9)API密钥 +# Report Agent(推荐Gemini-2.5-pro,中转厂商申请地址:https://aihubmix.com/?aff=8Ds9) REPORT_ENGINE_API_KEY= -# Report Agent LLM接口BaseUrl REPORT_ENGINE_BASE_URL= -# Report Agent LLM模型,如gemini-2.5-pro REPORT_ENGINE_MODEL_NAME= -# Forum Host LLM API密钥,Qwen3最新模型,推荐 https://cloud.siliconflow.cn/ +# MindSpider Agent(推荐deepseek-chat,官方申请地址:https://platform.deepseek.com/) +MINDSPIDER_API_KEY= +MINDSPIDER_BASE_URL= +MINDSPIDER_MODEL_NAME= + +# 论坛主持人(推荐qwen-plus,官方申请地址:https://www.aliyun.com/product/bailian) FORUM_HOST_API_KEY= -# Forum Host LLM BaseUrl FORUM_HOST_BASE_URL= -# Forum Host LLM模型名,如Qwen/Qwen3-235B-A22B-Instruct-2507 FORUM_HOST_MODEL_NAME= -# SQL Keyword Optimizer LLM密钥,小参数Qwen3模型 https://cloud.siliconflow.cn/ +# SQL Keyword Optimizer(推荐qwen-plus,官方申请地址:https://www.aliyun.com/product/bailian) KEYWORD_OPTIMIZER_API_KEY= -# Keyword Optimizer BaseUrl KEYWORD_OPTIMIZER_BASE_URL= -# Keyword Optimizer LLM模型名称,如deepseek-chat KEYWORD_OPTIMIZER_MODEL_NAME= # ================== 网络工具配置 ==================== diff --git a/config.py b/config.py index 6745a19..999905b 100644 --- a/config.py +++ b/config.py @@ -26,12 +26,12 @@ class Settings(BaseSettings): 变量名与原 config.py 大写一致,便于平滑过渡。 """ # ================== Flask 服务器配置 ==================== - HOST: str = Field("0.0.0.0", description="Flask服务器主机地址,默认0.0.0.0(允许外部访问)") + HOST: str = Field("0.0.0.0", description="BETTAFISH 主机地址,例如 0.0.0.0 或 127.0.0.1") PORT: int = Field(5000, description="Flask服务器端口号,默认5000") # ====================== 数据库配置 ====================== - DB_DIALECT: str = Field("mysql", description="数据库类型,例如 'mysql' 或 'postgresql'。用于支持多种数据库后端(如 SQLAlchemy,请与连接信息共同配置)") - DB_HOST: str = Field("your_db_host", description="数据库主机,例如localhost 或 127.0.0.1。我们也提供云数据库资源便捷配置,日均10w+数据,可免费申请,联系我们:670939375@qq.com NOTE:为进行数据合规性审查与服务升级,云数据库自2025年10月1日起暂停接收新的使用申请") + DB_DIALECT: str = Field("postgresql", description="数据库类型,可选 mysql 或 postgresql;请与其他连接信息同时配置") + DB_HOST: str = Field("your_db_host", description="数据库主机,例如localhost 或 127.0.0.1") DB_PORT: int = Field(3306, description="数据库端口号,默认为3306") DB_USER: str = Field("your_db_user", description="数据库用户名") DB_PASSWORD: str = Field("your_db_password", description="数据库密码") @@ -42,34 +42,39 @@ class Settings(BaseSettings): # 我们的LLM模型API赞助商有:https://share.302.ai/P66Qe3、https://aihubmix.com/?aff=8Ds9,提供了非常全面的模型api # Insight Agent(推荐Kimi,申请地址:https://platform.moonshot.cn/) - INSIGHT_ENGINE_API_KEY: Optional[str] = Field(None, description="Insight Agent(推荐Kimi,https://platform.moonshot.cn/)API密钥,用于主LLM。您可以更改每个部分LLM使用的API,🚩只要兼容OpenAI请求格式都可以,定义好KEY、BASE_URL与MODEL_NAME即可正常使用。重要提醒:我们强烈推荐您先使用推荐的配置申请API,先跑通再进行您的更改!") - INSIGHT_ENGINE_BASE_URL: Optional[str] = Field("https://api.moonshot.cn/v1", description="Insight Agent LLM接口BaseUrl,可自定义厂商API") - INSIGHT_ENGINE_MODEL_NAME: str = Field("kimi-k2-0711-preview", description="Insight Agent LLM模型名称,如kimi-k2-0711-preview") + INSIGHT_ENGINE_API_KEY: Optional[str] = Field(None, description="Insight Agent(推荐 kimi-k2,官方申请地址:https://platform.moonshot.cn/)API 密钥,用于主 LLM。🚩请先按推荐配置申请并跑通,再根据需要调整 KEY、BASE_URL 与 MODEL_NAME。") + INSIGHT_ENGINE_BASE_URL: Optional[str] = Field("https://api.moonshot.cn/v1", description="Insight Agent LLM BaseUrl,可根据厂商自定义") + INSIGHT_ENGINE_MODEL_NAME: str = Field("kimi-k2-0711-preview", description="Insight Agent LLM 模型名称,例如 kimi-k2-0711-preview") # Media Agent(推荐Gemini,推荐中转厂商:https://aihubmix.com/?aff=8Ds9) - MEDIA_ENGINE_API_KEY: Optional[str] = Field(None, description="Media Agent(推荐Gemini,推荐中转api厂商:https://aihubmix.com/?aff=8Ds9") - MEDIA_ENGINE_BASE_URL: Optional[str] = Field("https://aihubmix.com/v1", description="Media Agent LLM接口BaseUrl") - MEDIA_ENGINE_MODEL_NAME: str = Field("gemini-2.5-pro", description="Media Agent LLM模型名称,如gemini-2.5-pro") + MEDIA_ENGINE_API_KEY: Optional[str] = Field(None, description="Media Agent(推荐 Gemini-2.5-pro,中转厂商申请地址:https://aihubmix.com/?aff=8Ds9)API 密钥") + MEDIA_ENGINE_BASE_URL: Optional[str] = Field("https://aihubmix.com/v1", description="Media Agent LLM BaseUrl,可根据中转服务调整") + MEDIA_ENGINE_MODEL_NAME: str = Field("gemini-2.5-pro", description="Media Agent LLM 模型名称,如 gemini-2.5-pro") # Query Agent(推荐DeepSeek,申请地址:https://www.deepseek.com/) - QUERY_ENGINE_API_KEY: Optional[str] = Field(None, description="Query Agent(推荐DeepSeek,https://www.deepseek.com/)API密钥") - QUERY_ENGINE_BASE_URL: Optional[str] = Field("https://api.deepseek.com", description="Query Agent LLM接口BaseUrl") - QUERY_ENGINE_MODEL_NAME: str = Field("deepseek-reasoner", description="Query Agent LLM模型,如deepseek-reasoner") + QUERY_ENGINE_API_KEY: Optional[str] = Field(None, description="Query Agent(推荐 DeepSeek,官方申请地址:https://platform.deepseek.com/)API 密钥") + QUERY_ENGINE_BASE_URL: Optional[str] = Field("https://api.deepseek.com", description="Query Agent LLM BaseUrl") + QUERY_ENGINE_MODEL_NAME: str = Field("deepseek-chat", description="Query Agent LLM 模型名称,如 deepseek-reasoner") # Report Agent(推荐Gemini,推荐中转厂商:https://aihubmix.com/?aff=8Ds9) - REPORT_ENGINE_API_KEY: Optional[str] = Field(None, description="Report Agent(推荐Gemini,推荐中转api厂商:https://aihubmix.com/?aff=8Ds9") - REPORT_ENGINE_BASE_URL: Optional[str] = Field("https://aihubmix.com/v1", description="Report Agent LLM接口BaseUrl") - REPORT_ENGINE_MODEL_NAME: str = Field("gemini-2.5-pro", description="Report Agent LLM模型,如gemini-2.5-pro") + REPORT_ENGINE_API_KEY: Optional[str] = Field(None, description="Report Agent(推荐 Gemini-2.5-pro,中转厂商申请地址:https://aihubmix.com/?aff=8Ds9)API 密钥") + REPORT_ENGINE_BASE_URL: Optional[str] = Field("https://aihubmix.com/v1", description="Report Agent LLM BaseUrl,可根据中转服务调整") + REPORT_ENGINE_MODEL_NAME: str = Field("gemini-2.5-pro", description="Report Agent LLM 模型名称,如 gemini-2.5-pro") + + # MindSpider Agent(推荐Deepseek,官方申请地址:https://platform.deepseek.com/) + MINDSPIDER_API_KEY: Optional[str] = Field(None, description="MindSpider Agent(推荐 DeepSeek,官方申请地址:https://platform.deepseek.com/)API 密钥") + MINDSPIDER_BASE_URL: Optional[str] = Field(None, description="MindSpider Agent BaseUrl,可按所选服务配置") + MINDSPIDER_MODEL_NAME: Optional[str] = Field(None, description="MindSpider Agent 模型名称,例如 deepseek-reasoner") # Forum Host(Qwen3最新模型,这里我使用了硅基流动这个平台,申请地址:https://cloud.siliconflow.cn/) - FORUM_HOST_API_KEY: Optional[str] = Field(None, description="Forum Host(Qwen3最新模型,这里我使用了硅基流动这个平台,申请地址:https://cloud.siliconflow.cn/)API密钥") - FORUM_HOST_BASE_URL: Optional[str] = Field("https://api.siliconflow.cn/v1", description="Forum Host LLM BaseUrl") - FORUM_HOST_MODEL_NAME: str = Field("Qwen/Qwen3-235B-A22B-Instruct-2507", description="Forum Host LLM模型名,如Qwen/Qwen3-235B-A22B-Instruct-2507") + FORUM_HOST_API_KEY: Optional[str] = Field(None, description="Forum Host(推荐 qwen-plus,官方申请地址:https://www.aliyun.com/product/bailian)API 密钥") + FORUM_HOST_BASE_URL: Optional[str] = Field(None, description="Forum Host LLM BaseUrl,可按所选服务配置") + FORUM_HOST_MODEL_NAME: Optional[str] = Field(None, description="Forum Host LLM 模型名称,例如 qwen-plus") # SQL keyword Optimizer(小参数Qwen3模型,这里我使用了硅基流动这个平台,申请地址:https://cloud.siliconflow.cn/) - KEYWORD_OPTIMIZER_API_KEY: Optional[str] = Field(None, description="SQL keyword Optimizer(小参数Qwen3模型,这里我使用了硅基流动这个平台,申请地址:https://cloud.siliconflow.cn/)API密钥") - KEYWORD_OPTIMIZER_BASE_URL: Optional[str] = Field("https://api.siliconflow.cn/v1", description="Keyword Optimizer BaseUrl") - KEYWORD_OPTIMIZER_MODEL_NAME: str = Field("Qwen/Qwen3-30B-A3B-Instruct-2507", description="Keyword Optimizer LLM模型名称,如Qwen/Qwen3-30B-A3B-Instruct-2507") + KEYWORD_OPTIMIZER_API_KEY: Optional[str] = Field(None, description="SQL Keyword Optimizer(推荐 qwen-plus,官方申请地址:https://www.aliyun.com/product/bailian)API 密钥") + KEYWORD_OPTIMIZER_BASE_URL: Optional[str] = Field(None, description="Keyword Optimizer BaseUrl,可按所选服务配置") + KEYWORD_OPTIMIZER_MODEL_NAME: Optional[str] = Field(None, description="Keyword Optimizer LLM 模型名称,例如 qwen-plus") # ================== 网络工具配置 ==================== # Tavily API(申请地址:https://www.tavily.com/) diff --git a/templates/index.html b/templates/index.html index eb39fcb..f33d49a 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1174,7 +1174,7 @@ const configFieldGroups = [ { title: '数据库连接', - subtitle: '用于连接业务数据库的基本配置', + subtitle: '用于连接社媒数据库的基本配置,注意数据库默认为空,需要单独部署MindSpider爬取数据', fields: [ { key: 'DB_DIALECT', label: '数据库类型', type: 'select', options: ['mysql', 'postgresql'] }, { key: 'DB_HOST', label: '主机地址' }, @@ -1187,7 +1187,7 @@ }, { title: 'Insight Agent', - subtitle: '负责洞察分析的模型配置', + subtitle: 'OpenAi接入格式,推荐LLM:kimi-k2', fields: [ { key: 'INSIGHT_ENGINE_API_KEY', label: 'API Key', type: 'password' }, { key: 'INSIGHT_ENGINE_BASE_URL', label: 'Base URL' }, @@ -1196,7 +1196,7 @@ }, { title: 'Media Agent', - subtitle: '媒体内容理解与生成模型', + subtitle: 'OpenAi接入格式,推荐LLM:gemini-2.5-pro', fields: [ { key: 'MEDIA_ENGINE_API_KEY', label: 'API Key', type: 'password' }, { key: 'MEDIA_ENGINE_BASE_URL', label: 'Base URL' }, @@ -1205,7 +1205,7 @@ }, { title: 'Query Agent', - subtitle: '负责搜索与信息汇总的模型配置', + subtitle: 'OpenAi接入格式,推荐LLM:deepseek-chat', fields: [ { key: 'QUERY_ENGINE_API_KEY', label: 'API Key', type: 'password' }, { key: 'QUERY_ENGINE_BASE_URL', label: 'Base URL' }, @@ -1214,7 +1214,7 @@ }, { title: 'Report Agent', - subtitle: '报告生成使用的模型配置', + subtitle: 'OpenAi接入格式,推荐LLM:gemini-2.5-pro', fields: [ { key: 'REPORT_ENGINE_API_KEY', label: 'API Key', type: 'password' }, { key: 'REPORT_ENGINE_BASE_URL', label: 'Base URL' }, @@ -1223,7 +1223,7 @@ }, { title: 'Forum Host', - subtitle: '多智能体协同使用的模型配置', + subtitle: 'OpenAi接入格式,推荐LLM:qwen-plus', fields: [ { key: 'FORUM_HOST_API_KEY', label: 'API Key', type: 'password' }, { key: 'FORUM_HOST_BASE_URL', label: 'Base URL' }, @@ -1232,7 +1232,7 @@ }, { title: 'Keyword Optimizer', - subtitle: 'SQL / 关键词优化模型配置', + subtitle: 'OpenAi接入格式,推荐LLM:qwen-plus', fields: [ { key: 'KEYWORD_OPTIMIZER_API_KEY', label: 'API Key', type: 'password' }, { key: 'KEYWORD_OPTIMIZER_BASE_URL', label: 'Base URL' }, @@ -1241,7 +1241,7 @@ }, { title: '外部检索工具', - subtitle: '联动搜索引擎、网站抓取等在线服务', + subtitle: '联动搜索引擎、网站抓取等在线服务,两个都需配置', fields: [ { key: 'TAVILY_API_KEY', label: 'Tavily API Key', type: 'password' }, { key: 'BOCHA_WEB_SEARCH_API_KEY', label: 'Bocha API Key', type: 'password' } From 13ed9953def892504e4ba6f02b940219f6ef47ce Mon Sep 17 00:00:00 2001 From: ghmark675 Date: Thu, 13 Nov 2025 19:11:34 +0800 Subject: [PATCH 3/5] docs(README): update quick start guide add .env file declaration --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index aa7b2c3..d77a02a 100644 --- a/README.md +++ b/README.md @@ -218,7 +218,9 @@ BettaFish/ ### 1. 启动项目 -**运行命令:** 执行以下命令在**后台**启动所有服务: +复制一份 `.env.example` 文件,命名为 `.env` ,并按需配置 `.env` 文件中的环境变量 + +执行以下命令在后台启动所有服务: ```bash docker compose up -d From 01d980486112262d67303e0d3d4b51336cf23083 Mon Sep 17 00:00:00 2001 From: 666ghj <670939375@qq.com> Date: Thu, 13 Nov 2025 23:52:40 +0800 Subject: [PATCH 4/5] Update email. --- README-EN.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README-EN.md b/README-EN.md index b211916..11997f7 100644 --- a/README-EN.md +++ b/README-EN.md @@ -639,7 +639,7 @@ This project is licensed under the [GPL-2.0 License](LICENSE). Please see the LI ### Contact Information -- 📧 **Email**: 670939375@qq.com +- 📧 **Email**: hangjiang@bupt.edu.cn ### Business Cooperation diff --git a/README.md b/README.md index d77a02a..cc171b8 100644 --- a/README.md +++ b/README.md @@ -642,7 +642,7 @@ class DeepSearchAgent: ### 联系方式 -- 📧 **邮箱**:670939375@qq.com +- 📧 **邮箱**:hangjiang@bupt.edu.cn ### 商务合作 From aa3b9130376c3a5d833f85d7e329efb1fe6f2e82 Mon Sep 17 00:00:00 2001 From: 666ghj <670939375@qq.com> Date: Fri, 14 Nov 2025 11:45:47 +0800 Subject: [PATCH 5/5] Change configuration description guide. --- .env.example | 8 ++++---- config.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.env.example b/.env.example index 6b5b5f5..d3d07f1 100644 --- a/.env.example +++ b/.env.example @@ -61,9 +61,9 @@ KEYWORD_OPTIMIZER_BASE_URL= KEYWORD_OPTIMIZER_MODEL_NAME= # ================== 网络工具配置 ==================== -# Tavily API密钥,用于Tavily网络搜索。注册地址:https://www.tavily.com/ +# Tavily API密钥,用于Tavily网络搜索,申请地址:https://www.tavily.com/ TAVILY_API_KEY= -# Bocha Web/AI Search BASEURL,用于Bocha搜索。注册地址:https://open.bochaai.com/ -BOCHA_BASE_URL= -# Bocha Web Search API密钥,用于Bocha搜索。注册地址:https://open.bochaai.com/ + +# Bocha AI Search BASEURL,用于Bocha多模态搜索,这里密钥名称虽然是Web Search,但其实是要AI Search的,申请地址:https://open.bochaai.com/ +BOCHA_BASE_URL=https://api.bochaai.com/v1/ai-search BOCHA_WEB_SEARCH_API_KEY= \ No newline at end of file diff --git a/config.py b/config.py index 999905b..5284e1d 100644 --- a/config.py +++ b/config.py @@ -80,8 +80,8 @@ class Settings(BaseSettings): # Tavily API(申请地址:https://www.tavily.com/) TAVILY_API_KEY: Optional[str] = Field(None, description="Tavily API(申请地址:https://www.tavily.com/)API密钥,用于Tavily网络搜索") - BOCHA_BASE_URL: Optional[str] = Field("https://api.bochaai.com/v1/ai-search", description="Bocha AI 搜索BaseUrl或博查网页搜索BaseUrl") # Bocha API(申请地址:https://open.bochaai.com/) + BOCHA_BASE_URL: Optional[str] = Field("https://api.bochaai.com/v1/ai-search", description="Bocha AI 搜索BaseUrl或博查网页搜索BaseUrl") BOCHA_WEB_SEARCH_API_KEY: Optional[str] = Field(None, description="Bocha API(申请地址:https://open.bochaai.com/)API密钥,用于Bocha搜索") # ================== Insight Engine 搜索配置 ====================