v3.0 新增:联网搜索子智能体(Tavily)、搜索+SQL 联合对比分析、流式来源展示、6 种意图路由。
基于 LangGraph 的一主三从多智能体架构,支持自然语言数据查询、深度分析、联网搜索、数据可视化和长短期记忆。
https://github.com/user-attachments/assets/597693d0-df09-4198-93bd-242497f23e09
MultiAgentSystem (agent.py)
└── MasterAgent(主智能体 - 路由 / 协调 / 记忆)
├── SQLQueryAgent (子智能体1 - NL2SQL + 自动纠错)
├── DataAnalysisAgent (子智能体2 - 数据分析 + ECharts 可视化)
└── WebSearchAgent (子智能体3 - Tavily 联网搜索)⭐NEW
| 意图 | 触发场景 | 调用链路 |
|---|---|---|
simple_answer |
简单问候/闲聊 | 主智能体直接回答 |
sql_only |
纯数据查询 | SQLQueryAgent |
analysis_only |
分析已有结果 | DataAnalysisAgent |
sql_and_analysis |
查询 + 深度分析 | SQL → Analysis |
web_search |
联网信息检索 ⭐NEW | WebSearchAgent |
search_and_sql |
内外部数据对比 ⭐NEW | SQL + WebSearchAgent |
TAVILY_API_KEY 时 available=False,系统正常运行,搜索功能提示配置即可users、user_preferences、user_knowledge 三张表支持 SSE(Server-Sent Events)实时推送,前端接收 7 种事件:
| 事件类型 | 说明 |
|---|---|
status |
当前处理步骤描述 |
intent |
识别出的意图标签 |
sql |
生成的 SQL 语句 |
sources |
搜索来源 URL 列表 ⭐NEW |
chart |
ECharts 图表配置 JSON |
chunk |
回答文字流片段 |
done |
完成信号 |
pip install -r requirements.txt
# Windows
set DASHSCOPE_API_KEY=your_dashscope_key
# or
$env:DASHSCOPE_API_KEY = "your_dashscope_key"
# Linux/Mac
export DASHSCOPE_API_KEY=your_dashscope_key
(可选)配置 Tavily 联网搜索
# Windows
set TAVILY_API_KEY=your_tavily_key
# or
$env:TAVILY_API_KEY = "your_tavily_key"
.\start_web.bat
# Linux/Mac
export TAVILY_API_KEY=your_tavily_key
Tavily API Key 申请:https://app.tavily.com,免费套餐每月 1000 次请求。 也可在
config/config.yaml的search.tavily_api_key字段直接填写。
cd intelligent_data_query/data
python init_db.py # 初始化业务数据库
python init_memory_db.py # 初始化长期记忆数据库
# Windows
cd intelligent_data_query
start_web.bat
# Linux/Mac
cd intelligent_data_query
chmod +x start_web.sh
./start_web.sh
浏览器访问:http://localhost:5000
cd intelligent_data_query
python agent.py
系统提示输入用户 ID,同一 user_id 可跨会话保留个人偏好。
特殊命令:
- new — 开始新会话(清空短期记忆,保留长期记忆)
- info — 查看当前用户信息和偏好
- exit/quit — 退出系统
编辑 config/config.yaml:
llm:
provider: "dashscope"
model: "qwen-turbo"
temperature: 0.1
max_tokens: 2048
database:
path: "./data/company.db"
nl2sql:
num_examples: 3 # Few-shot 示例数量
memory:
long_term_db: "./data/long_term_memory.db"
short_term_max_tokens: 1000
compression_threshold: 10
auto_extract_knowledge: true
# 联网搜索配置 ⭐NEW
search:
tavily_api_key: "" # 留空则从环境变量读取
max_results: 5 # 每次搜索返回最大结果数
| 接口 | 方法 | 说明 |
|---|---|---|
/ |
GET | 返回前端页面 |
/api/login |
POST | 用户登录,返回长期记忆偏好和知识 |
/api/query |
POST | 阻塞式查询 |
/api/query_stream |
POST | 流式 SSE 查询(推荐) |
/api/new_session |
POST | 新建会话 |
/api/user_info |
POST | 获取用户信息和知识列表 |
/api/health |
GET | 健康检查,返回 web_search 可用状态 ⭐NEW |
简单问答 - 你好,你能帮我做什么?
数据查询 - 公司总共有多少个部门?每个部门分别在哪个城市? - 研发部有多少名员工?他们的职位分布是怎样的? - 哪些员工的基本工资超过 30000 元?
查询 + 分析 - 对比一下公司研发部、产品部和设计部的平均薪资水平 - 找出薪资最高的 10 名员工,分析他们的职位和部门分布特征
仅分析 - 帮我分析一下上一次查询的数据
联网搜索 ⭐NEW - 2025 年互联网行业软件工程师的平均薪资是多少? - 目前 AI 大模型领域的就业趋势如何?
搜索 + SQL 联合对比 ⭐NEW - 我们公司研发部的薪资水平和行业平均水平相比怎么样? - 我们公司的薪资结构在同行业中处于什么水平?
intelligent_data_query/
├── agents/ # 智能体模块
│ ├── __init__.py
│ ├── master_agent.py # 主智能体(路由 / 记忆 / 汇总)
│ ├── sql_agent.py # SQL 查询子智能体(含自动纠错)
│ ├── analysis_agent.py # 数据分析子智能体(含 ECharts)
│ └── search_agent.py # 联网搜索子智能体(Tavily)⭐NEW
├── memory/ # 记忆模块
│ ├── long_term_memory.py # 长期记忆管理器(SQLite)
│ └── memory_extractor.py # 记忆提取器(LLM 自动提取)
├── config/
│ └── config.yaml # 配置文件(含搜索配置)
├── data/
│ ├── company.db # 业务数据库
│ ├── long_term_memory.db # 长期记忆数据库
│ ├── init_db.py # 业务数据库初始化
│ └── init_memory_db.py # 记忆数据库初始化
├── static/ # Web 前端(v3.0)
│ ├── index.html # 主页面(含搜索来源展示)
│ ├── style.css # 样式(蓝紫渐变主题)
│ └── app.js # 前端逻辑(SSE 流式 / ECharts / 来源)
├── agent.py # 主入口(MultiAgentSystem 类)
├── app.py # Flask Web API 服务
├── prompts.py # 提示词定义(含搜索综合提示词)
├── mcp_sql_server.py # MCP SQL 服务器
├── start_web.bat # Windows 启动脚本
├── start_web.sh # Linux/Mac 启动脚本
└── video/
└── demo.mp4 # 演示视频
| 类别 | 技术 |
|---|---|
| 工作流编排 | LangGraph |
| LLM 框架 | LangChain |
| 大语言模型 | 通义千问(qwen-turbo) |
| 联网搜索 | Tavily(langchain-tavily)⭐NEW |
| 数据库协议 | MCP(Model Context Protocol) |
| 数据存储 | SQLite |
| Web 框架 | Flask + Flask-CORS |
| 前端可视化 | ECharts、marked.js、highlight.js |
| 终端美化 | Rich |
user_knowledge 添加 FTS5 全文索引DASHSCOPE_API_KEY 环境变量TAVILY_API_KEY(不配置不影响其他功能)user_id 可跨会话保留个人偏好data/long_term_memory.db)WebSearchAgent(基于 Tavily)web_search 和 search_and_sql 两种意图路由(共 6 种)sources SSE 事件)/api/health 返回 web_search 可用状态get_search_synthesis_prompt / get_search_and_sql_promptsimple_answer 并友好提示static/),支持 Markdown 渲染与代码高亮/api/login、/api/query、/api/new_session、/api/user_info、/api/health)long_term_memory.db,即时展示用户偏好/知识start_web.bat / start_web.shvideo/demo.mp4$ claude mcp add Multi-Agent-Exp \
-- python -m otcore.mcp_server <graph>