返回 MCP 目录
public公开dns本地运行

watsonx-rag-mcp-server

本项目构建了一个基于IBM Watsonx.ai的检索增强生成(RAG)服务器,使用ChromaDB进行向量索引,并通过模型上下文协议(MCP)暴露接口。该系统能够处理PDF文档并基于文档内容回答问题,实现了将大型语言模型与特定领域知识相结合的智能问答功能。

article

README

🚀 使用Watsonx.ai构建RAG服务器并通过MCP协议集成到Claude Desktop中的完整指南

本项目旨在展示如何借助Watsonx.ai构建功能完备的检索增强生成(RAG)服务器,利用ChromaDB实现持久的向量存储。同时,还将展示如何通过模型上下文协议(MCP)把该服务器集成到Claude Desktop中,使其能依据PDF文档内容回答问题,为用户提供强大的问答功能。

🚀 快速开始

本项目主要分为三个步骤,分别是构建RAG服务器、配置Claude Desktop集成以及验证与使用。下面将为你详细介绍每个步骤的具体操作。

✨ 主要特性

  • 构建RAG服务器:利用Watsonx.ai和ChromaDB创建RAG服务器,解析和理解PDF文件,并根据内容生成回答。
  • 配置MCP协议集成:通过编辑Claude Desktop的配置文件,将自定义Python工具(RAG服务器)注册为可用工具。
  • 验证与使用:确保配置正确后,用户能在Claude Desktop中调用该工具,根据PDF内容进行提问和回答。

📦 安装指南

第一步:构建RAG服务器

1. 安装必要的库

pip install watsonx chromadb langchain

2. 初始化Watsonx模型

server.py文件中初始化模型:

from langchain.embeddings import Embeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import ChromaDB
from langchain.document_loaders import PDFLoader
import os

# 初始化Watsonx embeddings
embeddings = Embeddings()

3. 加载和处理文档

# 加载PDF文件
loader = PDFLoader("manual.pdf")
documents = loader.load()

# 将文档分割成小块
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = text_splitter.split_documents(documents)

# 创建ChromaDB存储
vectorstore = ChromaDB.from_texts(
    texts,
    embeddings,
    persist_directory="chroma_store",
    collection_name="manual_vectors"
)

4. 定义查询函数

def chat_with_manual(query: str) -> str:
    docs_and_scores = vectorstore.similarity_search_with_score(query, k=3)
    context = "\n".join([doc.page_content for doc, _ in docs_and_scores])
    return f"根据手册内容:{context}"

第二步:配置Claude Desktop集成

1. 找到Claude Desktop的配置文件位置

通常位于用户主目录下的.config/claude/settings文件夹中。

2. 编辑配置文件

claude_desktop_config.json文件中添加以下内容:

{
    "mcpServers": {
        " rag_manual_server": {
            "type": "python",
            "command": "python server.py chat_with_manual {query}",
            "description": "根据用户手册回答问题"
        }
    }
}

第三步:验证与使用

1. 启动Claude Desktop并加载配置

确保Claude Desktop已重新启动以应用新配置。

2. 测试工具调用

在聊天窗口中输入以下内容,测试新工具:

/tool rag_manual_server

然后提出问题,例如:

/manual 中提到的最大飞行时间是多少?

系统将根据PDF中的内容生成相应的回答。

💻 使用示例

基础用法

# 初始化Watsonx embeddings
from langchain.embeddings import Embeddings
embeddings = Embeddings()

# 加载PDF文件
from langchain.document_loaders import PDFLoader
loader = PDFLoader("manual.pdf")
documents = loader.load()

# 将文档分割成小块
from langchain.text_splitter import RecursiveCharacterTextSplitter
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
texts = text_splitter.split_documents(documents)

# 创建ChromaDB存储
from langchain.vectorstores import ChromaDB
vectorstore = ChromaDB.from_texts(
    texts,
    embeddings,
    persist_directory="chroma_store",
    collection_name="manual_vectors"
)

# 定义查询函数
def chat_with_manual(query: str) -> str:
    docs_and_scores = vectorstore.similarity_search_with_score(query, k=3)
    context = "\n".join([doc.page_content for doc, _ in docs_and_scores])
    return f"根据手册内容:{context}"

🔧 技术细节

本项目主要利用了Watsonx.ai进行模型初始化和嵌入生成,通过ChromaDB实现向量存储。在处理文档时,使用了langchain库中的PDFLoader加载PDF文件,RecursiveCharacterTextSplitter将文档分割成小块,ChromaDB存储处理后的文本向量。在查询时,通过similarity_search_with_score方法查找与查询最相似的文档,并根据文档内容生成回答。

🔧 注意事项

⚠️ 重要提示

  • 环境配置方面,要确保所有依赖项正确安装,并且路径设置无误。
  • 性能优化方面,如果处理大量文档,需考虑优化文本分割和向量存储的效率。
  • 错误处理方面,在实际应用中要添加异常捕获和日志记录功能。

📚 总结

通过本项目,我们成功构建了一个基于Watsonx.ai和ChromaDB的RAG服务器,并将其集成到Claude Desktop中。这一实现展示了如何将先进的NLP技术与现有工具无缝结合,为用户提供强大的问答功能。

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端