FEATURED · 精选文章

CubePlex:开源企业级多Agent平台,让智能体安全可控落地生产

发布时间 / 2026/9/8 8:26:06
来源 / 创域科博编辑部
栏目 / 资讯中心
CubePlex:开源企业级多Agent平台,让智能体安全可控落地生产 上个月我把团队内部沉淀了大半年的多Agent项目正式开源了名字叫CubePlex。简单说它是一套企业级的Agent平台也是一个开箱就能跑的agent框架你可以在上面声明智能体、挂接工具、编排多Agent协作同时把记忆、安全、可观测性这些生产环境必须的东西一次性补齐。代码放在GitHub上协议用的Apache 2.0。如果你正在做agent开发或者你跟我一样需要给团队搭一套能扛住业务压力的AI agent基础设施那这个项目值得你花五分钟看下去。1. CubePlex到底是什么我为什么要做这样一个Agent平台1.1 单体Agent在生产环境的三道坎先说一个感受很多人第一次把Agent跑起来的时候兴奋感都集中在“它居然会自己调用工具”上但真正落到业务里问题马上就会浮出来。第一道坎是失控。Agent本质上是一个循环每一步想干什么没有人能提前预知。我最早的版本就是一个while True加function calling看起来聪明结果连续跑几次之后发现它经常陷入“调用工具、报错、换一种说法再调用、再报错”的死循环。更要命的是你很难在循环中途打断它只能等整轮超时。Demo阶段这不算什么上线之后就是灾难。第二道坎是记忆。测试环境里你可以把整个聊天历史全塞进上下文但生产场景不行。一份客服工单背后的知识可能来自用户昨天说过的话、前几天的工单记录、商品知识库这些信息分散在不同系统里。光靠拼上下文既花钱又不稳定。而且企业环境里用户数据必须隔离A用户的聊天记录不能串到B用户的会话里这对单机Demo来说基本没人管过。第三道坎是观测黑洞。模型到底调了哪个工具、传入的参数是什么、中间为什么走了弯路、最终为什么给出这个答案这些在Jupyter里跑的时候无所谓一旦上线就是事故定位的救命稻草。没有日志、没有Trace、没有审计出了问题连“复现”都做不到更不用说满足合规要求。所以CubePlex从一开始就没有做成“又一个链式调用库”而是往平台方向设计。核心引擎只关心三件事调模型、管工具、存记忆往上提供编排层把Agent之间的协作关系用声明式工作流表达对外提供统一的REST API和Python SDK。这套抽象参考了当前主流agent框架的设计同时结合企业落地时的实际约束做了不少取舍。1.2 平台设计的四个核心约束我给CubePlex定了四条硬性原则之后的每个功能决策都会对照这几条来检查。模型中立任何提供OpenAI兼容接口的模型都能接入不管是云厂商的大模型还是本地部署的开源模型平台不绑定任何一家。编排优先多Agent协作不是把一堆Prompt拼在一起而是靠流程引擎来控制节点关系、错误策略和人工介入点。安全内建工具调用必须走权限、限流和审计不能裸奔。Agent不是万能管家它是一个受管控的执行者。可观测默认每一次调度、每一步思考、每一次工具调用默认全部记录。没记录当作没发生。这四条其实是“企业级”和“开源Demo项目”的分水岭。后者解决“能不能跑”前者解决“敢不敢上线”。2. 核心架构与关键抽象Agent、Tool、Harness 与 Memory2.1 一次Agent任务从进入到完成会经历什么在讲具体对象之前先描述一个完整流程这样你会对平台有个整体画面。用户通过API或者控制台提交一个任务后平台会先创建一个会话上下文把对应的短期记忆和向量记忆加载进来。然后启动Harness也就是Agent的执行控制器。Harness会进入循环把系统Prompt、历史记忆、用户输入组装成请求发送给大模型模型如果返回工具调用Harness就去注册中心找到对应工具做权限校验后执行再把执行结果返回给模型模型如果返回最终答案Harness会对输出做格式和内容的检查然后写记忆、写审计日志结束任务。这段描述听起来简单但其中每一步都可能出问题。模型超时怎么办工具执行失败算不算Agent需要修正人工审核节点怎么插入这些问题在纯函数调用场景里不存在但在生产环境里全是坑。CubePlex把这一整段流程封装成可配置的Harness让开发者不用每次重复造轮子。2.2 Agent、Task、Tool、Harness这些对象分别是什么在CubePlex里核心对象一共五个我把它们列出来并对应到业务里的实际含义。对象含义对应到业务Agent带系统提示词和执行循环的智能体客服、数据分析助理、工单分类员Task一次具体的执行请求“查询订单12345”Tool可被模型调用的外部能力订单API、数据库查询、企业微信发送Workflow多个Agent与人工节点的编排工单全流程处理流水线Harness单个Agent执行循环的控制管理器赛车手、教练、裁判三合一Memory持久化的上下文存储用户画像、历史工单、企业知识库这里要特别解释一下Harness因为很多人刚接触时会问“harness和agent区别到底是什么”。简单讲Agent回答的是“要做什么”Harness负责“怎么安全地做完这件事”。举个例子如果Agent是一位赛车手那Harness就是坐在副驾的教练加场边裁判它决定什么时候进站、什么时候强制刹车、什么时候直接取消比赛资格。在CubePlex里Harness统一处理迭代次数上限、单次任务超时、工具调用白名单、异常回复重试等机制这些策略都可以在Agent配置里按需调整。2.3 记忆三级体系记忆是Agent从“玩具”变成“生产力工具”的关键。CubePlex把记忆拆成三层每层的存储和生命周期都不一样。第一层是短期记忆直接挂在会话上本质是最近几轮的消息列表。平台会设置一个上限比如默认保留最近的20轮对话超过之后会对更早的内容做摘要压缩。这样既保留关键信息又不会让上下文无限膨胀。第二层是场景记忆用向量方式存储。平台会把每轮用户意图、Agent总结沉淀成向量写入矢量数据库。下一次会话开始时Harness会根据当前问题做相似度检索把相关的历史信息带进上下文。这个设计很适合“用户前几天问过类似问题”这种场景。第三层是长期知识库对接企业内部的文档、商品资料、FAQ。它不是某个用户对话产生的而是由管理员预先导入的静态知识。CubePlex默认使用PostgreSQL加pgvector作为向量存储数据量不大时不需要额外引入Milvus这类重组件架构更简单。记忆隔离也是企业环境的硬需求。CubePlex给每个Agent提供一个namespace参数同一个命名空间下的记忆可以共享不同命名空间之间物理隔离。这样你可以让“售前咨询Agent”和“售后工单Agent”各自维护独立的记忆互不干扰。3. 核心功能拆解编排、安全与可观测性3.1 Agent编排4种最常用的工作流模式多Agent编排是CubePlex和普通单Agent框架最大的区别。我总结了四种最常用的模式基本能覆盖大多数业务场景。第一种是顺序执行。比如先由意图识别Agent判断用户的问题属于哪个领域再交给对应的业务Agent继续处理。这种方式逻辑清晰适合流程固定的场景。第二种是并行执行。比如一个数据分析Agent需要同时查询销售、库存、物流三个系统的数据三个子Agent可以并发运行最后由聚合节点把结果合并。对响应时间有要求的场景并行是最有效的提效手段。第三种是条件分支。根据模型输出或者工具返回值动态决定下一步走哪个节点。比如信用评分Agent返回“通过”时走自动放款流程返回“拒绝”时走人工复核节点这就是典型的分支。第四种是人工审核汇合。有些操作不能完全交给模型决定比如发生退款、发送营销短信、修改核心配置。CubePlex支持在Workflow中插入一个human_approval节点任务到这里会暂停等指定的审核人通过或驳回后才继续执行。下面是一个很简单的Workflow定义你可以直接在当前版本里跑起来workflow: id: customer_service_flow steps: - node: intent_agent type: agent - node: order_agent type: agent depends_on: [intent_agent] - node: human_review type: human_approval depends_on: [order_agent] error_policy: rerun3.2 安全机制工具权限、限流与审计日志安全是CubePlex的核心投资也是我认为做Agent平台最不能轻视的地方。平台采用“默认拒绝”的模型一个工具即使注册成功如果Agent没有在allowed_tools里声明Harness也不会允许模型调用它。在工具调用路径上平台内置了四道关卡。第一道是身份校验API请求必须携带有效的Bearer Token。第二道是Agent级权限核对当前Agent是否允许调用该工具。第三道是限流每个Agent每分钟和每小时的调用次数都可配置防止某个异常任务把下游API打爆。第四道是参数校验工具定义里声明的参数类型和必填项在执行前会强制校验。审计日志是安全体系里容易被忽略的一块。CubePlex默认记录每一次工具调用的时间、任务ID、Agent名称、工具名称、参数、返回摘要、人工审核人。这些日志不仅是为了排查问题更是为了满足企业审计和合规要求。我建议你在生产环境把审计日志接入独立的日志系统保留时间至少180天出事的时候你就知道这个决定有多值钱。3.3 可观测性一次Agent任务的完整追踪可观测性这块CubePlex默认集成了OpenTelemetry。你可以在配置里打开Tracing然后任何标准可观测系统都能收到数据。一个任务的处理过程会生成一条完整的链路里面包含模型请求耗时、工具执行耗时、记忆检索耗时以及每一轮LLM的输入输出。用量统计也是企业关心的点。控制台里可以看到每个Agent消耗了多少Token、调用了多少次模型、平均响应时间是多少。这些数据对于成本分摊和后期的模型路由优化非常有用。我见过不少团队上线Agent应用后才发现一个简单的客服任务单次要消耗上万Token没有这个统计根本发现不了问题。4. 部署实操5分钟本地跑通CubePlex4.1 环境准备与配置说明CubePlex的最低配置是4核8G内存推荐配置是8核16G。如果只跑单机演示4核8G足够如果对接本地模型建议至少16G内存因为模型服务本身也很吃资源。部署依赖就是Docker和Docker Compose v2不需要额外安装数据库和缓存编排文件里都已经配好了。你只需要三步就能拉起来。先克隆仓库然后复制环境变量文件git clone https://github.com/cubeplex/cubeplex.git cd cubeplex cp .env.example .env打开.env重点配置模型相关参数。CubePlex默认走OpenAI兼容接口所以你只需要填LLM_BASE_URL、LLM_API_KEY和LLM_MODEL_NAME。如果你暂时没有API Key可以先不用改平台会在模型调用失败时给出明确的错误信息其他功能照常可以看界面。4.2 Docker Compose 快速启动配置好之后直接在项目根目录执行docker compose up -d首次启动会拉镜像包括PostgreSQL、Redis、API服务、Worker和控制台大概需要几分钟。等所有容器状态变成healthy之后打开两个地址API文档在http://localhost:8000/docs管理控制台在http://localhost:3000。验证是否跑通可以直接用控制台创建一个测试Agent或者在API文档里调用/v1/agents/hello/run传递一句“你好介绍一下你自己”。如果返回了正常的回复说明核心链路已经打通。我把第一次启动后顺手验证系统健康的习惯保留了下来毕竟部署成功不等于启动成功模型调用成功才算真的活。4.3 接入本地开源模型如果你不想用云端API想完全本地化CubePlex支持通过Ollama或者vLLM提供一个OpenAI兼容端点。以Ollama为例先拉一个开源模型ollama pull qwen2.5:7b ollama serve然后把.env里的LLM_BASE_URL改成http://host.docker.internal:11434/v1LLM_API_KEY随便填一个占位符LLM_MODEL_NAME填qwen2.5:7b。重新启动服务即可。这里要注意一个点CubePlex的服务端平台定位和Codex CLI这类单机开发中的Agent工具完全不同。后者更适合开发者在终端里做编码辅助前者是给多用户、多Agent协作和业务流程编排用的。你在选择部署方案之前先想清楚自己的使用场景不要为了“本地部署”而强行在低配机器上跑大模型体验反而更差。5. Agent开发实战从零搭建一个客服工单智能体5.1 用YAML声明你的第一个AgentCubePlex的Agent配置用YAML声明一个最小可用的Agent大概长这样id: order_agent name: 订单助手 model: provider: openai_compatible base_url: ${LLM_BASE_URL} api_key: ${LLM_API_KEY} model_name: qwen2.5:32b system_prompt: | 你是一个负责处理订单查询的客服智能体。 如果用户想查询订单状态请使用 query_order 工具。 不要编造订单信息。如果工具调用失败请直接告诉用户暂时无法查询。 tools: - query_order memory: enabled: true type: vector namespace: order_agent safety: max_steps: 8 timeout_seconds: 60 require_human_approval: false allowed_tools: [query_order]这里最关键的是safety段。max_steps限制了模型最多跑8轮循环防止死循环timeout_seconds限制单次任务最长60秒allowed_tools进一步收紧了工具调用白名单。这个Agent即使模型疯了也不可能去调用query_order之外的工具这是安全兜底的第一道网。5.2 用Python编写并注册一个工具工具注册在CubePlex里通过Python装饰器完成。平台会根据函数签名自动生成OpenAI兼容的函数Schema不需要你手写JSON描述。# tools/order_tools.py import httpx from cube_plex import tool tool( namequery_order, description根据订单编号查询订单状态与物流信息, parameters{ order_id: {type: string, description: 订单编号}, }, ) def query_order(order_id: str) - dict: resp httpx.get( fhttps://api.shop.example/orders/{order_id}, timeout5, ) resp.raise_for_status() return resp.json()把文件放到项目的tools目录平台启动时会自动扫描并注册。你只需要注意一点工具函数必须对超时和异常做处理抛出异常的话Harness会把这个结果原样返回给模型有些模型会因此陷入“反复尝试同样操作”的怪圈。建议在工具内部做好超时控制失败时返回结构化错误信息比如{error: query timeout}这比直接抛异常要安全得多。5.3 编排一个“意图识别-订单查询-人工复核”完整流程单一Agent解决了“单点问题”但真实业务往往是多条流程串起来的。我以一个客服工单场景为例展示怎么用CubePlex编排一个完整流程。流程分三步。第一步是意图识别Agent判断用户的问题是不是关于订单的。第二步是订单查询Agent也就是刚才定义的那个负责调用工具取数据。第三步是人工复核节点因为这笔查询可能涉及用户隐私管理员要求所有对订单详情接口的调用都必须有人工确认。workflow: id: order_query_flow steps: - node: intent_agent type: agent - node: order_agent type: agent depends_on: [intent_agent] - node: human_review type: human_approval depends_on: [order_agent] config: approver: customer_service_manager timeout_hours: 24 error_policy: rerun当任务进入第3个节点时平台会通知管理员审核。管理员可以在控制台看到订单Agent生成的回复草稿、工具调用记录以及原始输入输出选择通过或者驳回。如果驳回任务直接进入失败状态一般情况下不会自动重试避免重复打扰用户。这个流程跑通之后你会明显感受到多Agent编排的价值每个Agent只负责一块逻辑模型需要做的决策变小了准确性自然提升人工审核只出现在关键节点不会拖慢全局而且每一步都有记录不管是团队内部复盘还是对客户解释都有据可查。6. 生产落地经验我在实际项目中踩过的坑6.1 模型层问题与应对Agent在生产环境跑起来之后遇到最多的坑基本都在模型行为上。死循环是头号问题。模型在遇到工具返回错误后经常换一种说法去重试几轮下来任务才超时。CubePlex的做法是同时用两层机制遏制max_steps硬性限制循环次数同时在System Prompt里加一句“如果某个工具连续调用两次都失败直接告诉用户当前无法完成不要再尝试”。前者是刹车后者是引导缺一不可。空回复和参数幻觉也很常见。特别是部分开源模型在function calling时会把工具调用对象写成空字段或者给出一个模型想象出来的订单号。这种错误在离线测试里不容易暴露生产环境一压流量就出来了。我的处理经验是在Harness里增加参数校验环节发现参数为空或者格式不对时直接返回“参数错误”让模型重新组织语言而不是硬着头皮去请求下游系统。6.2 工具层问题与应对工具层最大的坑是超时和幂等。模型对工具调用的期望是“立刻有结果”但下游系统不会惯着你。订单查询接口可能因为数据库锁、网络抖动两秒变二十秒。所以我强烈建议所有工具在内部设置独立的超时时间并且比Harness的全局超时短得多。比如全局超时60秒工具内部最多等待10秒这样即使下游慢也有足够时间留给模型做二次判断。写操作必须考虑幂等。模型可能因为一次网络重试把同一个“创建工单”调用发送两次。我在生产里做过一个笨办法所有工具的写操作都要求传入一个request_id下游根据这个ID做去重。虽然增加了调用方的成本但比事后人工清理重复数据要省心太多。6.3 记忆层问题与应对上下文膨胀是记忆使用中的经典问题。模型输入长度有限如果你把几个月的历史全塞进去很快就把上下文撑爆。CubePlex的做法是对短期记忆做滚动窗口加摘要超过20轮后就只保留摘要。测试下来这个策略在大多数业务场景下都能保留关键信息同时把Token消耗压在一个可控范围内。记忆“串话”是另一个隐蔽问题尤其在多Agent场景里。如果两个Agent共用同一个记忆namespaceA用户的会话信息很可能被B用户的任务检索到。所以namespace的规划一定要在前期就做好我的建议是至少按业务域划分严格一点可以按用户ID划分。虽然存储成本会增加但数据隔离性会好很多。6.4 稳定性与成本调优最后说稳定性和成本。企业环境里并发量和成本往往是一对矛盾。模型调用是主要成本来源CubePlex支持设置模型路由策略简单任务走小模型复杂任务走大模型。比如意图识别用7B级别的小模型就够了订单查询和工单总结用32B以上的大模型。配置一个规则让Workflow里的不同节点使用不同Agent每个Agent指定不同的模型成本能明显降下来。并发调优方面Worker数量和数据库连接池要配套调整。默认的Worker数是2如果你有8核机器可以改成4到6个但如果同时调大PostgreSQL连接池否则数据库会成为瓶颈。我踩过最明显的一个坑是Worker数量增加后Redis连接数和DB连接数没有同步调整结果高峰期出现大量连接超时。排查半天最后发现根本不是模型的问题而是连接池配置得太小。7. 开源之后我打算怎么继续维护项目开源不是终点反而是维护工作的开始。CubePlex目前的规划里优先级最高的是插件市场让第三方开发者可以发布自己的Agent模板和工具包减少重复造轮子。其次是Workflow可视化编辑器现在的YAML配置对于习惯用界面的运维和业务同学还是不够友好。如果你对这个项目感兴趣我建议从三个方向入手参与贡献一是写文档和示例别小看这个很多用户第一次跑通全靠示例二是补充工具库尤其是企业里常用的CRM、ERP、数据库工具封装三是做Workflow节点的新类型比如等待事件节点、定时触发节点。这些代码量不大但对整个社区的生态会很有帮助。跑完这几个月的生产验证我对Agent平台的体会其实很朴素先把不确定性关进笼子里再谈智能。CubePlex不会让模型变聪明但它能让模型的每一次尝试都可控、可查、可纠正。如果你想在企业里搭一套Agent基础设施我的建议是从一个最小闭环开始——单机部署、接一个模型、写一个工具、跑通一条客服流程再逐步加记忆和编排。最后分享一个救过我很多次的习惯所有Agent生成的内容只要涉及写操作或对外输出都必须留一层人工确认。这个习惯建议你别省。
RELATED — 相关阅读

相关资讯

LATEST — 最新资讯

最新发布

TODAY — 本日精选

新闻

WEEKLY — 本周精选

新闻

MONTHLY — 本月精选

新闻