RAG为了MCP服务器微服务群
Web翻页Elasticsearch保存到Claude Desktop 啊Cline 中查找纹理图像MCP服务器。 Docker因为只需完成,所以不要污染本地环境,马上RAG(搜索扩展生成)。 聊天UI也被捆绑,从浏览器也能检索·聊天。
🚀 快速开始
1.准备(使用向量搜索)
单击功能区上OpenAI的,之API Key中所述修改相应参数的值。
# openai_token.txt にAPI Keyを記載(改行なしで保存してください)
echo "sk-..." > openai_token.txt※文件不存在或为空时,自动以仅检索关键字的模式动作。
2.启动服务器
./run.sh以下服务将启动:
- 弹性搜索:搜索引擎
- MCP API: RAG提供搜索功能MCP服务器
- 聊天API&查看:在浏览器中使用的聊天UI (
http://localhost:15173) - 嵌入API:矢量化API (API Key仅在设置时)
3.运行爬行器
Elasticsearch进行动态观察时的轴心点。Elasticsearch将条目添加到文档注册表。
# デフォルト設定で実行
./run-crawler.sh
# 設定ファイルを指定して実行する場合
./run-crawler.sh crawler_config_es1.yaml💻 利用方法
MCP从“主机”使用
Claude Desktop的配置文件(claude_desktop_config.json),模板名称将采用不同的格式。 Docker在动态输入提示中 python -m app.run_stdio 经过MCP与服务器通信。
{
"mcpServers": {
"rag-search": {
"command": "docker",
"args": [
"exec",
"-i",
"rag-mcp-api",
"python",
"-m",
"app.run_stdio"
]
}
}
}RAG使用模式
Claude Desktop提供了调用预定义提示的功能。 这MCP服务器是 rag_mode 的提示RAG搜索特定的系统指示LLM来定义自定义外观。
单击功能区上 /rag_mode 的下界Enter按键(或从菜单中选择)RAG将启用搜索模式。 此模式将提示您按照以下步骤进行回答:
- 检查索引列表
- 从适当的索引中搜索
- 根据需要获取详细信息文档
- 实事求是的回答
浏览器聊天UI利用
./run.sh 启动后,在浏览器中URL中所述修改相应参数的值。
- 网址:
http://localhost:15173
RAG查看项目中可用的所有族。
📦 功能组件
系统由以下微服务组成。
1.MCP服务器(mcp-api)
FastAPI基本MCP服务器。提供以下工具:
search:查找匹配查询的文档,然后单击ID、返回标题和突出显示。get_document_by_id: ID中所述修改相应参数的值。list_elasticsearch_indices:返回可用索引的列表。
2.履带式起重机(crawler)
Requests + BeautifulSoup基本Web我是克朗。
- 指定URL爬行Elasticsearch对较大场景进行渲染期间已观察到该故障。
crawler_config/在动态输入提示中单击YAML可以在文件中定义行为。
3.聊天应用程序(chat-api, chat-view)
- 聊天API:
mcp-api的总和LLM (GPT-4o-mini) 使用生成回答的后端API是。 - 聊天视图: React基于前端聊天UI是。
4.搜索引擎(elasticsearch, embedding-api)
- 弹性搜索:文档存储和搜索引擎(v8.18.1)。
- 嵌入API: OpenAI API具有兼容的界面并将文本矢量化(
openai_token.txt仅在设置时有效)。
⚙️ 详细设定
环境变量和通信模式
mcp-api 支持以下通信模式compose.yaml 中所述方法的备选方法env根据文件进行切换。现在是 流式HTTP 是默认值。
- 流式HTTP (默认):
.env.streamable_http
- 端点: /mcp
- SSE(服务器发送事件):
.env.sse
- 端点: /sse
开发调试
- 如果要单独重启服务
docker compose restart {service_name}中所述修改相应参数的值。 - 日志确认:
docker compose logs -f {service_name}
🕷️ 标尺设置
它的作用是 crawler_config/ 在动态输入提示中单击YAML中所述修改相应参数的值。 crawler_config.yaml 的主要设定项目如下。
# クロールを開始するURLのリスト
start_urls:
- https://example.com/start-page
# クロールを許可するドメイン(これ以外のドメインには遷移しません)
allowed_domains:
- example.com
# クロール対象とするURLの正規表現パターン
target_url_patterns:
- "https://example\\.com/docs/.*"
# 除外するURLの正規表現パターン
exclude_url_patterns:
- ".*\\.pdf"
# クロールの最大深さ(0はstart_urlsのみ)
max_depth: 10
# リクエスト間の遅延時間(秒)- サーバーへの負荷軽減のため
delay: 0.5
# User-Agent文字列
user_agent: "MSFR Crawler/1.0"
# 保存先のElasticsearchインデックス名
es_index: "my_index"
# インデックスの説明(LLMがツール選択時に使用)
es_index_description: "Example documentation index."
# 最大取得ドキュメント数(テスト等の制限用)
max_documents: 20
# Embedding設定(オプション)
# Chunkサイズ(文字数)
embedding_chunk_size: 1000
# Chunkのオーバーラップ(文字数)
embedding_chunk_overlap: 100
# Embeddingを有効にするかどうか (true/false)
# trueの場合、Embedding APIを使用してベクトル化を行います
enable_embedding: false______________________________________________________________________
📚 Appendix: 开发人员测试信息
curl 来修改标记元素的显示属性MCP用于检查服务器行为的示例命令。
Streamable HTTP 测试模式
1. 初期化 (Initialize) 单击功能区上 Mcp-Session-Id 中所述修改相应参数的值。
curl -i -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0", "id": 1, "method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": { "roots": { "listChanged": true }, "sampling": {} },
"clientInfo": { "name": "curl-client", "version": "1.0.0" }
}
}'2.工具执行(例如:获取索引列表) 已获取 Mcp-Session-Id 将条目添加到文档注册表。
# SESSION_ID=""
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "Mcp-Session-Id: $SESSION_ID" \
-d '{
"jsonrpc": "2.0", "id": 3, "method": "tools/call",
"params": { "name": "list_elasticsearch_indices", "arguments": {} }
}'SSE 测试模式
.env.sse 对较大场景进行渲染期间已观察到该故障。
SSEテストコマンドを開く
# 1. SSE接続開始(バックグラウンドで実行)
curl -N -H "Accept: text/event-stream" http://localhost:8000/sse &
# 2. 上記レスポンスの `endpoint` URLからセッションIDを確認し設定
# data: /messages/?session_id=abcd... => abcd...
export SESSION_ID=""
# 3. 初期化
curl -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"protocolVersion": "2024-11-05", "capabilities": {"tools": {}}, "clientInfo": {"name": "curl-test", "version": "1.0.0"}}}' \
"http://localhost:8000/messages/?session_id=$SESSION_ID"
# 4. 検索実行
curl -X POST -H "Content-Type: application/json" \
--data '{"jsonrpc": "2.0", "id": 4, "method": "tools/call", "params": {"name": "search", "arguments": {"query": "elasticsearch", "index": "es_1_5_reference"}}}' \
"http://localhost:8000/messages/?session_id=$SESSION_ID"