主流 Agent 入门教程 / DeepSeek Harness
7. 案例一-第一次对话
原文备份 · 第 8 / 21 篇 · 查看极客时间原知识库 ↗
本篇目录 · 14 节
本文属于《DeepSeek Harness 入门教程(实战版)》· 第二部分 · 安装并完成第一次启动
第 7 章 第一次对话:让 DSH 接手日报助手
前面六章把 DSH 和项目运行环境准备好了。现在先不研究 Provider、Agent 预设和插件配置,直接完成一次足够小、又能认真验收的任务:让 DSH 在空工作区中创建“日报助手”的项目说明和资讯源配置。
这一章结束时,daily-report 目录里应该只有两个新文件:
daily-report/
├── PROJECT.md
└── sources.json
我们暂时不让 Agent 一口气写完整程序。第一次任务如果同时涉及联网、代码、测试和多次修复,出了问题很难判断卡在哪一层。先用两个文件走通“选择工作区 → 新建会话 → 审查权限 → 执行任务 → 独立验收”的闭环,后面再逐步加功能。
7.1 确认起点
开始前请确认:
- DeepSeek Harness Desktop 已经打开,或者 CLI/Web 页面仍能访问;
- 系统终端中的
node -v、npm -v能输出版本; - 已经准备好一个空的
daily-report目录; - 目录中没有私人文件、真实密钥和其他项目。
前面章节使用的默认位置是:
| 系统 | 课程目录 |
|---|---|
| macOS | “文稿”中的 dsh-learning/daily-report |
| Linux | ~/dsh-learning/daily-report |
| Windows | “文档”中的 dsh-learning\daily-report |
如果跳过了安装章节,现在新建这个空目录即可。目录位置可以不同,但后面都要选中同一个目录。
7.2 先分清:启动目录不等于已选工作区
在 CLI/Web 路线中,dsh 会把启动命令所在目录当作文件选择器的默认位置,但全新的 Web UI 仍然没有自动选中工作区。没有工作区时,输入框通常不可用。这一点在 官方 Web UI 指南 中有明确说明。
工作区可以先理解成“这次项目任务允许围绕哪个目录展开”。它既是侧边栏里持续保存的项目记录,也是新会话创建时的工作目录。会话一旦创建,它的工作目录就随会话确定;所以应先选工作区,再新建会话。
不要把用户主目录、整块磁盘或装满私人资料的“文档”目录直接设为工作区。我们专门准备 daily-report 空目录,就是为了把第一次写入限制在一个清晰、可恢复的范围内。
7.3 把 daily-report 添加为工作区
Desktop 和 Web UI 的页面结构基本一致:左侧是工作区与会话,中间是当前任务。按下面的顺序操作:
- 在主界面点击“选择工作区”(界面为英文时是 Choose workspace);
- 如果列表里还没有
daily-report,选择“添加工作区”或带加号的入口; - 在目录选择器中找到前面创建的
daily-report文件夹; - 确认添加,并在工作区列表中选中它;
- 检查页面上显示的工作区名称或路径确实指向
daily-report。
Desktop 会调用系统原生的文件夹选择窗口。Web UI 则由运行 DSH 的那台 Host 选择目录:如果 DSH 跑在远程 Linux 服务器上,这里要选服务器上的 ~/dsh-learning/daily-report,不是你笔记本电脑上的同名目录。
选中后,新任务输入区域应该从不可用变为可以操作。侧边栏里也应出现 daily-report 工作区。
如果文件夹选错了
先不要发送消息。重新打开工作区选择器,选中正确目录后再创建新会话。删除侧边栏中的工作区记录并不会自动删除磁盘上的文件,但第一次练习没有必要测试这项管理功能。
7.4 确认模型已经可用
Agent 必须有一个可用模型才能回答。你在首次启动时可能已经完成了 DeepSeek 账号登录,也可能填过官方 API Key;只要会话顶部的模型入口能选到可用模型,就可以直接继续。
如果模型列表为空、发送按钮不可用,或发送后提示缺少凭证,先完成一条最短配置路径:
- Desktop 欢迎页仍提供账号登录时,可以完成登录并使用账号模型;
- 或打开“设置 → 模型”,在 DeepSeek 卡片中填入官方 API Key 并保存;
- CLI/Web 通常使用“设置 → 模型”的 API Key 路线。
不要把 API Key 发进聊天输入框,也不要写进 daily-report 项目文件。模型页保存的 Key 是只写凭证,保存后界面只显示配置状态,不会重新展示原始密钥。
这里只要让一个模型可用,不必现在研究全部字段。账号模型、官方 API Key、内置 Provider 和自定义 Provider 的差异,会在下一章完整解释。当前版本中,账号任务与 API Key 任务的模型入口彼此独立,因此要以这个会话实际选中的模型为准,而不是只看“我已经登录”或“我已经保存 Key”。v0.1.7-rc.2 更新说明
7.5 新建一个边界清楚的会话
在 daily-report 工作区下点击“新建任务”或空白的新会话入口。第一次练习保留下面两项设置:
- Agent 预设使用默认的标准模式;
- 权限使用 Workspace Write(工作区内修改),不要选择 Full access(完全权限)。
当前版本把新任务的 Agent 模式放在“设置 → 代码工作工具”中统一管理。如果你从未改过,保留默认值即可;如果之前做过实验,确认新任务使用标准模式后,再重新创建这个会话。
“工作区内修改”允许工具读写当前工作区,并在需要时询问具体操作;“完全权限”会扩大可操作范围,这个两文件任务用不到。权限选择器修改的是当前会话,设置页中的默认权限则影响以后新建的会话。官方默认权限的含义可参考 Permission Presets 说明。
可以先记住一个简单区别:
- 权限范围回答“Agent 最多能碰到哪里”;
- 审批请求回答“这一次具体操作是否允许执行”。
权限范围合适,不代表所有操作都会自动通过;出现审批卡片时仍要看清命令和路径。
7.6 发送第一次任务
把下面这段话完整发送给 Agent:
我们要在当前空工作区启动一个“日报助手”项目。请只完成项目初始化,不要开始写程序。
请创建且只创建两个文件:
1. PROJECT.md
- 包含“项目目标”“输入与输出”“技术约束”“首版验收标准”四个二级标题;
- 说明项目将读取 sources.json,用 Node.js 原生 fetch 抓取资讯,最后生成 daily-report.md;
- 技术约束写明:使用 ES Modules、零第三方依赖、Node.js 内置 test 模块。
2. sources.json
- 顶层是 JSON 数组;
- 包含下面两个对象,每个对象只有 name 和 url:
- DeepSeek Harness Releases
https://api.github.com/repos/deepseek-ai/deepseek-harness/releases?per_page=5
- Node.js Releases
https://api.github.com/repos/nodejs/node/releases?per_page=5
创建后,请只运行一条本地 Node.js 命令,验证 sources.json 能解析、数组长度为 2,而且每项都有非空的 name 和 url。不要访问网络,不要安装依赖,也不要创建其他文件。
最后告诉我:创建了哪些文件、验证命令的实际输出是什么。不要只说“应该可以运行”。
这段任务看上去比“帮我创建日报助手”更长,但每一部分都有用途:
- “只创建两个文件”限制改动范围;
- 明确标题和 JSON 结构,减少模型自由发挥造成的偏差;
- “不要访问网络、不要安装依赖”排除第一次任务不需要的外部行为;
- 要求展示实际验证输出,避免用一句“应该没问题”代替执行。
它没有指定 Agent 必须调用哪个文件工具或哪条 Shell 命令,因为具体工具属于运行时实现;我们约束的是结果和风险边界。
7.7 看执行过程:计划、工具和审批
标准模式通常会先检查工作区,再创建文件,最后运行 Node.js 验证。你可能看到几类内容:
- 普通文字:Agent 对当前步骤的说明;
- 文件工具卡片:读取、创建或修改文件;
- Shell/终端卡片:运行本地验证命令;
- 审批卡片:等待你决定是否允许一次具体操作;
- 代码变更或差异视图:展示文件新增、删除和修改。
不要要求每个模型都以完全相同的顺序行动。你真正需要判断的是:它是否始终围绕两个目标文件工作,以及是否完成了真实验证。
审批出现时,先核对四件事
这次任务允许的范围很小:
- 路径应位于当前
daily-report工作区; - 可以创建或修改
PROJECT.md、sources.json; - 可以执行只读取
sources.json的本地node -e ...验证; - 不需要
npm install、联网请求、删除命令,也不需要访问工作区外的目录。
符合这些边界,可以选择“允许一次”。如果审批内容出现其他目录、安装依赖、下载脚本或删除操作,先拒绝,然后在同一会话中指出偏差。
审批的“允许一次”只授权卡片里那次操作,不等于把后续所有命令永久放行。DSH 的审批结果是按具体请求记录并默认失败关闭的。官方审批机制说明
7.8 审查实际改动
Agent 说完成以后,先看界面中的文件树或代码变更区域:
- 文件列表应只有
PROJECT.md和sources.json两个新增文件; PROJECT.md应包含约定的四个二级标题;sources.json顶层应是数组,不是带sources字段的对象;- 两个对象都只能有
name、url两个字段; - 差异视图应只有新增内容,不应修改工作区外文件。
这里的关键不是挑模型的文笔,而是确认“实际文件”与任务边界一致。工具卡片显示成功,只能证明工具返回了成功;文件内容是否符合要求,还要看产物本身。
如果多了文件,不要急着手工删。继续在同一会话发送:
这次任务约定只创建 PROJECT.md 和 sources.json,但当前工作区还出现了其他文件。请先列出多余文件及其用途,不要继续修改;等我确认后再处理。
这能让你先判断额外内容是否由 Agent 创建,避免误删原来就存在的文件。
7.9 用自己的终端独立验收
最后不要只相信 Agent 报告的验证结果。打开系统终端,进入 daily-report 目录,亲自执行:
node -e "const s=JSON.parse(require('fs').readFileSync('sources.json','utf8')); const ok=Array.isArray(s)&&s.length===2&&s.every(x=>x.name&&x.url); if(ok===false) process.exit(1); console.log('sources.json OK:',s.length)"
这条命令在 macOS、Linux 的常见 Shell 和 Windows PowerShell 中都可以使用。成功时应看到:
sources.json OK: 2
还可以列出目录内容,确认文件数量:
macOS、Linux:
ls -la
Windows PowerShell:
Get-ChildItem
除了操作系统可能显示的隐藏元数据外,课程创建的文件应只有 PROJECT.md 和 sources.json。打开两个文件再读一遍;这是对“内容正确”的检查,而 Node 命令只验证 JSON 结构。
验收失败时怎么继续
保留真实输出,把它原样交回同一会话。例如:
我在系统终端执行验收命令后没有得到 sources.json OK: 2。下面是完整输出:
(粘贴错误信息)
请只检查 PROJECT.md 和 sources.json,先解释根因,再做最小修改并重新运行同一条验证命令。不要创建新文件,也不要访问网络。
“同一会话”很重要:前面的任务、工具结果、审批和改动都在这条会话的记录里。新开会话会丢掉这段近距离上下文,需要重新解释问题。
7.10 三个概念,现在可以记住了
完成第一次任务后,再回头看 DSH 的三个核心对象会更直观:
- 工作区(Workspace):一个持续保存的项目目录记录。它决定新会话从哪个目录开始工作;它不是一张只用于分类的标签。
- 会话(Session):一次任务的持续记录,包含用户消息、模型响应、工具调用、审批和结果。修复同一问题时优先留在原会话。
- 权限与审批:权限控制可触达范围,审批控制某个具体动作。第一次练习用“工作区内修改 + 按需审批”,不需要完全权限。
模型负责判断下一步,标准模式提供完整的 Agent 工作方式,文件和 Shell 能力负责实际操作,工作区与权限则限制这些能力的边界。DSH 的价值不只是“生成一段文字”,而是把这些层组合成一条可观察、可审查、可继续的任务过程。
7.11 本章验收
进入下一章前,请确认:
daily-report已经添加并选为工作区;- 新会话使用标准模式和 Workspace Write(工作区内修改)权限;
- 工作区中存在
PROJECT.md、sources.json,没有课程意外创建的其他文件; - 你实际查看过文件内容或代码差异;
- 自己运行验证命令后看到
sources.json OK: 2; - 你知道模型配置、工作区、会话、权限和单次审批分别解决什么问题。
现在项目已经有了明确边界和第一份可验证配置。下一章会系统梳理模型的三种 Provider 配置方式,并用这个工作区做一次只读对比,避免“换模型”和“换 Agent 工作方式”混为一谈。
← 上一章:Windows 安装 | 回目录 | 下一章:模型 Provider:官方、内置与自定义 →