如果您正在构建 AI 代理,您可能已经听说过 MCP(模型上下文协议)。实际上,现在每个人都在谈论 MCP。从我在网上读到的内容来看,似乎很多人对我们正在谈论的内容一无所知,以及与之相关的新产品开发机会。
为了更好地理解将 MCP 服务器直接与您的 Neuron AI 代理 连接的价值,我想分解几个概念,只是为了为您作为软件创建者奠定正确的基础,以解锁您下一个代理实现的新的想法。
作为工程师,我们喜欢的标准之一就是标准。而标准之所以重要,是因为它们允许我们作为工程师和开发者构建相互通信的系统。
想象一下 REST API。标准化过程来认证和使用第三方服务,这一想法多年来创造了巨大的创新浪潮。MCP 背后的想法是允许开发者实现一个标准协议,将他们的应用程序服务暴露给 LLM。
此时,我们必须记住,LLM 本身无法做任何事情。它们只是“令牌翻转器”。如果您打开任何 LLM 聊天并要求发送电子邮件,它将不知道如何做。
它只会告诉你“我不知道如何发送电子邮件,如果您愿意,我最终可以编写电子邮件内容”。在其核心,LLM 只能管理文本。

这些平台的下一个演变是当开发者想出如何将 LLM 的能力与使函数(或回调)可用于 LLM 的机制结合起来的时候。

以最近的聊天界面为例,您可以将网页 URL 粘贴到消息中,LLM 能够获取其内容来给出最终响应。
想象这个提示:“您能给我一些建议吗,如何改善这篇文章的 SEO 性能:https://exmaple.com/blog/article”
LLM 本身无法完成这项任务。但开发者所做的是构建一个文本协议,使 LLM 能够向执行 LLM 的程序请求一个负责提供网页内容的函数,以继续制定最终响应。
使用这种机制,开发者能够实现并向 LLM 提供各种函数(工具),以执行动作并使用不在其训练数据集中的信息来解决用户问题。
如果您不向 LLM 提供获取网页内容的工具,它们基本上无法完成这项任务。
您现在也可以向 LLM 提供函数来执行对数据库的查询,或从外部 API 获取信息,或您特定用例所需的任何其他任务。
当我们将工具连接到 LLM 时,LLM 开始变得更强大,因为我们可以将 LLM 的推理能力与对外部世界执行动作的能力结合。
这里的问题是,如果您需要构建一个执行多个任务的助手,这可能会非常令人沮丧。想象阅读您的电子邮件、在互联网上搜索、从您的数据库收集信息、连接到外部服务如 Google Drive 来阅读文档、GitHub 用于代码、知识库,以及任何其他类型的资源。
您可以想象代理的实现可能会变得非常繁琐。将所有这些工具堆叠在一起并使它们能够在 LLM 的上下文中连贯地工作也可能非常复杂。
另一个复杂性级别是,我们想要连接的每个服务都有自己的 API,具有不同的技术要求,并且每个想要与这些外部服务通信的开发者都必须从头实现它们。
一些公司可以做到,对于许多其他公司来说,这简直是不可能的。
这就是我们现在的处境。
MCP 是您的 LLM 和您想要连接的工具之间的一个层。

现在,公司可以实现一个 MCP 服务器,这基本上是一种新的方式来暴露他们的 API,但以一种 LLM 随时可用的方式。
想想 Stripe API。它们提供访问订阅、发票、交易等任何类型信息的特性。使用 Stripe MCP 服务器(由 Stripe 构建),您基本上可以将整个 Stripe API 暴露给您的 LLM,使其能够收集信息并回答关于您的财务状况的问题,或客户关于其订阅和发票的问题。代理甚至可以执行动作,如取消订阅或为客户激活一个新的订阅。
您只需安装 MCP 服务器,将您的代理连接到服务器暴露的资源(我们稍后将看到如何做),您就可以立即拥有一个具有强大技能的代理,而无需所有努力来实现 Stripe API 调用。而且,如果 Stripe 更改其 API,您也不再需要担心。即使是高度互连的系统,由多个相互依赖的步骤组成,也可以更容易地开发并更可靠。
使用简单的工具一次实现所有动作将无法克服某些复杂性级别。
让我们进入一个实际示例,说明如何托管一个 MCP 服务器供您的代理使用。
在其核心,MCP 需要三个组件来工作:一个主机、一个 MCP 服务器和一个 MCP 客户端。
不要被“服务器”这个词迷惑。在协议实现的这个阶段,MCP 服务器运行在您的代理的同一台机器上。它们通过标准输入/输出本地接口(stdio)通信。

可能在未来,可以远程托管 MCP 服务器,但现在它在同一台机器上工作。所以,您必须首先在开发期间在您的计算机上安装 MCP 服务器,如果您想在生产环境中部署实现,则在您的云机器上安装。
我将在另一篇专用文章中深入讨论 MCP 服务器安装,现在您可以在 MCP 服务器仓库中访问安装说明。
这里有一些网站,您可以在其中探索可用 MCP 服务器的列表:
在这个阶段,并非一切都是阳光和彩虹,还有一些技术事情需要配置。您必须设置服务器,配置一些文件,但一旦您弄清楚,您的代理就可以变得非常强大,能够自主完成任何类型的任务。
要开始在 PHP 中构建您的 AI 代理,请安装 Neuron AI 框架。我们将 Neuron 作为开源项目发布,以填补 PHP 与其他编程语言在 AI 开发之间的差距。Neuron 基本上使 PHP 开发者能够开发代理应用程序,而无需将他们的技能转向其他编程语言。
它为您提供一个完整的工具包,从单个代理到全功能 RAG 系统、向量存储、嵌入,以及广泛的可观察性特性。
有关更多信息,您可以查看文档:https://docs.neuron-ai.dev
您可以使用下面的命令通过 composer 安装 Neuron:
composer require inspector-apm/neuron-ai
创建您的自定义代理,扩展 NeuronAI\Agent 类:
use NeuronAI\Agent;
use NeuronAI\Providers\AIProviderInterface;
use NeuronAI\Providers\Anthropic\Anthropic;
class MyAgent extends Agent
{
publicfunction provider(): AIProviderInterface
{
// return an AI provider (Anthropic, OpenAI, Mistral, etc.)
returnnew Anthropic(
key: 'ANTHROPIC_API_KEY',
model: 'ANTHROPIC_MODEL',
);
}
publicfunction instructions()
{
return"LLM system instructions.";
}
}
现在,您需要将工具附加到代理,以便它可以在应用程序上下文中执行任务并解决您或您的用户发送的问题。如果您需要实现与您的特定环境相关的特定动作,您可以附加一个工具并创建自己的实现:
use NeuronAI\Agent;
use NeuronAI\Providers\AIProviderInterface;
use NeuronAI\Providers\Anthropic\Anthropic;
use NeuronAI\Tools\Tool;
use NeuronAI\Tools\ToolProperty;
class MyAgent extends Agent
{
publicfunction provider(): AIProviderInterface
{
// return an AI provider (Anthropic, OpenAI, Mistral, etc.)
returnnew Anthropic(
key: 'ANTHROPIC_API_KEY',
model: 'ANTHROPIC_MODEL',
);
}
publicfunction instructions()
{
return"LLM system instructions.";
}
publicfunction tools(): array
{
return [
Tool::make(
"get_article_content",
"Use the ID of the article to get its content."
)->addProperty(
new ToolProperty(
name: 'article_id',
type: 'integer',
description: 'The ID of the article you want to analyze.',
required: true
)
)->setCallable(function (string $article_id) {
// You should use your DB layer here...
$stm = $pdo->prepare("SELECT * FROM articles WHERE id=? LIMIT 1");
$stm->execute([$article_id]);
return json_encode(
$stmt->fetch(PDO::FETCH_ASSOC)
);
})
];
}
}
对于其他工具,您可以搜索现成的 MCP 服务器,并将暴露的工具附加到您的代理。Neuron 为您提供 McpConnector 组件,以自动从服务器收集可用工具并将它们附加到您的代理。
use NeuronAI\Agent;
use NeuronAI\Providers\AIProviderInterface;
use NeuronAI\Providers\Anthropic\Anthropic;
use NeuronAI\Tools\Tool;
use NeuronAI\Tools\ToolProperty;
class MyAgent extends Agent
{
publicfunction provider(): AIProviderInterface
{
// return an AI provider (Anthropic, OpenAI, Mistral, etc.)
returnnew Anthropic(
key: 'ANTHROPIC_API_KEY',
model: 'ANTHROPIC_MODEL',
);
}
publicfunction instructions()
{
return"LLM system instructions.";
}
publicfunction tools(): array
{
return [
// Load tools from an MCP server
...McpConnector::make([
'command' => 'npx',
'args' => ['-y', '@modelcontextprotocol/server-everything'],
])->tools(),
// Your custom tools
Tool::make(
"get_article_content",
"Use the ID of the article to get its content."
)->addProperty(
new ToolProperty(
name: 'article_id',
type: 'integer',
description: 'The ID of the article you want to analyze.',
required: true
)
)->setCallable(function (string $article_id) {
// You should use your DB layer here...
$stm = $pdo->prepare("SELECT * FROM articles WHERE id=? LIMIT 1");
$stm->execute([$article_id]);
return json_encode(
$stmt->fetch(PDO::FETCH_ASSOC)
);
})
];
}
}
Neuron 会自动发现服务器暴露的工具并将它们连接到您的代理。
当代理决定运行一个工具时,Neuron 将生成适当的请求来调用 MCP 服务器上的工具,并将结果返回给 LLM 以继续任务。这感觉就像使用您自己定义的工具一样,但您只需一行代码即可访问代理可以执行的庞大预定义动作档案。
对我来说,很明显 MCP 是一个大事,因为现在代理可以以如此少的开发努力来完成令人难以置信的数量的任务。
随着所有这些工具的可用,产品开发机会也将呈指数级增长。我迫不及待地想看到您将要构建什么。
在我们的社交渠道上告诉我们您的下一个项目是什么,我们将创建一个包含所有基于 Neuron AI 的产品的目录,以帮助您获得您的业务应得的可见度。
实现检索增强生成 (RAG) 通常是 PHP 开发者在超越简单聊天脚本时遇到的第一个“障碍”。虽然“让 LLM 访问您自己的数据”的概念很简单,但在 PHP 环境中可靠地使其工作的所需任务可能令人沮丧。您必须管理文档解析、向量嵌入,