语言模型集成

助手面板

助手面板提供了一种与 OpenAI 的大型语言模型交互的方式。助手适用于各种任务,例如生成代码、询问有关现有代码的问题,甚至编写纯文本,例如电子邮件和文档。要打开助手面板,请使用命令面板(cmd-shift-p)中的workspace: toggle right dock操作切换右侧泊坞窗。

注意:可以通过设置将默认绑定设置为切换右侧泊坞窗。

设置

  1. 创建 OpenAI API 密钥

  2. 确保您的 OpenAI 帐户有积分

  3. 使用命令面板(cmd-shift-p)中的assistant: toggle focusworkspace: toggle right dock操作打开助手面板。

  4. 确保助手面板处于焦点

    The focused assistant panel

  5. 打开命令面板(cmd-shift-p),并使用现在可用的assistant: reset key操作设置您的 OpenAI API 密钥:在右侧的字段中输入您的 OpenAI API 密钥,然后按回车

OpenAI API 密钥将保存在您的钥匙串中。

如果已定义,Zed 还会使用 OPENAI_API_KEY 环境变量。如果您需要重置 OpenAI API 密钥,请关注助手面板并运行命令面板操作 assistant: reset key

进行对话

Zed 中的助手编辑器与任何其他编辑器类似。您可以使用自定义键绑定并使用多个光标,从而在编码和与语言模型进行讨论之间实现无缝过渡。但是,助手编辑器与消息块的包含有所不同。这些块用作与对话中不同角色相对应的文本容器。这些角色包括

  • 助手
  • 系统

首先,选择一个模型并在 块中输入一条消息。

Asking a question

在您键入时,将更新所选模型的剩余令牌数。

从编辑器中插入文本就像高亮显示文本并运行 cmd-> (assistant: quote selection) 一样简单;如果是代码,Zed 会将其包装在带围栏的代码块中。

Quoting a selection

要提交消息,请使用 cmd-enter (assistant: assist)。与按 enter 会提交消息的典型聊天应用程序不同,在助手编辑器中,我们的目标是使其尽可能接近常规编辑器。因此,按 enter 只是插入新行。

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

Receiving an answer

可以使用 escape 随时取消流。如果您很早就意识到响应不是您要找的,这将很有用。

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

简单的来回对话与助手配合得很好。但是,有时您可能想要修改对话中的前一个文本并将其引导到不同的方向。

编辑对话

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

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

能够编辑以前的消息使您可以控制令牌的使用方式。您无需启动新的上下文来纠正错误或添加其他上下文,并且您不必通过提交后续更正来浪费令牌。

需要记住的一些其他要点

  • 您可以在对话中的任何时候自由更改模型类型。
  • 您可以通过单击角色来循环消息块的角色,当您在 Assistant 块中收到您想要编辑并作为 You 块发回的响应时,这很有用。

保存和加载对话

在您提交第一条消息后,语言模型会为您的对话生成一个名称,并且对话会自动保存到您的文件系统中的 ~/.config/zed/conversations 中。您可以通过单击助手面板左上角的汉堡按钮来访问和加载以前的邮件。

Viewing assistant history

为 OpenAI 使用自定义 API 端点

您可以为 OpenAI 使用自定义 API 端点,只要它与 OpenAI API 结构兼容即可。

为此,请将以下内容添加到您的 Zed settings.json

{
  "assistant": {
    "version": "1",
    "provider": {
      "name": "openai",
      "type": "openai",
      "default_model": "gpt-4-turbo-preview",
      "api_url": "https://127.0.0.1:11434/v1"
    }
  }
}

此处的自定义 URL 为 https://127.0.0.1:11434/v1

在 macOS 上使用 Ollama

您可以通过使 Ollama 作为 OpenAPI 端点出现,将其与 Zed 助手一起使用。

  1. 将以下内容添加到您的 Zed settings.json
{
  "assistant": {
    "version": "1",
    "provider": {
      "name": "openai",
      "type": "openai",
      "default_model": "gpt-4-turbo-preview",
      "api_url": "https://127.0.0.1:11434/v1"
    }
  }
}
  1. 例如,使用 Ollama 下载 mistral 模型
ollama run mistral
  1. 复制模型并将它的名称更改为与 Zed settings.json 中的模型相匹配
ollama cp mistral gpt-4-turbo-preview
  1. 使用 assistant: reset key(请参阅上面的 设置 部分)并输入以下 API 密钥
ollama
  1. 重启 Zed

使用 Claude 3.5 Sonnet

您可以通过添加以下设置来将 Claude 与 Zed 助手一起使用

"assistant": {
  "version": "1",
  "provider": {
    "default_model": "claude-3-5-sonnet",
    "name": "anthropic"
  }
},

当您保存设置时,助手面板将打开并要求您添加您的 Anthropic API 密钥。您需要在此处获取此密钥 此处

即使您为 Claude Pro 付费,您仍然必须 支付额外费用 才能通过 API 使用它。

内联生成

您可以通过选择文本并按 ctrl-enter 来在任何编辑器中生成和转换文本。您还可以通过使用多个光标按 ctrl-enter 或通过使用跨越多缓冲区中多个摘录的选择按 ctrl-enter 来并行执行多个生成请求。要创建预填充提示的自定义键绑定,您可以在键映射中添加以下格式

[
  {
    "context": "Editor && mode == full",
    "bindings": {
      "ctrl-shift-enter": [
        "assistant::InlineAssist",
        { "prompt": "Build a snake game" }
      ]
    }
  }
]