Spaces:
Sleeping
Sleeping
A newer version of the Streamlit SDK is available:
1.49.1
MCP 包装服务使用说明
概述
这个服务使用 FastApiMCP
将生物医学RAG服务包装成MCP(Model Context Protocol)工具,可以通过MCP客户端调用。
服务配置
在 main.py
中,服务被包装为:
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客户端配置中添加:
{
"bio_qa_mcp": {
"url": "http://localhost:9487/sse",
"transport": "sse"
}
}
1.2 调用示例
# 使用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端点
# 调用生物医学问答接口
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调用
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中使用
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应用中使用
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. 启动服务
cd python-services/Retrieve
python main.py
服务将在 http://localhost:9487
启动。
2. 环境变量配置
确保设置了必要的环境变量:
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
故障排除
常见问题
- 连接失败: 检查服务是否启动,端口是否正确
- 认证错误: 检查API密钥配置
- 流式响应中断: 检查网络连接稳定性
日志查看
服务会记录详细的日志信息,包括:
- 请求处理时间
- 错误信息
- 操作状态
扩展功能
添加新的MCP操作
- 在
routers/mcp_sensor.py
中添加新的路由 - 在
main.py
的include_operations
中添加操作名称 - 重新启动服务
自定义响应格式
可以修改 ChatService
来定制响应格式,满足不同的MCP客户端需求。