chatgpt-shell

chatgpt-shell

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

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

chatgpt-shellEmacsOpenAIshell-makerAPIGithub开源项目

👉 [[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: <img src="https://yellow-cdn.veclightyear.com/835a84d5/36e59035-7bfa-46fa-aca8-f46d1950a57e.gif" width="80%" />

#+HTML: <img src="https://yellow-cdn.veclightyear.com/835a84d5/062f3d4a-3775-40f2-b693-c74328b70fac.gif" width="80%" />

** 插入到当前缓冲区

#+HTML: <img src="https://yellow-cdn.veclightyear.com/835a84d5/e19777ab-b224-400e-89df-dddd17752899.gif" width="100%" />

  • 安装
  • 加载=(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-<return> | 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-<up> 或 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-<down> 或 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: <a href="https://github.com/xenodium/chatgpt-shell/graphs/contributors"> #+HTML: <img src="https://contrib.rocks/image?repo=xenodium/chatgpt-shell" /> #+HTML: </a>

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

编辑推荐精选

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

下拉加载更多