多智能体研究助手

AI驱动的多智能体研究助手,利用LangGraph、RAG和实时评估技术进行自主研究。

  • by saitejasrivilli
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 saitejasrivilli/multi-agent-research-mcp

使用说明

🔬 多智能体研究助理

使用LangGraph、RAG和实时评估的自主代理进行人工智能驱动的研究。 现场演示:https://multi-agent-research-mcp-pr.streamlit.app/

🏗️ 建筑

┌─────────────────────────────────────────────────────────────┐
│                    LangGraph State Machine                   │
├─────────────┬─────────────┬─────────────┬─────────────────────┤
│ Researcher  │   Critic    │ Synthesizer │     Evaluator      │
│   Agent     │   Agent     │   Agent     │   (RAGAS/DeepEval) │
├─────────────┴─────────────┴─────────────┴─────────────────────┤
│                    ChromaDB Vector Store                      │
├───────────────────────────────────────────────────────────────┤
│              Tavily Search    │    Groq (Llama 3.3)          │
└───────────────────────────────────────────────────────────────┘

✨ 特征

  • LangGraph状态机:有条件的布线、修订循环
  • 矢量数据库:ChromaDB用于语义搜索和RAG
  • 多代理管道:研究员→ 批评家→ 合成器→ 评估者
  • 实时流媒体:异步SSE进行实时更新
  • 导出选项:PDF,带APA/MLA/Chicago引文的Markdown
  • RAG评估:RAGAS启发的指标(相关性、忠诚度、连贯性)
  • FastAPI后端:带有异步作业处理的REST API
  • Docker+CI/CD:GitHub操作,容器化部署
  • NLP任务:电子商务对话的意图分类和实体提取

🚀 快速开始

本地开发

后端(FastAPI)

# Clone
git clone https://github.com/saitejasrivilli/multi-agent-research-mcp
cd multi-agent-research-mcp

# Install
pip install -r requirements.txt

# Configure
cp .env.example .env
# Add your GROQ_API_KEY and TAVILY_API_KEY

# Run API
uvicorn src.api.main:app --reload
# API available at http://localhost:8000

前端(Next.js+TypeScript)

cd frontend

# Install
npm install

# Setup environment
cp .env.local.example .env.local

# Run dev server
npm run dev
# UI available at http://localhost:3000

流线型UI (传统,仍然可用)

streamlit run app.py

码头工人

docker-compose up

🎨 前端:Next.js+TypeScript

用于多代理研究系统的现代React UI。

特征:

  • 实时进度跟踪(查看哪个代理正在运行)
  • 丰富的结果显示,包括部分、发现和关键要点
  • 质量指标仪表板(RAGAS评估分数)
  • 导出为PDF和Markdown
  • 带有Tailwind CSS的深色主题

部署到Vercel(免费,一键):

cd frontend
vercel --prod

看 前端/frontend_README.md 详细设置。

📡 API终点

方法 端点 描述
职位 /api/research 开始研究工作
得到 /api/research/{id} 获取作业状态
得到 /api/research/{id}/stream 流进度(SSE)
得到 /api/research/{id}/export/pdf 导出为PDF
得到 /api/research/{id}/export/markdown 导出为Markdown

🗣️ NLP任务:意图分类和实体提取

用于电子商务对话分析的轻量级NLP模块,无需下载大型模型。

意图分类

将用户意图分为5类:

  • 搜索:产品发现和搜索查询
  • 购买:有意购买或结账
  • 审查:想要评分、评论或评论
  • 投诉:报告问题、退款、退货
  • 询问:一般性问题、信息请求

实体提取

提取相关实体:

  • 产品:项目名称和描述
  • 数量:项目或单位数量
  • 价格:各种货币的成本
  • 品牌:制造商或品牌名称
  • 颜色、尺寸、位置:产品属性和运输信息

用法示例

from src.nlp_tasks_simple import ConversationAnalyzer

analyzer = ConversationAnalyzer()

# Analyze single message
analysis = analyzer.analyze("I want to buy 2 red Nike shoes for $150")
print(analysis['intent'])  # {'label': 'purchase', 'confidence': 0.33}
print(analysis['entities'])  # Product, quantity, color, price

# Analyze conversation
conversation = [
    "Do you have the iPhone 15 Pro in silver?",
    "What's the price?",
    "I'll buy it!"
]
summary = analyzer.summarize_conversation(conversation)
print(summary['conversation_type'])  # 'transactional'

基准结果

在各种电子商务对话中进行了测试:

场景 主导意图 准确性 发现实体
产品搜索 搜索 100% 平均3.2
采购流程 采购 100% 平均2.8
投诉 投诉 100% 平均1.5
询价 询价 90% 平均1.2

运行演示

python3 src/nlp_tasks_simple.py

输出:

TEST 1: Product Search Conversation
  Message 1: Intent: search (confidence: 0.33)
    Entities: 'silver' (color)
  Message 2: Intent: purchase (confidence: 0.33)
    Entities: 'one' (quantity)
  Message 3: Intent: inquiry (confidence: 0.67)
  Message 4: Intent: inquiry (confidence: 0.33)
    Entities: 'New York' (location)
  Message 5: Intent: purchase (confidence: 0.33)
    Entities: '$999.' (price)

Conversation Summary:
  Type: transactional
  Dominant Intent: purchase
  Total Entities: 6

📊 评估指标

度量 描述
相关性 查询查找对齐
可信度 来源准确性
连贯性 结构和流程
完整性 覆盖深度
引文准确性 来源归因

评估结果总结

使用RAGAS风格的评估器进行50个查询确定性基准测试 src/evaluation/metrics.py.

度量 平均值 状态
相关性 1.0000 完美
忠诚度 0.9900 优秀
连贯性 0.9000 强
完整性 0.8440 良好
引文准确度 1.0000 完美
总体 0.9541 生产就绪

消融:多药剂vs单药剂

模式 整体 忠实性 完整性 延迟
多代理 0.9541 0.9900 0.8440 0.10毫秒
单药基线 0.8678 0.9306 0.6948 0.07毫秒
改进 +9.9% +6.4% +21.5% +慢42.9%

生产绩效

在Groq按需每日令牌限制停止剩余请求之前,来自28个已完成查询的实时基准样本。

度量 值 含义
端到端延迟 7.1秒直播 适用于异步工作流
成本/查询 0.0054 规模适中,价格合理
研究员代理 3.46秒 主要瓶颈
合成器代理 3.61秒 第二个瓶颈
评估代理 0.31毫秒 可忽略
已完成的查询 28/50(56%) 提供商速率限制,不是系统问题

推荐使用案例

高适配用例:

用例 为什么它适合
市场扫描和竞争情报 检索、综合和引用的好处
技术概述和文献摘要 需要基于来源的综合和限制
尽职调查简报起草 有用的初步研究,可追溯来源
研究论文摘要 非常适合结构化摘要和摘要

未经专家评审的不合适用例:

用例 为什么需要审查
医疗、法律或财务建议 需要领域专家验证
突发新闻报道 搜索新鲜度和来源日期需要更强的控制
实时决策支持 延迟和验证要求更严格

📈 基准和结果

运行可复制的50查询基准测试:

PYTHONPATH=. python3 benchmarks/run_benchmark.py --limit 50

人工产品:

文件 目的
基准测试/benchmark_queries.jsonl 50个带有参考答案的基准查询
results/benchmark_results.json 每个查询的原始输出、分数和生产指标
结果/消融结果.json 多代理与单代理比较
结果/基准报告.md 人类可读的基准报告
docs/evaluation_results.md 评估方法和50个查询的RAGAS风格评分汇总
docs/消融研究.md 多代理与单代理基线分析
docs/failure_analysis.md 故障模式、检测信号和缓解措施
文档/生产_度量.md 延迟、成本、代理指标和用例匹配

50个查询RAGAS风格基准

详细方法见 docs/evaluation_results.md.

度量 平均值 中位数 最小值 最大值
相关性 10000 10000 1000 10000
可信度 0.9900 1.0000 0.5000 1.0000
一致性 0.9000 0.9000 0.9000 0.9000
完整性 0.8440 0.8500 0.7500 0.8500
引文准确度 1.0000 1.0000 1.0000 1.0000
总体 0.9541 0.9575 0.8325 0.9575

注意:默认的基准测试是一个确定性代理,所以评审人员可以在没有API密钥的情况下运行它。将其视为回归和连线测试,而不是实时网络搜索质量的证明。实时评估:

PYTHONPATH=. python3 benchmarks/run_benchmark.py --live --api-url http://127.0.0.1:8000

推荐的实时工作流程:

PYTHONPATH=. uvicorn src.api.main:app --host 127.0.0.1 --port 8000
PYTHONPATH=. python3 benchmarks/run_benchmark.py --limit 1 --live --api-url http://127.0.0.1:8000
PYTHONPATH=. python3 benchmarks/run_benchmark.py --limit 50 --live --api-url http://127.0.0.1:8000 --delay-seconds 5

不要使用运行API --reload 在实时基准测试期间。作业存储在内存中,因此重新加载可以在基准轮询之前删除挂起的作业。

实时基准测试示例

在Groq按需每日令牌限制停止剩余请求之前,实时运行完成了50个基准查询中的28个。生成的完整实时子集:

度量 平均值 中位数 最小值 最大值
相关性 0.7000 0.8000 0.0000 1.0000
可信度 0.6667 0.5833 0.0000 1.0000
相干性 0.9964 1.0000 0.9000 1.0000
完整性 0.7679 0.8000 0.6500 0.9000
引文准确度 1.0000 1.0000 1.0000 1.0000
总体 0.8061 0.8150 0.5950 0.9700

已完成子集中的实时生产指标:

度量 值
已完成的查询 28
查询失败 22
平均延迟 7087.4毫秒
平均估计成本/查询 0.005454美元
研究人员延迟 3462.59毫秒
合成器延迟 3614.8毫秒
评估器延迟 0.31ms

失败的实时查询是由提供程序令牌限制引起的,而不是基准逻辑。使用以下命令恢复部分实时运行:

PYTHONPATH=. python3 benchmarks/run_benchmark.py --start 30 --limit 21 --live --api-url http://127.0.0.1:8000 --delay-seconds 5

消融研究:多智能体vs单智能体

详细的消融记录见 docs/消融研究.md.

模式 总体 相关性 可信度 完整性 平均延迟 平均成本/查询
多代理 0.9541 1.0000 0.9900 0.8440 0.10毫秒 0.000799美元
单药基线 0.8678 1.0000 0.9306 0.6948 0.07毫秒 0.000603美元

评论家/评估者阶段提高了忠诚度和完整性。单代理基线更快、更便宜。这种权衡应该是显而易见的。

🔎 失效分析

详细的故障分析见 docs/failure_analysis.md.

最高风险故障模式:

故障模式 影响 缓解
无关检索 报告回答了错误的问题 添加重新排序和更严格的查询生成
不支持的索赔 令人费解的结论 添加句子级索赔来源验证
引文不匹配 虚假信任信号 根据附近的声明验证引文
修订循环成本飙升 延迟和成本更高 限制循环并仅修订缺失的证据
从网页迅速注入 合成错误 将检索到的内容视为不受信任的数据

📡 生产指标

生产指标在 src/observability/metrics.py.

度量 为什么重要
端到端延迟 用户可见的等待时间
每个代理的延迟 显示研究人员、评论家、合成器和评估者之间的瓶颈
估计成本/查询 定价、费率限制和预算控制所需
代理成功/失败 识别脆弱的管道阶段
评估分数 防止成本优化降低质量

高匹配用例:市场扫描、技术概述、文献风格总结、竞争情报草稿和尽职调查简报。

没有专家审查的不合适用例:法律建议、医疗建议、财务决策和实时突发新闻索赔。

🛠️ 技术栈

  • LLM:火焰3.3 70b(Groq)
  • 搜索:塔维利AI
  • 编排LangGraph:
  • 矢量数据库:ChromaDB
  • 评估:RAGAS/DeepEval
  • 后端:FastAPI
  • 前端:流光灯
  • 部署:Docker、GitHub操作

📁 项目结构

├── app.py                 # Streamlit UI (legacy)
├── frontend/              # Next.js + TypeScript UI
│   ├── src/app/
│   │   ├── page.tsx      # Main research interface
│   │   └── layout.tsx    # Root layout
│   ├── public/           # Static assets
│   └── package.json
├── src/
│   ├── graph/            # LangGraph state machine
│   ├── agents/           # Agent implementations
│   ├── vectordb/         # ChromaDB integration
│   ├── evaluation/       # RAGAS-style metrics
│   ├── observability/    # Production latency and cost metrics
│   ├── export/           # PDF/Markdown exporters
│   └── api/              # FastAPI backend
├── benchmarks/           # 50-query benchmark runner and query set
├── results/              # Saved benchmark and ablation outputs
├── docs/                 # Evaluation, ablation, failure analysis, and production metrics notes
├── tests/                # Test suite
├── Dockerfile
├── docker-compose.yml
└── .github/workflows/    # CI/CD

📜 许可证

麻省理工学院