跳转到内容

工作区与文件

工作区是一个线程运行所在的目录。工具调用里的相对路径从这里解析,文件写入也留在里面,除非智能体用了绝对路径。

没有工作区时,八千代是个聊天框。有了工作区,它才能读你的项目、改文件、跑命令,并把改了什么摆给你看。

设置 → 能力 → 工作区 保存你的路径。每条可以带一个标签,这也是智能体在多个可用工作区之间做选择时看到的东西 —— 所以「client-api(Go 后端)」比一个光秃秃的路径有用得多。

同一个面板还设定八千代用什么应用打开东西:编辑器、终端和 Markdown 阅读器。

从来没分配过工作区的线程会拿到一个位于 ~/.yachiyo/temp-workspace/<thread-id> 的临时目录,这样工具调用总有地方落脚。

每一次碰到文件的运行都会被快照。事后这次运行会展示一份实际改动的 diff —— 不是模型自己写的、关于它认为自己做了什么的总结。

捕获分三层,因为智能体改文件的方式不止一种:

  1. 写入之前 —— writeeditapplyPatch 工具在替换之前先捕获原始内容。
  2. shell 命令前后 —— bash 命令会被解析出可能的写入目标(重定向、teesed -i 之类),这些文件也一并捕获。这一层是刻意做得不精确的。
  3. 运行结束后 —— 重新扫描工作区,兜住前两层漏掉的部分。

快照进入一个内容寻址的存储,所以未改动的文件不占额外空间,重复内容只存一份。旧快照会在后台被垃圾回收。

工作区扫描会跳过你能想到的那些目录 —— node_modules.gitdistbuild.next.cache__pycache__.yachiyo —— 而且不会无限递归。共享的系统临时目录永远不会被当作外部目标扫描。

有三样东西约束智能体能对你的文件做什么:

  • 运行模式。 在探索模式下,编辑类工具根本不在模型的工具列表里。见运行模式
  • 工作区边界。 相对路径在工作区内解析;伸到外面需要显式的绝对路径。
  • 先读后写。 editwrite 工具要求文件先被读过,所以智能体没法盲写覆盖一个它从没看过的东西。

那些什么都没写就结束的运行留下的临时工作区会越攒越多。设置 → 能力 → 工作区 有一个清理操作,删掉空的那些。里面有文件的工作区不会被碰。