智能检索增强生成系统

AgenticRAG是一个结合LangGraph、FAISS向量存储和MCP集成的问答系统,用于智能网络搜索和文档检索。

  • by priyanshudutta04
  • Jupyter Notebook
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 priyanshudutta04/AgenticRAG

使用说明

AgenticRAG(注:此词为特定技术或概念的名称,直接翻译可能无具体含义,故保持原样)

代理检索增强生成(RAG) 系统与 模型上下文协议(MCP) 智能网页搜索与文档检索的集成。此仅为测试和教育用途。

🎯 概述

AgenticRAG是一个集以下功能于一体的问答系统:

  • LangGraph 用于协调自主工作流
  • FAISS(快速应用索引库) 用于语义文档检索的向量存储
  • MCP(模型上下文协议) 用于外部工具集成
  • DuckDuckGo 搜索 通过MCP进行实时网页查询
  • 剧作家MCP 用于浏览器自动化
  • Groq LLM(大语言模型) (Llama 3.1) 用于快速推理

该系统能够智能地决定是仅从其知识库中检索答案,还是在互联网上进行搜索,或者结合这两种方法来回答问题。

🏗️ 建筑学

核心组件

  1. 代理工作流(LangGraph)

    • decide分析查询以确定是否需要检索
    • retrieve从FAISS向量存储中检索相关文档
    • generate使用检索到的上下文通过大型语言模型(LLM)生成答案
  2. 向量存储

    • 来自网络来源的预索引文档
    • 嵌入(或表示): sentence-transformers/all-MiniLM-L6-v2
    • 存储:FAISS(Facebook AI 相似性搜索)
  3. MCP 集成

    • DuckDuckGo搜索实时信息
    • 用于浏览器自动化的Playwright
    • 可通过以下方式配置 browser_mcp.json

数据流

User Question
     |
     v
  [Decide] ----needs_retrieval?----> [Retrieve from FAISS]
     |                                        |
     v                                        v
  [Generate Answer] <----- Context ---- [Documents]
     |
     v
  use_ddg? --yes--> [DuckDuckGo Search via MCP] --merge--> [Re-generate]
     |
     v
  Final Answer

📦 安装

先决条件

  • Python 3.8或更高版本
  • Node.js(用于MCP服务器)
  • Groq API密钥

设置

  1. 克隆仓库

    git clone <repository-url>
    cd AgenticRAG
    
  2. 创建并激活虚拟环境

    Windows(PowerShell):

    python -m venv venv
    .\venv\Scripts\Activate.ps1
    

    Windows(命令提示符):

    python -m venv venv
    venv\Scripts\activate.bat
    

    Linux/macOS:

    python3 -m venv venv
    source venv/bin/activate
    
  3. 安装Python依赖项

    pip install -r requirements.txt
    
  4. 安装MCP服务器

    npm install -g @playwright/mcp
    npm install -g duckduckgo-mcp-server
    
  5. 配置环境变量 创建一个 .env 文件:

    GROQ_API_KEY=your_groq_api_key_here
    

🚀 使用方法

运行Flask API

python app.py

服务器在(某个时间或条件下)启动 http://localhost:5000。

API 端点

POST(邮政服务/帖子/邮寄) /ask

向RAG系统提出一个问题。

请求体:

{
  "question": "What is LangChain?",
  "use_ddg": false
}

参数:

  • question (字符串,必填):您的问题
  • use_ddg (布尔值,可选):通过MCP启用DuckDuckGo搜索(默认:false)

回答:

{
  "answer": "LangChain is a framework for developing applications powered by language models..."
}

使用 cURL 的示例:

curl -X POST http://localhost:5000/ask \
  -H "Content-Type: application/json" \
  -d '{"question": "What is LLM poisoning?", "use_ddg": true}'

输出

独立MCP示例

基本的MCP浏览器自动化

python basic_mcp.py

使用Playwright MCP演示浏览器自动化以搜索谷歌。

MCP连接测试

python mcp_test.py

测试MCP客户端初始化和会话创建。

🔧 配置

MCP 服务器(browser_mcp.json)

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["@playwright/mcp@latest"]
    },
    "duckduckgo-search": {
      "command": "npx",
      "args": ["-y", "duckduckgo-mcp-server"]
    }
  }
}

默认索引源

系统对这些URL进行了预索引:

  • LangChain 表达式语言文档
  • LangGraph 文档
  • IBM 人工智能主题
  • 人类学研究论文

你可以修改 urls 列在 app.py 添加你自己的资源。

📁 项目结构

AgenticRAG/
├── app.py                 # Main Flask application with LangGraph workflow
├── basic_mcp.py          # Example MCP browser automation
├── mcp_test.py           # MCP connection testing
├── browser_mcp.json      # MCP server configuration
├── requirements.txt      # Python dependencies
├── .env                  # Environment variables (create this)
└── README.md            # This file

🔑 主要特点

1. 智能检索决策

该系统通过关键词匹配分析查询,以确定是否需要检索文档:

  • 检索触发词:“什么”,“如何”,“解释”,“告诉我”,“描述”
  • 简单查询的直接答案

2. 混合搜索

联合

  • 当地知识带有预索引文档的FAISS向量存储
  • 实时数据通过MCP使用DuckDuckGo进行搜索时 use_ddg=true

3. MCP工具集成

利用模型上下文协议用于:

  • 网络搜索(DuckDuckGo)
  • 浏览器自动化(Playwright)
  • 可扩展至其他MCP兼容工具

4. 异步处理

针对MCP操作和并行处理的高效异步/等待模式。

🧪 测试

测试API

基本查询(仅限向量存储):

curl -X POST http://localhost:5000/ask \
  -H "Content-Type: application/json" \
  -d '{"question": "Explain LangGraph"}'

使用网页搜索进行查询:

curl -X POST http://localhost:5000/ask \
  -H "Content-Type: application/json" \
  -d '{"question": "Latest AI news", "use_ddg": true}'

测试MCP组件

# Test MCP client
python mcp_test.py

# Test browser automation
python basic_mcp.py

🛠️ 技术栈

  • 框架Flask(API)、LangGraph(工作流编排)
  • LLMGroq(Llama 3.1 8B Instant)
  • **嵌入表示(或嵌入)**HuggingFace sentence-transformers/all-MiniLM-L6-v2
  • 向量存储FAISS(高效相似性搜索和大规模图像识别库)
  • MCP 工具剧作家,DuckDuckGo搜索
  • 文档处理LangChain,BeautifulSoup

🔄 工作流程详情

状态管理

class AgentState(TypedDict):
    question: str              # User's question
    documents: List[Document]  # Retrieved documents
    answer: str               # Generated answer
    needs_retrieval: bool     # Retrieval flag

图节点

  1. 决定确定检索的必要性
  2. 检索;取回查询FAISS向量存储
  3. 生成使用大型语言模型(LLM)+上下文生成答案

条件路由

  • 如果需要检索→ retrieve → generate
  • 如果无需检索 → 直接到 generate

📝 环境变量

变量 是否必需 描述
GROQ_API_KEY 是的,您的Groq API密钥用于访问大型语言模型(LLM)

🚦 故障排除

MCP连接问题

  • 确保已安装 Node.js: node --version
  • 验证MCP软件包: npx @playwright/mcp@latest --version

FAISS 安装(Windows)

如果你遇到问题 faiss-cpu,尝试:

pip install faiss-cpu --no-cache-dir

缺失的依赖项

pip install --upgrade -r requirements.txt

致谢

  • 该存储库的内容灵感来源于 克里希·奈克 MCP与AgenticRag课程。如需深入了解这些主题,请参阅相关资料