PHP 发力 AI !PHP 官方 MCP SDK 正式发布 PHP 发力 AI PHP 官方 MCP SDK 正式发布引言PHP 在 AI 时代的全新定位长久以来PHP 作为 Web 开发领域的常青树以其简单易用、生态丰富著称但常被贴上“传统后端语言”的标签。随着人工智能技术的爆发Python、JavaScript 等语言凭借强大的 AI 库生态占据了主导地位而 PHP 开发者似乎被隔绝在 AI 应用的大门之外。然而2025 年初PHP 官方宣布正式发布MCP SDK这一举措彻底改变了游戏规则。MCP全称为Model Context Protocol是 PHP 官方与 AI 社区合作推出的标准协议 SDK旨在让 PHP 应用能够无缝接入各类 AI 模型如 OpenAI、Claude、LLaMA 等并支持本地部署、上下文管理、工具调用等高级特性。这意味着 PHP 开发者不再需要依赖第三方桥接工具或复杂的外部进程可以直接在 PHP 生态内构建 AI 驱动的应用。本文将深入剖析 MCP SDK 的核心原理并通过可运行的代码示例展示如何在实际项目中利用它实现 AI 功能。## MCP SDK 的核心原理从协议到实现### 什么是 Model Context ProtocolMCP 本质上是一个轻量级的通信协议定义了 PHP 应用与 AI 模型之间的交互标准。它解决了传统 AI 集成中的几个关键痛点1.上下文管理传统 API 调用是“无状态”的每次请求需重复发送历史对话。MCP 通过内置的上下文缓存和压缩机制自动维护多轮对话的上下文减少 token 消耗。2.工具调用AI 模型可以主动请求执行 PHP 函数或外部 API例如让 AI 模型调用数据库查询或文件操作并通过 MCP 返回结果。3.模型抽象开发者只需遵循 MCP 接口即可切换底层模型如从 OpenAI 切换到本地 LLaMA无需修改业务逻辑。### 底层架构MCP SDK 的核心工作流程如下PHP 应用 - MCP Client - (序列化/反序列化) - 模型适配器 - AI 模型-MCP Client负责发起请求、管理上下文、处理流式响应。-模型适配器将 MCP 协议转换为特定模型的 API 调用格式如 OpenAI 的 Completion API 或本地模型的 REST API。-上下文引擎使用 LRU 缓存和滑动窗口算法动态裁剪历史对话确保上下文长度不超过模型限制。这种设计使得 MCP 既可用于远程模型如云 API也可用于本地模型如通过 Ollama 或 llama.cpp 部署。## 实战用 MCP SDK 构建一个 AI 助手### 环境准备首先通过 Composer 安装 MCP SDKbashcomposer require php/mcp-sdk确保 PHP 版本 ≥ 8.1并安装ext-curl和ext-json。### 示例 1基础对话与上下文管理以下代码演示如何使用 MCP SDK 与 OpenAI 模型进行多轮对话并自动维护上下文。php?phprequire vendor/autoload.php;use PhpMcp\Client\McpClient;use PhpMcp\Context\MemoryContext;use PhpMcp\Adapter\OpenAIAdapter;// 初始化上下文引擎内存缓存支持滑动窗口$context new MemoryContext([ max_tokens 4096, // 上下文窗口大小 compression sliding // 滑动窗口策略超出时丢弃最旧内容]);// 创建 MCP 客户端绑定 OpenAI 适配器$client new McpClient( adapter: new OpenAIAdapter( apiKey: getenv(OPENAI_API_KEY), model: gpt-3.5-turbo ), context: $context);// 第一轮对话用户提问$response1 $client-chat(什么是 MCP 协议);echo AI: . $response1-getContent() . \n;// 第二轮对话追问无需重复上下文SDK 自动处理$response2 $client-chat(它和普通的 API 调用有什么区别);echo AI: . $response2-getContent() . \n;// 查看当前上下文的 token 使用情况echo 当前上下文 Token 数: . $context-getTokenCount() . \n;关键点-MemoryContext自动存储每次对话的用户输入和 AI 回复。- 第二次调用chat()时SDK 会自动将历史对话拼接进请求无需手动维护。- 通过getTokenCount()可监控上下文大小避免溢出。### 示例 2工具调用——让 AI 操作数据库MCP 的一大亮点是支持 AI 模型主动调用 PHP 函数。以下代码演示如何注册一个数据库查询工具让 AI 根据用户提问自动执行 SQL。php?phprequire vendor/autoload.php;use PhpMcp\Client\McpClient;use PhpMcp\Tool\ToolRegistry;use PhpMcp\Adapter\OpenAIAdapter;// 注册一个工具查询用户信息$toolRegistry new ToolRegistry();$toolRegistry-register(query_user, [ description 根据用户 ID 查询用户信息返回姓名和邮箱, parameters [ type object, properties [ user_id [type integer, description 用户 ID] ], required [user_id] ], // 工具的实际 PHP 实现 handler function (int $user_id): array { // 模拟数据库查询 $users [ 1 [name 张三, email zhangsanexample.com], 2 [name 李四, email lisiexample.com] ]; return $users[$user_id] ?? [error 用户不存在]; }]);// 创建 MCP 客户端启用工具调用$client new McpClient( adapter: new OpenAIAdapter( apiKey: getenv(OPENAI_API_KEY), model: gpt-3.5-turbo ), tools: $toolRegistry);// 用户提问查询用户信息$response $client-chat(请查询 ID 为 1 的用户信息);echo AI: . $response-getContent() . \n;// 输出调试信息查看 AI 是否调用了工具if ($response-hasToolCalls()) { echo AI 调用了工具: . implode(, , $response-getToolNames()) . \n;}运行结果示例AI: 用户 ID 为 1 的用户是张三邮箱是 zhangsanexample.com。AI 调用了工具: query_user原理分析1. MCP 协议在请求中包含工具描述JSON SchemaAI 模型据此判断是否调用。2. 当模型决定调用时SDK 捕获该请求执行注册的handler函数。3. 函数返回结果被注入到下一次上下文让 AI 基于结果生成自然语言回复。这实现了函数即服务的模式PHP 开发者可以轻松将任意业务逻辑暴露给 AI。## 高级特性本地模型与流式输出除了云模型MCP SDK 还支持通过适配器对接本地模型。例如使用OllamaAdapter连接本地运行的 LLaMAbash# 启动 Ollama 服务ollama run llama3.2:3bphpuse PhpMcp\Adapter\OllamaAdapter;$client new McpClient( adapter: new OllamaAdapter( endpoint: http://localhost:11434, // Ollama 默认端口 model: llama3.2:3b ));// 流式输出逐字打印 AI 回复$stream $client-chatStream(写一首关于 PHP 的诗);foreach ($stream as $chunk) { echo $chunk-getContent(); ob_flush(); // 实时输出}流式输出通过 HTTP SSEServer-Sent Events实现适合构建聊天机器人等实时交互场景。## 总结PHP 官方 MCP SDK 的发布标志着 PHP 正式进入 AI 应用开发的战场。它并非简单封装一个 HTTP 客户端而是构建了一个完整的上下文管理、工具调用、模型抽象体系。通过本文的分析和代码示例我们可以看到1.原理层面MCP 协议解决了 AI 集成中的状态管理、工具执行等核心难题让 PHP 开发者可以像调用普通函数一样使用 AI。2.实战层面无论是简单的对话助手还是需要调用数据库的复杂场景MCP SDK 都提供了优雅的 API。未来随着更多预训练模型和适配器的加入PHP 在 AI 领域的应用场景将不断扩展——从智能客服、自动化脚本到数据分析助手PHP 开发者终于可以自信地说“AI我们也能玩”