六个核心对象
日常使用时,可以先把这个界面理解成六个核心对象:
工作区
会话
模型
Agent 预设
权限
工具调用 / 轨迹
这六个东西不是一回事。一旦把它们分清,后面学 profile、插件、技能和 MCP 会简单很多。
先记住这张关系图
可以先这样理解:
工作区
↓
Agent 在哪里工作
会话
↓
这一段任务和历史
模型
↓
谁负责推理
Agent 预设
↓
这个会话拥有哪些工具、提示词和能力
权限
↓
这些能力执行时允许到什么程度
工具调用 / 轨迹
↓
Agent 实际做了什么
其中最容易混淆的是 Agent 预设和权限:它们控制的不是同一个东西。后面会单独讲。
工作区
当前 Web UI 中文界面直接使用「工作区」。工作区可以理解成:智能体当前围绕哪个文件目录工作。
例如这样一个项目目录:
my-project/
├── src/
├── docs/
├── package.json
└── README.md
当你选中这个目录作为工作区后,智能体的文件读取、编辑、搜索等能力就会围绕这个工作目录展开。全新的 Web UI 不会默认选中任何工作区,当前界面会提示「选择一个工作区开始」,所以第一次使用必须先选择工作区。
启动目录和工作区是一回事吗?
不是完全一回事。你在终端运行下面的命令时所在的目录,是 DSH 进程启动时的默认文件系统位置。
npx @deepseek-ai/dsh web但在 Web UI 中,仍然需要正式添加并选择工作区。因此:终端启动目录 ≠ 当前 Web UI 一定已经选中的工作区。
工作区可以管理什么?
当前工作区侧边栏支持的主要操作包括:
- 添加工作区
- 重命名工作区
- 调整工作区顺序
- 查看工作区下面的会话
- 搜索会话
- 删除工作区注册
这里有一个容易误解的地方:删除工作区不等于删除项目文件。当前「删除工作区」的行为,是把该目录从 DSH 工作区列表中移除。
会话
会话可以理解成:一个智能体任务持续工作的上下文和历史。即使多个任务都使用同一个工作区,也可以是不同的会话。例如:
- 会话 A:帮我理解这个项目架构。
- 会话 B:修复登录 Bug。
- 会话 C:给 README 增加安装说明。
为什么不要把所有任务都塞进一个会话?
长期把完全不同的任务放进一个会话,会让上下文越来越长、历史越来越复杂、旧工具结果持续存在、当前任务与旧任务混在一起。
新会话什么时候真正成立?
当前界面中的「新会话」在还没发送第一条提示词之前,可以理解成一个空白占位状态。这种空白会话还没有真正的任务历史。
因此,重命名、分叉、归档这些操作,要等第一条提示词产生以后才有意义。
会话状态怎么看?
当前工作区列表会显示多种中文状态,例如:
- 进行中
- 空闲
- 等待审批
- 计划待审
- 等待回答
- 已完成
这些状态可以帮助你快速判断哪一个会话还需要你处理。看到「等待审批」,说明智能体当前正在等你决定某个操作是否允许继续;看到「等待回答」,说明智能体向你提出了问题。
模型与 Agent 预设
模型负责:当前智能体使用哪个模型进行推理。例如 DeepSeek、OpenAI、Anthropic,或者自定义提供方下的某个模型。
模型和工作区不是一回事:工作区是在哪里工作,模型是谁负责推理。
配置其他提供方、自定义 API 地址、兼容参数等内容,统一放在《DeepSeek Harness 模型配置教程》(/deepseek-harness/models/)。Web UI 这一篇只需要知道:当前会话必须有可用模型,才能正常进行模型请求。
Agent 预设控制什么?
当前官方中文界面使用「Agent 预设」。官方当前解释:预设就是一个会话中的智能体所运行的插件组装,它决定工具、提示词和能力。
内置四种 Agent 预设当前显示为:
- 标准模式
- PTC 模式
- 极简模式
- 创造模式
例如:标准模式具备完整编码智能体能力;极简模式只提供很少的工具。所以,同一个模型换不同 Agent 预设,能做的事情也可能不同。
Agent 预设什么时候可以切换?
这是 Web UI 里非常重要的生命周期规则。
设置里的 Agent 预设
当前设置说明是:「对此后新建的会话生效。运行中的会话保持它开始时的预设。」也就是说,设置里的默认 Agent 预设控制未来新建的会话。
新会话开始前
在空白新会话阶段,可以选择这次新会话要使用哪个 Agent 预设。
会话已经开始以后
一旦会话已经产生实际任务历史,当前 Agent 预设就固定了。官方界面本身也说明:「本会话运行的 Agent 预设,开始时即固定。」
权限与审批
这是最容易让人误解的一组概念:Agent 预设决定智能体有哪些工具和能力;权限决定这些能力在执行时允许到什么程度。
可以粗略理解:Agent 预设回答「你有什么能力?」,权限回答「这些能力现在能执行到哪一步?」。所以,有文件编辑工具,不代表任何修改都一定直接执行——还要看当前的权限、审批策略、沙箱策略和具体操作。
设置里的「权限」控制什么?
当前官方中文设置直接写:「选择新会话的默认权限模式」。所以「设置 → 权限」改变的是以后新建会话默认使用什么权限,它不是把所有已经运行中的会话一起切换。
当前会话的权限能不能改?
可以。这是它和 Agent 预设最大的生命周期区别之一。当前会话有自己的「访问模式」,可以调整当前会话的权限预设。
因此要记住:Agent 预设 → 会话开始后固定;权限预设 → 当前会话仍可以单独调整。这两个不要混在一起。
Full access 是什么?
当前 Web UI 直接使用产品名 Full access,DSHOPC 不自行翻译成「完全访问模式」。
Full access 不应该被理解成「更方便的普通模式」。它意味着更多操作可能不再经过同样的确认步骤。因此只应该在你理解当前任务、你信任工作区、你知道智能体正在做什么的情况下使用。
审批是什么?
当前对话界面会显示「等待审批」。审批请求当前可以出现操作原因、工具名称、是否允许一次等信息。常见按钮包括「拒绝」和「允许一次」。
审批是不是等于安全保证?
不是。审批只是风险控制边界之一。它不能保证:智能体的操作一定正确、代码一定没有 Bug、删除的文件一定不重要、第三方服务一定可信、当前任务一定不会造成业务影响。
对话与工具调用
当前中文界面标签使用「对话」。这里是日常与智能体交互的主要区域。你会看到:
- 用户消息
- 智能体回复
- 工具调用
- 命令执行
- 审批
- 提问
- 上下文变化
- 重试
- 上下文压缩
输入框当前中文提示是「给智能体发消息」。
什么是工具调用?
当智能体不只是生成文字,而是真正读取文件、搜索项目、执行命令、调用 MCP 或使用其他工具时,对话中会出现工具调用。
工具调用是判断智能体是否真的执行任务的重要证据之一。例如你要求读取 package.json,如果看到真实的文件工具调用,才能进一步判断 Harness 是否确实执行了读取。这也是为什么《第一次使用》不把「模型能回答」当作完整成功标准。
工具详情怎么看?
当前对话界面可以展开工具行查看输入、输出和当前运行状态。界面中的「详情」区域就是用来检查这些信息的。
当结果不符合预期时,先看工具详情,通常比直接再问模型「你为什么错了?」更有价值。因为你可以区分:是模型判断错了,还是工具执行错了,还是工具返回结果和模型理解之间出了问题。
上下文与轨迹
当前对话界面会显示「上下文已用」,并区分系统提示词、工具、对话消息。可以把它理解成:当前模型请求正在使用多少上下文容量。随着会话不断变长,历史消息和工具结果会越来越多,所以超长会话不是无限免费的。
什么是「上下文已压缩」?
当历史过长时,当前界面可能出现「上下文已压缩」或「正在压缩…」。上下文压缩可以先理解成:把较早的大量历史整理成更紧凑的摘要,以便后续请求继续工作。
压缩并不等于删除磁盘上的项目文件,也不等于整个会话消失。它主要影响模型后续请求如何携带历史上下文。
什么时候应该直接开新会话,而不是一直压缩?
如果任务已经明显变成另一个目标,直接开新会话通常更清晰。例如原会话在修登录接口,现在突然变成研究三个第三方 MCP 项目——即使旧会话还能继续,新建会话更容易保持任务边界清楚。
「轨迹」是什么?
当前 Web UI 使用「轨迹」。它不是普通聊天页面的另一个名字。轨迹主要用来查看这次智能体运行实际上经历了哪些轮次、步骤、模型请求和工具调用。
当前轨迹会按照轮次、步骤、模型、工具组织记录,还可以查看包括 token 用量、耗时、输入、输出、计时信息。
对话和轨迹怎么分?
| 界面 | 回答的问题 |
|---|---|
| 对话 | 智能体和我说了什么、做了什么? |
| 轨迹 | 这次运行内部具体经过了哪些步骤? |
平时使用,对话已经够用。需要排查为什么这么慢、调了几次工具、哪一步失败、模型和工具分别耗时多久时,轨迹更有价值。
轨迹里的「轮」和「步」是什么意思?
Learn 阶段不用研究完整的 Agent Loop,可以先这样理解:
| 单位 | 含义 |
|---|---|
| 轮 | 一次从用户任务开始,到这次工作暂时结束的较大单位。 |
| 步 | 一次模型请求及其对应工具执行过程中的较小单位。 |
当前对话统计里也会显示类似「X 轮 · Y 步」。深入的 Agent Loop、SessionEvent 和生命周期放到 Architecture 再讲。
会话管理
当前工作区侧边栏支持搜索会话。搜索结果可以来自会话标题、工作区名称、已加载的会话内容匹配。
当前内容搜索不是语义向量搜索,它更接近字面 token / 短语匹配。搜索结果当前最多展示一定数量的结果,查询过宽时界面会提示缩小范围。所以不要把它理解成「像 AI 一样理解所有历史会话语义」。
重命名会话有什么用?
如果你同时运行很多任务,建议把自动标题改成更稳定的任务名,例如:
- 检查首页 SEO
- 重构登录 API
- MCP Memory 测试
这样后续搜索和回看更清楚。
什么是「分叉会话」?
当前工作区会话菜单使用「分叉会话」。它会从已有会话的一个已完成边界创建新的子会话。可以理解成:保留前面的共同历史,从这里开始走另一条任务路线。
例如原会话已经分析完项目:
项目分析
↓
├── 分支 A:重构后端
└── 分支 B:只优化前端
这比在同一个会话里来回改变目标更容易管理。在消息区域,当前也可能看到「在新对话中分支」——两种界面表达都围绕从已有历史创建新的对话路线。
什么是「归档会话」?
当前菜单使用「归档会话」。归档是非破坏性地让会话从普通工作区列表中消失。当前实现仍保留会话日志和工作区记账位置。
删除会话和归档会话一样吗?
当前工作区 UI 没有普通会话删除功能,有的是归档会话。所以不要把「归档」写成删除历史,这两者不是同一件事。
为什么有些子代理会话没有出现在普通列表?
当前工作区侧边栏会隐藏 origin 为 subagent 的持久化子代理会话。这些对话通常从父级会话的子代理入口进入。因此「普通工作区列表没看到」不一定代表子代理会话没有产生。
图片为什么有时候不能添加?
当前 Web UI 支持图片附件界面,但是否能真正发送取决于当前模型能力。如果当前模型不支持图片,界面会提示「当前模型不支持图片,请切换支持图片的模型」。
智能体忙的时候还能继续发消息吗?
当前 Web UI 支持排队发送和插话发送。界面里还可以设置「繁忙时 Enter 键行为」。
这类功能主要用于智能体正在长时间运行时,你仍然需要补充信息或改变接下来的执行方向。第一次使用不需要马上掌握,先知道:智能体运行中并不意味着输入区完全只能等待。
日常使用习惯
- 每次先确认工作区,尤其是多个项目同时使用 DSH 时。
- 看清当前模型。模型切错可能让你误以为智能体能力变了,实际只是模型路由不同。
- 新任务先看 Agent 预设。标准、PTC、极简、创造模式能力不同。
- 不把权限和 Agent 预设混为一谈:Agent 预设是有什么能力,权限是能执行到什么程度。
- 工具调用比最终回答更值得检查,尤其是文件修改、Shell 和外部系统操作。
- 任务明显变化时新建会话,不要为了「保留上下文」把完全不同的任务硬塞在一起。
- Full access 不作为默认偷懒方案。它会减少确认步骤,同时也意味着你主动放宽了一部分人工把关。
怎样算你已经会用 Web UI?
不要求为了验证去做危险修改。你至少应该能做到:
- 找到当前工作区
- 新建并识别一个会话
- 知道当前模型在哪里看
- 知道当前 Agent 预设是什么
- 明白 Agent 预设开始后固定
- 明白设置中的权限主要控制新会话默认值
- 知道当前会话权限仍可单独调整
- 能识别一次工具调用
- 能展开工具详情看输入和输出
- 知道「对话」和「轨迹」的区别
- 知道「上下文已压缩」不是删除项目文件
- 知道分叉会话和归档会话分别做什么
下一步
接下来最自然的是进入《Agent 预设怎么选?标准模式、PTC 模式、极简模式与创造模式详解》(/deepseek-harness/agent-modes/)。因为你现在已经知道:Agent 预设会直接影响一个会话拥有哪些工具、提示词和能力。
等 Agent 预设学完以后,再进入「插件、技能和 MCP 怎么选?」扩展分流。
如果 Web UI 出现输入框不可用、工作区异常、模型不可用、会话状态卡住或权限问题,进入《常见问题与报错排查》(/deepseek-harness/troubleshooting/)。