# 发布逻辑

## 什么是发布

发布是把当前 Agent 配置保存为一个可对外使用的发布版本。发布时后端会校验当前配置，生成新的 Agent 版本，并将当前 Agent 配置快照写入发布记录和发布历史。

如果不发布，Agent 可以在个人空间里继续编辑和调试，但不会作为发布版本出现在广场，也不能作为 API Agent 或技能 Agent 对外使用。

自己用是可以的（通过接口、cli 等方式），如果不需要对外使用做为 API 或技能等，可以不发布。

## 普通 Agent、技能 Agent 和 API Agent

发布时可以选择是否发布为特殊类型：

| 类型 | 含义 |
| --- | --- |
| 普通 Agent | 没有勾选发布为技能 Agent、API Agent 等特殊类型的 Agent。通常用于普通对话使用。 |
| 技能 Agent（sub-agent） | 发布为 `skill_agent`，可作为工具或子 Agent 被其他 Agent 编排使用。 |
| API Agent | 发布为 `api_agent`，用于 API Chat 等面向系统集成的调用场景。普通页面对话可用，不代表 API Chat 一定可用；API Chat 通常要求发布为 API Agent。 <br><br>**注意**：目前和普通 Agent 区分已不明显，后续可能会进行合并或调整。|

后端还保留 `web_sdk_agent`、`data_flow_agent` 等发布形态，属于更细分的集成能力，普通接入可先忽略。

## 更新发布信息

更新发布信息是修改已经发布版本的发布元信息，例如发布到哪里、发布为什么类型、分类和权限控制等。它的前提是 Agent 处于“已发布”状态，也就是配置内容没有发生变化。

从当前代码逻辑看，`PUT /api/agent-factory/v3/agent/{agent_id}/publish-info` 会更新已有 release 记录中的发布描述、发布位置、发布类型、权限和分类，并返回原有版本号。它不会调用版本号生成逻辑，也不会写入新的发布历史，所以不会生成新的 Agent 版本。

界面上这种场景显示的是“更新发布信息”按钮。

## 重新发布

重新发布，也可以理解为再次发布，是指 Agent 已经发布过，但发布后又修改了配置内容。此时个人空间状态会变成“已发布编辑中”，界面上显示“发布”按钮，而不是“更新发布信息”按钮。

再次点击发布会把当前配置作为新的发布版本发布出去。后端会基于最新发布历史生成下一个版本号，并新增一条发布历史。

## 什么时候需要重新发布

只要希望外部使用方看到配置内容变化，就需要重新发布。常见场景包括：

- 修改输入输出配置。
- 修改大模型配置或默认模型。
- 修改系统提示词、角色设定或 Agent 模式。
- 增删工具、技能、MCP 或知识网络。
- 修改 Dolphin、ReAct 等运行编排相关配置。

总之，只要配置内容发生了变化，就可以考虑重新发布。

如果只是调整发布范围、发布类型、分类或权限，并且配置内容没有变化，则使用“更新发布信息”。
