Agent 平台化思考:从定制化开发到通用 Agent 平台的架构演进
Agent 平台化思考从定制化开发到通用 Agent 平台的架构演进一、从一个 Agent 一个项目到Agent 平台工程化必经之路2026 年初某 SaaS 公司面临一个困境过去一年他们为不同客户需求开发了 15 个独立的 Agent 项目。这些项目技术栈各异、代码重复率高达 60%、维护成本巨大。更糟糕的是当某个客户需要一个新功能其实是其他 Agent 已有的功能时他们需要重新开发无法复用。这不是个案。随着 Agent 技术从实验走向生产平台化成为必然趋势。本文将讨论 Agent 平台化的架构演进路径。二、阶段一定制化开发反模式典型问题场景客户 A 需要一个客服 Agent客户 B 需要一个销售 Agent。反模式实现# 项目 1: 客服 Agent独立代码库 # customer_service_agent/ # ├── main.py # ├── tools/ # │ ├── query_order.py # │ ├── cancel_order.py # │ └── search_kb.py # └── prompts/ # └── system_prompt.txt # 项目 2: 销售 Agent另一个独立代码库 # sales_agent/ # ├── main.py # 跟客服 Agent 的 main.py 有 70% 相同 # ├── tools/ # │ ├── search_products.py # 新工具 # │ ├── query_order.py # 重复跟客服 Agent 一样 # │ └── create_order.py # └── prompts/ # └── system_prompt.txt # 问题 # 1. query_order 工具重复实现维护困难 # 2. main.py 逻辑重复代码冗余 # 3. 两个 Agent 无法共享上下文用户先从客服问问题再找销售上下文丢失问题清单三、阶段二模块化改进核心思路抽取公共库# 公共库agent_common/ # ├── core/ # │ ├── agent.py # Agent 核心逻辑 # │ ├── tool_registry.py # 工具注册中心 # │ └── memory.py # 记忆管理 # ├── tools/ # │ ├── query_order.py # 公共工具 # │ ├── search_kb.py # │ └── base_tool.py # 工具基类 # └── utils/ # ├── llm_client.py # └── prompt_template.py # 客服 Agent 项目简化 from agent_common.core import Agent, ToolRegistry from agent_common.tools import QueryOrderTool, SearchKBTool class CustomerServiceAgent(Agent): def __init__(self): super().__init__() # 注册工具 self.registry.register(QueryOrderTool()) self.registry.register(SearchKBTool()) # 添加客服特有的工具 self.registry.register(CancelOrderTool()) # 销售 Agent 项目简化 from agent_common.core import Agent, ToolRegistry from agent_common.tools import QueryOrderTool, SearchKBTool # 复用 class SalesAgent(Agent): def __init__(self): super().__init__() # 复用公共工具 self.registry.register(QueryOrderTool()) # 直接复用 self.registry.register(SearchKBTool()) # 添加销售特有的工具 self.registry.register(SearchProductsTool()) self.registry.register(CreateOrderTool())生产级实现工具注册中心from abc import ABC, abstractmethod from typing import Dict, List, Any import importlib import json class BaseTool(ABC): 工具基类 abstractmethod def get_name(self) - str: pass abstractmethod def get_description(self) - str: pass abstractmethod def get_parameters(self) - Dict: pass abstractmethod def execute(self, **params) - Any: pass def to_function_calling_schema(self) - Dict: 转换为 Function Calling 格式 return { type: function, function: { name: self.get_name(), description: self.get_description(), parameters: self.get_parameters() } } class ToolRegistry: 工具注册中心单例 _instance None _tools: Dict[str, BaseTool] {} def __new__(cls): if cls._instance is None: cls._instance super().__new__(cls) return cls._instance def register(self, tool: BaseTool): 注册工具 name tool.get_name() if name in self._tools: raise ValueError(fTool {name} already registered) self._tools[name] tool def get_tool(self, name: str) - BaseTool: 获取工具 return self._tools.get(name) def list_tools(self) - List[Dict]: 列出所有工具用于 LLM Function Calling return [tool.to_function_calling_schema() for tool in self._tools.values()] def load_tools_from_config(self, config_path: str): 从配置文件加载工具 with open(config_path, r) as f: config json.load(f) for tool_config in config[tools]: module_path tool_config[module] class_name tool_config[class] # 动态加载 module importlib.import_module(module_path) tool_class getattr(module, class_name) tool_instance tool_class() self.register(tool_instance) # 示例工具实现 class QueryOrderTool(BaseTool): 查询订单工具 def get_name(self) - str: return query_order def get_description(self) - str: return 根据用户 ID 或订单 ID 查询订单信息 def get_parameters(self) - Dict: return { type: object, properties: { user_id: {type: string, description: 用户 ID}, order_id: {type: string, description: 订单 ID} }, required: [] } def execute(self, **params) - Dict: user_id params.get(user_id) order_id params.get(order_id) # 查询数据库简化 if order_id: return {order_id: order_id, status: shipped, amount: 99.9} elif user_id: return {user_id: user_id, orders: [{id: 123, status: shipped}]} else: raise ValueError(user_id or order_id required) # 使用 registry ToolRegistry() registry.register(QueryOrderTool())模块化的局限虽然模块化解决了代码复用问题但还有部署问题每个 Agent 还是独立部署扩缩容问题无法根据负载动态调度监控问题每个 Agent 独立监控缺乏全局视图四、阶段三平台化目标平台化架构核心设计Agent 配置 工具列表关键洞察Agent 的本质是系统 prompt 工具列表 记忆管理策略。from pydantic import BaseModel from typing import List, Optional class AgentConfig(BaseModel): Agent 配置可序列化 agent_id: str name: str description: str # 系统 Prompt system_prompt: str # 工具列表引用工具池中的工具 tools: List[str] # tool names # 记忆策略 memory_config: Dict # 模型配置 model_config: Dict # 其他配置 max_iterations: int 10 timeout: int 60 class AgentPlatform: Agent 平台 def __init__(self): self.tool_registry ToolRegistry() self.agent_configs: Dict[str, AgentConfig] {} self.agent_instances: Dict[str, Agent] {} def register_agent(self, config: AgentConfig): 注册 Agent只需配置 self.agent_configs[config.agent_id] config def get_agent(self, agent_id: str) - Agent: 获取 Agent 实例懒加载 if agent_id not in self.agent_instances: config self.agent_configs[agent_id] # 根据配置创建 Agent agent self._create_agent_from_config(config) self.agent_instances[agent_id] agent return self.agent_instances[agent_id] def _create_agent_from_config(self, config: AgentConfig) - Agent: 根据配置创建 Agent # 1. 加载工具 tools [] for tool_name in config.tools: tool self.tool_registry.get_tool(tool_name) if tool: tools.append(tool) # 2. 创建 Agent agent Agent( system_promptconfig.system_prompt, toolstools, memory_configconfig.memory_config, model_configconfig.model_config ) return agent async def run_agent(self, agent_id: str, user_input: str, context: Dict) - str: 运行 Agent agent self.get_agent(agent_id) return await agent.run(user_input, context) # 使用示例只需配置无需写代码 def create_customer_service_agent_via_config(): 通过配置创建客服 Agent config AgentConfig( agent_idcustomer_service, name智能客服, description处理用户咨询、订单查询、退款, system_prompt你是客服助手友好、专业..., tools[ query_order, cancel_order, search_kb ], memory_config{ type: buffer, max_turns: 10 }, model_config{ model: gpt-4, temperature: 0.7 } ) # 注册到平台 platform AgentPlatform() platform.register_agent(config) return platform # 现在新 Agent 只需写配置文件 # sales_agent_config.json: { agent_id: sales, name: 销售助手, tools: [query_order, search_products, create_order], system_prompt: ... } 平台化核心功能class AgentPlatformAdvanced: 高级 Agent 平台生产级 def __init__(self): self.tool_registry ToolRegistry() self.agent_configs {} self.executor_pool AgentExecutorPool(max_workers100) self.monitor PlatformMonitor() # 功能 1: Agent 模板市场 def list_agent_templates(self) - List[Dict]: 列出 Agent 模板 templates [ { id: customer_service, name: 智能客服, description: 适用于电商客服场景, tools: [query_order, cancel_order, search_kb], preview: https://... }, # ... ] return templates def create_agent_from_template(self, template_id: str, customizations: Dict) - str: 从模板创建 Agent # 复制模板配置 template self._get_template(template_id) config AgentConfig(**template) # 应用自定义 for key, value in customizations.items(): setattr(config, key, value) # 生成唯一 ID config.agent_id f{template_id}_{uuid.uuid4().hex[:8]} # 注册 self.register_agent(config) return config.agent_id # 功能 2: 工具市场 def list_tool_market(self) - List[Dict]: 列出可用工具 return [ { name: query_order, description: 查询订单, usage_count: 1000, rating: 4.5 }, # ... ] # 功能 3: 多 Agent 协作 async def run_multi_agent(self, workflow: Dict, user_input: str) - str: 运行多 Agent 工作流 # workflow 示例 # { # steps: [ # {agent: customer_service, input: {{user_input}}}, # {agent: sales, input: {{previous_output}}}, # ] # } context {user_input: user_input} for step in workflow[steps]: agent_id step[agent] step_input self._render_template(step[input], context) agent self.get_agent(agent_id) output await agent.run(step_input, context) context[f{agent_id}_output] output return context[workflow[steps][-1][agent] _output] # 功能 4: 监控和分析 def get_platform_metrics(self) - Dict: 获取平台指标 return { total_agents: len(self.agent_configs), active_agents: len(self.agent_instances), total_calls_24h: self.monitor.get_total_calls(hours24), avg_latency: self.monitor.get_avg_latency(), error_rate: self.monitor.get_error_rate(), cost_24h: self.monitor.get_cost(hours24) }结论Agent 平台化架构演进阶段一定制化避免问题代码重复、维护困难适用快速验证 1 个月阶段二模块化推荐改进代码复用适用2-5 个 Agent阶段三平台化目标优点快速构建、统一运维、工具共享适用 5 个 Agent平台化核心设计Agent 配置 工具列表工具池共享工具Agent 模板市场多 Agent 协作编排实施路线第 1-2 月模块化抽取公共库第 3-4 月设计平台架构第 5-6 月实现 MVP 平台第 7-12 月迭代优化关键建议不要过早平台化YAGNI 原则先有 3 个 Agent 再考虑平台化平台化的关键是配置化而不是代码化

相关新闻

ZX8002D单通道触摸台灯 化妆镜 触摸芯片带锂电池充电功能IC

ZX8002D单通道触摸台灯 化妆镜 触摸芯片带锂电池充电功能IC

一、ZX8002D方案概述 本方案以泛海微电子推出的ZX8002D单通道触摸调光芯片为核心,针对LED台灯、LED化妆镜等小型LED照明产品设计,实现单按键控制三档亮度循环调节的功能。芯片集成了锂电池充电管理模块,支持2.5V-5V宽电压输入,无…

2026/9/28 22:41:27 阅读更多 →
2026车辆工程与智能技术国际学术会议(VEIT 2026)

2026车辆工程与智能技术国际学术会议(VEIT 2026)

2026车辆工程与智能技术国际学术会议(VEIT 2026) 2026 International Conference on Vehicle Engineering and Intelligent Technology 【重要信息】 2026年12月18-20日 | 中国沈阳 | www. icveit.com 会议主页:2026车辆工程与智能技术国际…

2026/9/25 22:30:54 阅读更多 →
Havenlon|AI 时代的执行安全语言体系(七一):Agent 身份、意图、权力、上下文风险

Havenlon|AI 时代的执行安全语言体系(七一):Agent 身份、意图、权力、上下文风险

Working Draft AI Era Execution Security Language This article is part of the Havenlon Execution Security Language project. The terminology and definitions presented here describe the current working draft and may evolve as the discipline matures. AI 时代执…

2026/10/1 1:26:37 阅读更多 →

最新新闻

EasyExcel导出合计行的正确实现方案

EasyExcel导出合计行的正确实现方案

1. 为什么“合计行”是 EasyExcel 导出中最容易被低估的硬伤你有没有遇到过这样的场景:业务方发来一份 Excel 模板,最后一行写着“合计”,字体加粗、背景色浅灰、数字右对齐,还带千分位分隔符;你吭哧吭哧用 EasyExcel …

2026/10/1 19:42:18 阅读更多 →
技术专家、领域专家、行业专家:三条截然不同的成长路径

技术专家、领域专家、行业专家:三条截然不同的成长路径

1. 三种“专家”不是同一个物种——先搞清楚你要当哪一种聊到今天已经是第897期,我一直没正经写过一个话题:怎么从干活的人,变成别人眼里的专家。最近后台有好几个读者留言,问的是同一类问题——技术做到什么程度才算专家&#xf…

2026/10/1 19:42:18 阅读更多 →
PhpStorm vmoptions文件位置全解析:修改JVM参数的正确姿势

PhpStorm vmoptions文件位置全解析:修改JVM参数的正确姿势

不少人以为 PhpStorm 改完 vmoptions 就万事大吉了,结果重启后要么内存还是爆,要么翻遍了安装目录也找不到自己刚改的文件。我先把结论放这儿:不管是你在 IDE 菜单里点 Help -> Edit Custom VM Options ,还是手动去改某个文件…

2026/10/1 19:42:18 阅读更多 →
TFLite内存规划器深度解析:推理引擎如何复用中间tensor,压降峰值内存

TFLite内存规划器深度解析:推理引擎如何复用中间tensor,压降峰值内存

做端侧推理部署的人,应该都遇到过这种场景:模型权重明明只有几十MB,一跑起来App的内存却暴涨到两三百MB,动不动就被系统低内存回收。以前我排查这类问题,第一反应是换更小的模型、降输入分辨率,后来才意识到…

2026/10/1 19:42:18 阅读更多 →
MySQL通用日志general_log:从原理到实战,揭秘审计与排查利器

MySQL通用日志general_log:从原理到实战,揭秘审计与排查利器

凌晨两点被电话叫醒,几乎是每个搞过数据库的人都经历过的“必修课”。那天业务方告诉我,订单表里有一批数据被update了,但排查了一圈,代码没人动过,脚本没人跑过,binlog翻出来也只能看到具体SQL和事务序号&…

2026/10/1 19:42:18 阅读更多 →
FreeRTOS任务机制深度解析:TCB、任务栈与就绪表的内存本质

FreeRTOS任务机制深度解析:TCB、任务栈与就绪表的内存本质

1. 为什么FreeRTOS新手总在“任务”上栽跟头:从一句xTaskCreate()说起我带过不少刚接触FreeRTOS的嵌入式新人,他们常卡在一个看似最基础的问题上:明明照着例程写了xTaskCreate(),任务却没跑起来;或者任务跑着跑着就死机…

2026/10/1 19:41:18 阅读更多 →

日新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/1 1:01:17 阅读更多 →