
我用PHP写代码已经超过20年了。我看过它被宣布“已死”至少十几次。而每一次,它都继续支撑着越来越多的互联网。
所以当AI开始进入项目需求时,我没有转向Python。我没有购买某个工作流构建器的席位,也没有去上什么课程。我只是打开现有的代码库,写了一个服务,然后发起一个API调用。
就这样。这就是全部的解锁。你不需要花哨的GUI或复杂的系统。
Python主宰了AI领域。每个人都知道这一点。如果你正在训练模型、构建研究管道,或从事任何数据科学相关的工作,Python就是正确的工具。这点无需争辩。
但大多数团队没有问的是:你真的在训练模型吗?还是只是在调用API?
这两者是完全不同的问题。而如今大多数企业构建“AI功能”时做的都是后者。他们向Claude、GPT或Gemini发送提示,然后用响应做些有用的事。这就是一个REST调用。
REST调用是语言无关的。而PHP早在大多数AI初创公司出现之前,就已经在做REST调用了。
最适合工作的工具,通常就是已经在生产环境中运行的那个。
根据W3Techs的数据,PHP驱动了超过71%已知服务器端编程语言的网站。仅WordPress就占据了整个互联网的42%。再加上Laravel、Symfony、Magento、Craft CMS以及数千个自定义代码库,你就知道生产环境的Web软件实际在哪里了。
注:我还记得PHP刚出来的时候,那时我正淹没在Perl里,从那以后我就一直坚持用PHP!
对于CMS网站,我多年前从WordPress开始,后来有所迁移。但像AI Engine(超过80,000个活跃安装,完整MCP服务器支持,内置Claude和GPT集成)这样的插件,以及Automattic的AI Building Blocks计划推出的官方WordPress MCP Adapter,正在把WordPress变成一个真正的Agentic平台。很难忽视。
而生产环境的Web软件,正是AI Agent需要运行的地方。
AI行业不会告诉你的是:大多数“Agent”其实就是老派的服务。真的。去掉营销包装,一个典型的AI Agent就是一个接受输入、调用外部API、应用一些逻辑并返回输出的类。我们从2000年代早期就开始写这类东西了。
Agentic包装器在上面添加了规划、记忆和工具调用。这是真实的,也很重要。但底层模式对于任何在MVC框架中工作过的人来说并不陌生。
想想Agent在应用层实际做什么:它从数据库读取数据,调用外部API,处理表单提交,触发Webhook,队列任务,写回存储并返回响应。
PHP已经做了这些30年。你的认证系统已经在那里,你的数据库连接已经在那里,你的业务逻辑已经在那里。
那么,为什么要为你的PHP应用旁边启动一个Python微服务,在进程边界复制数据上下文,并引入一个全新的运行时来维护,就只是为了向LLM发一个HTTP请求呢?
其实,我知道原因。因为所有教程都展示Python。因为LangChain是Python的。因为AI讨论主要发生在被机器学习工程师主导的平台上,而他们很少接触日常的内容管理系统。
我见过团队用AWS Bedrock来总结一个支持工单。我见过n8n工作流用了14个节点来完成本质上就是一个带条件逻辑的API调用。Make.com是连接SaaS应用的无代码神器,但它不是在你已经掌控的生产PHP应用中嵌入AI功能的正确答案。
这些平台存在是有理由的。但它们解决的是不同的问题。当你没有后端团队、只想粘合第三方服务时,或者你在Node/React栈上、JS是主要语言时(不是我的世界,但它在那儿工作得很好),它们很有意义。
但当你是一个PHP开发者,能写出下面代码时,它们就不合适了:
$client = new \GuzzleHttp\Client();
$response = $client->post('https://api.anthropic.com/v1/messages', [
'headers' => [
'x-api-key' => $_ENV['ANTHROPIC_API_KEY'],
'anthropic-version' => '2023-06-01', // 必需的header,告诉API使用哪个响应模式
'content-type' => 'application/json',
],
'json' => [
'model' => 'claude-haiku-4-5-20251001',
'max_tokens' => 1024,
'messages' => [
['role' => 'user', 'content' => 'Your prompt here!']
],
],
]);
$data = json_decode($response->getBody(), true);
$reply = $data['content'][0]['text'];
当然,这只是一个API调用,不是Agent。但它也是一个可工作的Claude集成。没有平台。没有月费席位。没有新基础设施。用Composer、Guzzle、一个API密钥,你就上线了。
生产环境中还需要加上错误处理、速率限制感知和重试逻辑,但这在任何语言中都一样,而且都不需要新技术栈。
复杂度是需要赚取的。大多数基于Web的Agent用例并不值得引入那么多复杂度。
那么,API调用和真正的Agent有什么区别?API调用等待响应并返回它。Agent会决定下一步做什么、调用工具、检查自己的输出,并循环直到任务完成。上面的Guzzle片段是一个坚实的基础。
PHP为此做好准备,不仅仅是因为REST调用。语言本身已经显著进化了。
PHP 8.x引入了Fiber、类型化属性、命名参数、match表达式和枚举。Fiber支持单进程内的协作式调度,这很有用,但不是真正并发的替代方案。对于并行的Agent任务,通过Supervisor或Redis支持的队列Worker是实际的答案,而这个模式在PHP中已经非常成熟。
最重要的是,这一切都不需要改变你的技术栈。一个标准的LEMP设置就能轻松处理LLM API调用、队列Agent任务和Webhook驱动的工作流。这就是目前运行大多数生产PHP Web的同一栈,对于大多数Agentic用例来说已经绰绰有余。
如果你想更进一步,FrankenPHP和RoadRunner都提供了长生命周期Worker模式,能消除每个请求的启动开销,这对持久的Agent循环很重要。但这是一个优化,而不是前提。先构建Agent。如果工作负载需要,再优化运行时(很少需要)。
还有MCP。Anthropic的Model Context Protocol现在已被捐赠给Linux基金会,在Agentic AI Foundation下,由PHP Foundation维护的官方PHP SDK。它通过SSE或HTTP工作,能将你的PHP应用的工具原生暴露给任何支持MCP的AI客户端。这意味着PHP应用可以原生地向AI系统暴露工具,而不需要Python包装器或中间层。
那么,目前实际的PHP AI工具生态是什么样的?
Neuron AI 是PHP领域最成熟的专用Agent框架。由Inspector.dev团队构建,它提供了Agent基类、工具调用、RAG支持、多Agent编排和内置监控。它能在Laravel、Symfony、WordPress和轻量PHP框架上工作,而不会强制框架绑定。
以下是模式:一个带工具的Agent类。工具正是让它区别于普通API调用的地方——由Agent决定何时调用,而不是你的代码:
namespace App\Neuron;
use NeuronAI\Agent\Agent;
use NeuronAI\Agent\SystemPrompt;
use NeuronAI\Chat\Messages\UserMessage;
use NeuronAI\Providers\AIProviderInterface;
use NeuronAI\Providers\Anthropic\Anthropic;
use NeuronAI\Tools\PropertyType;
use NeuronAI\Tools\Tool;
use NeuronAI\Tools\ToolProperty;
class FitnessAgent extends Agent
{
protectedfunction provider(): AIProviderInterface
{
returnnew Anthropic(
key: $_ENV['ANTHROPIC_API_KEY'],
model: 'claude-haiku-4-5-20251001',
);
}
protectedfunction instructions(): string
{
return (string) new SystemPrompt(
background: ['You are a knowledgeable fitness assistant.'],
steps: ['Use available tools to look up workout plans before answering questions about them.'],
output: ['Give clear, practical guidance based on the workout data returned.']
);
}
protectedfunction tools(): array
{
return [
Tool::make('get_workout', 'Look up a workout plan by name or muscle group.')
->addProperty(
new ToolProperty(
name: 'workout_name',
type: PropertyType::STRING,
description: 'The name or muscle group of the workout to retrieve.',
required: true
)
)
->setCallable(function (string $workout_name) {
// Your existing workout DB or API call here
$pdo = new \PDO($_ENV['DB_DSN'], $_ENV['DB_USER'], $_ENV['DB_PASS']);
$stmt = $pdo->prepare("SELECT exercises, sets, reps FROM workouts WHERE name = ?");
$stmt->execute([$workout_name]);
$row = $stmt->fetch(\PDO::FETCH_ASSOC);
return $row ? json_encode($row) : 'Workout not found.';
}),
];
}
}
$reply = FitnessAgent::make()
->chat(new UserMessage('How many sets should I do for a beginner chest workout?'))
->getMessage()
->getContent();
echo $reply;
Agent接收问题,判断需要get_workout工具,用提取出的肌肉群或计划名称调用它,然后将结果融入响应中。完全不需要你手动连接逻辑。这就是从API包装器到Agent的转变。
除了Neuron,生态系统发展迅速。LLPhant提供了LangChain风格的方法。Prism作为Laravel项目的干净、提供者无关的接口正在获得关注。Symfony AI为Symfony生态带来了原生集成。
值得注意的是:这些都不需要重量级框架。Slim、Flight、F3、Phalcon和CodeIgniter等轻量PHP框架也能以最小开销干净地接入Agent服务。如果你的栈本来就很轻量,添加Agent层也不会改变这一点。
检索增强生成(RAG)听起来很吓人。其实不然。其核心就是四个步骤:切分内容、生成嵌入、检索最相关的块,并注入到提示中。
Qdrant、Pinecone和Weaviate等向量数据库都暴露HTTP API。PHP能调用HTTP API。所以这样就行:
$openAiClient = OpenAI::client($_ENV['OPENAI_API_KEY']);
$guzzle = new \GuzzleHttp\Client();
$userQuery = $_POST['question'] ?? '';
// 1. 通过OpenAI生成嵌入
$embedding = $openAiClient->embeddings()->create([
'model' => 'text-embedding-3-small',
'input' => $userQuery,
])->embeddings[0]->embedding;
// 2. 查询Qdrant获取最近邻
$results = $guzzle->post('http://qdrant:6333/collections/docs/points/search', [
'json' => [
'vector' => $embedding,
'limit' => 5,
'with_payload' => true,
],
]);
// 3. 将检索到的上下文注入提示
$hits = json_decode($results->getBody(), true)['result'];
$chunks = array_map(fn($hit) => $hit['payload']['text'], $hits);
$context = implode("\n\n", $chunks);
$prompt = "Answer using this context:\n\n{$context}\n\nQuestion: {$userQuery}";
不需要Python。不需要编排层。只需HTTP和一点管道代码。
我想明确一点:这篇文章不是在争论PHP应该取代Python在AI中的位置。这不是重点。
Python在模型训练、ML研究、数据科学管道、计算机视觉,以及任何涉及笔记本和数值计算的领域完胜。无可争议。该用Python就用Python。
但PHP的领地是生产Web层。而生产Web层正是大多数AI Agent实际会花费时间的地方:CRM、仪表盘、电商平台、CMS系统、管理面板和业务工作流工具中。
这一层已经是PHP的了。Agent也应该如此。
我为医疗、法律、制造和电商等领域的客户构建过生产系统。添加AI功能时反复出现的挑战不是能力,而是上下文。你的Agent需要访问已认证的用户会话、数据库模式、业务规则和缓存层。
把这一切转移到外部Python服务不仅仅是开销,还是技术债务隐患。
PHP让Agent留在应用内部它该在的地方。上下文已经在那里。认证已经在那里。你维护多年的部署管道已经在那里。
而且坦白说?大部分互联网也都在那里。
你不需要Bedrock,不需要n8n,不需要让团队学习新语言。你需要的只是一个API密钥、一个服务类,以及你已经在生产环境中运行多年的PHP代码库。