文本线程

概述

Agent 面板中的文本对话功能与其他编辑器类似。您可以使用自定义按键绑定并支持多光标操作,从而在编码和与语言模型进行讨论之间实现无缝切换。

然而,文本对话的不同之处在于其包含了消息块。这些块充当文本容器,对应于上下文中的不同角色。这些角色包括:

  • 助手
  • 系统

首先,在块中输入消息。

Asking a question

当您输入时,所选模型的剩余令牌计数会更新。

从编辑器插入文本很简单,只需高亮显示文本并运行agent: add selection to thread (cmd->|ctrl->);如果它是代码,Zed 会将其包装在围栏代码块中。

Quoting a selection

要提交消息,请使用cmd-enter|ctrl-enter (assistant: assist)。与普通对话中按enter会提交消息不同,在文本对话中,我们的目标是使其尽可能接近常规编辑器。因此,按enter|enter仅插入新行。

提交消息后,响应将流式传输到下方的助手消息块中。

Receiving an answer

可以使用escape键随时取消流式传输。如果您早期发现响应不是您想要的,这会很有用。

如果您想随时开始新的对话,可以按cmd-n|ctrl-n或使用面板左上角汉堡菜单中的“新建聊天”菜单选项。

简单的来回对话在文本对话中效果很好。但是,有时您可能想要修改对话中之前的文本并将其引导到不同的方向。

编辑文本对话

文本对话为您提供了控制上下文的灵活性。您可以自由编辑任何之前的文本,包括 LLM 的响应。如果您想完全删除一个消息块,只需将光标放在该块的开头并使用delete键。典型的工作流程可能包括在整个上下文中进行编辑和调整,以完善您的查询或提供额外信息。以下是一个示例:

  1. 块中编写文本。
  2. 使用cmd-enter|ctrl-enter提交消息。
  3. 收到不符合您预期的助手响应。
  4. 使用escape取消响应。
  5. 擦除助手消息块的内容并完全删除该块。
  6. 为您的原始消息添加额外上下文。
  7. 使用cmd-enter|ctrl-enter提交消息。

能够编辑之前的消息让您能够控制令牌的使用方式。您无需开始新的聊天来纠正错误或添加额外信息,也无需通过提交后续更正来浪费令牌。

注意:在语言模型的上下文中,编辑过去的消息通常被称为“重写历史”。

需要记住的一些额外要点:

  • 您可以通过单击角色来循环消息块的角色,当您在助手块中收到要编辑并作为块发回的响应时,这会很有用。

命令概述

斜杠命令增强了助手的功能。通过在行首键入/来查看可用命令列表:

  • /default: 插入默认规则
  • /diagnostics: 注入项目语言服务器报告的错误
  • /fetch: 抓取网页内容并插入
  • /file: 插入单个文件或文件目录
  • /now: 插入当前日期和时间
  • /prompt: 将自定义配置的提示添加到上下文(请参阅规则库
  • /symbols: 插入当前选项卡的活动符号
  • /tab: 插入活动选项卡或所有打开选项卡的内容
  • /terminal: 从终端插入选定行数的输出
  • /selection: 插入选定的文本

注意:请记住,命令仅在创建文本对话或插入命令时进行评估,因此像/now这样的命令不会持续更新,或者/file命令不会保持其内容最新。

/default

规则:编辑默认规则部分阅读更多关于/default的信息。

用法:/default

/diagnostics

/diagnostics命令将项目语言服务器报告的错误注入到上下文中。这对于获取项目中当前问题的概述很有用。

用法:/diagnostics [--include-warnings] [path]

  • --include-warnings:可选标志,用于除错误外还包括警告。
  • path:可选路径,用于将诊断限制到特定文件或目录。

/file

/file命令将单个文件或文件目录的内容插入到上下文中。这允许您在与助手的对话中引用项目的特定部分。

用法:/file <path>

您可以使用 glob 模式匹配多个文件或目录。

示例

  • /file src/index.js - 将src/index.js的内容插入到上下文中。
  • /file src/*.js - 插入src目录中所有.js文件的内容。
  • /file src - 插入src目录中所有文件的内容。

/now

/now命令将当前日期和时间插入到上下文中。这对于让语言模型知道当前时间(以及由此推断其当前知识库有多旧)很有用。

用法:/now

/prompt

/prompt命令将提示库中的提示插入到上下文中。它也可以用于在提示中嵌套提示。

用法:/prompt <prompt_name>

相关:/default

/symbols

/symbols命令将当前选项卡中的活动符号(函数、类等)插入到上下文中。这对于获取当前文件的结构概述很有用。

用法:/symbols

/tab

/tab命令将活动选项卡或所有打开选项卡的内容插入到上下文中。这允许您引用您当前正在处理的内容。

用法:/tab [tab_name|all]

  • tab_name:要插入的特定选项卡的可选名称。
  • all:插入所有打开选项卡的内容。

示例

  • /tab - 插入活动选项卡的内容。
  • /tab "index.js" - 插入名为“index.js”的选项卡的内容。
  • /tab all - 插入所有打开选项卡的内容。

/terminal

/terminal命令从终端插入选定行数的输出到上下文中。这对于引用最近的命令输出或日志很有用。

用法:/terminal [<number>]

  • <number>:可选参数,用于指定要插入的行数(默认为 50)。

/selection

/selection命令将编辑器中选定的文本插入到上下文中。这对于引用代码的特定部分很有用。

这等同于agent: add selection to thread命令 (cmd->|ctrl->)。

用法:/selection

规则库中的命令

命令可以在规则库(以前称为提示库)中的规则中使用,以插入动态内容或执行操作。例如,如果您想创建一个规则,其中模型需要知道日期,您可以使用/now命令插入当前日期。

警告:规则中的斜杠命令在文本对话中使用时才有效。在非文本对话中使用它们不受支持。

注意:规则中的斜杠命令必须单独占一行。

请参阅上面的命令列表,了解有关命令以及可用斜杠命令的更多信息。

示例

You are an expert Rust engineer. The user has asked you to review their project and answer some questions.

Here is some information about their project:

/file Cargo.toml

在上面的示例中,@file命令用于将Cargo.toml文件(或项目中存在的所有Cargo.toml文件)的内容插入到规则中。

嵌套规则

与将规则添加到默认规则类似,您可以使用/prompt命令将规则嵌套在其他规则中(目前仅在文本对话中支持)。

您可能希望嵌套规则以:

  • 即时创建模板
  • 将文档或参考资料等集合分解成更小、可混合搭配的部分
  • 创建相似规则的变体(例如,Async Rust - Tokio vs. Async Rust - Async-std

示例

Title: Zed-Flavored Rust

## About Zed

/prompt Zed: Zed (a rule about what Zed is)

## Rust - Zed Style

/prompt Rust: Async - Async-std (zed doesn't use tokio)
/prompt Rust: Zed-style Crates (we have some unique conventions)
/prompt Rust - Workspace deps (bias towards reusing deps from the workspace)

上面括号中的文本是注释,不属于规则的一部分。

注意:虽然您技术上可以将规则嵌套在自身内部,但我们强烈不建议这样做。请自行承担风险!

通过使用嵌套规则,您可以创建模块化且可重用的规则组件,这些组件可以通过各种方式组合以适应不同的场景。

注意:当使用斜杠命令引入额外上下文时,注入的内容可以直接在文本对话中进行行内编辑——在此处的编辑不会传播到已保存的规则。

可扩展性

可以由扩展提供额外的斜杠命令。

请参阅扩展:斜杠命令以了解如何创建自己的命令。

高级概念

规则模板

Zed 使用规则模板来支持内部助手功能,例如终端助手或内联助手中使用的内容规则。

Zed 具有以下内部规则模板:

  • content_prompt.hbs:用于在编辑器中生成内容。
  • terminal_assistant_prompt.hbs:用于终端助手功能。

目前尚不确定我们是否会进一步扩展模板以允许用户创建。

覆盖模板

注意:除非您知道自己在做什么,否则不建议覆盖模板。如果操作不当,编辑模板将导致您的助手崩溃。

Zed 允许您通过将自定义 Handlebars (.hbs) 模板放置在您的~/.config/zed/prompt_overrides目录中来覆盖用于各种助手功能的默认规则。

可以覆盖以下模板:

  1. content_prompt.hbs:用于在编辑器中生成内容。

  2. terminal_assistant_prompt.hbs:用于终端助手功能。

注意:请务必确定您要覆盖这些模板,因为您将错过我们内置功能的迭代。这主要应在开发 Zed 时使用。

您可以自定义这些模板以更好地满足您的需求,同时保持 Zed 使用的核心结构和变量。当您的提示覆盖在磁盘上更改时,Zed 将自动重新加载它们。

请查阅 Zed 的assets/prompts目录,获取您可以尝试的当前版本。

历史记录

在您在文本对话中提交第一条消息后,语言模型会为您的上下文生成一个名称,并且该上下文会自动保存到您的文件系统中:

  • ~/.config/zed/conversations (macOS)
  • ~/.local/share/zed/conversations (Linux)
  • %LocalAppData%\Zed\conversations (Windows)

您可以通过单击代理面板左上角的历史按钮来访问和加载以前的上下文。

Viewing assistant history