返回市场
sui微服务管理平台

sui微服务管理平台

作者:ProbonoBonobo6 星标更新:2025-03-31

项目介绍

使用FAISS的MCP服务器以实现RAG

本项目提供了一个概念验证实现,该实现允许AI代理查询向量数据库并检索与检索增强生成(RAG)相关的文档。

特性

  • 集成MCP端点的FastAPI服务器
  • 集成FAISS向量数据库
  • 文档分块和嵌入
  • 从GitHub提取和处理Move文件
  • 集成LLM以完成完整的RAG工作流程
  • 简单客户端示例
  • 示例文档

安装

使用pipx(推荐)

pipx 是一个帮助你在隔离环境中安装和运行Python应用程序的工具。

  1. 如果您还没有安装pipx,请先安装:
# 在macOS上
brew install pipx
pipx ensurepath

# 在Ubuntu/Debian上
sudo apt update
sudo apt install python3-pip python3-venv
python3 -m pip install --user pipx
python3 -m pipx ensurepath

# 在Windows上使用pip
pip install pipx
pipx ensurepath
  1. 直接从项目目录安装MCP服务器包:
# 导航到包含mcp_server文件夹的目录
cd /path/to/mcp-server-project

# 以可编辑模式安装
pipx install -e .
  1. (可选)配置环境变量:
    • .env.example复制为.env
    • 添加您的GitHub令牌以提高速率限制:GITHUB_TOKEN=your_token_here
    • 添加您的OpenAI或其他LLM API密钥以进行RAG集成:OPENAI_API_KEY=your_key_here

手动安装

如果您不希望使用pipx:

  1. 克隆仓库
  2. 安装依赖项:
cd mcp_server
pip install -r requirements.txt

使用pipx的用法

在使用pipx安装后,您可以访问以下命令:

从GitHub下载Move文件

# 使用默认设置下载Move文件
mcp-download --query "use sui" --output-dir docs/move_files

# 使用更多选项下载
mcp-download --query "module sui::coin" --max-results  50 --new-index --verbose

改进的GitHub搜索和索引(推荐)

# 使用默认设置搜索GitHub并索引文件
mcp-search-index --keywords "sui move"

# 搜索多个关键词并自定义选项
mcp-search-index --keywords "sui move,move framework" --max-repos 30 --output-results --verbose

# 保存搜索结果并使用自定义索引位置
mcp-search-index --keywords "sui coin,sui::transfer" --index-file custom/path/index.bin --output-results

mcp-search-index 命令提供了增强的GitHub存储库搜索功能:

  • 首先搜索存储库,然后递归地提取Move文件
  • 支持多个搜索关键词(逗号分隔)
  • 智能过滤包含“use sui”引用的Move文件
  • 下载后始终重建向量数据库

索引Move文件

# 索引默认位置的文件
mcp-index

# 使用自定义选项索引
mcp-index --docs-dir path/to/files --index-file path/to/index.bin --verbose

查询向量数据库

# 基本查询
mcp-query "什么是Sui Move中的模块?"

# 带有选项的高级查询
mcp-query "如何在Sui Move中定义结构体?" -k 3 -f

使用带有LLM集成的RAG

# 基本RAG查询(如果没有提供API密钥,则使用模拟的LLM)
mcp-rag "什么是Sui Move中的模块?"

# 使用特定的LLM API
mcp-rag "如何在Sui Move中定义结构体?" --api-key your_api_key --top-k 3

# 输出为JSON以便进一步处理
mcp-rag "sui::coin有哪些好处?" --output-json > rag_response.json

运行服务器

# 使用默认设置启动服务器
mcp-server

# 使用自定义设置启动
mcp-server --host 127.0.0.1 --port 8080 --index-file custom/path/index.bin

手动用法(无pipx)

启动服务器

cd mcp_server
python main.py

服务器将在http://localhost:8000启动

从GitHub下载Move文件

要从GitHub下载Move文件并填充您的向量数据库:

# 使用默认查询“use sui”下载Move文件
./run.sh --download-move

# 自定义搜索查询
./run.sh --download-move --github-query "module sui::coin" --max-results 50

# 下载、索引并启动服务器
./run.sh --download-move --index

您也可以直接使用Python脚本:

python download_move_files.py --query "use sui" --output-dir docs/move_files

索引文档

在查询之前,您需要索引您的文档。您可以将文本文件(.txt)、Markdown文件(.md)或Move文件(.move)放在docs目录下。

要索引文档,您可以:

  1. 使用带有--index标志的运行脚本:
./run.sh --index
  1. 直接使用索引脚本:
python index_move_files.py --docs-dir docs/move_files --index-file data/faiss_index.bin

查询文档

您可以使用本地查询脚本:

python local_query.py "什么是RAG?"

# 使用更多选项
python local_query.py -k 3 -f "如何在Sui Move中定义结构体?"

使用带有LLM集成的RAG

# 直接使用LLM的RAG查询
python rag_integration.py "什么是Sui Move中的模块?" --index-file data/faiss_index.bin

# 使用API密钥(如果有)
OPENAI_API_KEY=your_key_here python rag_integration.py "Sui中的硬币是如何工作的?"

MCP API端点

MCP API端点位于/mcp/action。您可以使用它执行不同的操作:

  • retrieve_documents:根据查询检索相关文档
  • index_documents:从目录中索引文档

示例:

curl -X POST "http://localhost:8000/mcp/action" -H "Content-Type: application/json" -d '{"action_type": "retrieve_documents", "payload": {"query": "什么是RAG?", "top_k": 3}}'

完整的RAG流水线

完整的RAG(检索增强生成)流水线如下:

  1. 搜索查询:用户提交一个问题
  2. 检索:系统在向量数据库中搜索相关文档
  3. 上下文形成:检索到的文档被格式化为提示
  4. LLM生成:提示被发送给带有检索上下文的LLM
  5. 增强响应:LLM基于检索的信息提供答案

此工作流完全实现在rag_integration.py模块中,可以通过命令行或作为您自己应用中的库来使用。

GitHub Move文件提取

系统可以从GitHub基于搜索查询提取Move文件。它实现了两种方法:

  1. GitHub API(首选):需要GitHub令牌以提高速率限制
  2. 网络抓取备用方案:当API方法失败或未提供令牌时使用

要配置您的GitHub令牌,请将其设置在.env文件或环境变量中:

GITHUB_TOKEN=your_github_token_here

项目结构

mcp_server/
├── __init__.py             # 包初始化
├── main.py                # 主服务器文件
├── mcp_api.py             # MCP API实现
├── index_move_files.py    # 文件索引实用程序
├── local_query.py         # 本地查询实用程序
├── download_move_files.py # GitHub Move文件提取器
├── rag_integration.py     # LLM集成用于RAG
├── pyproject.toml         # 包配置
├── requirements.txt       # 依赖项
├── .env.example           # 示例环境变量
├── README.md              # 此文件
├── data/                  # 存储FAISS索引
├── docs/                  # 示例文档
│   └── move_files/        # 下载的Move文件
├── models/                # 模型实现
│   └── vector_store.py    # FAISS向量存储实现
└── utils/
    ├── document_processor.py  # 文档处理实用程序
    └── github_extractor.py    # GitHub文件提取实用程序

扩展项目

要扩展这个概念验证:

  1. 添加身份验证和安全特性
  2. 实现更复杂的文档处理
  3. 添加对更多文档类型的支持
  4. 集成其他LLM提供商
  5. 添加监控和日志记录
  6. 改善Move语言解析以提取更多结构化数据

许可证

MIT