《AI Agent智能体与MCP开发实战》之构建个性化的arXiv科研论文MCP服务实战

本文是参考《AI Agent智能体与MCP开发实战》的第13章内容学习

目标:构建一个基于 MCP(Model Context Protocol) 的个性化 arXiv 论文服务,使智能体能够像专业科研助手一样完成检索、摘要、筛选、个性化推荐

一、背景与定位(为什么用 MCP?)

MCP(Model Context Protocol) 是一个把外部能力(API、文件、提示模板等)以标准化资源/工具暴露给智能体的协议。MCP 提供三类能力:

能力 描述
Tools 类似 function calling,用于提供 API 级能力,如查询论文、下载 PDF
Resources 文件/数据库等可读取的内容,如缓存论文列表
Prompts 可复用模板,为 Agent 提供结构化提示

为什么适合 arXiv 服务?

  • arXiv 操作(检索、拉元数据、拿 PDF、摘要)天然可抽象为 Tools。

  • 用户偏好、历史与缓存适合用 Resources 持久化。

  • 推荐 / 生成文本有稳定模板,适合用 Prompts 标准化。

  • 多 Agent 场景(检索 agent、摘要 agent、推荐 agent)天然受益于 MCP 的工具共享与权限控制。

对 arXiv 论文服务来说:

  • Query / Fetch / Summaries 都能抽象成 MCP Tool

  • PDF、元数据可以作为 Resource

  • 用户研究方向可写入 Prompt,让智能体自动使用

MCP 的优势:

✔ 与任何 LLM 兼容

✔ 易标准化,多 Agent 可共享工具

✔ 自动参数填充,非常适合 arXiv 这种结构化 API

二、 arXiv 论文 MCP 服务整体架构

架构如下:

复制代码
┌───────────────────────────┐
│          AI Agent         │
│  (LLM,具备 MCP 客户端能力) │
└───────────────┬───────────┘
                │ MCP
                ▼
┌───────────────────────────┐
│      arXiv MCP Server     │
├───────────────────────────┤
│ Tools:                    │
│  - search_papers          │
│  - fetch_metadata         │
│  - download_pdf           │
│  - summarize_paper        │
│ Resources:                │
│  - cached_papers.json     │
│ Prompts:                  │
│  - personalized_recommend │
└───────────────────────────┘
                │
                ▼
         arXiv API / arXiv export

三、关键设计点与改进建议

  1. 查询语言兼容:arXiv 原生以英文为主,中文查询需先翻译或做意图映射(使用专门的翻译模型或 Prompt-based 转换)。

  2. 结果重排(Reranking)与个性化:在检索后用用户 profile/embedding 做相似度 rerank 或用 LLM 生成个性化理由。

  3. PDF 处理:下载后做 OCR / 文本抽取(pdftotext、pdfminer、langchain/pdf-loader)。

  4. 缓存与去重:缓存元数据与 PDF,避免重复下载并节约配额。

  5. 异步/批处理:大量检索或长文摘要应异步化,返回任务 ID 并提供进度(但注意 MCP 中对 Agent 的交互方式)。

  6. 权限与配额控制:避免爬虫式请求,遵守 arXiv 的 rate limit。

  7. 可扩展性:把摘要/embedding/向量索引(如 FAISS、Weaviate)做为 Resource 暴露给多个 Agent。

四、工具定义与示例实现

4.1 MCP Server

可以通过pip命令安装arxiv-mcp-server库

4.2 论文搜索 search_papers

python 复制代码
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)

上面这段代码调用的arxiv官方API实现学术论文检索功能,定义搜索关键词为"position emmbedding in attention"并限定返回三项最新成果。再利用arvix.Client创建客户端后配置按提交日期倒序排序。使用中文进行查询时,就不会获得相应的结果

4.3 使用大模型实现辅助工具函数设置

从4.2的实践中可以得出,使用arxiv MCP服务的工具函数调用,当我们使用英文进行查询时,可以较好的完成查询并获取指定数量的返回内容,当使用中文进行查询时返回空值结果。可以采用QWen3在线模型作为翻译模型并通过Prompt的形式完成文本内容的转义。

4.4 设计个性化的科研论文查询函数设计

FASTAPI接口:可以便捷的将评分逻辑封装为RESTful风格。如可以定义一个POST请求接口,接收客户端发送的待评分数据,调用内部模型或函数进行计算后,返回结构化的结果。

下面给出一个精炼的 FastAPI 应用示例,便于将 MCP 服务对外暴露为 HTTP API(也可作为 MCP Server 的内部实现工具)。

python 复制代码
# 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}

说明与改进点

  1. contains_chinese() 为辅助函数判断是否含中文。

  2. 摘要调用使用线程池/异步避免阻塞主事件循环。

  3. 生产中应加入缓存(Redis)、限流、鉴权、错误重试与日志。

4.5 基于FLOW过程的科研论文查询

  1. 接收请求(Client):用户发起查询,包含 query、偏好(领域、期望年份、作者、关键词)等。

  2. 预处理:判断语言 -> 必要时翻译 -> 语义扩展(同义词扩展)。

  3. 检索 :调用 search_papers 获得候选集(N 条)。

  4. 后处理 :去重、按发布日期/相关度初筛、并发摘要生成(summarize_paper)。

  5. 个性化重排序:使用用户 profile(embedding)或规则进行 rerank,并生成 personalized_recommend 文本。

  6. 打包输出:返回给前端或 Agent,必要时把 PDF 路径作为 Resource 提供以便后续下载/阅读。

  7. 异步任务(可选):若用户需要全文解析、长摘要或笔记,开后台任务并通过回调/推送告知完成。

相关推荐
羊仔AI探索1 小时前
GLM-4.6接入Claude Code插件,国内丝滑编程
ide·人工智能·ai·aigc·ai编程
Bdygsl1 小时前
数字图像处理总结 Day 1
人工智能·算法·计算机视觉
墨染星辰云水间1 小时前
机器学习(一)
人工智能·机器学习
张彦峰ZYF1 小时前
Coze文章仿写:智能体 + 工作流实现内容自动生成与插图输出
人工智能·ai·coze dify
AI视觉网奇1 小时前
手部检测 yolov5 实战笔记
python·深度学习·计算机视觉
Jerry.张蒙1 小时前
SAP传输请求流程:从开发到生产的安全流转
大数据·网络·人工智能·学习·职场和发展·区块链·运维开发
Lethehong1 小时前
openGauss在教育领域的AI实践:基于Java JDBC的学生成绩预测系统
java·开发语言·人工智能·sql·rag
山科智能信息处理实验室1 小时前
PCDreamer:基于多视角扩散先验的点云补全
人工智能
LDG_AGI1 小时前
【推荐系统】深度学习训练框架(六):PyTorch DDP(DistributedDataParallel)数据并行分布式深度学习原理
人工智能·pytorch·分布式·python·深度学习·算法·spark