Watsonx Rag Mcp Server

Watsonx Rag Mcp Server

🚀 使用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技术与现有工具无缝结合,为用户提供强大的问答功能。

  • 0 关注
  • 0 收藏,8 浏览
  • system 提出于 2025-09-18 23:12

相似服务问题