内容提要
腾讯 Octop 是开源自托管 AI 助手平台,支持多用户与多 Agent,可接入云端或本地模型,并通过消息通道发起任务。文章对比其与 WorkBuddy 的差异,并沿源码分析 Agent Loop、工具调用、会话状态与权限边界,指出其基于 Deep Agents、LangChain、LangGraph 构建,本地部署需自备模型与运行环境。
延伸解读
自托管不等于数据全本地
Octop 支持自托管,但数据流取决于模型和工具配置。接入云端模型时,请求会发送到模型供应商;使用联网工具或连接器时,数据也会与相应服务交换。即使数据目录在本机,也不能直接推出所有处理都在本地完成。用户需逐项检查模型和工具的数据流,才能判断是否符合隐私要求。
与 WorkBuddy 的核心差异在控制权
Octop 和 WorkBuddy 都能处理文件、生成产物,但定位不同。WorkBuddy 是开箱即用的 AI 工作台,内置模型并支持自定义 API 和 Ollama;Octop 是自托管平台,需自行配置模型、维护实例,但可修改应用、Harness 和 backend 代码。如果只需本地模型或 MCP 接入,WorkBuddy 已提供;若想控制执行链和会话保存方式,可评估 Octop。
Agent Loop 的结束不等于任务正确
Octop 的 Agent Loop 由 LangGraph 状态图驱动,模型节点与工具节点循环执行,直到模型不再返回工具调用。但循环结束只表示执行图终止,不验证笔记事实是否正确,也不证明任务满足要求。质量判断仍需检查来源、工具输出和最终产物。长期任务还需设置配额和人工验收,避免无限循环或成本失控。
本地部署需注意 backend 隔离边界
Octop 在 POSIX 系统上未显式配置 backend 时,默认使用以根目录为起点的 local_shell。提示词要求操作留在工作区,但提示词不能替代操作系统隔离。给整个服务套 Docker 容器也不会自动变成每用户独立容器。实际隔离能力取决于 backend 配置,如 Docker 或 OpenSandbox,以及宿主机权限。部署时应根据安全需求明确选择 backend。
Q&A
腾讯 Octop 是什么?它主要能做什么?
腾讯 Octop 是开源、自托管、支持多用户和多 Agent 的 AI 助手平台。它提供 Web 控制台、桌面客户端和 CLI,可配置模型、创建专家、接入工具、管理会话与定时任务。模型需另外接入,支持云端 API 或 Ollama 等本地模型服务。可用于个人资料整理、网页操作与开发辅助、家庭或小团队共用等场景。
Octop 和 WorkBuddy 有什么区别?
Octop 是自托管 AI 助手平台,用户自己运行实例、管理服务与数据,模型自行配置,可修改应用、Harness 与 backend 代码,源码采用 MIT 许可证。WorkBuddy 是腾讯的 AI 工作台,安装客户端使用账号及产品功能,有内置模型也支持自定义 API 和 Ollama,扩展通过开放平台,有免费体验与付费订阅。Octop 更强调实例与代码控制权,WorkBuddy 更偏向现成办公流程。
Octop 的 Agent Loop 是怎么工作的?
Agent Loop 是“判断下一步、执行动作、读取结果、继续判断”的循环,由 LangGraph 状态图组织,核心是 model 节点与 tools 节点。模型读取消息和工具定义,若有待执行的 tool_calls,则进入 tools 节点执行工具,将 ToolMessage 加回消息状态,再返回 model 决定下一步;若没有工具调用,本轮结束。
Octop 本地部署需要准备什么?
需要准备运行环境、模型和存储。接云端 API 时,本机主要运行 Octop、数据库和工具;接 Ollama 时还要承担模型推理。官方快速开始只给出“现代多核 CPU、数 GB 内存”和足够磁盘空间的宽泛要求,没有统一最低配置表。安装可选桌面端、CLI(使用 uv 准备 Python 3.12 隔离环境)或 Docker。默认数据位于 ~/.octop/。
Octop 的权限和人工确认机制是怎样的?
Harness 的 ToolGuardMiddleware 在工具执行前扫描参数,按规则阻断、记录警告或通过 interrupt 等待人工决定,该版本默认启用 guard 且模式为 block。HITL 需配置具体工具和规则。ask_user_question 是模型向用户提问以替代工具执行。对话模式也有执行端限制:Ask 主要开放读取类工具,Plan 允许在约定计划路径写文件,Craft 模式才进入更完整执行能力。
Octop 的会话状态和长期记忆是如何保存的?
Checkpoint 通过 thread_id 保存 LangGraph 执行状态,Harness 优先使用显式配置的 checkpointer,否则可复用 octop-memory 的 Memory 实例,再回退到工作区里的 AsyncSqliteSaver。长期记忆由 MemoryRuntime 接入,MemoryMiddleware 在新用户消息到来时触发召回,并在发送给模型的消息副本中重放该快照。上下文过长时,摘要 middleware 会缩减历史并保存旧内容到 backend。