org-ai

GitHub
815 64 中等 1 次阅读 1周前GPL-3.0Agent语言模型图像开发框架插件
AI 解读 由 AI 自动生成,仅供参考

org-ai 是一个为 Emacs 用户打造的个人 AI 助手,让 Emacs 成为你的智能协作者。它支持使用 ChatGPT、LLaMA 等大语言模型生成文字,或通过 DALL-E 和 Stable Diffusion 生成图像,还能实现语音输入输出,极大提升了 Emacs 的交互能力。

它解决了在 Emacs 中直接调用 AI 模型进行内容创作、图像生成和语音交互的问题,让用户无需切换环境即可完成复杂任务。无论是撰写文档、生成创意图像,还是通过语音与 AI 对话,都能在熟悉的 Emacs 环境中高效完成。

适合经常使用 Emacs 的开发者、研究人员、设计师以及喜欢深度定制工作流的用户。对于需要频繁调用 AI 模型辅助写作、设计或数据分析的人来说,org-ai 提供了无缝集成的体验。

其独特之处在于将 AI 功能深度嵌入 org-mode 编辑器中,支持代码块式交互、语音支持及多种 AI 模型灵活配置,使 AI 协作更加自然流畅。

使用场景

一个研究人员正在撰写一篇关于人工智能在医疗诊断中的应用的综述论文,需要频繁查阅大量文献、生成摘要、绘制示意图,并与AI进行交互式讨论。

没有 org-ai 时

  • 需要频繁切换多个工具(如浏览器、文本编辑器、图像生成工具)来完成文献检索、内容撰写和图像生成,效率低下。
  • 无法直接在文档中调用AI模型生成内容,导致写作流程中断,影响思路连贯性。
  • 图像生成需要单独使用DALL-E或Stable Diffusion等工具,难以与文档内容实时结合。
  • 无法通过语音输入与AI交互,对于长时间写作容易产生疲劳感。

使用 org-ai 后

  • 可以直接在Org-mode文档中嵌入AI调用块,实现文献查询、内容生成、图像绘制等功能的一体化操作,提升工作效率。
  • 支持在文档内直接调用ChatGPT生成文本内容,例如文献摘要、章节草稿等,保持写作流程的连贯性。
  • 通过:image关键字可直接在文档中生成与内容相关的示意图,无需跳转到其他工具,增强可视化表达。
  • 支持语音输入和输出,用户可以通过语音与AI对话,减少键盘输入负担,提高写作舒适度。

核心价值:org-ai 将AI能力无缝集成到日常写作流程中,显著提升了科研人员在文献整理、内容创作和视觉表达方面的效率与体验。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

需要 NVIDIA GPU,显存 8GB+,CUDA 11.7+

内存

16GB+

依赖
notes建议使用 conda 管理环境,首次运行需下载约 5GB 模型文件。Stable Diffusion 需要额外安装 stable-diffusion-webui,并根据文档配置相关依赖。
python3.8+
torch>=2.0
transformers>=4.30
accelerate
markdown-mode
espeak
greader
whisper
org-ai hero image

快速开始

org-ai MELPA

org-ai 视频

Emacs org-mode 的一个次要模式,提供对生成式 AI 模型的访问。目前支持以下模型:

  • OpenAI API(ChatGPT、DALL-E 以及其他文本模型),可选择使用 Azure API 而非 OpenAI
  • 通过 stable-diffusion-webui 使用 Stable Diffusion

在 org-mode 缓冲区中,您可以:

  • 使用 ChatGPT 生成文本,并完全控制系统和用户提示(演示
  • 支持语音输入与输出!与您的 AI 对话!
  • 使用 Stable Diffusion 或 DALL-E 根据文本提示生成图像及图像变体(演示 1演示 2
  • org-ai 无处不在:各种命令可在 org-mode 外部使用,基于选定文本或多个文件进行提示。

注意:要使用 OpenAI API,您需要拥有一个 OpenAI 账户 并获取 API 密钥。据我所知,免费套餐的当前使用限制已经足够满足大部分需求。


目录

演示

ChatGPT 在 org-mode 中

#+begin_ai
Emacs 是最棒的编辑器吗?
#+end_ai

chat-gpt 在 org-mode 中

您可以继续输入并按 C-c C-c 创建对话。C-g 可中断正在运行的请求。

DALL-E 在 org-mode 中

使用 :image 关键字生成图像。默认情况下使用 DALL·E-3。

#+begin_ai :image :size 1024x1024
超逼真的科幻渲染,展示一台超级复杂的科技机器。
#+end_ai

dall-e 在 org-mode 中

您可以使用以下关键字控制图像生成:

  • :size <width>x<height> - 生成图像的尺寸(默认:1024x1024)
  • :model <model> - 使用的模型(默认:“dall-e-3”)
  • :quality <quality> - 图像质量(可选:hdstandard
  • :style <style> - 使用的风格(可选:vividnatural
  • :n <count> - 生成的图像数量(默认:1)

(有关这些设置的更多信息,请参阅 这篇 OpenAI 博客文章

您可以通过 customize-variable 或在配置中设置这些变量的默认值来自定义它们:

(setq org-ai-image-model "dall-e-3")
(setq org-ai-image-default-size "1792x1024")
(setq org-ai-image-default-count 2)
(setq org-ai-image-default-style 'vivid)
(setq org-ai-image-default-quality 'hd)
(setq org-ai-image-directory (expand-file-name "org-ai-images/" org-directory))

图像变体

dall-e 图像生成在 org-mode 中

功能与使用

#+begin_ai...#+end_ai 特殊块

类似于 org-babel,这些块用于标记 AI 模型的输入(对于 ChatGPT 还包括输出)。您可以将其用于 AI 聊天、文本补全以及文本转图像。更多相关信息请参见下方的 块选项

创建一个类似如下的块:

#+begin_ai
Emacs 是最棒的编辑器吗?
#+end_ai

然后按 C-c C-c。聊天输入会以行内方式出现,一旦回复完成,您可以继续输入回复,依此类推。请参见下方的 演示。当 AI 请求正在运行时,您可以按 C-g 取消它。

您还可以修改使用的 系统 提示及其他参数。系统提示会在用户输入之前注入,从而“引导”模型以特定风格作答。例如,您可以这样做:

#+begin_ai :max-tokens 250
[SYS]: 假装自己是一位强大的中世纪国王。
[ME]: 今天您要吃什么呢?
#+end_ai

这将生成如下 API 负载:

{
  "messages": [
    {
      "role": "system",
      "content": "假装自己是一位强大的中世纪国王。"
    },
    {
      "role": "user",
      "content": "今天您要吃什么呢?"
    }
  ],
  "model": "gpt-4o-mini",
  "stream": true,
  "max_tokens": 250,
  "temperature": 1.2
}

有关一些提示创意,可以参考例如 Awesome ChatGPT Prompts

使用 :image 标志生成图像时,图像会以内联方式显示在 ai 块下方。图像及其提示将存储在 org-ai-image-directory 中,默认路径为 ~/org/org-ai-images/

您也可以使用语音输入来转录输入内容。按 C-c r 以启动 org-ai-talk-capture-in-org 录音。请注意,这需要您先设置 语音识别(见下文)。语音输出可通过 org-ai-talk-output-enable 开启。

#+begin_ai...#+end_ai 内,您可以使用以下命令修改和选择聊天部分:

  • C-c <backspace>org-ai-kill-region-at-point)删除光标下的聊天部分。
  • org-ai-mark-region-at-point 将标记光标处的区域。
  • org-ai-mark-last-region 将标记上一次的聊天部分。

ai 块中的语法高亮

要为你的 #+begin_ai ... 块应用语法高亮,只需在 _ai 后面加上一种语言的主要模式名称。例如:#+begin_ai markdown。对于 Markdown 特别是,若还想正确高亮反引号中的代码,可以设置 (setq markdown-fontify-code-blocks-natively t)。请确保你也已安装了 markdown-mode 包。感谢 @tavisrudd 提供的这个小技巧!

完成后跳转到块的末尾

默认情况下启用此行为,以便交互更像聊天。但当输出较长且缓冲区在你阅读时自动滚动时,这可能会让人感到烦扰。因此,你可以通过以下方式禁用它:

(setq org-ai-jump-to-end-of-block nil)

插入时自动填充段落

(setq org-ai-auto-fill t) 设置为“填充”(根据 fill-column 自动换行)插入的文本。基本上就像 auto-fill-mode,只不过针对的是 AI。

块选项

#+begin_ai...#+end_ai 块可以接受以下选项。

针对 ChatGPT

默认情况下,AI 块的内容会被解释为 ChatGPT 的消息。紧跟 [ME]: 的文本被视为用户输入,而紧跟 [AI]: 的文本则被视为模型的回复。你也可以选择在块开头添加一个 [SYS]: <行为> 输入来初始化模型(参见下文的 org-ai-default-chat-system-prompt)。

  • :max-tokens number - 最大生成的 token 数量(默认:nil,使用 OpenAI 的默认值)
  • :temperature number - 模型的温度(默认:1)
  • :top-p number - 模型的 top_p 参数(默认:1)
  • :frequency-penalty number - 模型的频率惩罚(默认:0)
  • :presence-penalty - 模型的存在惩罚(默认:0)
  • :sys-everywhere - 将系统提示重复应用于每条用户消息(默认:nil)

如果你有许多关于同一主题和设置(系统提示、温度等)的不同对话线程,并且不想每次都重复所有选项,可以在 Org 文件范围内设置属性,或创建一个带有属性抽屉的 Org 标题,这样该标题下的所有 #+begin_ai...#+end_ai 块都会继承这些设置。

示例:

* Emacs(多个关于 Emacs 的对话延续在这个子树中)
:PROPERTIES:
:SYS: 你是 Emacs 专家。你可以通过回答我的问题来帮助我。你也可以向我提问以澄清我的意图。
:temperature: 0.5
:model: gpt-4o-mini
:END:

** 通过 elisp 进行 Web 编程
#+begin_ai
如何调用 REST API 并解析其 JSON 响应?
#+end_ai

** 其他 Emacs 任务
#+begin_ai...#+end_ai

* Python(多个关于 Python 的对话延续在这个子树中)
:PROPERTIES:
:SYS: 你是 Python 程序员。请以详细的分步说明和代码来回答任务。
:temperature: 0.1
:model: gpt-4
:END:

** 学习 QUIC
#+begin_ai
如何搭建支持 http3 的 Web 服务器?
#+end_ai

** 其他 Python 任务
#+begin_ai...#+end_ai

以下自定义变量可用于配置聊天:

  • org-ai-default-chat-model(默认:“gpt-4o-mini”)
  • org-ai-default-max-tokens——响应应有多长。目前不能超过 4096。如果这个值太小,答案可能会被截断(默认:nil)
  • org-ai-default-chat-system-prompt——如何“初始化”模型。这是一个在用户输入前注入的提示。(默认:“你是 Emacs 内部的贴心助手。”)
  • org-ai-default-inject-sys-prompt-for-all-messages——是否在每条用户消息前重复系统提示。有时模型会“忘记”它是如何被初始化的,这有助于提醒它。(默认:nil
针对 DALL-E

当你在 AI 块中添加 :image 选项时,提示将用于图像生成。

  • :image——生成图像而非文本
  • :size——生成图像的尺寸(默认:256x256,也可为 512x512 或 1024x1024)
  • :n——生成的图像数量(默认:1)

以下自定义变量可用于配置图像生成:

  • org-ai-image-directory——存放生成图像的目录(默认:~/org/org-ai-images/
针对 Stable Diffusion

与 DALL-E 类似,但使用

#+begin_ai :sd-image
<PROMPT>
#+end_ai

你可以通过在 Org 模式图像上标注 #+name,并在 Org-AI 块中引用 :image-ref 来运行 img2img。

#+begin_ai :sd-image :image-ref label1
森林,梵高风格
#+end_ai

M-x org-ai-sd-clip 会通过 CLIP 查询器猜测 Org 模式中前一张图像的提示,并将其保存到剪贴板中。

M-x org-ai-sd-deepdanbooru 则通过 DeepDanbooru 查询器猜测 Org 模式中前一张图像的提示,并将其保存到剪贴板中。

针对本地模型

要从由 oobabooga/text-generation-webui 提供服务的本地模型请求补全,需按照下面介绍的步骤进行设置[见#使用 oobabooga text-generation-webui 的本地 LLM]。

然后启动一个 API 服务器:

cd ~/.emacs.d/org-ai/text-generation-webui
conda activate org-ai
python server.py --api --model SOME-MODEL

当你在 Org-AI 块中添加 :local 键并使用 C-c C-c 请求补全时,该块将被发送到本地 API 服务器,而不是 OpenAI API。例如:

#+begin_ai :local
...
#+end_ai

这会向 org-ai-oobabooga-websocket-url 发送请求,并将响应流式传输到 Org 缓冲区。

其他文本模型

较旧的补全模型也可以通过在 AI 块中添加 :completion 选项来触发。

有关这些参数的详细含义,请参阅 OpenAI API 文档

以下自定义变量可用于配置文本生成:

  • org-ai-default-completion-model(默认:“text-davinci-003”)

图像变体

您也可以使用一张现有图像作为输入,以生成更多外观相似的图像。org-ai-image-variation 命令会提示您输入一张图像的文件路径、指定图像的尺寸与数量,随后生成相应数量的图像,并在当前 org-mode 缓冲区中插入指向这些图像的链接。生成的图像将存储在 org-ai-image-directory 目录下。请参阅下方的演示

有关更多信息,请参阅 OpenAI 文档。输入图像必须为正方形,且文件大小不得超过 4MB。此外,目前需要在命令行工具中安装 curl[^1]。

[^1]: 注: 当前的图像变体实现要求系统中已安装命令行版 curl。原因是 OpenAI API 需要发送 multipart/form-data 格式的请求,而 Emacs 自带的 url-retrieve 函数并不支持这种格式(至少我尚未找到解决办法)。改用 request.el 或许是更好的替代方案。如果您有意参与贡献,欢迎提交 Pull Request!

全局命令

org-ai 也可以在 org-mode 缓冲区之外使用。启用 org-ai-global-mode 后,前缀键 C-c M-a 将绑定到一系列命令:

命令 键绑定 描述
org-ai-on-region C-c M-a r 对选中文本提问或指示 AI 对其执行某项操作。响应结果将在一个 org-mode 缓冲区中打开,以便您继续对话。通过设置变量 org-ai-on-region-file(例如 (setq org-ai-on-region-file (expand-file-name "org-ai-on-region.org" org-directory))),可将该缓冲区与特定文件关联。
org-ai-summarize C-c M-a s 概括选中文本内容。
org-ai-refactor-code C-c M-a c 指示 AI 如何修改选中的代码,随后将弹出一个差异缓冲区显示修改内容。
org-ai-on-project C-c M-a p 批量运行提示并同时修改/重构多个文件。若已安装 projectile,则优先使用;否则回退到当前目录。
org-ai-prompt C-c M-a P 提示用户输入一段文本,然后在当前缓冲区中打印 AI 的回复。
org-ai-switch-chat-model C-c M-a m 交互式地切换 org-ai-default-chat-model
org-ai-open-account-usage-page C-c M-a $ 打开 https://platform.openai.com/account/usage 页面,查看您的费用消耗情况。
org-ai-open-request-buffer C-c M-a ! 打开 url 请求缓冲区。如果某些功能无法正常工作,查看该缓冲区可能会有所帮助。
org-ai-talk-input-toggle C-c M-a t 通常为各类提示命令启用语音输入功能。
org-ai-talk-output-toggle C-c M-a T 通常启用语音输出功能。

org-ai-on-project

使用 org-ai-on-project 缓冲区,您可以在项目中的文件上运行命令,或者仅对这些文件中的选中文本执行操作。例如,您可以选中某个项目的自述文件并询问“它到底是关于什么的?”或让 AI 解释一段代码。您还可以请求对代码进行修改,AI 将生成相应的差异补丁。如果您认识有人认为只有启用了 Copilot 的 VS Code 才能做到这一点,请把他们引到这里。

运行 org-ai-on-project 命令后,会打开一个独立的缓冲区,允许您选择多个文件(并可选地在文件内选择一个子区域),然后对其运行提示。

org-ai-on-project

如果取消勾选“修改代码”,效果类似于运行 org-ai-on-region,只是所有文件内容都会出现在提示中。

当启用“修改代码”时,您可以要求 AI 修改或重构代码。默认情况下(“请求差异”未启用),我们会提示 AI 为所有选定的文件/区域生成新代码,随后您可以逐个查看差异并决定是否应用。而当“请求差异”启用时,AI 将直接生成一个统一的差异补丁,您可以直接应用该补丁。

Noweb 支持

给定一个具名源代码块:

#+name: sayhi
#+begin_src shell
echo "Hello there"
#+end_src

我们可以尝试按名称引用它,但行不通。

#+begin_ai
[SYS]: 你是一个模仿者。每当我讲一句话时,你就原封不动地重复我说的话。一字不差地照我说的说,不要添加任何内容。

[ME]: <<sayhi()>>


[AI]: <<sayhi()>>

[ME]:
#+end_ai

在启用 :noweb yes 的情况下:

#+begin_ai :noweb yes
[SYS]: 你是一个模仿者。每当我讲一句话时,你就原封不动地重复我说的话。一字不差地照我说的说,不要添加任何内容。

[ME]: <<sayhi()>>


[AI]: Hello there.

[ME]:
#+end_ai

此外,你还可以通过在父级标题中的任意位置设置 org-ai-noweb: yes 标题属性来触发 Noweb 展开。 要查看你的文档在发送到 API 时将展开为何种形式,运行 org-ai-expand-block

运行任意 Lisp 内联代码

这虽然算个“小技巧”,但效果非常好。

创建一个代码块:

#+name: identity
#+begin_src emacs-lisp :var x="fill me in"
(format "%s" x)
#+end_src

我们可以调用它,并让 Noweb 参数(支持 Lisp)作为代码进行求值:

#+begin_ai :noweb yes
告诉我改进这个 Dockerfile 的三种简单方法

<<identity(x=(quelpa-slurp-file "~/code/ibr-api/Dockerfile"))>>



[AI]: 1. 使用更具体的 Python 版本,比如“python:3.9.6-buster”而不是“python:3.9-buster”,以确保与未来更新的兼容性。

2. 在安装 Poetry 后添加清理步骤,删除所有不必要的文件或依赖项,从而减小最终镜像的大小。

3. 使用多阶段构建,将构建环境与生产环境分离,这样既能减小最终镜像的大小,又能提高安全性。例如,第一阶段可以用来安装依赖并构建代码,而第二阶段只包含最终产物,用于部署。

[ME]:
#+end_ai

安装

Melpa

org-ai 已经上架 Melpa:https://melpa.org/#/org-ai。如果你已经将 Melpa 添加到你的包仓库中,方法如下:

(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.org/packages/") t)
(package-initialize)

那么你可以通过以下命令安装:

(use-package org-ai
  :ensure t
  :commands (org-ai-mode
             org-ai-global-mode)
  :init
  (add-hook 'org-mode-hook #'org-ai-mode) ; 在 Org 模式下启用 org-ai
  (org-ai-global-mode) ; 安装全局快捷键 C-c M-a
  :config
  (setq org-ai-default-chat-model "gpt-4") ; 如果你使用的是 GPT-4 测试版:
  (org-ai-install-yasnippets)) ; 如果你使用 yasnippet 并希望获得 `ai` 提示词

Straight.el

(straight-use-package
 '(org-ai :type git :host github :repo "rksm/org-ai"
          :local-repo "org-ai"
          :files ("*.el" "README.md" "snippets")))

手动安装

克隆此仓库:

git clone
https://github.com/rksm/org-ai

然后,如果你使用 use-package

(use-package org-ai
  :ensure t
  :load-path (lambda () "path/to/org-ai"))
  ;; …其余部分同上…

或者直接用 require

(package-install 'websocket)
(add-to-list 'load-path "path/to/org-ai")
(require 'org)
(require 'org-ai)
(add-hook 'org-mode-hook #'org-ai-mode)
(org-ai-global-mode)
(setq org-ai-default-chat-model "gpt-4") ; 如果你使用的是 GPT-4 测试版:
(org-ai-install-yasnippets) ; 如果你使用 yasnippet 并希望获得 `ai` 提示词

OpenAI API 密钥

你可以直接在配置中设置你的 API 密钥:

(setq org-ai-openai-api-token "<ENTER YOUR API TOKEN HERE>")

或者,org-ai 支持通过 auth-source 获取你的 API 密钥。你可以在 ~/authinfo.gpg 文件中以如下格式存储密钥:

machine api.openai.com login org-ai password <your-api-key>

如果该文件存在,org-ai 就会在发起请求时自动使用这一机制获取密钥。如果你不希望 org-ai 从 auth-source 获取密钥,可以在加载 org-ai 之前将 org-ai-use-auth-source 设置为 nil

使用 OpenAI 以外的服务

Azure

你可以通过自定义这些变量切换到 Azure,既可以通过交互式方式使用 M-x customize-variable,也可以直接在配置中添加:

(setq org-ai-service 'azure-openai
      org-ai-azure-openai-api-base "https://your-instance.openai.azure.com"
      org-ai-azure-openai-deployment "azure-openai-deployment-name"
      org-ai-azure-openai-api-version "2023-07-01-preview")

要存储 API 凭证,按照上述 authinfo 的说明操作,只是机器名改为 org-ai-azure-openai-api-base

perplexity.ai

可用模型列表请参见 perplexity.ai 文档

你可以在配置中切换默认服务:

(setq org-ai-service 'perplexity.ai)
(setq org-ai-default-chat-model "llama-3-sonar-large-32k-online")

或者按每个代码块单独设置:

#+begin_ai :service perplexity.ai :model llama-3-sonar-large-32k-online
[ME]: 告诉我一些关于 Emacs 的有趣事实。
#+end_ai

认证方面,在 authinfo.gpg 中添加类似条目 machine api.perplexity.ai login org-ai password pplx-***,或者直接设置 org-ai-openai-api-token

注意: 目前 perplexity.ai 的 API 不支持返回参考文献/链接,因此 Emacs 无法显示参考信息。他们正在开展一项测试计划,希望能尽快全面开放这项功能。

Anthropic / Claude

与上述类似。例如:

#+begin_ai :service anthropic :model claude-3-opus-20240229
[ME]: 告诉我一些关于 Emacs 的有趣事实。
#+end_ai

Anthropic 的模型请参见 Anthropic 文档。 目前只有一个 API 版本可通过 org-ai-anthropic-api-version 设置。如果有其他版本推出,可在 Anthropic 文档 中找到。

至于 API 密钥,可在 authinfo.gpg 中添加类似条目 machine api.anthropic.com login org-ai password sk-ant-***

设置语音输入/输出

Whisper

这些设置步骤是可选的。如果您不想使用语音输入/输出,可以跳过本节。

注:我的 org-ai 个人配置可以在这个 gist中找到。其中包含一个可用的 Whisper 设置。

此方法已在 macOS 和 Linux 上测试通过。如果有 Windows 用户,请帮忙测试并告知我需要做哪些调整才能使其正常工作(谢谢!)。

语音输入使用了 whisper.elffmpeg。您需要直接克隆该仓库,或使用 straight.el 来安装它。

  1. 安装 ffmpeg(例如,在 macOS 上运行 brew install ffmpeg),或在 Linux 上运行 sudo apt install ffmpeg
  2. 克隆 whisper.el:git clone https://github.com/natrys/whisper.el path/to/whisper.el

现在您应该能够在 Emacs 中加载它:

(use-package whisper
  :load-path "path/to/whisper.el"
  :bind ("M-s-r" . whisper-run))

然后还要加载:

(use-package greader :ensure)
(require 'whisper)
(require 'org-ai-talk)

;; macOS 语音设置,可选
(setq org-ai-talk-say-words-per-minute 210)
(setq org-ai-talk-say-voice "Karen")
macOS 特定步骤

在 macOS 上,您还需要完成两项额外操作:

  1. 允许 Emacs 录制音频
  2. 告诉 whisper.el 使用哪个麦克风
1. 允许 Emacs 录制音频

您可以使用 tccutil 工具

git clone https://github.com/DocSystem/tccutil
cd tccutil
sudo python ./tccutil.py -p /Applications/Emacs.app -e --microphone

现在,如果您在 Emacs 的 shell 中运行 ffmpeg -f avfoundation -i :0 output.mp3,就不应该再出现 abort trap: 6 错误了。

(作为 tccutil.py 的替代方案,也可以参考这个 issue中提到的方法。)

2. 告诉 whisper.el 使用哪个麦克风

您可以使用 ffmpeg -f avfoundation -list_devices true -i "" 的输出来列出音频输入设备,然后告诉 whisper.el 使用哪一个:(setq whisper--ffmpeg-input-device ":0"):0 是麦克风的索引,如果想使用其他设备,可以查看上述命令的输出。

我还创建了一个 Emacs 辅助函数,可以让您以交互方式选择麦克风。请参见这个 gist

我的完整语音启用配置如下:

(use-package whisper
  :load-path (lambda () (expand-file-name "lisp/other-libs/whisper.el" user-emacs-directory))
  :config
  (setq whisper-model "base"
        whisper-language "en"
        whisper-translate nil)
  (when *is-a-mac*
    (rk/select-default-audio-device "Macbook Pro Microphone")
    (when rk/default-audio-device)
    (setq whisper--ffmpeg-input-device (format ":%s" rk/default-audio-device))))
macOS 替代方案:Siri 听写

在 macOS 上,除了 Whisper,您还可以使用内置的 Siri 听写功能。要启用它,前往“系统偏好设置 -> 键盘 -> 听写”,开启该功能并设置快捷键。默认是 ctrl-ctrl。

Windows 特定步骤

目前实现的 (defun whisper--check-install-and-run) 方法在 Win10 上无法正常工作(详见 https://github.com/rksm/org-ai/issues/66)。

一种解决办法是手动安装 whisper.cpp 和模型,并进行修补:

(defun whisper--check-install-and-run (buffer status)
  (whisper--record-audio))

espeak / greader

非 macOS 系统上的语音输出默认使用 greader 包,该包底层使用 espeak 进行语音合成。您需要手动安装 greader(例如通过 M-x package-install)。此后应该就能“直接使用”。您可以通过选中文本并调用 M-x org-ai-talk-read-region 来测试。

设置 Stable Diffusion

Stable Diffusion 的 API 可以通过 stable-diffusion-webui 项目来托管。按照适用于您平台的安装步骤,然后启动一个仅 API 的服务器:

cd path/to/stable-diffusion-webui
./webui.sh --nowebui

这将默认在 http://127.0.0.1:7861 上启动一个服务器。为了在 org-ai 中使用它,您需要设置 org-ai-sd-endpoint-base

(setq org-ai-sd-endpoint-base "http://localhost:7861/sdapi/v1/")

如果您使用的是其他地方托管的服务器,请相应地修改该 URL。

使用本地 LLM 与 oobabooga/text-generation-webui

自版本 0.4 起,org-ai 支持使用 oobabooga/text-generation-webui 提供的本地模型。请参阅安装说明以根据您的系统进行设置。

以下是在 Ubuntu 22.04 上测试过的设置流程。该流程假定已安装 miniconda 或 Anaconda 以及 git-lfs

第一步:设置 conda 环境并安装 pytorch

conda create -n org-ai python=3.10.9
conda activate org-ai
pip3 install torch torchvision torchaudio

第二步:安装 oobabooga/text-generation-webui

mkdir -p ~/.emacs.d/org-ai/
cd ~/.emacs.d/org-ai/
git clone https://github.com/oobabooga/text-generation-webui
cd text-generation-webui
pip install -r requirements.txt

第三步:安装语言模型

oobabooga/text-generation-webui 支持多种语言模型。通常情况下,您会从Hugging Face下载它们。例如,要安装 CodeLlama-7b-Instruct 模型:

cd ~/.emacs.d/org-ai/text-generation-webui/models
git clone git@hf.co:codellama/CodeLlama-7b-Instruct-hf

第四步:启动 API 服务器

cd ~/.emacs.d/org-ai/text-generation-webui
conda activate org-ai
python server.py --api --model CodeLlama-7b-Instruct-hf

根据您的硬件和所使用的模型,您可能需要调整服务器参数,例如使用 --load-in-8bit 来减少内存占用,或者在没有合适 GPU 的情况下使用 --cpu

现在您应该能够通过在 #+begin_ai 块中添加 :local 选项,来在 org-ai 中使用本地模型:

#+begin_ai :local
Hello CodeLlama!
#+end_ai

常见问题

这是 OpenAI 特有的吗?

不是,OpenAI 是最容易搭建的(你只需要一个 API 密钥),但你也可以使用本地模型。请参阅上文关于如何使用 Stable Diffusion 和本地 LLM 与 oobabooga/text-generation-webui 的说明。Anthropic 的 Claude 和 perplexity.ai 也受支持。如果你希望支持其他服务,请提交一个问题或拉取请求。我响应可能会慢一些,但如果兴趣足够多,我会添加相应支持。

周围是否有类似的项目?

gptel 包为 OpenAI 的 ChatGPT API 提供了一个替代接口:https://github.com/karthink/gptel

赞助

如果你觉得这个项目有用,请考虑 赞助。谢谢!

版本历史

v0.5.5
v0.5.4
v0.5.3
v0.5.2
v0.5.1
v0.5.0
v0.4.9
v0.4.8
v0.4.7
v0.4.6
v0.4.5
v0.4.4
v0.4.3
v0.4.2
v0.4.1
v0.4.0
v0.3.13
v0.3.12
v0.3.11
v0.3.10

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

NextChat

NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架