跳转到内容

核心概念

八千代里大概就十来个概念。把它们弄清楚,设置界面就不再是迷宫了。

线程就是一段对话。和大多数聊天应用不同的是,线程是一棵树,不是一个列表:你可以从任意一条消息分叉出去、拿到一个不同的回复,并且两个都留着。同层的多个回复都可以来回切换,不会互相覆盖。

这一点重要,是因为对比才是你实际的工作方式 —— 两种语气、两种思路、两个模型回答同一个问题。分叉把这件事变成一等操作,而不是靠复制粘贴凑出来的。

线程存在 ~/.yachiyo/yachiyo.sqlite,支持全文搜索,应用里和 yachiyo thread search 都能搜。

一次运行就是智能体循环的一次执行:你的消息进去,模型思考、调工具,产出一个回复。运行有状态(running、completed、failed、cancelled)和 token 开销,两者在界面上都看得到。

运行是可打断的。回复流式输出的过程中,你可以干预它 —— 发一条中途落地的纠正 —— 或者排队一条后续消息等它结束再处理。回车对应哪一个,在 设置 → 通用 → 行为 里配置。

运行模式决定这一轮里智能体能碰哪些工具。模式在输入框里选,只对该次运行生效。

模式能做什么
Auto所有已启用的工具 —— 编辑、shell、浏览、委派、自动化。默认。
探索read、grep、glob、webRead、webSearch。只读只搜,绝不写入。
计划探索模式的工具,外加 write 和 bash,用于在动真格之前先起草一份方案。
聊天完全没有工具。只用已有的对话和上下文回答。

模式是一条安全边界,不是一个建议。在探索模式下,编辑类工具不是「不鼓励使用」—— 它们根本不在模型的工具列表里。

在模式允许的范围内,八千代默认按 YOLO 执行:直接用工具,而不是每一步都来问你要授权。你划线的地方是模式,不是确认弹窗。

工作区是一个线程运行所在的目录。工具调用里的相对路径从这里解析,文件编辑也限定在其中,除非智能体用了绝对路径。

在 设置 → 能力 → 工作区 注册工作区,然后按线程挂载。一次运行中智能体改动的每个文件都会被快照,所以事后你可以复核 diff,而不是听它自己怎么说。

工具是把模型变成智能体的东西。完整列表:

工具用途
read、write、edit、applyPatch读写文件。读在写之前 —— 覆盖一个文件之前智能体必须先读过它。
grep、glob搜索文件内容和路径。
bash执行 shell 命令,包括长时间运行的后台任务。
jsRepl在当前 Agent 执行期间的持久化 Worker 中增量运行 JavaScript cell。
pyRepl在持久化的已选 CPython 环境中增量运行 Python cell。
webSearch、webRead搜索网页,并以 Markdown 形式读取页面。
useBrowser驱动真实浏览器会话,做 fetch 做不到的事。
skillsRead按需加载某个技能完整的 SKILL.md。
askUser运行途中提一个澄清问题,而不是靠猜。
delegateTask启动子智能体任务。
steerTask继续或唤醒已委派的任务。
getTask查看已委派任务的状态和进度。
remember保存一条持久记忆。
querySource以只读虚拟表的形式查询本地上下文源 —— 线程、记忆、活动记录。
useThings、reviewThings维护 Things:用 #name 引用的具名上下文索引。
updateProfile更新结构化档案文档 USER.md。
updateTodoList维护多步骤工作的待办组件。
useSentinel设置一个对话级的周期性检查(「20 分钟后回来看这件事」)。
exitPlanMode方案敲定后离开计划模式。

只有托管 Python 环境处于「可用」状态且没有环境管理操作正在执行时,运行才会提供 pyRepl。提供后,它会在首次使用时选定环境。工作区根目录的 .venv 优先,且必须是可用的 CPython 3.11 或更新版本虚拟环境;如果该目录存在却无效,启动会直接失败,不会静默切换到 其他解释器。如果没有 .venv,八千代会使用托管的 CPython 3.12.14 环境。变量绑定会在 当前父级执行或可复用 Worker 的生命周期内保留;reset: true 会主动丢弃这些绑定。

每个解释器都是普通 CPython 进程,不是 Jupyter 或 IPython。它不提供 notebook API、 get_ipython()、IPython magic 或 ! shell escape。cell 支持末尾表达式结果、顶层 await、超时和有并发上限的 parallel(),可以返回文本、JSON、PNG/JPEG 图片以及数学或 数据渲染结果,也可以通过 read、write、tool.<name>(args) 等辅助函数调用当前已启用的 八千代工具。

%pip 是唯一支持的 % 命令,始终安装到已选解释器。选中工作区 .venv 时,包变更属于 该项目;使用托管环境时,包会在 YACHIYO_HOME 下供整个应用持续使用。安装托管环境需要 联网。八千代会将固定版本的 uv 下载到 YACHIYO_HOME 下的私有工具目录,在解压前校验 固定的 archive SHA-256,再由它下载 CPython,以及一组锁定版本且仅使用 wheel 的基础包: NumPy、SciPy、pandas、Matplotlib、Pillow 和 scikit-image。

环境选择不会跟随系统或 Homebrew Python/pip、环境变量 VIRTUAL_ENV、Conda,也不会选择 工作区根目录 .venv 之外的虚拟环境。这是目标隔离,不是操作系统沙箱:显式执行的 Python 文件或子进程代码、tool.bash,以及第三方包或源码构建钩子仍保有普通进程权限。

这里没有逐个工具的开关。某次运行里有哪些工具,完全由运行模式决定 —— 那就是控制面,在输入框里按轮次选。

技能是一个包含 SKILL.md 文件的目录。frontmatter 给它一个 name 和一个 description,正文就是指令。

智能体一开始只看得到名字和描述。当某个看起来相关时,它才调用 skillsRead 加载全文。这样在真正需要之前,技能不会挤占上下文窗口。

没有运行时,没有清单文件,也没有注册步骤。见技能。

两个模型槽位,干不同的活:

  • 聊天模型 —— 回答你的那个。按线程设定,可以按消息切换。
  • 工具模型 —— 做后台杂活:线程标题、记忆蒸馏、线程变长后的上下文交接、图转文描述、群聊探针、翻译。

工具模型有三种模式:default(复用聊天模型)、custom(指定一个便宜的模型)或 disabled(完全跳过辅助生成)。指向一个又小又快的模型通常是对的选择 —— 这些活儿频繁而且不体面。

三个容易混淆的东西:

  • 记忆 —— 通过 remember 保存、在后续运行中被调取的有来源笔记,可以修订。原始对话独立保留,没有笔记也能搜索。存储在本地,默认开启。
  • SOUL.md —— 助手的人格,包含一份随时间累积的特质日志。可以在应用里改,也可以用 yachiyo soul。
  • USER.md —— 你是谁,以结构化表格记录:背景、偏好、工作方式。智能体通过 updateProfile 工具维护它。

三者都会进入系统上下文,也都在每个线程和频道里生效。见记忆与人格。

一个 Thing 是一个具名的上下文索引 —— 一个项目、一个决策、一段长期进行的工作 —— 你在对话里用 #name 引用它。对话会作为来源挂到 Thing 上,于是未来的线程可以直接接上某个话题,不用你重新解释一遍。

Things 不是待办也不是提醒。它们是比任何单次对话活得更久的稳定话题。

频道把一个外部平台 —— Telegram、QQ、Discord —— 接到同一个本地实例上。消息以线程的形式进来,共享记忆和人格。

两种角色很关键:

  • 主人 —— 你。完整工具权限、完整记忆,私聊按第一方处理。
  • 访客 —— 其他所有人。沙箱工作区、过滤后的记忆、按用户的 token 限额,以及明确的允许/拉黑状态。

群聊还多一个群讨论模式:一个便宜的探针模型潜水观察对话,只在机器人确实该说话时才唤醒完整模型。见频道。

定时任务自己跑一段提示词 —— 要么按 cron 表达式循环,要么在某个具体时间执行一次。每次触发都会新建一个线程,以完整工具权限执行提示词,记录结果,然后归档线程。

定时运行是八千代在你不在场时干活的方式。见定时任务。

两个值得知道的小便利:

  • 常用入口(Essentials) —— 预设的线程启动器,各自带图标、工作区、模型和隐私设置。一次点击,就开好了那个你经常开的线程。
  • 提示词(Prompts) —— 绑定到某个触发码的文本片段,在输入框里展开。

被标记为私密的线程不会出现在搜索结果和命令行列表里,除非你显式传 --include-private。这是你自己机器内部的一条可见性边界,不是加密。