Spaces:
Sleeping
Sleeping
# MCP 包装服务使用说明 | |
## 概述 | |
这个服务使用 `FastApiMCP` 将生物医学RAG服务包装成MCP(Model Context Protocol)工具,可以通过MCP客户端调用。 | |
## 服务配置 | |
在 `main.py` 中,服务被包装为: | |
```python | |
mcp = FastApiMCP(app, name="bio qa mcp", include_operations=["bio_qa_stream_chat"]) | |
mcp.mount_sse() | |
``` | |
## 可用的MCP操作 | |
### 1. bio_qa_stream_chat | |
这是主要的生物医学问答操作,提供流式RAG问答服务。 | |
## 调用方式 | |
### 方式1: 通过MCP客户端调用 | |
#### 1.1 配置MCP客户端 | |
在你的MCP客户端配置中添加: | |
```json | |
{ | |
"bio_qa_mcp": { | |
"url": "http://localhost:9487/sse", | |
"transport": "sse" | |
} | |
} | |
``` | |
#### 1.2 调用示例 | |
```python | |
# 使用MCP客户端调用 | |
from langchain_mcp_adapters.client import MultiServerMCPClient | |
# 配置MCP服务器 | |
mcp_config = { | |
"bio_qa_mcp": { | |
"url": "http://localhost:9487/sse", | |
"transport": "sse" | |
} | |
} | |
# 创建客户端 | |
client = MultiServerMCPClient(mcp_config) | |
# 获取工具 | |
tools = await client.get_tools() | |
# 使用工具 | |
# 工具名称: bio_qa_stream_chat | |
# 参数: query (问题), lang (语言,可选,默认"en") | |
``` | |
### 方式2: 直接HTTP调用 | |
#### 2.1 直接调用API端点 | |
```bash | |
# 调用生物医学问答接口 | |
curl -X POST "http://localhost:9487/mcp/bio_qa" \ | |
-H "Content-Type: application/x-www-form-urlencoded" \ | |
-d "query=什么是糖尿病?&lang=zh" | |
``` | |
#### 2.2 Python requests调用 | |
```python | |
import requests | |
# 调用接口 | |
response = requests.post( | |
"http://localhost:9487/mcp/bio_qa", | |
data={ | |
"query": "什么是糖尿病?", | |
"lang": "zh" | |
} | |
) | |
# 处理流式响应 | |
for line in response.iter_lines(): | |
if line: | |
print(line.decode('utf-8')) | |
``` | |
## 参数说明 | |
### bio_qa_stream_chat 操作 | |
- **query** (必需): 问题内容 | |
- **lang** (可选): 语言设置 | |
- `"zh"`: 中文 | |
- `"en"`: 英文(默认) | |
## 响应格式 | |
服务返回流式响应(Server-Sent Events),格式为: | |
``` | |
data: {"type": "result", "content": "回答内容..."} | |
data: {"type": "result", "content": "更多内容..."} | |
data: {"type": "done", "content": "完成"} | |
``` | |
## 使用场景 | |
### 1. 在LangChain中使用 | |
```python | |
from langchain.agents import AgentExecutor, create_openai_functions_agent | |
from langchain_openai import ChatOpenAI | |
# 创建代理 | |
llm = ChatOpenAI(model="gpt-4") | |
agent = create_openai_functions_agent(llm, tools, prompt) | |
agent_executor = AgentExecutor(agent=agent, tools=tools) | |
# 执行问答 | |
result = await agent_executor.ainvoke({ | |
"input": "请帮我查询关于糖尿病的相关信息" | |
}) | |
``` | |
### 2. 在Streamlit应用中使用 | |
```python | |
import streamlit as st | |
from langchain_mcp_adapters.client import MultiServerMCPClient | |
# 初始化MCP客户端 | |
@st.cache_resource | |
def get_mcp_client(): | |
config = { | |
"bio_qa_mcp": { | |
"url": "http://localhost:9487/sse", | |
"transport": "sse" | |
} | |
} | |
return MultiServerMCPClient(config) | |
# 使用 | |
client = get_mcp_client() | |
tools = await client.get_tools() | |
``` | |
## 部署说明 | |
### 1. 启动服务 | |
```bash | |
cd python-services/Retrieve | |
python main.py | |
``` | |
服务将在 `http://localhost:9487` 启动。 | |
### 2. 环境变量配置 | |
确保设置了必要的环境变量: | |
```bash | |
export ENVIRONMENT=prod | |
export QA_LLM_MAIN_API_KEY=your-api-key | |
export QA_LLM_MAIN_BASE_URL=your-api-url | |
# ... 其他配置 | |
``` | |
### 3. 网络访问 | |
- 本地访问: `http://localhost:9487` | |
- 远程访问: `http://your-server-ip:9487` | |
## 故障排除 | |
### 常见问题 | |
1. **连接失败**: 检查服务是否启动,端口是否正确 | |
2. **认证错误**: 检查API密钥配置 | |
3. **流式响应中断**: 检查网络连接稳定性 | |
### 日志查看 | |
服务会记录详细的日志信息,包括: | |
- 请求处理时间 | |
- 错误信息 | |
- 操作状态 | |
## 扩展功能 | |
### 添加新的MCP操作 | |
1. 在 `routers/mcp_sensor.py` 中添加新的路由 | |
2. 在 `main.py` 的 `include_operations` 中添加操作名称 | |
3. 重新启动服务 | |
### 自定义响应格式 | |
可以修改 `ChatService` 来定制响应格式,满足不同的MCP客户端需求。 |