RAG模板工具

FastMCP RAG模板是一个生产就绪的检索增强生成工具,支持多提供商LLM、智能自动检测和灵活架构,适用于文档处理和信息检索场景。

  • by harangju
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 harangju/rag-mcp

使用说明

FastMCP RAG模板

生产准备就绪 FastMCP+LangChain RAG(检索增强生成) 具有多提供商LLM支持、智能自动检测和灵活架构的模板。

特征:

多提供商LLM支持

  • 开放人工智能 (GPT-5、O1 Pro、GPT-4o)
  • Anthropic (克劳德4.5作品/十四行诗/俳句)
  • 谷歌双子座 (Gemini 3.0 Pro、2.5 Pro/Flash)
  • 基于可用API密钥的自动提供程序检测
  • 在提供商之间进行热交换而不会丢失数据

灵活嵌入

  • 供应商特定:OpenAI、谷歌Gemini嵌入
  • 第三方:Voyage AI
  • 免费替代品:拥抱脸(当地),奥利马(当地)
  • 混合搭配LLM和嵌入提供商

文档管理

  • 对……的支持 .txt, .pdf, .md, .docx 文件
  • 可配置的组块策略
  • 带有错误处理的批处理文档
  • 自定义元数据支持
  • 动态文档添加/删除

高级检索

  • 相似性搜索 -查找语义相似的内容
  • MMR(最大边际相关性) -多样化的结果
  • 分数阈值过滤 -只有高信心的比赛
  • 对话记忆和聊天记录
  • 每次回复的来源引用

MCP工具

工具 说明
setup_rag() 使用自动提供程序检测进行初始化
query() 支持对话历史记录的查询
add_documents() 批量文档添加
search() 语义+关键字混合搜索
get_config() 显示当前配置
switch_provider() 提供商之间的热交换
clear_index() 重置矢量存储

监控和分析

  • 每次查询的成本跟踪
  • 性能指标(延迟、令牌)
  • 提供商比较分析
  • 查询历史跟踪

快速入门:

先决条件

  • Python 3.10或更高版本
  • 紫外线 包管理器
  • 至少一个提供商(OpenAI、Anthropic或Google)的API密钥

安装

  1. 克隆存储库

    git clone <repository-url>
    cd mcp-chain-template
    
  2. 使用uv安装依赖项

    # Install base dependencies
    uv pip install -e .
    
    # Or install with all providers
    uv pip install -e ".[all]"
    
    # Or install specific providers
    uv pip install -e ".[openai,anthropic]"
    
  3. 配置环境变量

    cp .env.example .env
    # Edit .env and add your API keys
    
  4. 运行MCP服务器

    uv run server.py
    
  5. 测试您的设置 (可选但推荐)

    # Run the production test to verify everything works
    uv run test_production.py
    

    备注:如果您达到API配额限制,请切换到免费的HuggingFace嵌入:

    echo "PREFERRED_EMBEDDING_PROVIDER=huggingface" >> .env
    uv pip install -e ".[embeddings-hf]"
    uv run test_production.py
    

提供商设置指南:

OpenAI设置

  1. 从获取API密钥 OpenAI平台
  2. 增添 .env:
    OPENAI_API_KEY=sk-...
    OPENAI_MODEL=gpt-5
    
  3. 安装:
    uv pip install -e ".[openai]"
    

支持的型号: gpt-5, gpt-5-mini, o1-pro, gpt-4o

人物(克劳德)设置

  1. 从获取API密钥 拟人控制台
  2. 增添 .env:
    ANTHROPIC_API_KEY=sk-ant-...
    ANTHROPIC_MODEL=claude-4-5-sonnet-20250929
    
  3. 安装:
    uv pip install -e ".[anthropic]"
    

支持的型号: claude-4-5-opus-20251124, claude-4-5-sonnet-20250929, claude-4-5-haiku-20251015

谷歌Gemini设置

  1. 从获取API密钥 谷歌AI工作室
  2. 增添 .env:
    GOOGLE_API_KEY=AIza...
    GEMINI_MODEL=gemini-2.5-pro
    
  3. 安装:
    uv pip install -e ".[gemini]"
    

支持的型号: gemini-3.0-pro, gemini-2.5-pro, gemini-2.5-flash

嵌入提供者

拥抱脸(免费,本地)

uv pip install -e ".[embeddings-hf]"

不需要API密钥!使用本地模型。

Voyage AI

# Add to .env
VOYAGE_API_KEY=pa-...

# Install
uv pip install -e ".[embeddings-voyage]"

Ollama(免费,当地)

# Install Ollama first: https://ollama.ai
# Pull a model: ollama pull llama2

uv pip install -e ".[embeddings-ollama]"

💡 使用示例

基本RAG查询

# Through MCP protocol
{
  "tool": "setup_rag",
  "arguments": {}  # Auto-detects available provider
}

{
  "tool": "add_documents",
  "arguments": {
    "file_paths": ["documents/sample.md", "documents/sample.txt"]
  }
}

{
  "tool": "query",
  "arguments": {
    "question": "What is machine learning?"
  }
}

答复:

{
  "status": "success",
  "answer": "Machine learning is a subset of AI that enables systems to learn...",
  "sources": [
    {
      "content": "Machine learning is...",
      "metadata": {"source": "documents/sample.md", "page": 1}
    }
  ],
  "metrics": {
    "latency_ms": 1234,
    "total_tokens": 256,
    "cost_usd": 0.0023
  }
}

提供商切换

# Start with OpenAI
setup_rag(provider="openai")

# Switch to Claude mid-conversation
switch_provider(provider="anthropic", model="claude-3-sonnet-20240229")

# Switch to Gemini
switch_provider(provider="gemini")

矢量存储和文档在提供程序交换机之间保持不变!

与记忆对话

# First query
result1 = query(question="What is supervised learning?")

# Follow-up (maintains context)
result2 = query(
    question="Can you give me examples?",
    chat_history=[
        {"role": "user", "content": "What is supervised learning?"},
        {"role": "assistant", "content": result1["answer"]}
    ]
)

高级搜索

# Similarity search
search(query="machine learning applications", top_k=5, search_type="similarity")

# MMR for diverse results
search(query="Python features", search_type="mmr")

# High-confidence matches only
search(query="neural networks", search_type="similarity_score_threshold")

成本跟踪

config = get_config()

print(f"Total queries: {config['metrics']['total_queries']}")
print(f"Total cost: ${config['metrics']['total_cost_usd']}")
print(f"Average latency: {config['metrics']['avg_latency_ms']}ms")

🎛️ 配置

环境变量

看 .env.example 对于所有配置选项。

关键设置:

# Provider Priority
PREFERRED_LLM_PROVIDER=openai  # or anthropic, gemini

# Chunking Strategy
CHUNK_SIZE=1000
CHUNK_OVERLAP=200

# Retrieval Settings
TOP_K=4
SEARCH_TYPE=similarity  # or mmr, similarity_score_threshold

# Vector Store
VECTOR_STORE=faiss  # or chroma, pinecone

# Features
ENABLE_STREAMING=false
ENABLE_COST_TRACKING=true
MEMORY_TYPE=buffer  # or summary, none

分块策略

策略 最适合 配置
递归 常规文本 默认
角色 简单拆分 设置 splitter_type=character
Markdown .md文件 设置 splitter_type=markdown

矢量存储

商店 类型 最适合
FAISS 本地 开发,单机
Chroma 本地/云 持久性,元数据过滤
松果 云 生产、规模

📁 项目结构

fastmcp-rag-template/
├── server.py                 # Main FastMCP server
├── config.py                 # Configuration management
├── document_manager.py       # Document loading & chunking
├── vector_store.py          # Vector store management
├── metrics.py               # Cost & performance tracking
├── test_production.py       # Production test suite
├── providers/               # Provider implementations
│   ├── __init__.py
│   ├── base.py             # Abstract provider interface
│   ├── openai.py           # OpenAI implementation
│   ├── anthropic.py        # Anthropic implementation
│   ├── gemini.py           # Google Gemini implementation
│   └── registry.py         # Provider factory
├── documents/              # Your documents go here
│   ├── sample.md
│   └── sample.txt
├── pyproject.toml          # Dependencies & config
├── .env.example            # Environment template
└── README.md               # This file

🔧 故障排除

没有可用的LLM提供程序

错误: No LLM provider available. Please set at least one of: OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_API_KEY

解决方案: 将至少一个API密钥添加到您的 .env 文件。

提供程序导入错误

错误: ImportError: Anthropic provider requires langchain-anthropic

解决方案: 安装提供程序依赖项:

uv pip install -e ".[anthropic]"

未找到矢量存储

错误: 矢量存储未初始化

解决方案: 先添加文档:

add_documents(file_paths=["path/to/document.txt"])

不支持的文件格式

错误: Unsupported file format: .xlsx

解决方案: 目前支持的格式有 .txt, .pdf, .md, .docx。转换文件或实现自定义加载器。


🏗️ 建筑

自动检测流程

graph TD
    A[setup_rag called] --> B{Preferred provider set?}
    B -->|Yes| C{Provider available?}
    C -->|Yes| D[Use preferred provider]
    C -->|No| E[Fallback to auto-detect]
    B -->|No| E
    E --> F{OpenAI available?}
    F -->|Yes| G[Use OpenAI]
    F -->|No| H{Anthropic available?}
    H -->|Yes| I[Use Anthropic]
    H -->|No| J{Gemini available?}
    J -->|Yes| K[Use Gemini]
    J -->|No| L[Error: No provider]

RAG查询流

graph LR
    A[User Query] --> B[Embedding]
    B --> C[Vector Search]
    C --> D[Retrieve Docs]
    D --> E[Context + Query]
    E --> F[LLM]
    F --> G[Answer + Sources]
    G --> H[Track Metrics]

🎯 最佳实践

1.供应商选择

  • 注重成本:使用Gemini或GPT-3.5涡轮增压
  • 最佳质量:GPT-4或克劳德3作品集
  • 平衡的:克劳德三重奏或GPT-4涡轮

2.嵌入策略

  • 省钱:拥抱脸(免费,本地)
  • 最佳质量:OpenAI文本嵌入-3大
  • 本地/私人:Ollama嵌入件

3.堵塞

  • 技术文档:较大的区块(1500-2000个代币)
  • 问答:较小的区块(500-800个代币)
  • 混合内容:默认值(1000个令牌)

4.搜索类型

  • 具体问题: similarity
  • 探索性: mmr
  • 高精度: similarity_score_threshold

🤝 贡献

欢迎投稿!需要改进的地方:

  • 其他法学硕士提供者(Cohere、Mistral等)
  • 更多矢量存储(Weaviate、Qdrant)
  • 重新排序实施
  • 流媒体响应支持
  • 高级检索策略

📄 许可证

MIT许可证-有关详细信息,请参阅许可证文件


🙏 致谢

内置:


📞 支持


RAG大楼快乐! 🚀