BettaFish
BettaFish copied to clipboard
微舆:人人可用的多Agent舆情分析助手,打破信息茧房,还原舆情原貌,预测未来走向,辅助决策!从0实现,不依赖任何框架。
ð å å ¥å®æ¹äº¤æµç¾¤
â¡ é¡¹ç®æ¦è¿°
âå¾®èâ æ¯ä¸ä¸ªä»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对æ¯
åå«ä¼ ç»çæ°æ®çæ¿ï¼å¨âå¾®èâï¼ä¸åç±ä¸ä¸ªç®åçé®é¢å¼å§ï¼æ¨åªéå对è¯ä¸æ ·ï¼æåºæ¨çåæéæ±
ðª èµå©å
(ç¹å¼â¶æèµå©LLMç®åç¦å©)ç¼ç¨æ¼è½¦codecodex.aiï¼ç¼ç¨ç®åVibeCodingAPI.aiï¼
- æç½é¨å客LionCC.aiå·²æ´æ°ãBettaFish å¾®èç³»ç» - LionCC API é¨ç½²é ç½®å®å ¨æåãæ£å¨äºå¼ä¼åä¸é®é¨ç½²åäºæå¡å¨è°ç¨æ¹æ¡ã
- VibeCodingapi.aiç®åç®åå¹³å°å·²ç»éé ãBettaFish å¾®èç³»ç»ãææLLM模åå«claude codeåopenai codexågemini cliç¼ç¨å¼åä¸å·¨å¤´ç®åãé¢åº¦ä»·æ ¼ï¼åªè¦ä¸æ¯ä¸ï¼100å çäº100ç¾åé¢åº¦ï¼
- Codecodex.aiç®åç¼ç¨æ¼è½¦ç³»ç»ï¼å·²å®ç°æ IP鍿§ç»è¿claude codeåopenai codexå°éï¼æå®æ¹é¨ç½²æç¨å忢BASE_URLè°ç¨å°ååToken keyè°ç¨å¯é¥å³å¯ä½¿ç¨æå¼ºç¼ç¨æ¨¡åã
æç½é¨LionCCèµå©BettaFish å¾®èç¦å©ï¼æå¼codecodex.aiç®åç¼ç¨é¢éæ«ç å å ¥å¾®ä¿¡ç¤¾ç¾¤ï¼æ³¨åVibeCodingapi.aiç®åç®åï¼ç»ä¸é20åAPIé¢åº¦ï¼ä» éåä¸ååï¼
æç¨éä»è´¹çä¼ä¸çº§AIèµæºå¹³å°ï¼æä¾å¸åºä¸å
¨é¢çAI模ååAPIï¼ä»¥åå¤ç§å¨çº¿AIåºç¨ï¼
302.AIæ¯ä¸ä¸ªæç¨éä»è´¹çä¼ä¸çº§AIèµæºå¹³å°ï¼æä¾å¸åºä¸ææ°ãæå
¨é¢çAI模ååAPIï¼ä»¥åå¤ç§å¼ç®±å³ç¨çå¨çº¿AIåºç¨ã
ðï¸ ç³»ç»æ¶æ
æ´ä½æ¶æå¾
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 | æ¥åçæ | å¨æéæ©æ¨¡æ¿åæ ·å¼ï¼å¤è½®çææç»æ¥å | Report Agent + 模æ¿å¼æ | - |
项ç®ä»£ç ç»ææ
BettaFish/
âââ QueryEngine/ # å½å
夿°é»å¹¿åº¦æç´¢Agent
â âââ agent.py # Agent主é»è¾
â âââ llms/ # LLMæ¥å£å°è£
â âââ nodes/ # å¤çèç¹
â âââ tools/ # æç´¢å·¥å
·
â âââ utils/ # å·¥å
·å½æ°
â âââ ... # å
¶ä»æ¨¡å
âââ MediaEngine/ # 强大ç夿¨¡æçè§£Agent
â âââ agent.py # Agent主é»è¾
â âââ nodes/ # å¤çèç¹
â âââ llms/ # LLMæ¥å£
â âââ tools/ # æç´¢å·¥å
·
â âââ utils/ # å·¥å
·å½æ°
â âââ ... # å
¶ä»æ¨¡å
âââ InsightEngine/ # ç§ææ°æ®åºææAgent
â âââ agent.py # Agent主é»è¾
â âââ llms/ # LLMæ¥å£å°è£
â â âââ base.py # ç»ä¸ç OpenAI å
¼å®¹å®¢æ·ç«¯
â âââ nodes/ # å¤çèç¹
â â âââ base_node.py # åºç¡èç¹ç±»
â â âââ formatting_node.py # æ ¼å¼åèç¹
â â âââ report_structure_node.py # æ¥åç»æèç¹
â â âââ search_node.py # æç´¢èç¹
â â âââ summary_node.py # æ»ç»èç¹
â âââ tools/ # æ°æ®åºæ¥è¯¢ååæå·¥å
·
â â âââ keyword_optimizer.py # Qwenå
³é®è¯ä¼åä¸é´ä»¶
â â âââ search.py # æ°æ®åºæä½å·¥å
·é
â â âââ sentiment_analyzer.py # æ
æåæéæå·¥å
·
â âââ state/ # ç¶æç®¡ç
â â âââ __init__.py
â â âââ state.py # Agentç¶æå®ä¹
â âââ prompts/ # æç¤ºè¯æ¨¡æ¿
â â âââ __init__.py
â â âââ prompts.py # åç±»æç¤ºè¯
â âââ utils/ # å·¥å
·å½æ°
â âââ __init__.py
â âââ config.py # é
置管ç
â âââ text_processing.py # ææ¬å¤çå·¥å
·
âââ ReportEngine/ # å¤è½®æ¥åçæAgent
â âââ agent.py # Agent主é»è¾
â âââ llms/ # LLMæ¥å£
â âââ nodes/ # æ¥åçæèç¹
â â âââ template_selection.py # 模æ¿éæ©èç¹
â â âââ html_generation.py # HTMLçæèç¹
â âââ report_template/ # æ¥å模æ¿åº
â â âââ 社ä¼å
Œ
±çç¹äºä»¶åæ.md
â â âââ åä¸åçèæ
çæµ.md
â â âââ ... # æ´å¤æ¨¡æ¿
â âââ flask_interface.py # Flask APIæ¥å£
âââ ForumEngine/ # 论åå¼æç®æå®ç°
â âââ monitor.py # æ¥å¿çæ§å论å管ç
â âââ llm_host.py # 论å主æäººLLM模å
âââ MindSpider/ # å¾®åç¬è«ç³»ç»
â âââ main.py # ç¬è«ä¸»ç¨åº
â âââ config.py # ç¬è«é
ç½®æä»¶
â âââ BroadTopicExtraction/ # è¯é¢æå模å
â â âââ database_manager.py # æ°æ®åºç®¡çå¨
â â âââ get_today_news.py # 仿¥æ°é»è·å
â â âââ main.py # è¯é¢æå主ç¨åº
â â âââ topic_extractor.py # è¯é¢æåå¨
â âââ DeepSentimentCrawling/ # 深度èæ
ç¬å
â â âââ keyword_manager.py # å
³é®è¯ç®¡çå¨
â â âââ main.py # 深度ç¬å主ç¨åº
â â âââ MediaCrawler/ # åªä½ç¬è«æ ¸å¿
â â âââ platform_crawler.py # å¹³å°ç¬è«ç®¡ç
â âââ schema/ # æ°æ®åºç»æ
â âââ db_manager.py # æ°æ®åºç®¡çå¨
â âââ init_database.py # æ°æ®åºåå§å
â âââ mindspider_tables.sql # æ°æ®åºè¡¨ç»æ
âââ SentimentAnalysisModel/ # æ
æåææ¨¡åéå
â âââ WeiboSentiment_Finetuned/ # å¾®è°BERT/GPT-2模å
â âââ WeiboMultilingualSentiment/# å¤è¯è¨æ
æåæï¼æ¨èï¼
â âââ WeiboSentiment_SmallQwen/ # å°åæ°Qwen3å¾®è°
â âââ WeiboSentiment_MachineLearning/ # ä¼ ç»æºå¨å¦ä¹ æ¹æ³
âââ SingleEngineApp/ # åç¬AgentçStreamlitåºç¨
â âââ query_engine_streamlit_app.py
â âââ media_engine_streamlit_app.py
â âââ insight_engine_streamlit_app.py
âââ templates/ # Flask模æ¿
â âââ index.html # 主çé¢å端
âââ static/ # éæèµæº
âââ logs/ # è¿è¡æ¥å¿ç®å½
âââ final_reports/ # æç»çæçHTMLæ¥åæä»¶
âââ utils/ # éç¨å·¥å
·å½æ°
â âââ forum_reader.py # Agenté´è®ºåéä¿¡
â âââ retry_helper.py # ç½ç»è¯·æ±éè¯æºå¶å·¥å
·
âââ app.py # Flask主åºç¨å
¥å£
âââ config.py # å
¨å±é
ç½®æä»¶
âââ requirements.txt # Pythonä¾èµå
æ¸
å
ð å¿«éå¼å§ï¼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. å®è£ ä¾èµå
# åºç¡ä¾èµå®è£
pip install -r requirements.txt
# uvçæ¬å½ä»¤ï¼æ´å¿«éå®è£
ï¼
uv pip install -r requirements.txt
# 妿䏿³ä½¿ç¨æ¬å°æ
æåææ¨¡åï¼ç®åéæ±å¾å°ï¼é»è®¤å®è£
cpuçæ¬ï¼ï¼å¯ä»¥å°è¯¥æä»¶ä¸çâæºå¨å¦ä¹ âé¨å注éæåæ§è¡æä»¤
3. å®è£ Playwrightæµè§å¨é©±å¨
# å®è£
æµè§å¨é©±å¨ï¼ç¨äºç¬è«åè½ï¼
playwright install chromium
4. é ç½®LLM䏿°æ®åº
å¤å¶ä¸ä»½é¡¹ç®æ ¹ç®å½ .env.example æä»¶ï¼å½å为 .env
ç¼è¾ .env æä»¶ï¼å¡«å
¥æ¨çAPIå¯é¥ï¼æ¨ä¹å¯ä»¥éæ©èªå·±ç模åãæç´¢ä»£çï¼è¯¦æ
è§æ ¹ç®å½.env.exampleæä»¶å
ææ ¹ç®å½config.pyä¸ç说æï¼ï¼
# ====================== æ°æ®åºé
ç½® ======================
# æ°æ®åºä¸»æºï¼ä¾å¦localhost æ 127.0.0.1
DB_HOST=your_db_host
# æ°æ®åºç«¯å£å·ï¼é»è®¤ä¸º3306
DB_PORT=3306
# æ°æ®åºç¨æ·å
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è¯·æ±æ ¼å¼é½å¯ä»¥
# Insight Agent
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
...
æ¨èLLM APIä¾åºåï¼æ¨çæ¶ä»£
5. å¯å¨ç³»ç»
5.1 宿´ç³»ç»å¯å¨ï¼æ¨èï¼
# å¨é¡¹ç®æ ¹ç®å½ä¸ï¼æ¿æ´»condaç¯å¢
conda activate your_conda_name
# å¯å¨ä¸»åºç¨å³å¯
python app.py
uv çæ¬å¯å¨å½ä»¤
# å¨é¡¹ç®æ ¹ç®å½ä¸ï¼æ¿æ´»uvç¯å¢
.venv\Scripts\activate
# å¯å¨ä¸»åºç¨å³å¯
python app.py
注1ï¼ä¸æ¬¡è¿è¡ç»æ¢åï¼streamlit appå¯è½ç»æå¼å¸¸ä»ç¶å ç¨ç«¯å£ï¼æ¤æ¶æç´¢å ç¨ç«¯å£çè¿ç¨killæå³å¯
注2ï¼æ°æ®ç¬åéè¦åç¬æä½ï¼è§5.3æå¼
注3ï¼å¦ææå¡å¨è¿ç¨é¨ç½²åºç°é¡µé¢æ¾ç¤ºé®é¢ï¼è§PR#45
è®¿é® http://localhost:5000 å³å¯ä½¿ç¨å®æ´ç³»ç»
5.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 8501
5.3 ç¬è«ç³»ç»åç¬ä½¿ç¨
è¿é¨åæè¯¦ç»çé ç½®ææ¡£ï¼MindSpider使ç¨è¯´æ
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 wb
âï¸ é«çº§é ç½®ï¼å·²è¿æ¶ï¼å·²ç»ç»ä¸ä¸ºé¡¹ç®æ ¹ç®å½.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è°ç¨æ ¼å¼ï¼ä¸é¢æä¾ä¸ä¸ªç®åçä¾åï¼
from openai import OpenAI client = OpenAI(api_key="your_api_key", base_url="https://api.siliconflow.cn/v1") response = client.chat.completions.create( model="Qwen/Qwen2.5-72B-Instruct", 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):
"""è·å客æ·å馿°æ®"""
# å®ç°å®¢æ·å馿¥è¯¢é»è¾
pass
3. éæå°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ä¼èªè¡éç¨æåéçæ¨¡æ¿ã
ð¤ è´¡ç®æå
æä»¬æ¬¢è¿ææå½¢å¼çè´¡ç®ï¼
请é 读以ä¸è´¡ç®æåï¼
- CONTRIBUTING.md
ð¦ ä¸ä¸æ¥å¼å计å
ç°å¨ç³»ç»åªå®æäº"䏿¿æ§"ä¸çå两æ¥ï¼å³ï¼è¾å ¥è¦æ±->详ç»åæï¼è¿ç¼ºå°ä¸æ¥é¢æµï¼ç´æ¥å°ä»ç»§ç»äº¤ç»LLMæ¯ä¸å ·æè¯´æåçã
ç®åæä»¬ç»è¿å¾é¿ä¸æ®µæ¶é´çç¬åæ¶éï¼æ¥æäºå¤§éå ¨ç½è¯é¢çåº¦éæ¶é´ãçç¹ççååè¶å¿çåº¦æ°æ®ï¼å·²ç»å ·å¤äºå¯ä»¥å¼å颿µæ¨¡åçæ¡ä»¶ãæä»¬å¢éå°è¿ç¨æ¶åºæ¨¡åãå¾ç¥ç»ç½ç»ã夿¨¡æèåç颿µæ¨¡åææ¯å¨å¤äºæ¤ï¼å®ç°çæ£åºäºæ°æ®é©±å¨çèæ é¢æµåè½ã
â ï¸ å 责声æ
éè¦æéï¼æ¬é¡¹ç®ä» ä¾å¦ä¹ ã妿¯ç ç©¶åæè²ç®ç使ç¨
-
åè§æ§å£°æï¼
- æ¬é¡¹ç®ä¸çææä»£ç ãå·¥å ·ååè½åä» ä¾å¦ä¹ ã妿¯ç ç©¶åæè²ç®ç使ç¨
- 严ç¦å°æ¬é¡¹ç®ç¨äºä»»ä½åä¸ç¨éæç婿§æ´»å¨
- 严ç¦å°æ¬é¡¹ç®ç¨äºä»»ä½è¿æ³ãè¿è§æä¾µç¯ä»äººæççè¡ä¸º
-
ç¬è«åè½å è´£ï¼
- 项ç®ä¸çç¬è«åè½ä» ç¨äºææ¯å¦ä¹ åç ç©¶ç®ç
- 使ç¨è å¿ é¡»éµå®ç®æ ç½ç«çrobots.txtåè®®åä½¿ç¨æ¡æ¬¾
- 使ç¨è å¿ é¡»éµå®ç¸å ³æ³å¾æ³è§ï¼ä¸å¾è¿è¡æ¶æç¬åææ°æ®æ»¥ç¨
- å 使ç¨ç¬è«åè½äº§çç任使³å¾åæç±ä½¿ç¨è èªè¡æ¿æ
-
æ°æ®ä½¿ç¨å è´£ï¼
- é¡¹ç®æ¶åçæ°æ®åæåè½ä» ä¾å¦æ¯ç 究使ç¨
- 严ç¦å°åæç»æç¨äºåä¸å³çæçå©ç®ç
- 使ç¨è åºç¡®ä¿æåææ°æ®çåæ³æ§ååè§æ§
-
ææ¯å è´£ï¼
- æ¬é¡¹ç®æ"ç°ç¶"æä¾ï¼ä¸æä¾ä»»ä½æç¤ºææç¤ºçä¿è¯
- ä½è ä¸å¯¹ä½¿ç¨æ¬é¡¹ç®é æçä»»ä½ç´æ¥æé´æ¥æå¤±æ¿æ 责任
- 使ç¨è åºèªè¡è¯ä¼°é¡¹ç®çéç¨æ§åé£é©
-
责任éå¶ï¼
- 使ç¨è å¨ä½¿ç¨æ¬é¡¹ç®ååºå åäºè§£ç¸å ³æ³å¾æ³è§
- 使ç¨è åºç¡®ä¿å ¶ä½¿ç¨è¡ä¸ºç¬¦åå½å°æ³å¾æ³è§è¦æ±
- å è¿åæ³å¾æ³è§ä½¿ç¨æ¬é¡¹ç®è产ççä»»ä½åæç±ä½¿ç¨è èªè¡æ¿æ
请å¨ä½¿ç¨æ¬é¡¹ç®åä»ç»é 读并çè§£ä¸è¿°å 责声æãä½¿ç¨æ¬é¡¹ç®å³è¡¨ç¤ºæ¨å·²åæå¹¶æ¥åä¸è¿°æææ¡æ¬¾ã
ð 许å¯è¯
æ¬é¡¹ç®éç¨ GPL-2.0许å¯è¯ã详ç»ä¿¡æ¯è¯·åé LICENSEæä»¶ã
ð æ¯æä¸èç³»
è·å帮å©
常è§é®é¢è§£çï¼https://github.com/666ghj/BettaFish/issues/185
- 项ç®ä¸»é¡µï¼GitHubä»åº
- é®é¢åé¦ï¼Issues页é¢
- åè½å»ºè®®ï¼Discussions页é¢
èç³»æ¹å¼
- ð§ é®ç®±ï¼[email protected]
åå¡åä½
- ä¼ä¸å®å¶å¼å
- å¤§æ°æ®æå¡
- 妿¯åä½
- ææ¯å¹è®
ð¥ è´¡ç®è
æè°¢ä»¥ä¸ä¼ç§çè´¡ç®è 们ï¼