jackkuo's picture
add QA
79899c0
# 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客户端需求。