腾讯 Octop 是什么:WorkBuddy 对比、Agent Loop 与本地部署

让 AI 整理一批资料时,我们通常还希望它能读取文件、查找补充信息、写出笔记,再把结果发到常用的聊天软件里。Octop 围绕这些任务,把模型、工具、文件工作区和消息入口组合成一套可以自己部署的 AI 助手。

腾讯云的官方仓库把 Octop 定位为开源、自托管、支持多用户和多 Agent 的助手平台。它与 WorkBuddy 的功能有重合,也常被拿来比较。读源码之前,先说清楚它能做什么,以及两者的差别。

本文于 2026 年 10 月 11 日核对产品文档。Octop 的功能和源码分析固定为 应用的 0c5a46a 提交,依赖按该提交的 uv.lock 读取;WorkBuddy 对比使用当天可访问的官方文档。文中的任务轨迹是说明机制的例子,尚未进行实机部署、两款产品的任务对照或性能测量。

Octop 是什么,能做什么

Octop 提供的是一套 AI 助手应用。安装后有 Web 控制台,也有桌面客户端和 CLI,可以配置模型、创建专家、接入工具、管理会话与定时任务。模型需要另外接入,可以使用云端 API,也可以连接 Ollama 等本地模型服务。使用入口和模型配置见官方说明。

这里的 Agent 可以理解成“能根据任务选择工具、观察结果并继续行动的助手”。Octop 中的“专家”则是一套具体配置:使用什么模型、遵循哪些提示、有哪些技能和工具、文件放在哪个工作区。资料整理专家与代码专家可以连接同一个模型,但拥有不同的资料和工具。

按照官方提供的能力,它可以用于这些场景。具体效果仍取决于模型、工具配置和任务本身:

  • 个人资料与日常任务:读取资料、检索知识库、写周报或笔记,保存会话和记忆,安排定时任务。
  • 网页操作与开发辅助:使用浏览器和终端工具处理任务,或通过 ACP(Agent Client Protocol)把编程任务交给已安装并认证的外部编程助手。
  • 家庭或小团队共用:管理员维护一个实例,为成员分配账号;每位用户可以有自己的专家与工作区,也可以共享专家配置和知识库。多专家协调功能标为 Beta。

这些能力的官方功能列表同时列出了飞书、钉钉、QQ、微信等消息通道。配置通道后,可以从聊天软件向专家发起任务;各平台仍有自己的接入与授权要求。

“自托管”表示你负责运行这套助手服务,可以管理应用配置、数据库和工作区。接入云端模型后,请求仍会发送到模型供应商;使用联网工具和连接器时,还会与相应服务交换数据。是否全程在本地处理,需要逐项检查模型和工具的数据流。

“开源版 WorkBuddy”该怎么理解

WorkBuddy 是腾讯提供的 AI 工作台。用户用自然语言提出任务,它可以规划步骤、处理授权的本地文件,并生成文档、表格、演示稿或分析结果。这些是它在官方产品介绍中的主要使用方向。

把 Octop 类比成“开源版 WorkBuddy”,容易理解它们的共同用途:用户提出任务,助手调用工具处理资料与文件,交付可检查的产物。Octop 还把应用源码和运行时开放出来,允许自行部署与修改。

但在本次核对的 Octop 官方仓库、发布页及 WorkBuddy 产品文档中,没有找到腾讯把 Octop 定义为“WorkBuddy 源码开源版本”的说明。Octop 的官方开源页面明确写的是“源自 LightClaw ACE”。因此,本文把这个称呼当作功能类比,不据此推断两者同源、同团队或功能完全一致。

与 WorkBuddy 对比,差别在哪里

下面比较的是公开文档中的定位与能力。Octop 对应前述固定提交,WorkBuddy 对应 2026 年 10 月 11 日的产品文档;没有做同一任务下的速度、成功率或产物质量测试。

比较项OctopWorkBuddy
产品重点自托管 AI 助手平台,面向个人、家庭和小团队,也提供桌面使用入口面向工作任务的 AI 工作台,把文件处理、办公产物和协作做成应用功能
运行与维护自己运行实例,管理服务、数据、备份和升级;可从桌面版开始,也可部署服务安装产品客户端,使用账号及产品提供的功能;更新与权益遵循产品规则
模型接入自行配置模型供应商或本地模型服务,按专家选择模型有内置模型,也支持自定义 API 和 Ollama 本地模型
扩展方式可配置专家、技能、MCP、插件,还可修改应用、Harness 与 backend 代码开放平台支持自定义专家、技能和连接器,专家可声明 MCP 依赖
多人和多 Agent同一实例支持多个用户及专家,提供共享配置、知识库和 Beta 专家团队协调提供专家与专家团队,也有团队空间和多人、多 Agent 资料协作
工作区与执行环境可配置本地目录、Docker 等 backend,以及 PostgreSQL、COS/S3 等文件存储后端;隔离能力取决于具体配置产品可处理授权的本地文件;专家与连接器按照产品定义的接口、权限和配置工作
费用与投入源码采用 MIT 许可证;模型 API、本地算力、服务器及维护时间另行计算有免费体验与付费订阅;自定义模型费用按第三方供应商规则承担

Octop 一侧的依据是功能说明及后文分析的实现。WorkBuddy 一侧分别依据模型配置、开放平台专家文档、多人多 Agent 协作和订阅说明。

所以,只想接入本地模型、添加一个技能或使用 MCP,未必需要换到 Octop。WorkBuddy 的官方文档已经提供这些接入方式。Octop 的区别更集中在实例与代码的控制权:你可以检查并修改工具执行链、会话保存方式和工作区后端,也要承担配置、维护和验证的工作。

按这些差别判断,想尽快使用现成办公流程的用户,可以先评估 WorkBuddy;希望在自己的电脑或服务器维护一套助手,并需要修改运行机制的用户,可以进一步评估 Octop。这是基于部署方式与扩展范围的选型判断,尚无证据证明哪一个在同样任务上更快、更稳定或更便宜。

接下来以“读一下这个项目的文档,整理成一份笔记”为例,追踪任务怎样执行。Octop 应用层管理用户、专家和消息入口;octop-harness 装配模型、工具和运行策略;Deep Agents 与 LangGraph 组织反复调用模型和工具的循环。沿着这条链路,可以看清自托管后究竟能控制哪些部分。

先确定分析的是哪一套代码

这个项目拆成了多个仓库。如果只在 Octop 应用里搜索一个 while 循环,很容易漏掉实际执行逻辑。

层次本文对应的代码主要职责
Octop 应用提交 0c5a46a,项目版本 1.0.2b6Dashboard、IM、用户权限、专家配置、知识库、定时任务和历史展示
Octop Harnessoctop-harness==1.0.1将模型、工具、记忆、backend 和 middleware 装成可运行的 Agent
Deep Agentsdeepagents==0.7.9文件工具、技能、子 Agent、上下文压缩及 Agent 构建
LangChain / LangGraphlangchain==1.3.18、langgraph==1.2.11模型节点、工具节点、状态图、条件跳转和 checkpoint

版本来自应用锁文件。pyproject.toml 对 Harness 的要求是 >=1.0.1,所以重新解析依赖的安装、桌面包和这个源码快照,未必拥有完全相同的运行版本。

本文同时核对了锁文件中的 Python wheel 与对应发布标签。后面的代码链接固定到提交,避免用 Harness 新版本的行为解释旧锁文件。

Deep Agents 和 LangGraph 各自负责什么

读到 create_deep_agent、create_agent 和 graph.astream 时,容易把这几个名字当成不同的助手。它们对应的是构建和运行助手的不同层次。先以“读取项目资料,整理成一份笔记”为例,说明这些库提供什么,再看 Octop 怎样把它们装起来。

Deep Agents:给 Agent 配上处理长任务的基础能力

Deep Agents 是 LangChain 团队提供的开源 Agent harness。这里的 harness 可以理解成一套运行支撑程序:连接模型调用,准备工具和上下文,让助手能持续执行任务。

对资料整理任务来说,只把用户的一句话发送给模型还不够。助手需要找到文件、读取内容、保留中间结果,再写出笔记。任务变长后,还要处理上下文容量和子任务分工。Deep Agents 把这些常用能力组合起来,让开发者通过 create_deep_agent 构建 Agent。

本文对应的 deepagents==0.7.9 中,可以看到这些能力的装配路径:

  • 文件工具与 backend:提供查找、读取、写入和编辑文件的工具,由 backend 决定文件如何存取;命令执行还取决于 backend 是否支持相应接口。
  • 技能加载:从技能目录读取任务说明,按需向模型提供详细流程。例如整理笔记时,可以加载规定标题、引用方式和输出位置的技能。
  • 子 Agent:通过 task 工具委派子任务,让子 Agent 在自己的上下文里完成工作,再把结果交回主 Agent;具体工具是否可用受配置影响。
  • 上下文管理:处理较大的工具结果,并在需要时摘要对话,减少长任务占满上下文的情况。摘要仍可能遗漏细节。

这些职责来自固定版本的构建代码。官方概览用于解释概念,本文的默认值和执行行为仍以锁定版本为准。

LangGraph:保存状态,控制执行步骤之间的流转

LangGraph 是用于编排有状态任务的底层框架和运行时。“有状态”表示程序会保留当前消息、工具结果和执行进度,后续步骤可以继续使用这些信息。

它把执行过程组织成图。这里的图描述的是程序执行关系:

概念在资料整理任务中的含义
节点(node)一段执行逻辑,例如调用模型,或执行模型提出的文件读取工具
状态(state)步骤之间传递的数据,例如用户任务、已有消息与工具返回内容
边(edge)决定接下来运行哪个节点;条件边可以根据是否有待执行工具调用,选择继续或结束

例如,模型生成 read_file 调用后,程序沿条件边进入工具节点。工具把文件内容加回消息状态,程序再回到模型节点。模型可以继续查找其他文件,也可以写出最终笔记。图里的执行结构由程序定义,每一步具体使用哪个工具则由模型输出和运行规则共同决定。

LangGraph 还提供流式输出、checkpoint 和人工交互暂停等机制。配置持久化 checkpointer 后,可以按 thread_id 保存图状态;配置人工交互后,可以暂停执行,等待用户决定,再继续运行。内存中的 checkpointer 无法在进程重启后保留数据,外部工具产生的写文件、发请求等副作用也需要应用另行处理。持久化说明

Octop 怎样把这些层连接起来

中间还有一层 LangChain。在本文分析的路径中,它提供模型与工具接口,并通过 create_agent 构建常见的模型与工具循环;这个循环运行在 LangGraph 上。LangChain Agent 说明

Octop 的实际装配关系可以简化为:

1
2
3
4
5
6
7
8
9
Octop 应用:读取用户、专家、连接器和工作区配置
↓
Octop Harness:组合模型、工具、记忆与运行策略
↓
Deep Agents create_deep_agent:加入文件、技能、子 Agent 和上下文管理
↓
LangChain create_agent:构建 model / tools 节点与条件跳转
↓
LangGraph:运行状态图,处理状态保存、流式事件与暂停恢复

调用链可以对照 HarnessAgent._build_graph、Deep Agents graph.py 和 LangChain factory.py 阅读。

所以,文件工具、子 Agent、上下文压缩和执行状态保存,有明确的上游实现。Octop 在这些基础上加入用户与专家管理、统一消息入口、连接器、知识库和产物展示。这样更容易判断它的工程贡献,也能避免把上游框架已有的能力都算成 Octop 独有优势。

一条消息怎样进入 Agent

先看 Dashboard 的普通执行请求。正常路径可以简化为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dashboard user_turn
↓
chat/ws.py:认证、校验专家和会话
↓
prepare_dashboard_turn:准备本轮配置
↓
channel_manager.enqueue:进入进程内消息管道
↓
GlobalProcessor.iter_turn_chunks
↓
AgentManager.stream:取得会话执行锁
↓
HarnessAgent.stream → LangGraphProtocol
↓
graph.astream:开始模型与工具循环

入口先处理身份和会话

WebSocket 路由处理 user_turn 消息前,会验证 token、检查用户对专家的访问权限,再检查会话归属。随后调用 prepare_dashboard_turn,将请求变成统一的 InboundMessage,交给 channel_manager.enqueue。

Octop 的单进程设计包含进程内排队。官方说无须外部消息队列,指的是不用另外部署消息代理或独立 worker。排队、分发和执行协调依然存在。

本轮准备代码会解析或创建 thread_id,核对模型、技能和 MCP 选择,并预加载本轮选中的 MCP 服务。上传文件会转成工作区路径等内容块,不依赖前端预览 URL 作为文件执行依据。

这里有 3 个不同的身份:user_id 表示使用者,agent_id 表示专家,thread_id 表示会话。同一个专家可以有多个会话;同一个模型也可以被不同专家使用。

消息处理器准备运行参数

GlobalProcessor.iter_turn_chunks把消息交给运行时前,还会处理斜杠命令、待回答的人工交互,再决定是否进入普通模型请求。某些命令可以直接结束,用户发来一条消息并不一定会调用 LLM。

普通请求由 _build_dashboard_request 组合消息内容、模型选择、推理参数、知识库范围和本轮工具设置。模型收到的内容因此受当前会话和配置影响,并非只取聊天框里的一句话。

随后调用 AgentManager.stream。它按 (agent_id, thread_id) 取得执行锁,让同一会话的普通执行与人工确认恢复共用一道 checkpoint 写入保护。不同会话仍可能并发,文件系统和外部服务的冲突需要另行处理。

专家启动时到底装了什么

“专家”在代码里是一套运行配置。AgentManager._build_harness_config从数据库里的 AgentRow 读取配置,解析工作区、backend、默认模型、系统提示、技能、连接器和安全策略。

应用还会注入自己的工具和 middleware,例如知识库工具、定时任务工具、插件工具、Token 配额检查、浏览器配置和产物记录。Harness 再加入网页抓取、浏览器操作、记忆工具等能力。有些能力受配置或凭据控制,不能把候选工具清单视为每个专家都已启用的工具。

最终 HarnessAgent._build_graph把模型、工具、middleware、backend、技能路径、记忆路径和 checkpointer 传给 deepagents.create_deep_agent。Deep Agents 再调用 LangChain 的 create_agent,编译出 LangGraph 状态图。

这解释了两个容易混在一起的概念:

  • 模型负责根据当前上下文生成回答或工具调用。
  • 专家运行环境决定模型能看到哪些资料和工具、工具在哪里执行、状态怎样保存。

调整专家提示词和工具组合,可以改变任务分工。模型本身的理解、推理和工具调用能力仍然是任务质量的主要约束。

Agent Loop 怎样执行

Agent Loop 可以理解成“判断下一步、执行动作、读取结果、继续判断”的循环。实际源码通过状态图组织它,核心是 model 节点与 tools 节点。

1
2
3
4
5
6
7
8
9
10
11
12
13
当前消息状态
↓
model:模型读取消息和工具定义
↓
有没有待执行的 tool_calls?
├─ 没有 → 本轮结束
└─ 有
↓
tools:检查并执行工具
↓
ToolMessage 加回消息状态
↓
返回 model,决定下一步

模型节点发送了什么

LangChain 的 amodel_node会创建 ModelRequest,里面有当前消息、系统消息、工具清单、模型和运行状态。middleware 可以在请求发出前修改这些内容。

例如,Harness 的模型路由器根据本轮指定模型、选择函数、多模态需求和默认模型选择实际模型;MCP middleware 筛选本轮连接器工具;对话模式限制当前可执行动作;记忆与摘要机制补充或缩减模型看到的上下文。

经过处理后,LangChain 在 _get_bound_model 中调用 model.bind_tools(...),把最终工具定义交给模型适配器,再通过 ainvoke(messages) 发送请求。不同模型服务的 wire format 由对应适配器转换。

模型返回 AIMessage。它可能包含普通文字,也可能包含一个或多个 tool_calls。工具调用的核心信息是名称、参数和调用 ID。

条件边决定继续还是结束

_make_model_to_tools_edge会查找尚未得到结果的调用,按调用 ID 排除已经处理的项目,然后把待执行调用送往 tools 节点。同一模型响应中的多个调用可以分派执行;存在数据依赖的动作仍需要先取得前一步结果。

工具执行后,_make_tools_to_model_edge 默认返回模型节点。模型看到结果,决定继续调用工具、改用别的方法,或者给出最终回复。

界面显示的是这条执行过程的事件投影。Harness 的 LangGraphProtocol订阅状态、节点更新、模型消息和自定义事件,转换成 token、tool_call_chunk、tool_result、usage、hitl_required 等事件,再由应用记录历史并交给消息通道。模型接收的 ToolMessage 与前端展示的工具结果事件,处在同一执行链的不同位置。

普通循环的结束条件是模型不再返回工具调用。另外还有 middleware 的显式跳转、return_direct 工具、结构化结果等分支。人工确认、取消或异常也会中断本轮执行。

这一判断只说明执行图可以结束。它不验证笔记里的事实是否正确,也不证明任务满足用户要求。质量判断还需要检查来源、工具输出和最终产物。

下面是按源码归纳的伪代码,不是项目中的原始函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
state = load_thread_state(thread_id)
state.messages.append(user_message)

while graph_allows_next_step:
request = prepare_model_request(state)
reply = await model_with_tools(request)
state.messages.append(reply)
save_checkpoint(state)

if not reply.tool_calls:
break

for call in pending_calls(reply, state):
result = await guarded_tool_dispatch(call, state)
state.messages.append(result)

save_checkpoint(state)

真实实现由框架在图执行过程中管理 checkpoint,工具也可能返回修改状态的 Command。这段伪代码省略了并发、恢复和流式事件,只展示数据如何在模型与工具之间流动。

还有一个部署时有用的细节:该版本 Deep Agents 的图默认配置 recursion_limit=9999,调用方可以覆盖。它限制的是图执行步数,不能当作 9999 次模型调用,更不能当作费用上限。长期任务仍需要合理的配额、停止策略和人工验收。图构建源码

工具是怎样被定义、选择和执行的

工具调用分成 3 件事:程序注册工具,模型生成调用,运行时执行调用。

Python 函数变成模型可理解的工具

Harness 的 web_fetch 使用 LangChain 的 @tool 装饰器。它有名称、说明和带类型的参数,例如 url: str、可选的 timeout。模型看到的是转换后的工具定义,Python 实现留在运行环境中。

文件写入工具由 Deep Agents 提供,输入 schema 规定 file_path 和 content。名称让运行时找到实现,说明帮助模型判断何时使用,schema 约束参数结构。web_fetch 实现、文件工具定义

例如,给专家一个公开 URL,让它读取 README,再写成工作区笔记。一种可能的轨迹是:

步骤模型或运行时的动作新增的信息
1模型返回 web_fetch 调用,参数含公开 URL确定要读取的网页
2运行时调用 Python 工具取得转换后的网页正文或错误文本
3模型读取工具结果,组织笔记,再调用 write_file写入路径与笔记内容
4文件 backend 执行写入并返回结果得知写入是否成功
5模型根据结果回复用户给出说明和产物位置

这条轨迹只是演示机制。工具可见范围、对话模式、模型输出和网页响应不同,实际轨迹也会改变。

ToolNode 把调用路由到具体实现

模型可能返回这样的调用对象。这里展示的是框架规范化后的结构,不是所有模型服务都使用的原始协议:

1
2
3
4
5
6
7
8
{
"name": "web_fetch",
"args": {
"url": "https://github.com/TencentCloud/Octop"
},
"id": "call_example_01",
"type": "tool_call"
}

ToolNode._arun_one按名称从 tools_by_name 找到工具,创建 ToolCallRequest,让工具调用 middleware 包装执行。真正执行时,运行时注入 ToolRuntime、状态等程序上下文,再调用 tool.ainvoke(...);带 Pydantic schema 的工具会校验参数。

运行时上下文和模型生成的参数是不同来源。例如,当前会话状态不需要模型凭空填写,也不应让模型自行指定其他用户身份。

普通工具返回值会整理成 ToolMessage,通过 tool_call_id 对应原始调用。部分工具返回 Command,除了消息,还能更新图状态。结果进入下一次模型请求,构成“动作有反馈”的闭环。

这一机制也解释了为什么输出一句“我已保存”不能证明文件存在。需要看到实际写入工具、返回结果,并在必要时复查文件。

错误可以成为下一步的输入

web_fetch 会把可恢复的 HTTP、网络或地址检查失败转成以 Error: 开头的文本,模型因此可以改 URL、换工具或说明失败。它还检查公开地址与重定向目标,并在响应转换阶段拒绝超过 5MiB 的正文。

未知工具名与部分参数错误会形成错误 ToolMessage,给模型一次纠正机会。并非所有异常都会自动被吞掉或重试:该版本 ToolNode 的默认异常处理只对特定工具输入错误返回文本,其他执行异常可能向上抛出。模型请求重试又是另一层机制。

所以,阅读日志时要区分模型服务失败、工具参数失败、工具执行失败和安全策略拒绝。这几类问题的修复方式不同。

MCP、技能和工具搜索分别解决什么

这 3 个入口都能扩展能力,但它们在执行流程里的作用不同。

MCP 把外部服务适配成工具

aload_mcp_tools通过 MultiServerMCPClient 获取服务工具,再适配为 LangChain 工具对象。它使用服务名前缀,例如 server_tool,降低不同服务同名工具发生冲突的可能,还支持 allowed_tools 名单、参数别名和 schema 处理。

内置工具在本地 Python 里执行;MCP 工具由适配器调用对应服务。进入模型与 ToolNode 的流程保持相近,业务能力可以在外部扩展。

本轮 MCP 选择也有明确语义。Dashboard 传来的空列表表示用户本轮不启用连接器,处理器不会因为列表为空就重新打开默认工具。Harness 的 MCPToolMiddleware会筛选模型可见的工具集。

这段 middleware 主要过滤 ModelRequest.tools。不能仅凭“模型看不见”就把它解释成完整的执行授权边界;连接器鉴权、调用前校验和实际执行环境仍要分别检查。

Skill 给模型操作步骤和约定

Skill 是目录里的 SKILL.md 和配套资源。Deep Agents 的 SkillsMiddleware 先提供技能名称、描述和路径,再让模型按需读取具体说明。技能内容帮助模型组织动作,实际读写和执行仍依赖工具。

因此,一个“资料研究技能”可以规定查找来源、核对信息和输出格式。它本身不自动获得搜索权限,也不保证模型每次都按步骤完成。技能实现

Tool search 延后加载完整参数定义

工具多时,反复发送完整 schema 会增加请求体积。Harness 的 ToolSearchMiddleware提供渐进加载。

client 模式仍保留轻量的工具名称和描述,延后发送完整参数 schema。模型先调用 tool_search,搜索结果通过 Command 更新本会话的 loaded_tool_names;下一次模型请求再提供已加载工具的完整定义。直接调用尚未加载的工具,会得到激活错误。

该版本的 client 搜索按英文关键词与名称、描述的词项匹配评分,不是向量语义检索。关键词、工具描述和命名会影响发现效果。

这项机制也有开关条件:默认 deferred_tools 为空,defer_mcp_tools=False。只有配置了延后加载工具等条件,Harness 才装配搜索 middleware。native 模式依赖所用模型服务的支持,还可能回退为完整加载。配置默认值

它提供降低 schema 开销的办法,也增加了一次发现工具的步骤。实际节省多少 Token、会不会漏选工具,需要任务对照测试。

会话、记忆和上下文怎样保存

Checkpoint 保存执行状态

thread_id 随请求进入 LangGraph 配置。checkpointer 用它区分不同会话,使后续请求可以接着已有状态运行。

Harness 的选择逻辑优先使用显式配置;没有显式配置时,可以复用 octop-memory 的 Memory 实例作为 checkpointer,再回退到工作区里的 AsyncSqliteSaver。显式 False 可以关闭 checkpoint,初始化失败也可能导致无法持久化。

checkpoint 保存的是运行图状态。它有助于保留历史、人工确认恢复和排查执行过程,但不能替外部服务提供事务保证。

如果一个外部写入已经成功,进程却在相关状态保存前退出,是否会重放同一动作,取决于恢复路径和工具的幂等设计。付款、发布、发送等动作仍需要业务侧的防重复机制。本文未进行断电与重放实测。

长期记忆有独立的召回与提取流程

Harness 通过 MemoryRuntime 接入记忆服务。MemoryMiddleware.before_model只在新用户消息到来、尚未保存召回快照时触发新召回,随后在发送给模型的消息副本里重放该快照。

工具结果引发的下一次模型调用,会沿用这一轮的召回,而不会每走一步都重新塞入当下最新记忆。这个设计有助于保持本轮上下文稳定,也便于历史回放。

会话记录、记忆捕获和会话结束后的提取有各自开关与触发方式。能保存聊天记录、能从中提取长期记忆、能在新任务中召回相关内容,是 3 个不同环节,不能用一个“有记忆”标签概括效果。

上下文过长时压缩模型输入

Deep Agents 的摘要 middleware 会缩减发送给模型的历史,将旧内容保存到 backend,并在摘要里保留历史文件位置。模型必要时可以通过 read_file 重新查阅。

在这个版本里,模型 profile 提供 max_input_tokens 时,默认摘要触发比例为 85%,保留窗口比例为 10%;缺少 profile 时使用固定阈值回退。因此,本地小上下文模型尤其需要核对 profile 和配置,不能假设所有模型都按真实窗口自动调好。阈值选择

压缩减少了历史占用,也可能遗漏细节,还会产生摘要模型调用。关键事实、代码版本和交付要求适合另存为可回查的文件,不能只依赖摘要。

权限、人工确认和中断的边界

工具执行前可以插入检查。Harness 的 ToolGuardMiddleware扫描工具参数,按规则和模式阻断、记录警告,或通过 interrupt 等待人工决定。该版本 Harness 配置默认启用 guard,模式为 block;应用和专家安全策略还会影响最终配置。

这个 guard 主要针对命令参数中的风险特征,无法证明所有动作都安全。HITL 也需要配置具体工具和规则,不能据此声称每次危险操作必然弹确认。

ask_user_question 走的是另一个人工交互用途:模型向用户提问,以用户回答替代工具执行。它独立于一般审批开关。恢复时,LangGraphProtocol 使用 Command(resume={"decisions": ...}) 接着处理暂停状态。

对话模式还有执行端限制。Ask 主要开放读取类工具,Plan 允许在约定的计划路径写文件;ConversationModeMiddleware 除了筛选模型工具定义,还会在调用时拒绝越界动作。Craft 模式才进入更完整的执行能力。模式实现

本地部署还要看 backend。这个代码快照在 POSIX 系统上,未显式配置 backend 时,会使用以 / 为根的 local_shell 默认规格。 提示词要求把日常操作留在工作区,但提示词不能代替操作系统隔离。应用默认 backend、Harness 默认规格

文件目录限制、命令规则、Docker/OpenSandbox backend 和宿主机权限解决不同问题。尤其是本地 shell,要以实际进程权限判断命令能访问什么。给整个 Octop 服务套一个 Docker 容器,也不会自动变成每用户独立容器。

WebSocket 断开时,路由只注销连接,明确保留正在运行的任务;重连后可以重新订阅会话流。这个行为减少了页面断连对执行的影响,但不代表补播所有丢失事件,也不代表进程重启后所有在途任务自动恢复。

从代码看,Octop 的优势在哪里

它值得关注的地方主要是把 Agent 运行能力接成一套可配置的应用。下面的收益是代码设计分析,尚无任务成功率或成本实测支持。

设计带来的实际便利需要承担的条件或成本
Dashboard、IM、定时任务连接共同运行环境一套专家配置可以服务多个入口,减少重复搭入口和执行管道服务要持续在线,各渠道还有自己的接入配置
应用层与 Harness 分离用户、知识库、插件等产品逻辑可以围绕已有运行时扩展需要维护跨仓库版本兼容,排错不能只看应用仓库
模型路由与统一工具接口可以按任务与配置切换模型,复用工具实现模型必须适配所需的工具、多模态和上下文能力
MCP、插件和技能接入外部服务、代码工具与操作规范有较明确的扩展位置外部服务认证、权限、schema 和可用性仍要维护
checkpoint、会话锁与流式事件能保留过程、恢复人工交互,减少同会话状态竞争外部副作用、跨会话文件冲突和进程内任务仍需单独处理
记忆、历史文件与上下文压缩长任务有保存和回查信息的工程路径召回与摘要可能遗漏信息,也会增加资源和调用成本

其中,模型与工具循环、文件工具和摘要能力大量复用了 Deep Agents、LangChain、LangGraph。Octop 自己更显著的工作是专家生命周期、用户与连接器管理、统一消息处理、知识库、产物展示和团队协调。评估它时,这两部分贡献应分别看。

多专家也有两条实现路径。Deep Agents 的 task 工具调的是子 Agent;Harness 的 agent_list / ask_agent 面向平台注册的其他专家。Octop 团队主持人通过异步派工协调成员,成员保有自己的会话与工作区。这两类协作不能都解释成“在同一提示词里切换角色”。

当前团队文档明确标注:派工追踪在进程内,重启会丢在途任务;停止主持人本轮,不会取消已排队或正在执行的成员任务。因此,团队更适合从可拆分、可核查的短任务开始。团队实现说明

如果需求只是偶尔问答,Octop 的用户、专家、连接器和运行环境配置可能增加维护负担。如果需要常驻助手、多个消息入口、文件产物和可扩展工具,这些工程能力才有机会减少自己搭系统的工作量。

本地部署要准备什么

服务和模型要分别估算。接云端 API 时,本机主要运行 Octop、数据库和工具;接 Ollama 时,还要承担模型推理。浏览器、嵌入模型、文档处理和并发任务会另外增加占用。

官方快速开始只给出“现代多核 CPU、数 GB 内存”和足够磁盘空间的宽泛要求,没有统一最低配置表。不能把 8GB、16GB 或某张显卡写成官方门槛。

运行方式主要准备
云端模型Octop 运行环境、网络、模型凭据、额度和数据目录
Ollama 本地模型上述条件,加上与模型大小、量化和上下文匹配的内存或显存
浏览器与多专家浏览器环境、额外资源预算、工具权限与并发控制
长期定时任务持续在线的机器、持久化数据、服务监控和失败处理

安装可以按习惯选择:

  • 桌面端:对应系统与架构的安装包。macOS 有 Apple Silicon 和 Intel 包,文档注明 macOS 12+,携带 portable runtime。
  • CLI:安装器使用 uv 准备 Python 3.12 隔离环境,适合观察日志和管理进程。
  • Docker:适合 NAS 或服务器,但要准备 Docker、端口和持久化数据卷。

相关说明见桌面端文档、安装器文档和Docker 文档。

macOS 和 Linux 的官方 CLI 路径如下。命令会下载并执行安装脚本,可先查看脚本内容;脚本 URL 是可更新入口,实际安装版本应另行记录。

1
curl -fsSL https://finnie-1258344699.cos.ap-guangzhou.myqcloud.com/octop/install.sh | bash

安装后打开新终端,执行:

1
2
octop init
octop run

访问 http://127.0.0.1:8088,完成初始化和模型配置。需要浏览器自动化时,安装器支持 --extras browser;已有系统 Chrome 或 Chromium 时会跳过额外下载。

从官方仓库根目录使用 Compose:

1
docker compose -f docker/docker-compose.yml up -d --build

Docker 首次初始化没有设置管理员密码时,会生成随机密码并写入容器的 /data/.octop/credential.txt。数据目录需要正确挂载,否则容器替换后无法依靠临时文件保留历史与工作区。

默认数据位于 ~/.octop/。模型请求、工具结果和召回信息可能随上下文发送到所用的模型服务;远程连接器与存储也会产生相应数据流。因此,数据目录在本机,不能直接推出所有处理都在本机完成。

通过 ACP 委派代码任务,还需要在 Octop 所在机器安装并认证对应编程 CLI。插件系统已有实现,插件市场和自进化等路线图事项应按具体版本另行核对,不能混成装完即用的能力。

下一步怎样验证这些判断

第一次验证可以用一条容易验收的任务:读取指定公开文档,生成带来源的短笔记,写入已配置工作区。记录实际工具调用、参数、结果、输出文件和模型用量,检查失败时是否明确报告。

接着分别测试错误 URL、参数错误、Ask/Plan 模式下的写入、人工确认恢复、页面断连和进程重启。团队任务还需要核对取消主持人后成员的状态。

评价它的效果,需要记录设备、完整依赖版本、模型、上下文设置、工具与 backend 配置、耗时、费用和人工修正次数。源码分析能解释执行机制与设计边界;资源占用、任务质量和长期稳定性仍要靠这些实测补齐。