全部版块 我的主页
论坛 数据科学与人工智能 人工智能
222 0
2025-12-02

基于 MCP 的个性化 arXiv 论文服务构建实践

本文内容源自《AI Agent智能体与MCP开发实战》第13章的学习总结,旨在设计并实现一个依托于 MCP(Model Context Protocol) 的智能学术辅助系统。该系统可模拟专业科研助手行为,完成论文检索、内容摘要、质量筛选以及个性化推荐等任务。

一、技术选型背景:为何选择 MCP?

MCP(Model Context Protocol) 是一种将外部能力(如 API 接口、文件资源、提示词模板等)以标准化方式暴露给 AI 智能体的通信协议。其核心能力分为三类:

  • Tools:类似于函数调用机制,用于接入外部功能接口,例如查询论文、获取元数据或下载 PDF 文件。
  • Resources:代表可读取的数据源或存储对象,比如缓存的论文列表、用户偏好配置等。
  • Prompts:提供结构化提示模板,便于智能体复用统一格式进行推理与生成。

在 arXiv 学术服务场景中,MCP 展现出高度适配性:

  • 论文的搜索、抓取、摘要提取等操作均可抽象为标准 Tool 接口。
  • 用户的浏览历史、研究方向偏好和已缓存的文献信息适合通过 Resource 进行持久化管理。
  • 推荐逻辑与文本生成过程可通过预设的 Prompt 模板 实现一致性输出。
  • 多智能体协作架构下(如分别负责检索、摘要、推荐的 Agent),MCP 支持工具共享与权限隔离,提升系统可维护性。

具体到 arXiv 应用场景:

  • Query、Fetch、Summarize 等流程均可封装为独立的 MCP Tool。
  • PDF 文档及元数据可作为 Resource 被多个模块共用。
  • 用户的研究领域描述可嵌入 Prompt 模板,驱动智能体自动适配语境。

MCP 的主要优势包括:

  • 兼容任意大语言模型(LLM)平台
  • 工具定义标准化,支持跨 Agent 复用
  • 支持自动参数解析与填充,特别适用于 arXiv 这类结构化程度高的 API 服务

二、系统整体架构设计

本系统的层级结构如下所示:

┌───────────────────────────┐
│       AI Agent            │
│  (具备 MCP 客户端能力的 LLM) │
└───────────────┬───────────┘
                │ MCP 协议通信
                ▼
┌───────────────────────────┐
│      arXiv MCP Server     │
├───────────────────────────┤
│ Tools:                    │
│   - search_papers         │
│   - fetch_metadata        │
│   - download_pdf          │
│   - summarize_paper       │
│                           │
│ Resources:                │
│   - cached_papers.json    │
│                           │
│ Prompts:                  │
│   - personalized_recommend│
└───────────────────────────┘
                │
                ▼
         arXiv API / 导出接口

该架构中,AI Agent 通过 MCP 客户端向服务器发起请求;MCP Server 封装了对 arXiv 各类操作的能力,并将其标准化为 Tools、Resources 和 Prompts;最终通过调用 arXiv 官方接口完成实际数据交互。

三、关键设计考量与优化建议

1. 查询语言兼容处理

arXiv 原生仅支持英文关键词检索。若用户使用中文提问,需引入翻译模型或将自然语言意图映射为英文查询语句。可通过专用翻译模型或基于 Prompt 的语义转换策略实现。

2. 结果重排序与个性化增强

基础检索结果可进一步优化:结合用户画像或研究兴趣向量(embedding),利用相似度计算进行结果重排;也可借助大模型生成个性化解说理由,提升推荐说服力。

3. PDF 内容解析方案

下载后的 PDF 需进行文本抽取。推荐采用 pdftotext、pdfminer 或 langchain 提供的 pdf-loader 组件进行 OCR 与结构化解析,确保后续摘要与分析准确可靠。

4. 缓存机制与去重策略

对已获取的论文元数据和 PDF 文件建立本地缓存(如 cached_papers.json),避免重复请求,节约 API 配额并提升响应速度。

5. 异步与批量任务支持

面对大规模检索或长文档摘要任务,应采用异步执行模式,返回任务 ID 并提供进度查询接口。但需注意 MCP 协议对 Agent 交互时延的要求,合理设计回调机制。

6. 权限控制与访问频率限制

严格遵守 arXiv 的 rate limit 规则,防止因高频请求被封禁。可在 MCP Server 层面加入请求节流与身份认证机制。

7. 可扩展性设计

未来可将摘要向量、嵌入表示(embedding)、向量数据库索引(如 FAISS、Weaviate)作为新的 Resource 暴露给多个 Agent 使用,支撑更复杂的语义搜索与推荐功能。

四、核心工具定义与实现示例

4.1 MCP Server 部署方式

可通过 Python 包管理工具安装官方提供的 arxiv-mcp-server 库,快速搭建本地服务环境。

4.2 论文搜索功能:search_papers

该功能基于 arXiv 官方 API 实现论文检索。以下代码示例中,设定关键词为 “position emmbedding in attention”,限定返回最新的三项成果。通过 arxiv.Client 初始化客户端,并配置按提交日期倒序排列结果。

需要注意的是,当前接口不支持直接使用中文关键词查询,否则可能无法返回有效结果。

import arxiv
query = "position embedding in attention"
max_results = 3
client = arvix.Client()

search = arxiv.Search(
query = query,
max_results = max_results,
sort_by = arxiv.SortCriterion.SubmittedDate,)

results = []
for paper in client.results(search):
    print(paper)
    results.append(paper)
    print("-------------------------")
    if len(results) >= max_results:
        break

responese_data = {"total_results":len(results),"paper":results}
print(response_data)

4.3 辅助工具函数的大模型集成设置

为进一步提升工具智能化水平,可引入大模型对输入查询进行预处理,例如自动补全术语、纠正拼写错误、扩展同义词等。此类辅助函数可通过 MCP 的 Tool 接口注册,供多个 Agent 调用。

通过4.2节的实践可以发现,在使用arxiv MCP服务进行工具函数调用时,若查询语言为英文,系统能够有效完成检索并返回指定数量的结果;然而当输入为中文时,则通常返回空值。为解决该问题,可引入QWen3在线模型作为翻译中间件,利用Prompt工程实现中英文内容的自动转译,从而提升对中文查询的支持能力。

4.4 科研论文个性化查询功能的设计

为了将上述逻辑封装成可复用的服务模块,可采用FASTAPI构建RESTful接口。该方式便于对外暴露HTTP API,也可作为MCP Server内部的功能组件。例如,定义一个POST请求端点,接收客户端提交的查询参数,触发后端模型或方法执行处理,并返回标准化的结构化响应。

以下是一个简洁高效的FastAPI应用示例:

# main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from search_papers import search_papers
from translate_query import translate_to_english
from summarize_paper import summarize_paper
import asyncio

app = FastAPI()

class QueryRequest(BaseModel):
    query: str
    max_results: int = 5
    user_id: str | None = None
    language: str = "auto"  # 'en' or 'zh' or 'auto'

@app.post("/api/search")
async def api_search(req: QueryRequest):
    q = req.query
    if req.language == "zh" or (req.language == "auto" and contains_chinese(q)):
        q = translate_to_english(q)
    try:
        res = search_papers(q, max_results=req.max_results)
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))
    # 为每篇生成短摘要(并行)
    async def summarize_item(p):
        return {**p, "summary_short": summarize_paper(p["summary"])}
    tasks = [asyncio.to_thread(summarize_item, p) for p in res["papers"]]
    summaries = await asyncio.gather(*tasks)
    return {"total": res["total_results"], "papers": summaries}

关键说明与优化建议:

contains_chinese()
  • 添加辅助函数用于检测文本是否包含中文字符,以判断是否需要启动翻译流程。
  • 在获取论文摘要时,采用线程池或异步机制,防止阻塞主事件循环,提高并发性能。
  • 在生产环境中,应集成缓存(如Redis)以减少重复请求开销,同时增加限流、身份认证、错误重试机制及完整日志记录,保障系统稳定性与安全性。

4.5 基于FLOW流程的科研论文检索架构

整个查询流程遵循清晰的阶段划分,确保从用户请求到结果输出的高效流转:

  1. 请求接收(Client):用户发起查询请求,携带 query 内容以及个性化偏好信息,如研究领域、目标年份范围、指定作者或关键词等。
  2. 预处理阶段:首先识别查询语句的语言类型;若为中文则通过翻译模型转换为英文;随后进行语义扩展,例如引入同义词库增强检索覆盖面。
  3. 检索执行:调用核心检索接口,获取初步候选集(N条相关论文记录)。
    search_papers
  4. 后处理操作:对候选结果进行去重处理,并依据发布日期或相关性进行初筛;同时启动并发任务生成摘要内容。
    summarize_paper
  5. 个性化重排序:结合用户的profile(如embedding向量)或预设规则,对结果进行重新排序,提升匹配精度;同时生成“personalized_recommend”推荐描述文本。
  6. 结果打包与输出:将最终结果封装后返回给前端或智能Agent。如有需要,可附带PDF文件路径作为资源链接,供后续下载或阅读使用。
  7. 异步任务支持(可选):针对需全文解析、生成长摘要或撰写笔记等耗时操作,可开启后台异步任务,完成后通过回调机制或消息推送通知用户。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群