AutoGPT Platform 会议录制机器人 Block 集成指南:Baas Bots 的 Join / Fetch / Leave / Delete 全流程实战
本篇指南围绕 AutoGPT Platform 内置的 Baas Bots 集成(Bot as a Service,机器人即服务),系统讲解如何让 AI 录播机器人自动加入 Zoom / Google Meet / Microsoft Teams 会议,完成录制、转写、数据获取与隐私清理的完整闭环。读完你将在 Agent 画布上熟练组合四个 Baas Bots Block,掌握每个输入参数的语义、底层 API 调用关系、耗时计费模型与典型业务场景。
Baas Bots 是什么:一键把"会议录播机器人"变成可编排的 Block
AutoGPT Platform(见 autogpt_platform)提供了一种将真实世界服务封装成可视化 Block 的能力。Baas Bots 正是这样一组会议录制机器人Block——它对接第三方 "Bots as a Service" 服务(Meeting BaaS),让开发者不必自建浏览器录像基础设施,即可让一个"机器人分身"自动进入视频会议,完成入会录制 → 取回数据 → 中途离场 → 永久删数据的整条生命周期管理。
在 baas/bots.py 中可以看到,这组能力被拆成四个独立 Block:
| Block(UI 名称) | 对应类 | 类别 | 固定 ID(UUID) |
|---|---|---|---|
| Baas Bot Join Meeting | BaasBotJoinMeetingBlock |
COMMUNICATION(通讯) | 377d1a6a-a99b-46cf-9af3-1d1b12758e04 |
| Baas Bot Leave Meeting | BaasBotLeaveMeetingBlock |
COMMUNICATION(通讯) | bf77d128-8b25-4280-b5c7-2d553ba7e482 |
| Baas Bot Fetch Meeting Data | BaasBotFetchMeetingDataBlock |
DATA(数据) | ea7c1309-303c-4da1-893f-89c0e9d64e78 |
| Baas Bot Delete Recording | BaasBotDeleteRecordingBlock |
DATA(数据) | bf8d1aa6-42d8-4944-b6bd-6bac554c0d3b |
这些 Block 类统一以 Block 结尾命名、模块位于 backend/blocks/baas 目录下,并在 blocks/init.py 中通过自动扫描 Block 子类完成注册——因此后端启动后,这组 Block 会直接出现在画布的 Block 库中,开发者只需在搜索框输入 "Baas Bot" 即可拖拽使用。
与视频录制直接相关的还有 Baas Bots 的资质成本说明:代码注释标明 Meeting BaaS 的录制费率约为 0.69 美元/小时(_MEETING_BAAS_USD_PER_SECOND = 0.69 / 3600,见 bots.py),下文"成本模型"小节会展开说明如何按实际时长结算。
前置条件:配置 Meeting BaaS API Key 凭据
由于会议录制走的是外部付费服务,所有 Baas Bots Block 的第一个输入都是 credentials(凭据),指向名为 baas 的服务商。服务商注册逻辑位于 _config.py:
baas = (
ProviderBuilder("baas")
.with_description("Meeting recording and transcription")
.with_api_key("MEETING_BAAS_API_KEY", "Meeting BaaS API Key")
.with_base_cost(5, BlockCostType.RUN) # Higher cost for meeting recording service
.build()
)
据此可以确认三件事:
- 服务商标识为
baas,描述为 "Meeting recording and transcription",即负责会议录制与会话转写; - 认证方式为 API Key,密钥存于
MEETING_BAAS_API_KEY环境变量对应的凭据项; - 服务商层设定了 5 信用额(RUN 计费类型)的基础运行成本,叠加到每次调用上。
在运行任何 Baas Bot Block 之前,请先在 AutoGPT Platform 的凭据管理中创建或导入一个 MEETING_BAAS_API_KEY,否则所有 Block 都会在凭据校验阶段失败。可参考仓库中 baas/_api.py 的实现来确认密钥的传递方式——客户端在初始化时会把该 Key 写入 x-meeting-baas-api-key 请求头。
核心 Block 详解
Baas Bot Join Meeting:让机器人入会并开始录制
这是整条链路的入口。它的作用正如其描述:"Deploy a bot to join and record a meeting"——部署一个录播机器人加入视频会议并开始录制与转写。
输入参数
| 输入 | 说明 | 类型 | 是否必填 | 源码默认值 |
|---|---|---|---|---|
| meeting_url | 机器人要加入的会议链接(Zoom / Meet / Teams) | str | 是 | — |
| bot_name | 机器人在会议中显示的名称 | str | 是 | — |
| bot_image | 机器人头像图片 URL(建议 16:9 比例) | str | 否 | "" |
| entry_message | 机器人入会后自动发送的聊天消息 | str | 否 | "" |
| reserved | 是否占用"预约席位",为 True 时机器人提前 4 分钟入会 | bool | 否 | False |
| start_time | 机器人入会的 Unix 时间戳(毫秒) | int | 否 | None |
| webhook_url | 接收该机器人事件通知的 Webhook 地址 | str | 否 | None |
| timeouts | 自动离会超时配置 | Dict[str, Any] | 否 | {} |
| extra | 附加到机器人上的自定义元数据 | Dict[str, Any] | 否 | {} |
底层实现
查看 bots.py 的 run(),可以还原完整的请求组装逻辑:
data = await api.join_meeting(
bot_name=input_data.bot_name,
meeting_url=input_data.meeting_url,
reserved=input_data.reserved,
bot_image=input_data.bot_image if input_data.bot_image else None,
entry_message=input_data.entry_message if input_data.entry_message else None,
start_time=input_data.start_time,
speech_to_text={"provider": "Default"}, # 固定使用默认转写引擎
webhook_url=input_data.webhook_url if input_data.webhook_url else None,
automatic_leave=input_data.timeouts if input_data.timeouts else None,
extra=input_data.extra if input_data.extra else None,
)
yield "bot_id", data.get("bot_id", "")
yield "join_response", data
值得注意的细节:
- 转写引擎固定为
{"provider": "Default"},即每次入会都开启语音转文字能力; timeouts输入在 API 层面对应automatic_leave(自动离会)参数,例如"会议无人说话 X 分钟后离开"之类的超时规则可以放进这个字典;bot_id是后续所有操作的核心句柄,必须把它通过连线传给 Fetch / Leave / Delete 等下游 Block,本 Block 同时把 API 返回的完整原始 JSON 原样透出到join_response。
输出
| 输出 | 说明 | 类型 |
|---|---|---|
| error | 操作失败时的错误信息 | str |
| bot_id | 已部署机器人的 UUID | str |
| join_response | join 操作返回的完整响应 | Dict[str, Any] |
适用场景
- 自动化录制:无需主持人操作即可自动录制会议;
- 会议助理:让机器人代替人类记笔记、转写客户会议或团队周会;
- 合规录制:确保所有关键会议都有存档,用于合规审查与质量保障。
Baas Bot Fetch Meeting Data:取回录制视频、转写稿与元数据
机器人完成录制后,用 bot_id 把成果取回来。本 Block "Retrieve recorded meeting data",一次返回录制文件地址、转写稿和会议元数据。
输入参数
| 输入 | 说明 | 类型 | 是否必填 | 源码默认值 |
|---|---|---|---|---|
| bot_id | 要取数机器人的 UUID | str | 是 | — |
| include_transcripts | 是否在响应中包含转写数据(含说话人识别与时间戳) | bool | 否 | True |
注意:虽然该字段非必填,但源码中 include_transcripts 的默认值是 True(见 bots.py),不显式传入也会返回完整转写稿。
输出
| 输出 | 说明 | 类型 |
|---|---|---|
| error | 操作失败时的错误信息 | str |
| mp4_url | 会议录制的下载地址(限时有效,应及时下载) | str |
| transcript | 会议转写数据(含说话人、时间戳) | List[Any] |
| metadata | 会议元数据与机器人信息 | Dict[str, Any] |
底层实现与"按时长计费"的关键逻辑
对照 bots.py,取数后的字段抽取规则非常清晰:
data = await api.get_meeting_data(bot_id=..., include_transcripts=...)
bot_meta = data.get("bot_data", {}).get("bot", {}) or {}
duration_seconds = float(bot_meta.get("duration_seconds") or 0)
if duration_seconds > 0:
self.merge_stats(NodeExecutionStats(
provider_cost=duration_seconds * _MEETING_BAAS_USD_PER_SECOND,
provider_cost_type="cost_usd",
))
yield "mp4_url", data.get("mp4", "")
yield "transcript", data.get("bot_data", {}).get("transcripts", [])
yield "metadata", bot_meta
也就是说:
mp4_url取自响应顶层的mp4字段,URL 限时有效,文档与 Schema 描述都强调应在拿到后尽快下载;transcript取自bot_data.transcripts,是含说话人识别与时间戳的列表;metadata则是bot_data.bot内嵌的会议与机器人元数据(其中包含用于计费的duration_seconds字段);- 当
duration_seconds > 0时,本 Block 会按实际录制秒数 ×(0.69/3600)美元 上报provider_cost,把"长会议欠费"的问题修正掉——详见下文成本模型小节。
适用场景
- 会议摘要:拉取转写稿交给 LLM 生成会议纪要与行动项;
- 录制归档:及时下载并归档会议录像用于留档或回看;
- 数据分析:基于会议元数据统计参会情况与会议时长。
Baas Bot Leave Meeting:中途让机器人离场
"Remove a bot from an ongoing meeting"。当需要提前停止录制时(例如会议进入敏感的非录制环节),调用本 Block 让机器人优雅退场,随后录制数据即可被 Fetch 取回。
输入参数
| 输入 | 说明 | 类型 | 是否必填 |
|---|---|---|---|
| bot_id | 要从会议中移除的机器人 UUID | str | 是 |
输出
| 输出 | 说明 | 类型 |
|---|---|---|
| error | 操作失败时的错误信息 | str |
| left | 机器人是否成功离场 | bool |
底层实现
在 bots.py 中,本 Block 把 bot_id 直接交给 API 客户端的 leave_meeting 方法;而 baas/_api.py 显示该方法是向 /bots/{uuid} 发送 DELETE 请求,HTTP 200 / 204 即视为离场成功并输出 left=True。也就是说,只要服务端接受了删除/退场请求,left 即为 True。
适用场景
- 提前终止:会议转入不录制的私下讨论时立刻停止录制;
- 按时长切片:只录下会议指定时段的内容;
- 故障恢复:录制出现异常时先 Leave 再重新 Join 一个新机器人。
Baas Bot Delete Recording:不可逆地删除会议录制数据
"Permanently delete a meeting's recorded data"。会议数据使用完毕后,用本 Block 将某个 bot_id 对应的全部录制文件与转写稿彻底删除。删除不可逆。
输入参数
| 输入 | 说明 | 类型 | 是否必填 |
|---|---|---|---|
| bot_id | 要删除数据的机器人 UUID | str | 是 |
输出
| 输出 | 说明 | 类型 |
|---|---|---|
| error | 操作失败时的错误信息 | str |
| deleted | 数据是否删除成功 | bool |
底层实现
见 bots.py 与 _api.py:删除操作对应 POST /bots/{uuid}/delete_data,仅当响应状态码为 200 时 deleted=True。
适用场景
- 隐私合规:按数据保留策略或用户"被遗忘权"请求删除录制;
- 存储成本治理:定期清理旧录制以控制存储费用;
- 后处理清理:完成摘要/归档后立刻销毁原始音视频与转写,降低数据泄露面。
端到端工作流:从"自动入会录制"到"取数分析"再到"安全清理"
四个 Block 单独看是原子能力,组合起来就是一条完整的"会议机器人自动化"流水线。下面是一张建议的 Agent 编排方式(所有连线通过变量名传递):
- Join(Baas Bot Join Meeting):传入
meeting_url、bot_name;如会议是预定事件,可设置reserved=True让机器人提前 4 分钟入场,或用start_time精确指定入场时刻; - 等待/通知:利用
webhook_url接收"会议结束、录制就绪"的事件;也可以在 Join 之后接等待节点,轮询 Fetch; - Fetch(Baas Bot Fetch Meeting Data):用 Join 输出的
bot_id取回mp4_url、transcript、metadata; - 消费(下游任意 AI Block):把
transcript交给文本/LLM Block 做会议摘要与行动项提取,把metadata交给分析类 Block 做时长与参与度统计; - Delete(Baas Bot Delete Recording):分析归档完成后,用同一个
bot_id删除原始数据,满足隐私与存储治理要求。
这一流程同时覆盖了官方文档为四类 Block 标注的主要 use case(自动录制、会议纪要、合规留档、数据清理),是 bots.md 描述的核心产品意图在 Agent 层面的落地。
底层 API 客户端:HTTP 端点与未暴露的扩展能力
所有 Baas Bots Block 的请求都收敛到同一个客户端 MeetingBaasAPI(baas/_api.py),基址为 https://api.meetingbaas.com,统一携带 x-meeting-baas-api-key 请求头,使用 SDK 提供的 Requests 异步客户端发送请求。已知端点汇总如下:
| 方法 | HTTP 调用 | 对应 Block / 用途 |
|---|---|---|
join_meeting |
POST /bots |
Join Meeting Block;可携带 recording_mode(默认 speaker_view 演讲者视图)、streaming、deduplication_key、zoom_sdk_id/pwd 等扩展参数 |
leave_meeting |
DELETE /bots/{uuid} |
Leave Meeting Block;200/204 判定成功 |
get_meeting_data |
GET /bots/meeting_data |
Fetch Meeting Data Block;query 参数 bot_id 与 include_transcripts |
delete_data |
POST /bots/{uuid}/delete_data |
Delete Recording Block;200 判定成功 |
retranscribe |
POST /bots/retranscribe |
未封装为独立 Block(202 表示异步受理):对已录制音频重新转写 |
get_screenshots |
GET /bots/{uuid}/screenshots |
未封装:取回会议期间捕获的截图 |
list_bots_with_metadata |
GET /bots/bots_with_metadata |
未封装:按 limit/offset/sort_by/sort_order/filter_by 分页罗列机器人及其元数据 |
从源码结构看,客户端层的能力明显多于 UI 层 Block——retranscribe、get_screenshots、list_bots_with_metadata 这三个方法(_api.py)目前停留在客户端层面,尚未暴露成画布上的可视化 Block。如果你的场景需要"批量管理多个录制机器人"或"对某个机器人重新转写",这些接口为后续二次封装预留了可能性。
成本模型:30 信用额预付 + 按时长结算的混合计费
会议录制是外部付费服务,AutoGPT Platform 为 Baas Bots 设计了混合成本模型,其规则写在 bots.py 的注释与装饰器中:
- Join Meeting Block:标注
@cost(BlockCost(cost_type=RUN, cost_amount=30)),即每次部署机器人预付 30 信用额的固定费用,用于覆盖中短会议的录制成本; - Fetch Meeting Data Block:采用
COST_USD(美元计费型)成本注解,其真实费用在运行时按会议的duration_seconds动态结算,不再存在"长会议少扣费"的问题; - 费率基准:代码注释的公开费率为 0.69 美元/小时,换算为每秒
0.69 / 3600美元后乘以实际录制秒数,作为provider_cost上报; - 服务商基础成本:
_config.py中另有每次执行 5 信用额(RUN)的服务商级基础成本。
这一结算行为被单元测试 baas/bots_cost_test.py 严格验证,测试断言覆盖了四种典型情况:
| 录制时长(duration_seconds) | 期望 provider_cost | 说明 |
|---|---|---|
| 3600(1 小时) | 0.69 美元 | 恰好一整小时 |
| 1800(30 分钟) | 0.345 美元 | 半小时 |
| 0 | 不产生费用 | 没有录制则不上报 |
| 缺失该字段 | 不产生费用 | 元数据异常时安全跳过 |
测试同时验证了无论时长如何,mp4_url、transcript、metadata 三个输出都会照常产出,成本上报失败不会阻断取数流程(bots_cost_test.py)。这意味着在编排长会议任务时,可以把 Fetch 块的执行视作真正的"按量计费"入口。
小结
Baas Bots 用四个职责单一、参数可配置、成本透明的 Block,把"让 AI 替人参加会议并完成录制转写"这一复杂外部集成,压缩成了 AutoGPT Platform 画布上可以自由编排的节点。实践中建议按"Join 入会 → webhook/轮询等待 → Fetch 取数 → 分析归档 → Delete 清理"的顺序使用,并注意 mp4_url 的限时性与 bot_id 沿线的正确传递;如需对计费行为做更深验证,可直接阅读并运行 bots_cost_test.py,从测试角度确认 $0.69/小时费率与时长结算的正确性。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00