jackkuo's picture
add QA
79899c0

A newer version of the Streamlit SDK is available: 1.49.1

Upgrade

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

故障排除

常见问题

  1. 连接失败: 检查服务是否启动,端口是否正确
  2. 认证错误: 检查API密钥配置
  3. 流式响应中断: 检查网络连接稳定性

日志查看

服务会记录详细的日志信息,包括:

  • 请求处理时间
  • 错误信息
  • 操作状态

扩展功能

添加新的MCP操作

  1. routers/mcp_sensor.py 中添加新的路由
  2. main.pyinclude_operations 中添加操作名称
  3. 重新启动服务

自定义响应格式

可以修改 ChatService 来定制响应格式,满足不同的MCP客户端需求。