DeepSeek Harness: 第一次使用

最后更新:2026-08-31

第一次使用 DeepSeek Harness 就像第一次坐进一辆智能汽车——仪表盘看起来复杂,但只要知道方向盘和油门在哪,你就能开起来。本课带你从零开始,完成与 DSH Agent 的第一次对话。

💡 提示:DSH Agent 不是一个聊天机器人,而是一个能操作文件、执行命令、检索代码的智能助手。它的核心能力在于"动手"而非仅仅"动嘴"。

📋 前置知识:已完成 02-install.md,DSH Web UI 已成功启动

1. 你将学到


2. Web UI 界面介绍

(1) 四大区域

DSH Web UI 由四个核心区域组成:

DSH Web UI 布局

100%
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) 顶部控制栏详解

顶部控制栏包含:

TEXT 📖 仅展示
┌──────────────────────────────────────────────────┐
│ [标准 ▼]  [deepseek-chat ▼]  ⚙️  📋  ❓  │
└──────────────────────────────────────────────────┘
  ↑模式选择   ↑模型选择   ↑设置 ↑日志 ↑帮助

(3) 对话区域详解

对话区域是核心交互区,每条消息可能包含:

TEXT 📖 仅展示
┌─────────────────────────────────────────┐
│ 👤 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 命令都以此为基准:

选择工作区

BASH
# 工作区决定了 Agent 的"视野"
/home/alice/project     ← Agent 只能看到这个目录下的文件
├── src/
├── package.json
└── README.md

(2) 选择工作区

首次启动时,DSH 会提示选择工作区:

TEXT 📖 仅展示
📂 Select Workspace
┌──────────────────────────────────────┐
│ ○ /home/alice/project               │
│ ○ /home/alice/another-repo          │
│ ● Enter custom path...              │
└──────────────────────────────────────┘

也可以在设置中随时切换:

BASH
# 通过环境变量预设工作区
export DSH_WORKSPACE="/home/alice/my-project"

# 或在 Web UI 中点击设置 → Workspace → Change

(3) 工作区与沙箱

工作区与沙箱机制配合,限制 Agent 的操作范围:

100%
graph TB
    W[工作区 /home/alice/project] -->|允许| A1[读取文件]
    W -->|允许| A2[编辑文件]
    W -->|允许| A3[执行命令]
    OUT[工作区外 /etc/passwd] -->|拒绝| B1[读取]
    OUT -->|拒绝| B2[编辑]

4. 第一次对话

(1) 让 Agent 分析仓库

在工作区选择完成后,我们发送第一条消息:

第一次对话

TEXT 📖 仅展示
你好,请帮我分析这个项目的代码质量

Agent 的完整响应过程:

TEXT 📖 仅展示
🤖 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 执行工具的过程

每一步工具调用在右侧工具面板中实时显示:

工具面板

TEXT 📖 仅展示
│                                      │
│ 🔍 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) 工具执行流水线

每个工具调用经过三个阶段:

100%
graph LR
    A[pre-execute<br/>参数校验/权限检查] --> B[execute<br/>实际执行]
    B --> C[post-execute<br/>结果处理/日志记录]
TYPESCRIPT
// 工具执行流水线伪代码
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 会弹出审批窗口:

TEXT 📖 仅展示
┌─ ⚠️ 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) 审批策略配置

在设置中可以预设审批策略:

YAML
# 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 自由操作 🔴 高风险
BASH
# 设置沙箱模式
export DSH_SANDBOX=strict    # 最安全
export DSH_SANDBOX=permissive # 默认
export DSH_SANDBOX=off        # 不推荐

6. 实战:一次完整的 Agent 交互

(1) 场景描述

Alice 想让 Agent 帮她在项目中添加一个健康检查接口。

实战:完整交互

(2) ▶ 示例 2

TEXT 📖 仅展示
👤 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

TEXT 📖 仅展示
┌─ 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) 新建会话

TEXT 📖 仅展示
左侧会话列表 → 点击 + 按钮 → 新建会话

![会话管理](images/zh/dsh-9.webp)

会话自动命名(基于首次对话内容),也可手动重命名。

(2) 会话切换

在左侧会话列表中点击不同会话即可切换。每个会话有独立的:

(3) 会话持久化

DSH 的会话日志采用仅追加(append-only)模式:

会话日志

TYPESCRIPT
// 每个 SessionEvent 自动持久化
interface SessionEvent {
  type: 'user_message' | 'agent_message' | 'tool_call' | 'tool_result' | 'approval';
  timestamp: number;
  data: Record<string, unknown>;
}

关闭浏览器后,会话数据不会丢失——重新打开 Web UI 即可恢复。

沙箱与工作区


❓ 常见问题

Q Agent 不响应怎么办?
A 检查:1) API Key 是否配置正确;2) 网络是否连通 LLM 端点;3) 右侧工具面板是否有错误信息。可以尝试重启 DSH。
Q 审批弹窗太频繁,如何减少?
A 在设置中将信任的操作类型设为 always,或切换到 permissive 沙箱模式。不建议在非隔离环境中使用 off 模式。
Q Agent 修改了错误的文件怎么办?
A DSH 的副作用是可逆的。在工具面板中找到对应的操作,点击回滚按钮。也可以通过 Trajectory 视图恢复到任意时间点。
Q 如何查看 Agent 正在执行什么?
A 右侧工具面板实时显示当前工具调用状态。如果 Agent 卡住,面板会显示具体的等待原因(如等待审批、网络超时等)。
Q 工作区选错了可以改吗?
A 可以。点击顶部设置 → Workspace → Change 即可切换。已执行的对话历史不受影响,但后续文件操作会基于新工作区。
Q Web UI 支持多人同时使用吗?
A DSH 默认是单用户模式。多人使用需要为每个用户启动独立的 DSH 实例(不同端口),或等待官方的多用户支持。 ---

📖 小节


📝 作业

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。记录哪些操作触发了审批弹窗,哪些没有,并分析原因。

Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏