mcpField
I
IntraIntel.ai - Multi-LLM Agent Coding Challenge

IntraIntel.ai - Multi-LLM Agent Coding Challenge

本地服务
github.com/Kush614AI 与智能体073 周前更新

关于 IntraIntel.ai - Multi-LLM Agent Coding Challenge

CliniSearch 是一个用 Python 构建的多 LLM 医疗问答 Agent,分别整合网页搜索和 PubMed 结果生成答案。它可选地优化查询、概述摘要片段,并提供来源链接。

主要功能

  1. 01网页与 PubMed 搜索
  2. 02可选查询优化
  3. 03可选摘要片段概述
  4. 04按来源分别生成答案
  5. 05结果附带来源链接

适用场景

  1. 01对照医疗网页搜索与 PubMed 结果
  2. 02依据检索到的来源片段生成答案

MCP 相关

Agent 通过自定义的 HTTP JSON 协议查询网页搜索和 PubMed 工具服务。服务返回结构化搜索结果,供后续合成答案。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

CliniSearch - 医疗搜索多 LLM Agent

本项目使用 Python 实现了一个多 LLM Agent 系统,用于回答医疗问题。它采用自定义的模型上下文协议(MCP),与不同的工具服务交互,以检索信息(网页搜索和 PubMed 搜索)。核心 Agent 借助 Hugging Face Inference API 中的多个免费大语言模型(LLM),执行查询优化、上下文片段摘要和最终答案综合等任务,并采用检索增强生成(RAG)方法。系统会根据从网页搜索和 PubMed 检索到的上下文,分别提供综合答案,并附上原始资料的链接。

视频演示链接

https://youtu.be/JvFvCYFYpzU?si=Vho8MM5Dy7YQk53E

系统架构

image

使用 Hugging Face API 免费层中的两个 LLM 模型:distillbart 和 mistral instruct

核心方法与设计

系统采用多步骤的 Agentic RAG 流程:

  1. 用户输入: Agent 接收用户提出的医疗问题。
  2. (可选)查询优化(LLM1): 可以将用户的问题交给第一个 LLM(例如 mistralai/Mistral-7B-Instruct-v0.3),生成更简洁、更有效的搜索查询,并聚焦于关键医疗术语。
  3. 信息检索(MCP 工具):
    • 将(可能经过优化的)搜索查询发送至一个或两个 MCP 工具服务:
      • 网页搜索 MCP 服务: 使用 duckduckgo-search 搜索通用网页。
      • PubMed MCP 服务: 使用 BioPython 的 Entrez 工具查询 PubMed 数据库。
    • 这些服务会返回结构化的搜索结果(标题、摘要、URL/ID)。
  4. 上下文处理:
    • (可选)摘要片段(LLM2): 如果搜索结果的摘要较长,可以将其交给专门的摘要 LLM(例如 sshleifer/distilbart-cnn-6-6),生成更简洁的版本。
    • 上下文格式化: 将各来源(网页搜索、PubMed)的摘要片段(已摘要或原始内容)分别整理为结构化的上下文字符串。上下文中的每个条目都会标注标签(例如“条目 1”),并包含标题、内容和引用(URL 或 PubMed ID)。
  5. 答案综合(LLM3 - RAG):
    • 对于每个信息来源(网页搜索、PubMed),Agent 会分别调用功能强大的指令微调 LLM(例如 mistralai/Mistral-7B-Instruct-v0.3)。
    • 提供给该 LLM 的提示词包括:
      • 用户的原始问题。
      • 来自该特定来源的格式化上下文。
      • 一条指令,要求仅根据提供的上下文作答,并尽可能引用条目编号。
    • 该 LLM 会为相应来源生成综合答案。
  6. 输出: 系统会先显示原始问题,随后显示基于网页搜索生成的综合答案(附来源链接),再显示基于 PubMed 生成的综合答案(附来源链接)。

关键技术:

  • 使用 asyncio 实现并发的 Python 3.9+。
  • FastAPI 和 Uvicorn: 用于构建异步 MCP 工具服务。
  • httpx: 用于 Agent 向 MCP 服务和 Hugging Face API 发送异步 HTTP 请求。
  • Hugging Face Inference API: 用于访问免费的 LLM,以执行查询优化、摘要和答案综合。
  • duckduckgo-search: 用于无需 API 密钥的网页搜索。
  • BioPython: 用于查询 NCBI 的 PubMed 数据库。
  • python-dotenv: 用于管理 API 密钥和环境变量。

Model Context Protocol (MCP) 定义

本项目使用的 MCP 是一种基于 HTTP 的简单 JSON 协议,用于主 Agent 与工具服务之间的通信:

  • 向 MCP 服务发送请求:
    • 端点: POST /execute
    • JSON 请求体: {"query": "user's search query string"}
  • MCP 服务的响应:
    • JSON 请求体(成功):
      {
        "source": "server_name_string (e.g., WebSearchServer, PubMedServer)",
        "status": "success",
        "results": [
          {
            "title": "string",
            "snippet": "string",
            "url": "string_url_if_web_search", // or missing
            "id": "string_pubmed_id_if_pubmed" // or missing
          }
          // ... more results
        ]
      }
      
    • JSON 请求体(错误):
      {
        "source": "server_name_string",
        "status": "error",
        "error_message": "string_describing_the_error"
      }
      

设置说明

  1. 克隆/下载:

    • 获取项目文件,并将其放入名为 intra_intel_multi_llm_challenge 的目录中。
  2. 创建并激活 Python 虚拟环境:

    • 进入项目根目录(intra_intel_multi_llm_challenge)。
    • 创建环境:
      python -m venv venv
      
    • 激活环境:
      • 在 macOS/Linux 上:source venv/bin/activate
      • 在 Windows 上:venv\Scripts\activate
  3. 安装依赖项:

    pip install -r requirements.txt
    
  4. 配置环境变量:

    • 在项目根目录中,将文件 .env.example 复制为名为 .env 的新文件。
    • 打开 .env 文件并填写相关信息:
      # .env
      HF_API_TOKEN="your_huggingface_api_token_here"
      NCBI_EMAIL="[email protected]"
      
      • HF_API_TOKEN: 在 Hugging Face 账户设置中获取此令牌(https://huggingface.co/settings/tokens)。拥有 read 权限的令牌即可。
      • NCBI_EMAIL: 提供你的电子邮箱地址,以便通过 Entrez 礼貌地以程序方式访问 NCBI 的 PubMed 数据库。本项目无需事先在 NCBI 注册此邮箱。
  5. 接受受限模型的条款(Mistral 尤其重要):

    • 默认使用的文本生成大模型为 mistralai/Mistral-7B-Instruct-v0.3。这是一个受限模型。
    • 在 Hugging Face 网站上登录你的账户。
    • 前往模型卡页面:https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3
    • 阅读并接受许可条款,以获得此模型的访问权限。随后,你的 HF_API_TOKEN 将获准使用该模型。如果跳过此步骤,对该模型的 API 调用将会失败。

运行系统

在主 Agent 查询 MCP 服务之前,必须先启动这些服务。

  1. 终端 1:启动 Web Search MCP 服务:

    • 切换到项目根目录(intra_intel_multi_llm_challenge)。
    • 确保已激活虚拟环境。
    • 运行:
      python -m uvicorn mcp_servers.web_search_server:app --reload --port 8001
      
    • 等待出现 Uvicorn 正在运行的提示(例如,Uvicorn running on http://0.0.0.0:8001)。
  2. 终端 2:启动 PubMed MCP 服务(用于附加功能):

    • 切换到项目根目录。
    • 确保已激活虚拟环境。
    • 运行:
      python -m uvicorn mcp_servers.pubmed_search_server:app --reload --port 8002
      
    • 等待 Uvicorn 启动确认信息。
  3. 终端 3:运行主 Agent:

    • 切换到项目根目录。
    • 确保已激活虚拟环境。
    • 运行:
      python agent/main_agent.py
      
    • Agent 将处理预先定义的 5 个医学问题。对于每个问题,它将:
      • 使用 LLM1(可选)优化查询。
      • 查询 Web Search MCP 服务。
      • 使用 LLM2(可选)总结网页搜索摘要。
      • 根据网页搜索上下文,使用 LLM3 综合得出答案。
      • 打印基于网页搜索的答案及其来源链接。
      • 查询 PubMed MCP 服务(示例中 use_pubmed_for_this_question 默认设为 True)。
      • 使用 LLM2(可选)总结 PubMed 摘要。
      • 根据 PubMed 上下文,使用 LLM3 综合得出答案。
      • 打印基于 PubMed 的答案及其来源链接。
    • 处理每个问题之间会暂停一段时间,以避免对 Hugging Face API 速率限制造成影响。

    关于 Hugging Face API 模型加载的说明: 首次通过 Inference API 调用 LLM 时,Hugging Face 可能需要先加载模型,这可能需要 20-90 秒(Mistral-7B 等较大的模型可能需要更长时间)。后续调用通常会更快。脚本设置了超时,并会尝试处理模型加载提示信息。

自定义和调试

  • LLM 选择: 如果发现其他模型在 Hugging Face 免费 Inference API 上效果更好或可用性更稳定,可以在 agent/main_agent.py 中更改 VERIFIED_INSTRUCT_MODEL_ID 和 SUMMARIZATION_MODEL_ID(请务必先在模型卡片页面的小组件中验证!)。
  • 切换功能: 在 agent/main_agent.py 的 if __name__ == "__main__": 代码块中,可以更改传递给 main_agent_workflow 的 refine_queries 和 summarize_snippets 布尔标志,以测试启用或禁用这些步骤时的工作流。也可以针对单次调用更改 use_pubmed_for_this_question。
  • 详细日志: 如需查看详细的调试信息(API 负载、完整上下文等):
    1. 打开 agent/main_agent.py。
    2. 将 LOG_LEVEL = logging.INFO 更改为 LOG_LEVEL = logging.DEBUG。
    3. 保存并重新运行 Agent。

依赖项

主要依赖项列于 requirements.txt 中:

  • fastapi:用于构建 MCP 服务。
  • uvicorn[standard]:FastAPI 的 ASGI 服务端。
  • httpx:用于发送异步 HTTP 请求。
  • duckduckgo-search:用于网页搜索功能。
  • biopython:用于通过 NCBI Entrez 查询 PubMed。
  • python-dotenv:用于管理环境变量。

本 README 涵盖了理解、设置和运行项目所需的信息。

医学问题输出示例截图

网页搜索 网页搜索输出

Pubmed 搜索 PubmedSearch 输出

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。