从单 Agent 到多 Agent 编排:真正的 Agent 系统,靠的不只是“大模型调用”
一、为什么单 Agent 不够用了?
刚开始做 Agent 项目时,我们通常会这样设计:
用户问题
↓
一个 Agent
↓
大模型分析
↓
调用工具 / 检索知识库
↓
返回答案
这种方式在简单问答、单轮工具调用、固定业务流程中是可以工作的。
比如:
- 查询天气;
- 根据知识库回答问题;
- 调用一个接口查订单;
- 从日志里搜索某个关键词;
- 根据 Prometheus 告警生成分析结果。
但随着任务越来越复杂,单 Agent 会出现几个明显问题。
1. 一个 Agent 承担太多职责
假设我们现在要做一个智能运维 Agent,它不仅要理解用户问题,还要:
- 判断是否是告警问题;
- 查询 Prometheus 指标;
- 查询日志系统;
- 分析异常原因;
- 必要时查询知识库;
- 生成排障报告;
- 判断是否需要继续追问或重新规划。
如果这些都交给一个 Agent,它的 Prompt 会越来越长,工具列表也会越来越多。
最后这个 Agent 就会变成这样:
你是一个智能助手,你可以回答知识库问题,也可以分析告警,
也可以查询日志,也可以生成报告,也可以判断任务类型,
还可以调用工具,还可以重新规划,还可以总结结果……
这时候问题就来了:
它什么都能做,但什么都不稳定。
2. 工具太多,大模型容易选错
单 Agent 绑定太多工具后,大模型需要在一堆工具里判断该调用哪一个。
比如工具列表里有:
searchKnowledgeBase()
queryAlert()
queryLogs()
queryMetric()
generateReport()
sendEmail()
queryDatabase()
getCurrentTime()
当用户输入:
线上接口响应变慢了,帮我看一下原因
模型可能要判断:
- 是不是先查指标?
- 要不要查日志?
- 要不要检索知识库?
- 要不要生成报告?
- 要不要继续问用户服务名?
如果没有清晰的任务拆分,模型很容易直接乱查,或者跳过关键步骤。
3. 上下文越来越长,推理容易跑偏
单 Agent 通常需要把很多内容都放进上下文:
系统提示词
+ 历史对话
+ 工具说明
+ 检索结果
+ 当前任务状态
+ 中间执行结果
+ 用户最新问题
上下文越长,大模型越容易受到干扰。
尤其是多轮任务中,前面某一步的中间结果如果没有管理好,后面就可能出现:
- 忘记任务目标;
- 重复调用工具;
- 错误引用历史结果;
- 把无关信息当成依据;
- 最终答案看起来很完整,但其实推理链已经歪了。
4. 失败后不好恢复
单 Agent 最大的问题不是“能不能做”,而是 失败了怎么办。
比如:
用户:帮我分析一下昨晚支付服务的异常
Agent 执行到一半:
1. 查询告警成功
2. 查询日志失败
3. 查询指标成功
4. 生成结论
如果没有编排机制,它可能直接忽略日志失败,继续生成一个看似完整的分析报告。
但真实项目里这是不可靠的。
因为日志查询失败后,应该有几种处理方式:
- 重试;
- 换一个查询条件;
- 降级使用指标数据;
- 标记结果不完整;
- 让规划器重新规划下一步。
这就不是单纯 Prompt 能解决的问题,而是需要 编排层。
二、多 Agent 编排到底解决什么问题?
多 Agent 编排不是为了“听起来高级”,也不是简单地把一个 Agent 拆成多个 Agent。
它真正解决的是:
复杂任务如何拆分?
不同 Agent 如何协作?
执行顺序如何控制?
状态如何传递?
失败后如何恢复?
什么时候需要重新规划?
最终结果如何汇总?
所以,多 Agent 编排本质上是:
给多个 Agent 建立一套任务组织、状态流转和执行控制机制。
可以把它理解成项目里的“调度中心”。
三、多 Agent 系统里常见的角色划分
一个比较典型的多 Agent 系统,可以拆成下面几类角色。
1. Supervisor Agent:总控调度者
Supervisor 可以理解为“项目经理”或者“总控入口”。
它不一定亲自干活,而是负责判断:
- 用户问题属于哪类任务;
- 应该交给哪个 Agent;
- 是否需要多个 Agent 协作;
- 当前任务是否已经完成;
- 是否需要继续执行下一步。
比如用户问:
为什么昨天晚上接口突然变慢?
Supervisor 可能判断:
这是一个运维分析任务,需要交给 AIOps Agent。
如果用户问:
这个项目里的 RAG 是怎么实现的?
Supervisor 可能判断:
这是知识库问答任务,需要交给 Knowledge Agent。
2. Planner Agent:任务规划者
Planner 负责把一个复杂任务拆成多个步骤。
比如用户的问题是:
帮我分析一下支付服务昨晚 10 点到 11 点的异常原因
Planner 可能拆成:
1. 查询该时间段是否存在告警
2. 查询支付服务相关日志
3. 查询接口耗时、错误率、QPS 等指标
4. 结合日志和指标分析可能原因
5. 生成排障结论和建议
Planner 的价值在于,它让任务执行不再是“想到哪做到哪”,而是有一个明确的计划。
3. Executor Agent:任务执行者
Executor 负责真正执行某一步任务。
比如:
查询日志
查询指标
检索知识库
调用数据库
生成报告
Executor 不一定只有一个,可以按领域拆分:
Log Agent → 负责日志查询和日志分析
Metric Agent → 负责指标查询和趋势分析
RAG Agent → 负责知识库检索
Report Agent → 负责生成报告
DB Agent → 负责数据库查询
这样每个 Agent 的职责就比较清晰。
4. Replanner Agent:重新规划者
Replanner 是很多人容易忽略的角色。
它解决的是:
执行过程中发现原计划不合适,怎么办?
比如原计划是:
1. 查询 Prometheus 指标
2. 查询日志
3. 生成结论
但执行时发现:
Prometheus 没有相关指标
这时候不能直接结束,而应该重新规划:
1. 尝试查询服务实例级别指标
2. 如果指标缺失,则查询日志错误率
3. 如果日志也不足,则返回“数据不足”的结论,并说明缺失依据
这就是 Replanner 的作用。
它让 Agent 系统具备一定的“纠错能力”。
四、常见的多 Agent 编排模式
多 Agent 编排不是只有一种写法,常见模式大概可以分为以下几类。
1. Workflow 编排:固定流程,稳定可控
Workflow 是最容易理解的一种方式。
它的特点是:
流程提前定义好
每一步按顺序执行
适合稳定业务流程
比如文档问答流程:
用户问题
↓
问题改写
↓
知识库检索
↓
结果重排
↓
上下文拼接
↓
大模型生成答案
↓
返回结果
这就是一个典型 Workflow。
它的优点是稳定、可控、容易调试。
缺点是灵活性不够,如果用户问题变化很大,固定流程可能不够智能。
Workflow 适合什么场景?
适合这种流程明确的任务:
- RAG 问答;
- 文档总结;
- 审批流;
- 表单生成;
- 固定格式报告;
- 标准化运维排查流程。
比如在 RAG 系统里,我们不希望模型随便决定要不要检索,而是明确规定:
必须先检索,再生成。
这时候 Workflow 比完全自主 Agent 更可靠。
2. DAG 编排:有依赖关系的任务图
DAG 的全称是 Directed Acyclic Graph,也就是有向无环图。
说简单点:
DAG 是一种用图来描述任务依赖关系的编排方式。
它和普通 Workflow 的区别在于:
Workflow 更像一条线:
A → B → C → D
DAG 更像一张任务图:
→ B →
A → D
→ C →
也就是说,某些任务可以并行,某些任务必须等待前置任务完成。
举个例子
用户问:
帮我分析一下接口变慢的原因
可以设计成:
→ 查询日志 →
用户问题 → 任务规划 → 综合分析 → 生成报告
→ 查询指标 →
→ 检索知识库 →
其中:
- 查询日志;
- 查询指标;
- 检索知识库;
这三个步骤可以并行执行。
等三个结果都回来之后,再进入综合分析。
这就是 DAG 编排的价值。
DAG 是不是把任务固定死了?
这个问题很关键。
DAG 确实会定义任务节点和依赖关系,但不代表它一定死板。
因为 DAG 里可以加入条件分支:
如果是知识库问题 → 走 RAG 流程
如果是运维问题 → 走 AIOps 流程
如果是普通聊天 → 走 Chat 流程
也可以加入动态节点:
Planner 先生成计划
再根据计划动态生成执行节点
所以 DAG 不是“死流程”,而是让复杂任务的执行关系更清晰。
3. Supervisor 编排:一个总控管理多个 Agent
Supervisor 模式是多 Agent 里非常常见的一种。
它的结构大概是:
用户请求
↓
Supervisor Agent
↓
判断任务类型
↓
分发给不同 Agent
↓
汇总结果
↓
返回用户
比如:
Knowledge Agent:负责知识库问答
AIOps Agent:负责运维分析
Chat Agent:负责普通对话
Report Agent:负责报告生成
Supervisor 的核心作用是:
不让所有 Agent 都直接面对用户,而是由一个统一入口负责调度。
Supervisor 和普通 Controller 有什么区别?
从代码结构上看,Supervisor 有点像后端 Controller + Service 调度层。
但区别是:
普通 Controller 通常是规则判断:
if (type.equals("rag")) {
ragService.answer();
} else if (type.equals("ops")) {
opsService.analyze();
}
而 Supervisor 可以让大模型参与判断:
用户这个问题属于知识库问答、运维分析、报告生成,还是普通聊天?
也就是说,Supervisor 不只是路由器,它还可以具备一定的语义理解能力。
4. Planner-Executor-Replanner:复杂任务最常见的架构
这个模式非常适合复杂 Agent 系统。
它的流程是:
用户任务
↓
Planner 生成计划
↓
Executor 执行计划
↓
判断结果是否满足目标
↓
不满足 → Replanner 重新规划
↓
满足 → 输出最终结果
可以画成:
User
↓
Planner
↓
Plan Steps
↓
Executor
↓
Observation
↓
Need Replan?
├── Yes → Replanner → New Plan → Executor
└── No → Final Answer
为什么这个模式适合 AIOps?
因为运维问题天然是不确定的。
比如用户说:
服务挂了,帮我看看。
这句话非常模糊。
Agent 可能需要:
1. 先识别服务名
2. 查询最近告警
3. 查询服务状态
4. 查询错误日志
5. 查询接口耗时
6. 判断是代码问题、资源问题,还是依赖服务问题
7. 生成排查建议
但是执行过程中,可能发现:
- 服务名不明确;
- 告警数据为空;
- 日志查询失败;
- 指标接口超时;
- 检索结果不相关。
所以它必须支持重新规划。
五、Swarm 是什么?它和编排有什么关系?
Swarm 可以理解为一种更偏“群体协作”的多 Agent 模式。
它不是固定的主从结构,而是让多个 Agent 之间可以根据任务进行交接。
比如:
客服 Agent 发现问题属于技术排障
↓
交接给运维 Agent
运维 Agent 发现需要查知识库
↓
交接给知识库 Agent
知识库 Agent 找到相关文档
↓
交回运维 Agent 汇总
这个过程里面有一个关键词:
Handoff
也就是“交接”。
Handoff 是什么?
Handoff 就是一个 Agent 把任务转交给另一个更合适的 Agent。
比如:
当前 Agent:我是 Chat Agent,我只负责普通对话。
用户问题:帮我分析支付服务告警。
判断结果:这个问题更适合 AIOps Agent。
动作:handoff 到 AIOps Agent。
可以理解成:
不是一个 Agent 什么都做,而是谁更专业,就交给谁。
Swarm 是不是分发?
可以这么理解,但不完全等同于简单分发。
普通分发是:
根据规则,把请求发给某个处理器。
Swarm 更强调:
多个 Agent 在执行过程中,可以动态交接任务。
也就是说,它不只是入口处路由一次,而是在任务过程中也可以流转。
六、多 Agent 编排里最重要的东西:状态
很多人学多 Agent,会把注意力放在:
有几个 Agent?
每个 Agent 的 Prompt 怎么写?
用了什么框架?
但真正落地时,最核心的是:
状态怎么维护?
也就是所谓的:
State
Context
OverallState
Shared Memory
为什么需要全局状态?
假设一次任务执行过程是这样的:
用户问题:
分析支付服务昨晚异常原因
Planner 输出:
1. 查告警
2. 查日志
3. 查指标
4. 生成报告
Executor 执行结果:
告警:支付服务错误率升高
日志:大量 timeout
指标:下游库存服务响应变慢
这些中间信息必须被保存下来。
否则后面的 Report Agent 根本不知道前面查到了什么。
所以需要一个共享状态对象。
一个简化版 State 可以长这样
public class AgentState {
private String sessionId;
private String userQuestion;
private String taskType;
private List<String> planSteps;
private Map<String, Object> observations;
private List<String> executedSteps;
private boolean needReplan;
private String finalAnswer;
}
这个 State 不是给用户看的,而是给编排器和 Agent 之间传递信息用的。
每个 Agent 不一定直接共享所有上下文
这里要注意:
不是所有 Agent 都应该拿到完整上下文。
比如:
Log Agent 只需要知道服务名、时间范围、日志关键词;
Metric Agent 只需要知道服务名、指标类型、时间范围;
Report Agent 才需要拿到全部中间结果。
如果每个 Agent 都拿到所有内容,反而会增加干扰。
所以更合理的做法是:
全局 State 保存完整任务状态;
每个 Agent 只读取自己需要的部分。
这就是上下文工程在多 Agent 里的体现。
七、多 Agent 编排器到底负责什么?
编排器不是 Agent 本身,它更像一层控制逻辑。
它主要负责:
1. 接收用户请求
2. 创建任务状态 State
3. 调用 Planner 生成计划
4. 按计划调度 Executor
5. 保存每一步执行结果
6. 判断是否需要 Replan
7. 汇总结果
8. 返回最终答案
也就是说,编排器负责“流程控制”,Agent 负责“智能判断或执行”。
编排器和 Agent 的关系
可以这样理解:
Agent:负责思考和执行某个具体任务
Orchestrator:负责让多个 Agent 按正确顺序协作
比如:
Planner Agent:生成计划
Log Agent:查日志
Metric Agent:查指标
RAG Agent:查知识库
Report Agent:生成报告
Orchestrator:决定谁先执行,谁后执行,结果怎么传递
八、代码中怎么实现一个简单的多 Agent 编排?
下面用伪代码模拟一下。
1. 定义统一 Agent 接口
public interface Agent {
String name();
AgentResult execute(AgentContext context);
}
每个 Agent 都实现这个接口。
比如:
public class PlannerAgent implements Agent {
@Override
public String name() {
return "plannerAgent";
}
@Override
public AgentResult execute(AgentContext context) {
// 调用大模型生成执行计划
return AgentResult.success("生成任务计划");
}
}
2. 定义上下文对象
public class AgentContext {
private String sessionId;
private String userInput;
private Map<String, Object> state = new HashMap<>();
public Object get(String key) {
return state.get(key);
}
public void put(String key, Object value) {
state.put(key, value);
}
}
这个 Context 负责在多个 Agent 之间传递状态。
3. 定义执行结果
public class AgentResult {
private boolean success;
private boolean needReplan;
private String message;
private Object data;
public static AgentResult success(Object data) {
AgentResult result = new AgentResult();
result.success = true;
result.data = data;
return result;
}
public static AgentResult fail(String message) {
AgentResult result = new AgentResult();
result.success = false;
result.message = message;
return result;
}
}
这里的 needReplan 就是用来判断是否需要重新规划。
4. 编排器负责调度
public class AgentOrchestrator {
private final PlannerAgent plannerAgent;
private final LogAgent logAgent;
private final MetricAgent metricAgent;
private final ReportAgent reportAgent;
private final ReplannerAgent replannerAgent;
public String handle(String userInput) {
AgentContext context = new AgentContext();
context.setUserInput(userInput);
// 1. 规划任务
AgentResult planResult = plannerAgent.execute(context);
context.put("plan", planResult.getData());
// 2. 执行日志查询
AgentResult logResult = logAgent.execute(context);
context.put("logResult", logResult.getData());
// 3. 执行指标查询
AgentResult metricResult = metricAgent.execute(context);
context.put("metricResult", metricResult.getData());
// 4. 判断是否需要重新规划
if (!logResult.isSuccess() || !metricResult.isSuccess()) {
AgentResult newPlan = replannerAgent.execute(context);
context.put("newPlan", newPlan.getData());
}
// 5. 生成最终报告
AgentResult reportResult = reportAgent.execute(context);
return reportResult.getData().toString();
}
}
这就是最朴素的多 Agent 编排。
真实项目里可以继续优化:
支持 DAG
支持并行执行
支持超时控制
支持失败重试
支持 Agent 注册表
支持动态路由
支持状态持久化
支持 SSE 流式输出
九、在 Spring AI / Spring AI Alibaba 项目中怎么理解?
如果是 Java 技术栈,尤其是 Spring Boot + Spring AI Alibaba,大概可以这样落地。
1. 每个 Agent 本质上是一个 Service
比如:
PlannerAgentService
LogAgentService
MetricAgentService
KnowledgeAgentService
ReportAgentService
每个 Service 内部可以调用:
ChatModel
Tool Calling
RAG Retriever
MCP Tool
外部 API
数据库
日志系统
也就是说,Agent 不一定是某个框架强制提供的类。
在工程里,它完全可以是你自己封装出来的业务组件。
2. 编排器也是一个 Service
比如:
@Service
public class AiOpsOrchestratorService {
public AiOpsReport analyze(AiOpsRequest request) {
// 1. 创建上下文
// 2. 调用 Planner
// 3. 调用 Executor
// 4. 判断是否 Replan
// 5. 汇总结果
}
}
从 Java 后端视角看,多 Agent 编排不是玄学,本质还是:
Controller 接收请求
Service 编排业务
Agent 负责智能能力
Tool 负责外部执行
State 负责状态传递
3. Tool Calling 负责“动作”,编排器负责“流程”
这个区别很重要。
很多人会混淆:
Function Calling 是多 Agent 编排吗?
不是。
Function Calling 只是让模型能够调用工具。
比如:
queryLog()
queryMetric()
searchKnowledge()
但它不负责整体流程控制。
真正的编排要解决:
先调用哪个?
失败怎么办?
多个结果怎么合并?
什么时候停止?
什么时候重试?
什么时候重新规划?
所以:
Tool Calling = 单个动作能力
Agent = 具备目标和判断能力的执行单元
Orchestrator = 多个 Agent 的调度与控制中心
十、多 Agent 编排的几种设计选择
做项目时,可以根据复杂度选择不同方案。
1. 简单任务:Router + Agent
适合场景:
用户问题分类比较明确
不同任务之间没有复杂依赖
结构:
User → Router/Supervisor → 某个 Agent → Answer
比如:
知识库问题 → RAG Agent
运维问题 → AIOps Agent
闲聊问题 → Chat Agent
2. 中等复杂度:Workflow + Agent
适合场景:
流程比较固定
每一步都可控
结构:
User → Step1 → Step2 → Step3 → Answer
比如 RAG:
问题改写 → 检索 → 重排 → 生成
比如文档处理:
上传 → 解析 → 切片 → 向量化 → 入库
3. 复杂任务:Planner-Executor-Replanner
适合场景:
任务目标明确,但执行路径不确定
比如:
智能运维
复杂数据分析
自动化报告
多工具协同任务
结构:
User → Planner → Executor → Evaluate → Replanner → Final
这种模式是目前复杂 Agent 项目里比较值得重点掌握的。
4. 高灵活任务:Swarm / Handoff
适合场景:
任务边界不固定
多个专家 Agent 之间需要动态交接
结构:
Agent A → Agent B → Agent C → Agent A → Final
比如:
客服 Agent → 技术 Agent → 知识库 Agent → 报告 Agent
这种模式更灵活,但也更难控制。
如果没有状态管理、权限控制和终止条件,很容易出现循环交接。
十一、多 Agent 编排最容易踩的坑
1. Agent 拆得太碎
很多人一上来就设计十几个 Agent:
意图识别 Agent
问题改写 Agent
检索 Agent
排序 Agent
总结 Agent
报告 Agent
检查 Agent
反思 Agent
路由 Agent
工具 Agent
看起来很高级,但实际会带来:
- 调用链过长;
- 延迟增加;
- 成本增加;
- 状态传递复杂;
- 调试困难。
Agent 不是越多越好。
更合理的原则是:
只有当一个职责足够独立,并且需要单独的上下文、工具或判断逻辑时,才拆成 Agent。
2. 完全依赖大模型自由决策
有些人会把所有控制权都交给大模型:
你自己决定下一步做什么。
这样虽然灵活,但不稳定。
真实项目中,更推荐:
确定性流程 + 大模型判断
也就是:
- 流程框架由代码控制;
- 关键节点让大模型判断;
- 工具调用结果由程序校验;
- 最终输出要有依据。
这样系统才可靠。
3. 没有终止条件
多 Agent 最大的问题之一就是可能“转圈”。
比如:
Planner → Executor → Replanner → Executor → Replanner → Executor ...
如果没有限制,就会无限循环。
所以必须设置:
最大执行轮数
最大重试次数
最大工具调用次数
最大 token 成本
任务完成判断条件
失败降级策略
例如:
int maxRounds = 3;
while (needReplan && currentRound < maxRounds) {
// 重新规划并执行
currentRound++;
}
超过次数后,就应该返回:
当前数据不足,无法继续自动分析,已基于已有信息生成阶段性结论。
4. 没有保存中间结果
多 Agent 协作时,每一步都应该有 Observation。
比如:
Planner 生成了什么计划?
Log Agent 查询到了什么?
Metric Agent 返回了什么?
RAG Agent 检索到了哪些文档?
Report Agent 使用了哪些依据?
这些中间结果不仅用于下一步推理,也方便排查问题。
否则系统出错时,你根本不知道是哪一步错了。
十二、我对多 Agent 编排的理解
经过这段时间学习,我觉得多 Agent 编排可以用一句话概括:
单 Agent 解决的是“让大模型具备工具能力”,多 Agent 编排解决的是“让多个智能单元可靠协作完成复杂任务”。
真正的 Agent 系统,不是简单地把很多 Prompt 堆在一起,也不是随便起几个 Agent 名字。
它背后需要的是工程化设计:
任务拆分
角色边界
状态管理
流程控制
异常处理
结果评估
重新规划
上下文裁剪
工具权限
执行记录
也就是说,多 Agent 编排不是为了炫技,而是为了让复杂 AI 应用从“能演示”走向“能稳定运行”。
十三、结合我的项目可以怎么理解?
如果结合我现在做的智能问答与运维 Agent 项目,可以这样设计:
用户请求
↓
Supervisor Agent:判断任务类型
↓
如果是知识库问题:
→ Knowledge Agent
→ RAG 检索
→ 生成答案
如果是运维问题:
→ Planner Agent
→ Log Agent 查询日志
→ Metric Agent 查询指标
→ RAG Agent 查询排障知识
→ Replanner 判断是否需要补充分析
→ Report Agent 生成报告
如果是普通对话:
→ Chat Agent
整体结构可以表示为:
┌──────────────────┐
│ User Request │
└─────────┬────────┘
↓
┌──────────────────┐
│ Supervisor Agent │
└─────────┬────────┘
┌────────────────────┼────────────────────┐
↓ ↓ ↓
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Knowledge │ │ AIOps │ │ Chat │
│ Agent │ │ Agent │ │ Agent │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
↓ ↓ ↓
RAG Answer Planner-Executor Normal Reply
↓
Log / Metric / RAG
↓
Replanner
↓
Report Agent
↓
Final Answer
这样设计的好处是:
1. 不同 Agent 职责清晰
2. 运维任务可以按步骤执行
3. 中间结果可以进入共享状态
4. 查询失败时可以重新规划
5. 最终报告有依据可追踪
这比一个 Agent 直接绑定所有工具要稳定很多。
十四、总结
多 Agent 编排是 Agent 工程化里非常核心的一环。
如果说最开始的 Agent 是:
LLM + Prompt + Tool
那么真正复杂一点的 Agent 系统应该是:
LLM + Tool + Memory + State + Workflow + Orchestrator + Evaluation
单 Agent 更适合简单任务,多 Agent 更适合复杂任务。
但多 Agent 不是越多越好,关键是要解决真实问题:
任务怎么拆?
谁来执行?
状态怎么传?
失败怎么办?
什么时候结束?
结果怎么验证?
只有把这些问题想清楚,多 Agent 才不是概念堆砌,而是真正可以落地的系统架构。
我现在对多 Agent 编排的理解是:
Agent 负责智能,工具负责执行,状态负责传递,编排器负责让整个系统可靠地完成任务。
这也是从普通 AI 应用走向 Agent 工程化时,必须跨过去的一步
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)