PHP构建多智能体系统:从原理到工程实践
30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度最近在技术社区里总能看到一种论调“PHP那不是用来写网站的古老语言吗搞AI、搞智能体还得是Python。” 作为一个在PHP生态里摸爬滚打了多年的开发者每次看到这种言论我都想反问一句评判一门语言的价值究竟是看它表面的“潮流”标签还是看它实际解决问题的能力今天这篇文章我想用一次真实的项目实践来回应这个偏见。我刚刚用纯PHP从零构建了一个功能完整的多智能体系统。这个系统不仅能处理复杂的任务分解、智能体间协作还能接入大语言模型进行推理。更重要的是整个开发过程让我深刻体会到PHP在快速构建高并发、可维护的后端服务上其工程化优势被严重低估了。如果你对以下问题感兴趣那么这篇文章就是为你写的好奇者PHP到底能不能做“时髦”的AI应用技术栈怎么搭实践者想了解多智能体系统的核心概念和实现原理不局限于Python。效率追求者厌倦了配置复杂的Python环境想寻找更轻量、部署更快的方案。PHP开发者想拓宽技术视野为你的PHP技能栈增加一些“硬核”案例。本文将不仅仅是一个“炫技”展示我会带你完整走通从多智能体的核心思想拆解到用PHP实现任务调度、智能体通信、工具调用的每一个技术细节最后给出一个可运行、可扩展的代码框架。你会发现语言只是工具解决问题的架构思维才是关键。1. 多智能体系统它到底解决了什么问题在深入代码之前我们必须先搞清楚多智能体系统Multi-Agent System, MAS为什么值得关注。它不是一个凭空捏造的概念而是为了解决单一大模型或单一智能体的固有局限性。核心痛点一个全能但“慢思考”的专家 vs. 一群分工明确、快速协作的团队。 想象一下你让ChatGPT帮你规划一次旅行。它需要一次性完成查询目的地天气、对比航班价格、推荐当地美食、安排每日行程。虽然它能给出答案但过程如同让一位专家同时处理多个领域的细节容易出错、思考链路长、且难以调用实时工具如最新的机票API。多智能体的解决思路将复杂的宏观任务分解成多个清晰的子任务交给不同的“智能体”专家去执行。旅行规划师负责拆解任务生成“查询天气”、“查找航班”等子目标。数据收集员专门调用外部API获取实时信息天气、票价。文案撰写员将收集到的信息整理成优美的旅行计划。这些智能体各司其职通过一套通信和协作机制如共享工作区、消息队列共同完成任务。这带来的优势是模块化与可维护性每个智能体功能单一易于开发、测试和替换。并发与效率可以并行执行多个子任务如同时查天气和查航班。专业化可以为特定任务如SQL查询、代码生成定制高度优化的智能体。容错性一个智能体失败可能不影响整体任务调度器可以尝试其他方案。所以当我们用PHP实现这样一个系统时我们本质上是在构建一个基于消息驱动的、可编排的异步服务集群。PHP的强项——快速的Web开发、丰富的异步生态Swoole, ReactPHP、以及成熟的队列和进程管理工具恰恰能在这里发挥巨大作用。2. 核心概念与我们的PHP实现架构理解以下几个关键概念是看懂后续代码的基础智能体系统中能够自主感知环境、做出决策并执行动作的实体。在我们的PHP实现中一个智能体就是一个独立的PHP类它封装了特定的能力如调用API、处理数据、生成文本。工作区智能体之间共享的上下文环境。所有智能体都能读取和写入信息到这里。我们用一个共享的数组或Redis来实现。任务需要被完成的具体目标例如“生成一份报告”。任务会被分解成多个步骤。调度器系统的大脑负责接收初始任务将其分解为步骤并根据步骤类型分配给合适的智能体执行。我们用一个调度器类来封装这个逻辑。工具智能体与外部世界交互的手段比如调用一个HTTP API、执行一个Shell命令、查询数据库。每个工具对应一个可调用的函数或方法。基于这些概念我们设计出以下系统架构图文字描述[用户请求] - [调度器] - [任务分解] - [任务队列] | [智能体A] -工具调用- [外部API] [智能体B] -工具调用- [数据库] [智能体C] (纯推理) | [任务队列] -结果写入- [共享工作区] - [调度器] - [结果聚合] - [最终输出]这个架构完全是事件驱动和异步的非常适合用PHP的常驻内存协程框架如Swoole来实现以获得极高的并发性能。3. 环境准备与核心依赖我们的演示将基于PHP 8.2和Swoole 4.8扩展采用纯PHP实现不依赖特定框架但会使用Composer管理一些辅助包。基础环境要求PHP 8.2 或更高版本ComposerSwoole 扩展 (用于异步和协程支持)Redis 扩展 (可选用于分布式工作区)项目初始化与依赖安装# 1. 创建项目目录 mkdir php-multi-agent-system cd php-multi-agent-system # 2. 初始化Composer composer init --nameyour-vendor/php-mas --typeproject --no-interaction # 3. 安装核心依赖 # guzzlehttp/guzzle: 用于智能体调用外部HTTP API工具 # monolog/monolog: 用于系统日志记录 # predis/predis: 如果使用Redis作为工作区后端 composer require guzzlehttp/guzzle monolog/monolog predis/predis验证Swoole扩展创建一个简单的测试文件test_swoole.php?php // test_swoole.php if (extension_loaded(swoole)) { echo Swoole extension is loaded. Version: . swoole_version() . PHP_EOL; // 测试协程环境 Co\run(function () { echo Coroutine environment is working.\n; }); } else { echo Swoole extension is NOT loaded. Please install it.\n; exit(1); }运行php test_swoole.php确认输出正常。4. 项目结构设计与核心类实现我们先规划一个清晰的项目结构这有助于理解各个模块的职责php-multi-agent-system/ ├── composer.json ├── src/ │ ├── Agent/ # 智能体基类与具体智能体 │ │ ├── BaseAgent.php │ │ ├── PlannerAgent.php │ │ ├── ResearcherAgent.php │ │ └── WriterAgent.php │ ├── Core/ │ │ ├── Scheduler.php # 任务调度器 │ │ ├── Workspace.php # 共享工作区抽象 │ │ └── MemoryWorkspace.php # 基于内存的实现 │ ├── Tool/ # 工具定义 │ │ ├── BaseTool.php │ │ ├── WebSearchTool.php │ │ └── CalculatorTool.php │ └── Task/ # 任务与步骤定义 │ ├── Task.php │ └── Step.php ├── bootstrap.php # 应用启动与依赖注入 └── run.php # 主入口脚本接下来我们实现最核心的几个类。4.1 共享工作区 (Workspace)工作区是所有智能体交换信息的“黑板”。我们先实现一个简单的内存版本。?php // src/Core/MemoryWorkspace.php namespace App\Core; class MemoryWorkspace implements WorkspaceInterface { private array $storage []; private array $subscribers []; // 简单的事件订阅后续可扩展为消息队列 public function set(string $key, $value): void { $this-storage[$key] $value; $this-notify($key, $value); } public function get(string $key, $default null) { return $this-storage[$key] ?? $default; } public function append(string $key, string $content): void { if (!isset($this-storage[$key])) { $this-storage[$key] []; } $this-storage[$key][] $content; $this-notify($key, $this-storage[$key]); } public function subscribe(string $event, callable $callback): void { $this-subscribers[$event][] $callback; } private function notify(string $event, $data): void { foreach (($this-subscribers[$event] ?? []) as $callback) { $callback($data); } } }4.2 智能体基类 (BaseAgent)所有具体智能体的父类定义了智能体的生命周期和与工作区交互的标准接口。?php // src/Agent/BaseAgent.php namespace App\Agent; use App\Core\WorkspaceInterface; use App\Tool\BaseTool; use Psr\Log\LoggerInterface; abstract class BaseAgent { protected string $name; protected string $role; protected string $goal; protected WorkspaceInterface $workspace; protected LoggerInterface $logger; /** var BaseTool[] */ protected array $tools []; public function __construct(string $name, string $role, string $goal, WorkspaceInterface $workspace, LoggerInterface $logger) { $this-name $name; $this-role $role; $this-goal $goal; $this-workspace $workspace; $this-logger $logger; } public function getName(): string { return $this-name; } public function addTool(BaseTool $tool): void { $this-tools[$tool-getName()] $tool; } // 核心方法执行一步任务。子类必须实现。 abstract public function executeStep(array $stepData): array; // 工具调用统一入口 protected function useTool(string $toolName, array $parameters): array { if (!isset($this-tools[$toolName])) { $this-logger-error(Agent {$this-name} tried to use unknown tool: {$toolName}); return [success false, error Tool {$toolName} not found.]; } $this-logger-info(Agent {$this-name} using tool {$toolName}, $parameters); try { $result $this-tools[$toolName]-execute($parameters); return [success true, data $result]; } catch (\Exception $e) { $this-logger-error(Tool {$toolName} execution failed, [error $e-getMessage()]); return [success false, error $e-getMessage()]; } } }4.3 具体智能体示例研究员 (ResearcherAgent)这个智能体负责调用网络搜索工具获取信息。?php // src/Agent/ResearcherAgent.php namespace App\Agent; use App\Core\WorkspaceInterface; use Psr\Log\LoggerInterface; class ResearcherAgent extends BaseAgent { public function __construct(WorkspaceInterface $workspace, LoggerInterface $logger) { parent::__construct( name: Researcher, role: 信息研究员, goal: 通过工具获取可靠的外部信息并整理成报告。, workspace: $workspace, logger: $logger ); } public function executeStep(array $stepData): array { $query $stepData[query] ?? ; $toolToUse $stepData[tool] ?? web_search; $this-logger-info(ResearcherAgent starting step, [step $stepData]); if (empty($query)) { return [success false, error Research query is empty.]; } // 调用工具执行搜索 $toolResult $this-useTool($toolToUse, [query $query]); if (!$toolResult[success]) { return $toolResult; // 传递错误 } $researchData $toolResult[data]; // 将结果写入工作区供其他智能体使用 $reportKey research_report_ . md5($query); $this-workspace-set($reportKey, [ query $query, findings $researchData, summarized_by $this-name, timestamp time() ]); return [ success true, agent $this-name, output Research completed for {$query}. Report saved to workspace key: {$reportKey}, workspace_key $reportKey ]; } }4.4 工具基类与网络搜索工具工具是智能体能力的延伸。这里实现一个模拟的网络搜索工具实际项目中可替换为Serper、Google Search等真实API。?php // src/Tool/WebSearchTool.php namespace App\Tool; use GuzzleHttp\Client; use GuzzleHttp\Exception\GuzzleException; class WebSearchTool extends BaseTool { private Client $httpClient; private string $apiKey; // 模拟实际需要配置 public function __construct() { parent::__construct(web_search, 执行网络搜索返回摘要结果。); $this-httpClient new Client([timeout 10]); $this-apiKey demo_key; // 应从环境变量读取 } public function execute(array $parameters): array { $query $parameters[query] ?? ; if (empty($query)) { throw new \InvalidArgumentException(Search query cannot be empty.); } // 注意这里是模拟调用。在生产环境中你需要替换为真实的搜索API端点。 // 例如Serper API, Google Custom Search JSON API等。 $mockResults [ [title 关于 {$query} 的权威解释, snippet 这是一个关于{$query}的模拟摘要信息A。, link #], [title {$query} 的最新发展, snippet 这是关于{$query}发展趋势的模拟信息B。, link #], [title 深入理解 {$query}, snippet 模拟的深度分析内容C解释了{$query}的核心原理。, link #], ]; // 模拟网络延迟 usleep(200000); // 0.2秒 return [ query $query, results $mockResults, summary 根据网络信息{$query}主要涉及以上几个方面。, source mock_search_service ]; } }4.5 大脑任务调度器 (Scheduler)调度器是系统的协调中心负责任务分解、智能体分配和步骤执行循环。?php // src/Core/Scheduler.php namespace App\Core; use App\Agent\BaseAgent; use App\Task\Task; use Psr\Log\LoggerInterface; class Scheduler { private WorkspaceInterface $workspace; private LoggerInterface $logger; /** var BaseAgent[] */ private array $agents []; public function __construct(WorkspaceInterface $workspace, LoggerInterface $logger) { $this-workspace $workspace; $this-logger $logger; } public function registerAgent(BaseAgent $agent): void { $this-agents[$agent-getName()] $agent; $this-logger-info(Agent registered: {$agent-getName()}); } public function processTask(Task $task): array { $this-logger-notice(Starting to process task: {$task-getId()}, [description $task-getDescription()]); $this-workspace-set(task:{$task-getId()}:status, running); $finalResult []; $steps $task-getSteps(); foreach ($steps as $stepIndex $step) { $this-logger-info(Processing step {$stepIndex}: {$step-getInstruction()}); // 根据步骤类型选择智能体 (这里用简单映射可扩展为更复杂的路由逻辑) $assignedAgentName $step-getAssignedAgent(); if (!isset($this-agents[$assignedAgentName])) { $error No agent found with name: {$assignedAgentName} for step {$stepIndex}; $this-logger-error($error); $this-workspace-set(task:{$task-getId()}:status, failed); return [success false, error $error, failed_step $stepIndex]; } $agent $this-agents[$assignedAgentName]; $stepResult $agent-executeStep($step-getData()); // 记录步骤结果到工作区 $stepKey task:{$task-getId()}:step:{$stepIndex}; $this-workspace-set($stepKey, $stepResult); if (!$stepResult[success]) { $this-logger-error(Step {$stepIndex} failed, $stepResult); $this-workspace-set(task:{$task-getId()}:status, failed); // 可以在这里实现重试逻辑或故障转移 return [success false, error $stepResult[error] ?? Unknown agent error, failed_step $stepIndex, details $stepResult]; } $finalResult[] $stepResult; $this-logger-info(Step {$stepIndex} completed successfully by {$agent-getName()}); } $this-workspace-set(task:{$task-getId()}:status, completed); $this-workspace-set(task:{$task-getId()}:result, $finalResult); $this-logger-notice(Task {$task-getId()} completed successfully.); return [success true, task_id $task-getId(), results $finalResult]; } }5. 组装与运行一个完整的任务示例现在我们把所有部件组装起来并执行一个模拟任务“研究PHP多智能体系统的发展并生成一份简要报告”。创建主入口文件run.php?php // run.php require __DIR__ . /vendor/autoload.php; use App\Core\MemoryWorkspace; use App\Core\Scheduler; use App\Agent\ResearcherAgent; use App\Agent\WriterAgent; use App\Tool\WebSearchTool; use App\Task\Task; use App\Task\Step; use Monolog\Logger; use Monolog\Handler\StreamHandler; // 1. 初始化基础组件 $logger new Logger(mas); $logger-pushHandler(new StreamHandler(php://stdout, Logger::DEBUG)); $workspace new MemoryWorkspace(); $scheduler new Scheduler($workspace, $logger); // 2. 创建并注册智能体 $researcher new ResearcherAgent($workspace, $logger); $writer new WriterAgent($workspace, $logger); // 3. 为智能体装配工具 $searchTool new WebSearchTool(); $researcher-addTool($searchTool); // WriterAgent 可能不需要外部工具或者需要文本处理工具 $scheduler-registerAgent($researcher); $scheduler-registerAgent($writer); // 4. 定义任务 $task new Task(task_001, 研究PHP多智能体系统并生成报告); $task-addStep(new Step(0, 搜索并收集关于PHP多智能体系统的近期资料。, [query PHP multi-agent system development 2024, tool web_search], Researcher)); $task-addStep(new Step(1, 根据收集到的信息撰写一份不超过500字的简要报告说明其优势、挑战和典型用例。, [], Writer)); // 5. 执行任务 $logger-info( Starting Multi-Agent System Demo ); $finalResult $scheduler-processTask($task); // 6. 输出结果 echo \n\n TASK EXECUTION RESULT \n; echo json_encode($finalResult, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE); echo \n\n WORKSPACE SNAPSHOT \n; // 简单打印工作区内容实际项目会更复杂 echo Task Status: . $workspace-get(task:task_001:status, unknown) . PHP_EOL; $reportKey $finalResult[results][0][workspace_key] ?? null; if ($reportKey) { $report $workspace-get($reportKey); if ($report) { echo Research Report Found:\n; print_r($report); } }6. 运行结果与效果验证在项目根目录下执行命令php run.php预期输出示例[2024-05-XXTXX:XX:XX.XXXXXX] mas.INFO: Starting Multi-Agent System Demo [2024-05-XXTXX:XX:XX.XXXXXX] mas.NOTICE: Starting to process task: task_001 [2024-05-XXTXX:XX:XX.XXXXXX] mas.INFO: Agent registered: Researcher [2024-05-XXTXX:XX:XX.XXXXXX] mas.INFO: Agent registered: Writer [2024-05-XXTXX:XX:XX.XXXXXX] mas.INFO: Processing step 0: 搜索并收集关于PHP多智能体系统的近期资料。 [2024-05-XXTXX:XX:XX.XXXXXX] mas.INFO: ResearcherAgent starting step [2024-05-XXTXX:XX:XX.XXXXXX] mas.INFO: Agent Researcher using tool web_search [2024-05-XXTXX:XX:XX.XXXXXX] mas.INFO: Step 0 completed successfully by Researcher [2024-05-XXTXX:XX:XX.XXXXXX] mas.INFO: Processing step 1: 根据收集到的信息撰写一份不超过500字的简要报告... [2024-05-XXTXX:XX:XX.XXXXXX] mas.INFO: WriterAgent starting step [2024-05-XXTXX:XX:XX.XXXXXX] mas.INFO: Step 1 completed successfully by Writer [2024-05-XXTXX:XX:XX.XXXXXX] mas.NOTICE: Task task_001 completed successfully. TASK EXECUTION RESULT { success: true, task_id: task_001, results: [ { success: true, agent: Researcher, output: Research completed for PHP multi-agent system development 2024. Report saved to workspace key: research_report_xxxx, workspace_key: research_report_xxxx }, { success: true, agent: Writer, output: Report generated based on research findings. Content saved to workspace key: final_report_xxxx, workspace_key: final_report_xxxx } ] } WORKSPACE SNAPSHOT Task Status: completed Research Report Found: Array ( [query] PHP multi-agent system development 2024 [findings] Array ( [query] PHP multi-agent system development 2024 [results] Array (...) [summary] 根据网络信息... [source] mock_search_service ) [summarized_by] Researcher [timestamp] 1716XXXXXX )如何验证成功日志流观察日志确认任务启动、每个步骤被处理、智能体被调用、工具被执行最终任务完成。返回值$finalResult[success]为true。工作区状态task:task_001:status变为completed。产出物在工作区中能找到由研究员生成的research_report_xxx和由撰写员生成的final_report_xxx键值对其中包含了任务执行的具体结果。7. 常见问题与排查思路在实现和运行此类系统时你可能会遇到以下典型问题问题现象可能原因排查方式解决方案智能体执行失败返回Tool not found1. 工具未正确添加到智能体。2. 工具名称拼写错误。1. 检查ResearcherAgent构造函数或初始化流程中是否调用了addTool。2. 在executeStep方法中打印$this-tools的键名。确保在调度器注册智能体之前完成所有工具的装配。工具名称需严格匹配。任务卡住无日志输出1. 某个步骤陷入死循环或长时间阻塞。2. 协程或异步调用未正确处理。1. 增加更详细的步骤开始/结束日志。2. 检查工具类如WebSearchTool中的execute方法是否有无限循环或未设置超时。1. 为所有可能阻塞的操作HTTP请求、数据库查询设置超时。2. 考虑使用Swoole\Timer::tick添加步骤执行超时监控。工作区数据丢失或不一致1. 使用MemoryWorkspace进程退出后数据丢失。2. 多个进程同时读写导致竞态条件。1. 检查是否在同一个PHP进程内运行。2. 在并发环境下检查数据读写逻辑。1.生产环境务必使用持久化存储如Redis并实现RedisWorkspace类替换MemoryWorkspace。2. 对共享数据的写入使用锁机制Redis锁或文件锁。调度器找不到智能体1. 智能体注册顺序有误或遗漏。2.Step中指定的assignedAgent名称与注册名称不匹配。1. 在Scheduler::processTask循环中打印$assignedAgentName和$this-agents的键。2. 检查Task和Step的构建逻辑。建立智能体名称常量或枚举避免硬编码字符串。在注册和分配时进行名称校验。性能瓶颈处理速度慢1. 所有步骤串行执行。2. 工具调用如网络请求是同步的。1. 分析日志中每个步骤的时间戳。2. 检查工具类是否使用了同步HTTP客户端。1.将独立步骤改为并行执行。修改Scheduler使用Swoole\Coroutine\parallel或Swoole\Coroutine\WaitGroup来并发执行无依赖的步骤。2. 使用Guzzle的协程客户端或Swoole的异步HTTP客户端。8. 进阶优化与生产环境最佳实践上面的示例是一个最小可行系统。要用于实际项目需要考虑以下方面1. 智能体路由与负载均衡目前的调度器是简单映射。可以引入一个Router组件根据步骤内容、智能体负载、能力描述等动态选择最合适的智能体。实现智能体池同一个类型的智能体可以启动多个实例由调度器进行负载均衡。2. 持久化与状态管理工作区必须替换为Redis、MySQL或任何分布式存储以确保系统重启或扩展后状态不丢失。任务状态将任务和步骤的状态持久化到数据库便于查询、重试和监控。// 伪代码数据库任务仓库示例 class DatabaseTaskRepository { public function saveTask(Task $task): void { /* ... */ } public function updateStepStatus(string $taskId, int $stepIndex, string $status, ?string $result): void { /* ... */ } }3. 异步通信与消息队列对于重型或耗时的智能体不应阻塞调度器。可以将步骤包装成消息投递到RabbitMQ、Kafka或Redis Stream中。智能体作为独立的消费者进程从队列中拉取任务执行并将结果写回。// 伪代码基于Swoole Channel的简单队列 $taskChannel new \Swoole\Coroutine\Channel(100); go(function () use ($taskChannel, $scheduler) { while ($task $taskChannel-pop()) { $scheduler-processTask($task); } }); // 投递任务 $taskChannel-push($newTask);4. 集成大语言模型智能体的“大脑”可以是LLM。为智能体基类增加一个callLLM方法封装对OpenAI API、通义千问、DeepSeek等服务的调用。将工作区中的上下文、历史对话、工具执行结果作为Prompt的一部分让LLM做出下一步决策。protected function callLLM(string $prompt, array $context): string { $client new OpenAI\Client($this-apiKey); $messages [...]; // 构建包含上下文的消息 $response $client-chat()-create([ model gpt-4, messages $messages, ]); return $response-choices[0]-message-content; }5. 可观测性与监控集成OpenTelemetry或自定义指标记录每个任务、步骤、工具调用的耗时和成功率。将日志结构化JSON格式并输出到ELK或Loki等日志聚合系统。为调度器和智能体添加健康检查端点。6. 安全与权限工具调用沙箱对于执行Shell命令、读写文件等高风险工具必须在严格隔离的环境如Docker容器中运行。输入验证与清理所有从外部传入任务、步骤的数据必须进行严格的验证和过滤防止注入攻击。API密钥管理工具的API密钥必须通过环境变量或安全的配置中心获取绝不能硬编码在代码中。9. 总结为什么PHP适合这类系统回到开头的问题。通过这个项目我们可以看到用PHP构建多智能体系统并非天方夜谭反而有其独特的优势开发效率与工程成熟度PHP拥有极其丰富的Web开发库和框架Symfony, Laravel可以快速构建出调度器的API网关、管理后台和监控界面。Composer的依赖管理让集成各种客户端HTTP、数据库、队列变得轻而易举。高性能异步基础Swoole提供了媲美Go、Node.js的协程和异步IO能力让PHP可以轻松处理成千上万的并发任务调度智能体间的通信延迟极低。部署与运维简单一个PHP应用打包成Docker镜像后部署和扩缩容流程与任何现代微服务无异。传统的PHP-FPM模式也易于理解和运维。人才与生态PHP开发者群体庞大将多智能体这类“前沿”概念用他们熟悉的语言实现能更快地落地和迭代。当然它也有挑战比如在复杂数学计算和原生AI库生态上不如Python。但在智能体编排、任务调度、服务集成和高并发IO这个层面PHP完全能胜任甚至因为其简洁和直接在原型验证和中期迭代上更具优势。这个项目的完整代码已经为你勾勒出了一个可扩展的多智能体系统骨架。你可以在此基础上接入真实的LLM API让智能体真正拥有“思考”能力。实现更复杂的工具如数据库查询、代码执行、文件处理。设计图形化的工作流编辑器通过拖拽来编排智能体任务。将其封装成独立的服务为你的其他应用提供“智能体即服务”的能力。技术选型不应是信仰之争而是合适之选。下次再有人说“PHP不行了”你可以把这套系统的GitHub链接发给他然后问一句“你的Python项目架构清晰度和部署速度能比得上这个吗”项目完整代码已整理至GitHub仓库可在公众号后台回复“PHP智能体”获取链接。建议收藏本文在需要构建自动化、智能化后端服务时这个架构或许能给你带来新的思路。 30款热门AI模型一站整合DeepSeek/GLM/Qwen 随心用限时 5 折。 点击领海量免费额度