智能体的Hello World——构建第一个MCP

在这里插入图片描述大家好,欢迎阅读这份《智能体(AI+Agent)开发指南》!
在大模型和智能体快速发展的今天,很多朋友希望学习如何从零开始搭建一个属于自己的智能体。本教程的特点是 完全基于国产大模型与火山推理引擎实现,不用翻墙即可上手,非常适合国内开发者快速实践。
通过循序渐进的讲解,你将学会从 环境配置、基础构建、进阶功能到实际案例 的完整流程,逐步掌握智能体开发的核心技能。无论你是初学者还是有经验的工程师,相信这份教程都能为你带来启发。

一. MCP简介

Anthropic提出的Model Context Protocol(MCP) 是一种开放协议,它标准化了应用程序如何为大型语言模型 (LLM) 提供上下文。它如同一个专门为AI 应用设计的 USB-C 端口。让大模型非常轻易地调用外部工具。

二. MCP组成

在这里插入图片描述
MCP 架构的主要参与者是:
• MCP Host
协调和管理一个或多个 MCP 客户端的 AI 应用程序
• MCP Client
维护与 MCP 服务器的连接并从 MCP 服务器获取上下文供 MCP 主机使用的组件
• MCP Server
向 MCP 客户端提供上下文的程序

MCP 支持两种传输机制:
• Stdio transport
使用标准输入/输出流在同一台机器上的本地进程之间进行直接进程通信,提供最佳性能,没有网络开销。
• HTTP with Server-Sent Events(SSE) 或Streamable HTTP transport
将 HTTP POST 用于客户端到服务器消息,并使用可选的服务器发送事件来实现流式处理功能。

MCP 定义了server可以公开的三个核心基本操作:
• Tools
AI 应用程序可以调用action的可执行函数(例如,文件作、API 调用、数据库查询)
• Resources
向 AI 应用程序提供上下文信息的数据源(例如,文件内容、数据库记录、API 响应)
• Prompts
可重用的模板,有助于构建与语言模型的交互(例如,系统提示、少量示例)

三. 创建一个简单的 MCP server,功能是暴露出计算器工具和数据

参考:https://github.com/modelcontextprotocol/python-sdk

# hello_MCP.py

"""
FastMCP quickstart example.
"""

from mcp.server.fastmcp import FastMCP

# Create an MCP server
mcp = FastMCP("Demo")


# Add an addition tool
@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers"""
    return a + b


# Add a dynamic greeting resource
@mcp.resource("greeting://{name}")
def get_greeting(name: str) -> str:
    """Get a personalized greeting"""
    return f"Hello, {name}!"


# Add a prompt
@mcp.prompt()
def greet_user(name: str, style: str = "friendly") -> str:
    """Generate a greeting prompt"""
    styles = {
        "friendly": "Please write a warm, friendly greeting",
        "formal": "Please write a formal, professional greeting",
        "casual": "Please write a casual, relaxed greeting",
    }

    return f"{styles.get(style, styles['friendly'])} for someone named {name}."

if __name__ == "__main__":
    mcp.run(transport='stdio')

这里在本地使用 inspector 来测试,在终端中运行下面的代码,会自动打开一个浏览器:

npx -y @modelcontextprotocol/inspector python hello_MCP.py

1. 先链接server,点击 connect

在这里插入图片描述

2. 查看Resource功能

在这里插入图片描述

3. 查看Prompts功能

在这里插入图片描述

4. 查看Tools功能

在这里插入图片描述

四. 定义一个帮忙查询arxiv最新论文的MCP

1. 环境准备

# 通过输入查询的关键词,获取arxiv上最新的论文,例如这里搜索关键词为“GTP”
pip install "mcp[cli]"
pip install arxiv

2. 代码实现

# sse_arxiv_search.py
import httpx
import arxiv
import json
from mcp.server import FastMCP


app = FastMCP('arxiv-search', port=9000)


@app.tool()
async def arxiv_search(query: str) -> str:
    """
    {
      "name": "arxiv_search",
      "description": "根据需要搜索的关键词,返回arxiv上相关的最新论文",
      "inputSchema":
      {
          "type": "object",
          "properties":
          {
              "query":
              {
                  "description": "论文搜索关键词",
                  "type": "string"
              }
          },
          "required":
          [
              "query"
          ]
      },
    }
    """

    client = arxiv.Client()
    search = arxiv.Search(
        query=query,
        max_results=2,
        sort_by=arxiv.SortCriterion.SubmittedDate
    )
    search_results = []
    for result in client.results(search):  # 用新的调用方式
        single_result = {
                        'url': result.entry_id,
                        'title': result.title,
                        # 'summary': result.summary
                         }
        search_results.append(single_result)
    return json.dumps(search_results)

if __name__ == "__main__":
    app.run(transport='sse')

启动server

python sse_arxiv_search.py

client代码:

import asyncio
from mcp.client.sse import sse_client
from mcp import ClientSession
import json

async def main():
    async with sse_client('http://127.0.0.1:9000/sse') as streams:
        async with ClientSession(*streams) as session:
            await session.initialize()
            tools = await session.list_tools()
            print(tools)
            res = await session.call_tool('arxiv_search', {'query': 'GPT'})
            print(res)


if __name__ == '__main__':
    asyncio.run(main())

使用client调用,返回结果如下:
在这里插入图片描述

欢迎关注微信公众号:AIWorkshopLab,自动获取完整教程:智能体(AI+Agent)开发指南.pdf。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CV-deeplearning

请博主加个火腿

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值