DeepSeek Harness: 第一次使用
最后更新:2026-08-31
第一次使用 DeepSeek Harness 就像第一次坐进一辆智能汽车——仪表盘看起来复杂,但只要知道方向盘和油门在哪,你就能开起来。本课带你从零开始,完成与 DSH Agent 的第一次对话。
📋 前置知识:已完成 02-install.md,DSH Web UI 已成功启动
1. 你将学到
- Web UI 四大区域的功能与布局
- 工作区(Workspace)的选择与作用
- 第一次与 Agent 对话的完整流程
- Agent 执行工具的过程与可视化
- 审批弹窗机制与安全策略
2. Web UI 界面介绍
(1) 四大区域
DSH Web UI 由四个核心区域组成:

graph TB
subgraph DSH Web UI
A[左侧:会话列表<br/>Session List]
B[中间:对话区域<br/>Chat Area]
C[右侧:工具面板<br/>Tool Panel]
D[顶部:控制栏<br/>Mode + Model + Settings]
end
D --> B
A --> B
B --> C
| 区域 | 位置 | 功能 |
|---|---|---|
| 会话列表 | 左侧 | 显示历史会话,支持新建、搜索、删除 |
| 对话区域 | 中间 | 主要交互区,发送消息、查看回复、工具执行结果 |
| 工具面板 | 右侧 | 实时显示工具调用详情、审批操作、执行日志 |
| 控制栏 | 顶部 | 模式切换、模型选择、设置入口 |
(2) 顶部控制栏详解
顶部控制栏包含:
┌──────────────────────────────────────────────────┐
│ [标准 ▼] [deepseek-chat ▼] ⚙️ 📋 ❓ │
└──────────────────────────────────────────────────┘
↑模式选择 ↑模型选择 ↑设置 ↑日志 ↑帮助
- 模式选择:标准 / PTC / 极简 / 创造
- 模型选择:当前使用的 LLM 模型
- 设置:API Key、端点、沙箱策略等
- 日志:查看会话日志(Trajectory 视图)
- 帮助:快捷键、文档链接
(3) 对话区域详解
对话区域是核心交互区,每条消息可能包含:
┌─────────────────────────────────────────┐
│ 👤 Alice │
│ 帮我分析当前目录下的项目结构 │
├─────────────────────────────────────────┤
│ 🤖 Agent │
│ 🔍 Using tool: search │
│ → Searching in /home/alice/project... │
│ ✅ Found 15 files │
│ │
│ 这个项目是一个 Express.js 应用, │
│ 主要结构如下: │
│ - src/routes/ — 路由定义 │
│ - src/models/ — 数据模型 │
│ - src/middleware/ — 中间件 │
└─────────────────────────────────────────┘
3. 选择工作区
(1) 工作区的作用
工作区(Workspace)是 Agent 操作的根目录。Agent 的所有文件操作、Shell 命令都以此为基准:

# 工作区决定了 Agent 的"视野"
/home/alice/project ← Agent 只能看到这个目录下的文件
├── src/
├── package.json
└── README.md
(2) 选择工作区
首次启动时,DSH 会提示选择工作区:
📂 Select Workspace
┌──────────────────────────────────────┐
│ ○ /home/alice/project │
│ ○ /home/alice/another-repo │
│ ● Enter custom path... │
└──────────────────────────────────────┘
也可以在设置中随时切换:
# 通过环境变量预设工作区
export DSH_WORKSPACE="/home/alice/my-project"
# 或在 Web UI 中点击设置 → Workspace → Change
(3) 工作区与沙箱
工作区与沙箱机制配合,限制 Agent 的操作范围:
graph TB
W[工作区 /home/alice/project] -->|允许| A1[读取文件]
W -->|允许| A2[编辑文件]
W -->|允许| A3[执行命令]
OUT[工作区外 /etc/passwd] -->|拒绝| B1[读取]
OUT -->|拒绝| B2[编辑]
4. 第一次对话
(1) 让 Agent 分析仓库
在工作区选择完成后,我们发送第一条消息:

你好,请帮我分析这个项目的代码质量
Agent 的完整响应过程:
🤖 Agent: 我来帮你分析这个项目。
🔍 Using tool: search
→ Pattern: *
→ Path: /home/alice/project
→ Max depth: 3
🔍 Using tool: file_edit (read)
→ File: package.json
→ Action: read
📊 分析结果:
1. 技术栈:
- 运行时:Node.js 20.x
- 框架:Express 4.18
- 数据库:PostgreSQL (pg 8.12)
- 测试:Jest 29.x
2. 目录结构:
src/
├── routes/ — 8 个路由文件
├── models/ — 5 个数据模型
├── middleware/ — 3 个中间件
└── utils/ — 工具函数
3. 建议:
- 缺少 TypeScript 类型定义
- 建议添加 src/services/ 层分离业务逻辑
(2) Agent 执行工具的过程
每一步工具调用在右侧工具面板中实时显示:

│ │
│ 🔍 search │
│ ├─ Status: ✅ Complete │
│ ├─ Duration: 0.3s │
│ └─ Files found: 23 │
│ │
│ 📄 file_edit (read) │
│ ├─ Status: ✅ Complete │
│ ├─ Duration: 0.1s │
│ └─ File: package.json (1.2KB) │
│ │
│ 📊 Total tools: 2 │
│ 📊 Total time: 0.4s │
└──────────────────────────────────────┘
(3) 工具执行流水线
每个工具调用经过三个阶段:
graph LR
A[pre-execute<br/>参数校验/权限检查] --> B[execute<br/>实际执行]
B --> C[post-execute<br/>结果处理/日志记录]
// 工具执行流水线伪代码
async function executeTool(tool, params) {
// 1. pre-execute:校验 + 审批
await preExecute(tool, params);
// 2. execute:实际执行
const result = await tool.execute(params);
// 3. post-execute:记录日志
await postExecute(tool, params, result);
return result;
}
5. 审批弹窗机制
(1) 为什么需要审批
Agent 拥有强大的操作能力(编辑文件、执行命令),但不当操作可能造成破坏。审批机制让用户在 Agent 执行危险操作前进行确认。

(2) ▶ 示例 2
当 Agent 要编辑文件时,Web UI 会弹出审批窗口:
┌─ ⚠️ Approval Required ───────────────────┐
│ │
│ Agent wants to: │
│ 📝 Edit file: src/index.ts │
│ │
│ Changes: │
│ - Line 12: Add import statement │
│ - Line 45: Modify error handler │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ ✅ Allow │ │ 🔁 Always│ │ ❌ Deny │ │
│ └──────────┘ └──────────┘ └──────────┘ │
└────────────────────────────────────────────┘
三个选项的含义:
| 选项 | 含义 | 适用场景 |
|---|---|---|
| Allow | 本次允许,下次仍需审批 | 一次性操作 |
| Always | 此类操作始终允许,不再弹窗 | 信任的操作类型 |
| Deny | 拒绝本次操作 | 不希望执行的操作 |
(3) 审批策略配置
在设置中可以预设审批策略:
# dsh.config.yaml
approval:
# 文件读取:始终允许
file_read: always
# 文件编辑:需要审批
file_edit: ask
# Shell 命令:根据危险等级
shell:
safe_commands: always # ls, cat, grep 等
unsafe_commands: ask # rm, chmod, sudo 等
dangerous_commands: deny # rm -rf /, dd 等
# 搜索操作:始终允许
search: always
(4) 沙箱模式与审批的关系
| 沙箱模式 | 审批行为 | 风险等级 |
|---|---|---|
| strict | 所有操作均需审批 | 🟢 安全 |
| permissive | 仅危险操作需审批 | 🟡 中等 |
| off | 无审批,Agent 自由操作 | 🔴 高风险 |
# 设置沙箱模式
export DSH_SANDBOX=strict # 最安全
export DSH_SANDBOX=permissive # 默认
export DSH_SANDBOX=off # 不推荐
6. 实战:一次完整的 Agent 交互
(1) 场景描述
Alice 想让 Agent 帮她在项目中添加一个健康检查接口。

(2) ▶ 示例 2
👤 Alice: 在 src/routes/ 下新建 health.ts,添加一个 /health GET 接口,
返回 { status: "ok", timestamp: Date.now() }
🤖 Agent: 我来帮你创建健康检查接口。
📝 Using tool: file_edit
→ Action: create
→ Path: src/routes/health.ts
→ Content:
import { Router } from 'express';
const router = Router();
router.get('/health', (_req, res) => {
res.json({ status: 'ok', timestamp: Date.now() });
});
export default router;
⚠️ Approval Required: Create file src/routes/health.ts
→ [Alice 点击 Allow]
✅ File created: src/routes/health.ts
接下来需要将这个路由注册到 app.ts 中:
📝 Using tool: file_edit
→ Action: edit
→ Path: src/app.ts
→ Changes:
+ import healthRouter from './routes/health';
+ app.use('/health', healthRouter);
⚠️ Approval Required: Edit file src/app.ts
→ [Alice 点击 Allow]
✅ File edited: src/app.ts
完成!健康检查接口已添加。访问 GET /health 即可测试。
(3) ▶ 示例 3
┌─ Tool Panel ────────────────────────┐
│ 📝 file_edit (create) │
│ ├─ Path: src/routes/health.ts │
│ ├─ Status: ✅ Approved & Complete │
│ └─ Duration: 0.2s │
│ │
│ 📝 file_edit (edit) │
│ ├─ Path: src/app.ts │
│ ├─ Changes: +2 lines │
│ ├─ Status: ✅ Approved & Complete │
│ └─ Duration: 0.1s │
└──────────────────────────────────────┘
7. 会话管理
(1) 新建会话
左侧会话列表 → 点击 + 按钮 → 新建会话

会话自动命名(基于首次对话内容),也可手动重命名。
(2) 会话切换
在左侧会话列表中点击不同会话即可切换。每个会话有独立的:
- 对话历史
- 工作区设置
- 工具执行记录
(3) 会话持久化
DSH 的会话日志采用仅追加(append-only)模式:

// 每个 SessionEvent 自动持久化
interface SessionEvent {
type: 'user_message' | 'agent_message' | 'tool_call' | 'tool_result' | 'approval';
timestamp: number;
data: Record<string, unknown>;
}
关闭浏览器后,会话数据不会丢失——重新打开 Web UI 即可恢复。

❓ 常见问题
always,或切换到 permissive 沙箱模式。不建议在非隔离环境中使用 off 模式。📖 小节
- Web UI 由会话列表、对话区、工具面板、控制栏四部分组成
- 工作区决定了 Agent 的操作范围,首次使用需选择
- Agent 通过工具(search、file_edit 等)执行实际操作,过程在工具面板中可视化
- 审批机制保护用户免受误操作:Allow / Always / Deny 三级选择
- 沙箱模式控制审批严格度:strict / permissive / off
- 会话自动持久化,关闭浏览器后数据不丢失
📝 作业
1. ⭐ 基础题:启动 DSH Web UI,选择一个工作区,向 Agent 发送"帮我查看当前项目的 package.json 内容",记录 Agent 使用了哪些工具。
2. ⭐⭐ 进阶题:让 Agent 在工作区中创建一个 hello-dsh.txt 文件,内容为"Hello, DSH!"。观察审批弹窗,尝试 Allow 和 Deny 两种操作,记录不同选择的后续行为。
3. ⭐⭐⭐ 挑战题:配置 permissive 沙箱模式,让 Agent 同时完成三个操作:1) 创建新文件;2) 编辑已有文件;3) 执行 Shell 命令 ls -la。记录哪些操作触发了审批弹窗,哪些没有,并分析原因。