Project Icon

chatgpt-shell

Emacs 集成 ChatGPT 和 DALL-E 的交互式 Shell 环境

chatgpt-shell 是一个 Emacs 插件,为 ChatGPT 和 DALL-E 提供交互式 Shell 环境,支持 Org Babel 集成。该项目包含 shell-maker 工具,可用于创建本地或云服务的 Shell。chatgpt-shell 支持流式响应、多会话管理和代码高亮,并提供多种自定义选项。这个插件适用于日常对话和代码相关任务,为用户提供 AI 辅助功能。

👉 [[https://github.com/sponsors/xenodium][通过GitHub Sponsors支持本项目]]

[[https://melpa.org/#/chatgpt-shell][file:https://melpa.org/packages/chatgpt-shell-badge.svg]]

  • chatgpt-shell

ChatGPT和DALL-E的Emacs shell + [[https://orgmode.org/worg/org-contrib/babel/intro.html][Org Babel]]。

包含=shell-maker=,一种为任何服务(本地或云端)创建shell的方法。

** 支持本项目

如果你发现=chatgpt-shell=很有用,请考虑✨[[https://github.com/sponsors/xenodium][赞助]]✨。

=chatgpt-shell=正在开发中。如有问题请报告,或发送[[https://github.com/xenodium/chatgpt-shell/pulls][pull请求]]以改进。

** 喜欢这个包吗?告诉我 💙

觉得有用吗?喜欢这个包吗?我很乐意听到你的反馈。联系我([[https://indieweb.social/@xenodium][Mastodon]] / [[https://twitter.com/xenodium][Twitter]] / [[https://www.reddit.com/user/xenodium][Reddit]] / [[mailto:me__AT__xenodium.com][Email]])。

** Shell使用

#+HTML:

#+HTML:

** 插入到当前缓冲区

#+HTML:

  • 安装
  • 加载=(require 'chatgpt-shell)=
  • 加载=(require 'dall-e-shell)=

** MELPA

如果使用[[https://github.com/jwiegley/use-package][use-package]],可以用=:ensure t=安装。

#+begin_src emacs-lisp :lexical no (use-package chatgpt-shell :ensure t :custom ((chatgpt-shell-openai-key (lambda () (auth-source-pass-get 'secret "openai-key"))))) #+end_src

** Straight

=chatgpt-shell=依赖于=shell-maker=。这个依赖在MELPA上没有问题,但在=straight=上似乎会遇到问题。我不熟悉=straight=,但用户报告以下方法可行。

#+begin_src emacs-lisp :lexical no (use-package shell-maker :straight (:host github :repo "xenodium/chatgpt-shell" :files ("shell-maker.el")))

(use-package chatgpt-shell :requires shell-maker :straight (:host github :repo "xenodium/chatgpt-shell" :files ("chatgpt-shell.el"))) #+end_src

如果你有更好的=straight=解决方案,请发送pull请求或开issue提出建议。

继续阅读以了解其他设置OpenAI密钥的方法。

  • 设置OpenAI密钥

你首先需要从OpenAI获取一个[[https://platform.openai.com/account/api-keys][密钥]]。

** ChatGPT密钥 *** 作为函数 #+begin_src emacs-lisp ;; 如果你使用"pass"密码管理器 (setq chatgpt-shell-openai-key (lambda () ;; (auth-source-pass-get 'secret "openai-key") ; 使用auth-sources中的pass支持的替代方法 (nth 0 (process-lines "pass" "show" "openai-key"))))

;; 或者如果使用auth-sources,例如,~/.authinfo文件中有这行: ;; machine api.openai.com password OPENAI_KEY (setq chatgpt-shell-openai-key (auth-source-pick-first-password :host "api.openai.com"))

;; 或与前一个相同但延迟加载(防止意外的密码提示) (setq chatgpt-shell-openai-key (lambda () (auth-source-pick-first-password :host "api.openai.com"))) #+end_src

*** 手动 =M-x set-variable chatgpt-shell-openai-key=

*** 作为变量 #+begin_src emacs-lisp (setq chatgpt-shell-openai-key "我的密钥") #+end_src

*** 作为环境变量 #+begin_src emacs-lisp (setq chatgpt-shell-openai-key (getenv "OPENAI_API_KEY")) #+end_src

** DALL-E密钥

与ChatGPT相同,但使用=dall-e-shell-openai-key=变量。

  • 通过代理服务使用ChatGPT

如果你通过代理服务"https://api.chatgpt.domain.com"使用ChatGPT,请设置如下选项:

#+begin_src emacs-lisp :lexical no (use-package chatgpt-shell :ensure t :custom ((chatgpt-shell-api-url-base "https://api.chatgpt.domain.com") (chatgpt-shell-openai-key (lambda () ;; 这里的openai-key应该是代理服务的密钥。 (auth-source-pass-get 'secret "openai-key"))))) #+end_src

如果你的代理服务API路径不是OpenAI ChatGPT的默认路径"/v1/chat/completions",那么你可以自定义选项chatgpt-shell-api-url-path

  • 通过HTTP(S)代理使用ChatGPT

在背后,chatgpt-shell使用=curl=向openai服务器发送请求。 如果你通过HTTP代理使用ChatGPT(例如,你在公司网络中,HTTP代理将公司网络与互联网隔离), 你需要通过curl选项=-x http://your_proxy=告诉=curl=使用代理。 一种方法是通过可自定义变量=chatgpt-shell-additional-curl-options=设置代理URL。如果你通过Emacs自定义界面设置这个变量,你应该插入两个 单独的项目=-x=和=http://your_proxy=。更多细节和其他选项请参见curl手册页。

  • 通过Azure OpenAI服务使用ChatGPT

端点:=https://{your-resource-name}.openai.azure.com/openai/deployments/{deployment-id}/chat/completions?api-version={api-version}=

配置以下变量:

#+begin_src emacs-lisp (setq chatgpt-shell-api-url-base "https://{your-resource-name}.openai.azure.com") (setq chatgpt-shell-api-url-path "/openai/deployments/{deployment-id}/chat/completions?api-version={api-version}") (setq chatgpt-shell-auth-header (lambda () (format "api-key: %s" (chatgpt-shell-openai-key)))) #+end_src

  • 启动

用=M-x chatgpt-shell=或=dall-e-shell=启动。

注意:=M-x chatgpt-shell=或=dall-e-shell=保持单个shell,需要时重新聚焦。要启动多个shell,使用=C-u M-x chatgpt-shell=。

  • 清除缓冲区

在提示符下输入=clear=。

#+begin_src sh ChatGPT> clear #+end_src

或者,使用=M-x chatgpt-shell-clear-buffer=或=M-x comint-clear-buffer=。

  • 保存和恢复(实验性)

用=M-x shell-maker-save-session-transcript=保存,用=M-x chatgpt-shell-restore-session-from-transcript=恢复。

  • 流式传输

=chatgpt-shell=可以等待整个响应接收完毕后再显示,也可以在接收到数据块时逐步显示(流式传输)。

默认启用流式传输。设置=(setq chatgpt-shell-streaming nil)=以禁用它。

  • chatgpt-shell自定义选项

#+BEGIN_SRC emacs-lisp :results table :colnames '("自定义变量" "描述") :exports results (let ((rows)) (mapatoms (lambda (symbol) (when (and (string-match "^chatgpt-shell" (symbol-name symbol)) (custom-variable-p symbol)) (push (,symbol ,(car (split-string (or (get (indirect-variable symbol) 'variable-documentation) (get symbol 'variable-documentation) "") "\n"))) rows)))) rows) #+END_SRC #+RESULTS: | 自定义变量 | 描述 | |------------------------------------------------------------------+------------------------------------------------------------------------------| | chatgpt-shell-prompt-compose-view-mode-hook | 进入或离开 chatgpt-shell-prompt-compose-view-mode时运行的钩子。 | | chatgpt-shell-display-function | 显示 shell 的函数。设置为display-buffer或自定义函数。 | | chatgpt-shell-model-versions | 可切换的 ChatGPT OpenAI 模型列表。 | | chatgpt-shell-system-prompt |chatgpt-shell-system-prompts索引的系统提示。 | | chatgpt-shell-default-prompts | 可选择的默认提示列表。 | | chatgpt-shell-read-string-function | 从用户读取字符串的函数。 | | chatgpt-shell-model-temperature | 使用的采样温度,介于 0 和 2 之间,或为 nil。 | | chatgpt-shell-transmitted-context-length | 控制提供给 chatGPT 的上下文数量。 | | chatgpt-shell-system-prompts | 可选择的系统提示列表。 | | chatgpt-shell-streaming | 是否流式传输 ChatGPT 响应(显示到达的片段)。 | | chatgpt-shell-prompt-header-refactor-code |refactor-code的提示头。 | | chatgpt-shell-auth-header | 生成请求Authorization头字符串的函数。 | | chatgpt-shell-prompt-header-whats-wrong-with-last-command |whats-wrong-with-last-command的提示头。 | | chatgpt-shell-prompt-header-write-git-commit |git-commit的提示头。 | | chatgpt-shell-logging | 默认禁用日志记录(会减慢速度)。 | | chatgpt-shell-prompt-query-response-style | 决定从其他缓冲区调用时的提示样式。 | | chatgpt-shell-root-path | 存储内部 shell 文件的根路径位置。 | | chatgpt-shell-prompt-header-proofread-region |proofread-region的提示头。 | | chatgpt-shell-model-version | 当前活跃的 ChatGPT OpenAI 模型索引。 | | chatgpt-shell-source-block-actions | 已知语言的代码块操作。 | | chatgpt-shell-insert-dividers | 是否在请求和响应之间显示分隔符。 | | chatgpt-shell-prompt-header-eshell-summarize-last-command-output |eshell-summarize-last-command-output的提示头。 | | chatgpt-shell-welcome-function | 返回欢迎消息的函数,nil 表示无消息。 | | chatgpt-shell-api-url-path | OpenAI API 的 URL 路径。 | | chatgpt-shell-additional-curl-options |curl命令的附加选项。 | | chatgpt-shell-openai-key | OpenAI 密钥,可以是字符串或加载并返回密钥的函数。 | | chatgpt-shell-after-command-functions | 每个命令后调用的异常钩子(即带参数)。 | | chatgpt-shell-prompt-header-describe-code |describe-code的提示头。 | | chatgpt-shell-api-url-base | OpenAI API 的基础 URL。 | | chatgpt-shell-babel-headers | 使 babel 块工作的附加头信息。 | | chatgpt-shell-highlight-blocks | 是否高亮显示源代码块。 | | chatgpt-shell-language-mapping | 将外部语言名称映射到 Emacs 名称。 | | chatgpt-shell-prompt-header-generate-unit-test |generate-unit-test` 的提示头。 | | chatgpt-shell-request-timeout | 请求超时的等待时间(秒)。 |

还有更多。通过 =M-x set-variable= 浏览

** =chatgpt-shell-display-function= (使用自定义函数)

如果你更喜欢自己的自定义显示函数,

#+begin_src emacs-lisp :lexical no (setq chatgpt-shell-display-function #'my/chatgpt-shell-frame)

(defun my/chatgpt-shell-frame (bname) (let ((cur-f (selected-frame)) (f (my/find-or-make-frame "chatgpt"))) (select-frame-by-name "chatgpt") (pop-to-buffer-same-window bname) (set-frame-position f (/ (display-pixel-width) 2) 0) (set-frame-height f (frame-height cur-f)) (set-frame-width f (frame-width cur-f) 1)))

(defun my/find-or-make-frame (fname) (condition-case nil (select-frame-by-name fname) (error (make-frame `((name . ,fname)))))) #+end_src

感谢 [[https://github.com/tuhdo][tuhdo]] 提供的自定义显示函数。

  • chatgpt-shell 命令 #+BEGIN_SRC emacs-lisp :results table :colnames '("快捷键" "命令" "描述") :exports results (let ((rows)) (mapatoms (lambda (symbol) (when (and (string-match "^chatgpt-shell" (symbol-name symbol)) (commandp symbol)) (push (,(string-join (seq-filter (lambda (symbol) (not (string-match "menu" symbol))) (mapcar (lambda (keys) (key-description keys)) (or (where-is-internal (symbol-function symbol) comint-mode-map nil nil (command-remapping 'comint-next-input)) (where-is-internal symbol chatgpt-shell-mode-map nil nil (command-remapping symbol)) (where-is-internal (symbol-function symbol) chatgpt-shell-mode-map nil nil (command-remapping symbol))))) " 或 ") ,(symbol-name symbol) ,(car (split-string (or (documentation symbol t) "") "\n"))) rows)))) rows) #+END_SRC #+RESULTS: | 绑定 | 命令 | 描述 | |----------------+--------------------------------------------------------+------------------------------------------------------------------------------------------------| | | chatgpt-shell | 启动ChatGPT交互式命令行。 | | | chatgpt-shell-rename-block-at-point | 重命名光标所在的代码块(可能是不同的语言)。 | | | chatgpt-shell-prompt-compose-view-mode | 类似view-mode,但为ChatGPT Compose扩展。 | | C-M-h | chatgpt-shell-mark-at-point-dwim | 如果光标在源代码块上则标记该块,否则标记所有输出。 | | | chatgpt-shell-prompt-compose-quit-and-close-frame | 退出compose并关闭框架(如果是最后一个窗口)。 | | C-<up> 或 M-p | chatgpt-shell-previous-input | 向后循环浏览输入历史,保存输入。 | | | chatgpt-shell-execute-babel-block-action-at-point | 将代码块作为org babel执行。 | | | chatgpt-shell-eshell-whats-wrong-with-last-command | 询问ChatGPT上一个eshell命令有什么问题。 | | C-c C-p | chatgpt-shell-previous-item | 转到上一项。 | | | chatgpt-shell-set-as-primary-shell | 当有多个会话时,将其设置为主要shell。 | | | chatgpt-shell-prompt-compose-send-buffer | 发送compose缓冲区内容到shell进行处理。 | | | chatgpt-shell-refresh-rendering | 通过重新应用到整个缓冲区来刷新markdown渲染。 | | | chatgpt-shell-prompt-compose-next-history | 将下一个提示从历史插入到compose缓冲区。 | | | chatgpt-shell-explain-code | 使用ChatGPT描述区域内的代码。 | | | chatgpt-shell-prompt-compose-other-buffer | 跳转到shell缓冲区(compose的另一个缓冲区)。 | | | chatgpt-shell-rename-buffer | 重命名当前shell缓冲区。 | | | chatgpt-shell-prompt-compose-previous-block | 跳转并选择上一个代码块。 | | | chatgpt-shell-write-git-commit | 使用ChatGPT从区域编写commit。 | | | chatgpt-shell-prompt | 从迷你缓冲区发送ChatGPT请求。 | | | chatgpt-shell-remove-block-overlays | 移除代码块覆盖。对重命名代码块很有用。 | | | chatgpt-shell-system-prompts-menu | ChatGPT | | | chatgpt-shell-prompt-compose-mode | 用于从专用缓冲区组成ChatGPT提示的主模式。 | | | chatgpt-shell-proofread-region | 使用ChatGPT校对区域内的英语。 | | | chatgpt-shell-prompt-compose-retry | 重试向shell发送请求。 | | M-r | chatgpt-shell-search-history | 搜索先前的输入历史。 | | | chatgpt-shell-send-and-review-region | 发送区域到ChatGPT,提交前审查。 | | C-<down> 或M-n | chatgpt-shell-next-input | 向前循环浏览输入历史。 | | | chatgpt-shell-delete-interaction-at-point | 删除光标所在的交互(请求和响应)。 | | | chatgpt-shell-eshell-summarize-last-command-output | 要求ChatGPT总结最后一条命令的输出。 | | | chatgpt-shell-prompt-appending-kill-ring | 从迷你缓冲区发送ChatGPT请求,附加剪切环内容。 | | | chatgpt-shell-prompt-other-buffer-response-mode | 用于other-buffer' chatgpt-shell-prompt-query-response-style'创建的缓冲区的主模式。 | | | chatgpt-shell-describe-code | 使用ChatGPT描述区域内的代码。 | | | chatgpt-shell-mode | ChatGPT shell的主模式。 | | C-c C-v | chatgpt-shell-swap-model-version | 从chatgpt-shell-model-versions'中切换模型版本。 | | | chatgpt-shell-previous-source-block | 将光标移动到上一个源代码块。 | | | chatgpt-shell-prompt-compose-search-history | 搜索提示历史,选择并插入到当前compose缓冲区。 | | | chatgpt-shell-refactor-code | 使用ChatGPT重构区域内的代码。 | | S- | chatgpt-shell-newline | 插入新行,并移动到新行的左边距。 | | C-c C-s | chatgpt-shell-swap-system-prompt | 从chatgpt-shell-system-prompts'中切换系统提示。 | | C-x C-s | chatgpt-shell-save-session-transcript | 保存shell记录到文件。 | | C-c M-o | chatgpt-shell-clear-buffer | 清除comint缓冲区。 | | | chatgpt-shell-load-awesome-prompts | 从awesome-chatgpt-prompts加载chatgpt-shell-system-prompts'。 | | | chatgpt-shell-prompt-compose-request-entire-snippet | 如果响应代码不完整,请求完整的代码片段。 | | RET | chatgpt-shell-submit | 提交当前输入。 | | C-c C-n | chatgpt-shell-next-item | 转到下一项。 | | | chatgpt-shell-describe-image | 请求OpenAI描述图像。 | | | chatgpt-shell-execute-block-action-at-point | 执行光标所在的代码块。 | | | chatgpt-shell-view-at-point | 在单独的缓冲区中查看光标所在的提示和输出。 | | | chatgpt-shell-send-region | 发送区域到ChatGPT。 | | | chatgpt-shell-restore-session-from-transcript | 从记录恢复会话。 | | | chatgpt-shell-prompt-compose-next-block | 跳转并选择下一个代码块。 | | | chatgpt-shell-mark-block | 在compose缓冲区中标记当前代码块。 | | | chatgpt-shell-prompt-compose-reply | 作为后续回复并组成另一个查询。 | | | chatgpt-shell-generate-unit-test | 使用ChatGPT为区域内的代码生成单元测试。 | | | chatgpt-shell-prompt-compose-previous-history | 将上一个提示从历史插入到compose缓冲区。 | | C-c C-e | chatgpt-shell-prompt-compose | 从专用缓冲区组成并发送提示。 | | | chatgpt-shell-next-source-block | 将光标移动到下一个源代码块。 | | C-c C-c | chatgpt-shell-ctrl-c-ctrl-c | 如果光标在源代码块中,执行它。否则中断。 | | | chatgpt-shell-prompt-compose-cancel | 取消并关闭compose缓冲区。 | | | chatgpt-shell-interrupt | 从任何缓冲区中断`chatgpt-shell'。 |

通过 =M-x= 浏览所有可用命令。

  • 功能请求
  • 报告错误 ** 设置不起作用? 请分享您用于设置=chatgpt-shell=的完整代码片段(但请隐藏您的密钥)。分享您遇到的任何错误。继续阅读以分享更多细节。 ** 发现运行时/elisp错误? 请启用 =M-x toggle-debug-on-error=,重现错误,并分享堆栈跟踪。 ** 发现意外行为? 请启用日志记录 =(setq chatgpt-shell-logging t)= 并在错误报告中分享 =chatgpt-log= 缓冲区的内容。 ** Babel问题? 请同时分享完整的org代码片段。

  • dall-e-shell 自定义选项 #+BEGIN_SRC emacs-lisp :results table :colnames '("自定义变量" "描述") :exports results (let ((rows)) (mapatoms (lambda (symbol) (when (and (string-match "^dall-e-shell" (symbol-name symbol)) (custom-variable-p symbol)) (push (,symbol ,(car (split-string (or (get (indirect-variable symbol) 'variable-documentation) (get symbol 'variable-documentation) "") "\n"))) rows)))) rows) #+END_SRC #+RESULTS: | 自定义变量 | 描述 | |----------------------------------------+---------------------------------------------------------------------------| | dall-e-shell-welcome-function | 返回欢迎消息的函数,或设为nil则不显示消息。 | | dall-e-shell-openai-key | OpenAI密钥字符串,或加载并返回密钥的函数。 | | dall-e-shell-image-size | 请求图像的默认尺寸字符串。 | | dall-e-shell-read-string-function | 从用户读取字符串的函数。 | | dall-e-shell-request-timeout | 请求超时等待时间。 | | dall-e-shell-model-version | 使用的DALL-E OpenAI模型。对于Dall-E 3,使用"dall-e-3"。 | | dall-e-shell-display-function | 显示shell的函数。设置为display-buffer'或自定义函数。 | | dall-e-shell-model-versions | 可切换的Dall-E OpenAI模型列表。 | | dall-e-shell-additional-curl-options | curl'命令的附加选项。 | | dall-e-shell-image-output-directory | 生成图像的输出目录。 | | dall-e-shell-image-quality | 图像质量:standard'或`hd'(仅DALL-E 3功能)。 |

  • dall-e-shell命令 #+RESULTS: | 命令 | 描述 | |-------------------+----------------------------------------------------------| | C- 或 M-p | dall-e-shell-previous-input | 向后循环浏览输入历史,保存输入。 | | | dall-e-shell | 启动DALL-E shell。 | | | dall-e-shell-insert-image-from-region-description | 使用当前区域作为描述生成并插入图像。 | | | dall-e-shell-interrupt | 从任何缓冲区中断dall-e-shell'。 | | S-<return> | dall-e-shell-newline | 插入新行,并移动到新行的左边距。 | | RET | dall-e-shell-submit | 提交当前输入。 | | C-x C-s | dall-e-shell-save-session-transcript | 将shell记录保存到文件。 | | C-c C-v | dall-e-shell-swap-model-version | 从dall-e-shell-model-versions'中切换模型版本。 | | | dall-e-shell-mode | DALL-E shell的主要模式。 | | C- 或 M-n | dall-e-shell-next-input | 向前循环浏览输入历史。 | | M-r | dall-e-shell-search-history | 搜索之前的输入历史。 | | | dall-e-shell-rename-buffer | 重命名当前shell缓冲区。 |

  • ChatGPT org babel

加载 =(require 'ob-chatgpt-shell)= 并调用 =(ob-chatgpt-shell-setup)=。

#+begin_src org ,#+begin_src chatgpt-shell Hello ,#+end_src

,#+RESULTS: : Hi there! How can I assist you today? #+end_src

** :version

使用 =:version= 指定"gpt-4"、"gpt-3.5-turbo"或其他版本。

#+begin_src org ,#+begin_src chatgpt-shell :version "gpt-4" Hello ,#+end_src

,#+RESULTS: Hello! How can I help you today? #+end_src

** :system

使用 =:system= 设置系统提示。

#+begin_src org ,#+begin_src chatgpt-shell :system "always respond like a pirate" hello ,#+end_src

,#+RESULTS: Ahoy there, me hearty! How be ye today? #+end_src

** :temperature

使用 =:temperature= 设置温度参数。

#+begin_src org ,#+begin_src chatgpt-shell :temperature 0.3 hello ,#+end_src #+end_src

** :context

使用 =:context t= 包含当前缓冲区中的所有先前上下文。

#+begin_src org ,#+begin_src chatgpt-shell tell me a random day of the week ,#+end_src

,#+RESULTS: Wednesday

,#+begin_src chatgpt-shell :system "always respond like a pirate" hello ,#+end_src

,#+RESULTS: Ahoy there, me hearty! How be ye today?

,#+begin_src chatgpt-shell :context t what was the day you told me and what greeting? ,#+end_src

,#+RESULTS: The day I told you was Wednesday, and the greeting I used was "Ahoy there, me hearty! How be ye today?" #+end_src

如果你想选择性地包含特定块作为给定上下文的一部分,可以为每个块添加 =:context CONTEXT-NAME=,其中CONTEXT-NAME是任意字符串。使用这种形式时,只有具有相同 =CONTEXT-NAME= 的源块会被包括在内,而不是使用 =:context t= 时包含的每个先前块。

下面的示例展示了如何交错使用两个不同的上下文。

#+begin_src org ,#+begin_src chatgpt-shell :context shakespeare :system "alway speak like shakespeare" How do you do? ,#+end_src

#+RESULTS: How dost thou fare?

,#+begin_src chatgpt-shell :context robot :system "always speak like a sci fi movie robot" How do you do? ,#+end_src

,#+RESULTS: Greetings, human. I am functioning at optimal capacity. How may I assist you in your endeavors today?

,#+begin_src chatgpt-shell :context shakespeare What did you call me? ,#+end_src

,#+RESULTS: Mine apologies if mine words hath caused confusion. I merely addressed thee as 'sir' or 'madam', a term of respect in the language of the Bard. Pray, how may I assist thee further? #+end_src

  • DALL-E org babel

加载 =(require 'ob-dall-e-shell)= 并调用 =(ob-dall-e-shell-setup)=。

#+begin_src org ,#+begin_src dall-e-shell Pretty clouds ,#+end_src

,#+RESULTS: [[file:/var/folders/m7/ky091cp56d5g68nyhl4y7frc0000gn/T/1680644778.png]] #+end_src

** :version

使用 =:version= 设置模型,例如:"dall-e-3"。

** :results

对于DALL-E 3,使用 =:results both= 同时输出修改后的提示。

  • shell-maker

目前有两个shell实现(ChatGPT和DALL-E)。其他服务(本地或云端)也可以作为shell引入Emacs。=shell-maker= 可以帮助实现这一点。

=shell-maker= 是围绕comint模式的便捷封装。

=chatgpt-shell= 和 =dall-e-shell= 都使用 =shell-maker=,但新shell的基本实现如下所示:

#+begin_src emacs-lisp :lexical no (require 'shell-maker)

(defvar greeter-shell--config (make-shell-maker-config :name "Greeter" :execute-command (lambda (command _history callback error-callback) (funcall callback (format "Hello "%s"" command) nil))))

(defun greeter-shell () "Start a Greeter shell." (interactive) (shell-maker-start greeter-shell--config)) #+end_src

  • 支持我的工作

👉 觉得我的工作有用吗?通过GitHub Sponsors支持这项工作或购买我的iOS应用。

  • 我的其他实用工具、包、应用、写作...
  • 贡献者

#+HTML: #+HTML: #+HTML:

使用 [[https://contrib.rocks][contrib.rocks]] 制作。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号