
Незначительный режим для Emacs Org-Mode, который обеспечивает доступ к генеративным моделям ИИ. В настоящее время поддерживается
Внутри буфера орг-режима вы можете
ПРИМЕЧАНИЕ. Чтобы использовать API OpenAI, вам понадобится учетная запись OpenAI, и вам нужно получить токен API. Насколько я могу судить, текущие пределы использования для бесплатного уровня делают вас довольно далеко.
#+begin_ai...#+end_ai Специальные блоки #+begin_ai
Is Emacs the greatest editor?
#+end_ai

Вы можете продолжать печатать и нажимать Cc Cc , чтобы создать разговор. Cg будет прервать запрос на работу.
Используйте ключевое слово :image для генерации изображения. Это использует Dall · E-3 по умолчанию.
#+begin_ai :image :size 1024x1024
Hyper realistic sci-fi rendering of super complicated technical machine.
#+end_ai

Вы можете использовать следующие ключевые слова для управления генерацией изображений:
:size <width>x<height> - размер изображения для генерации (по умолчанию: 1024x1024):model <model> -модель для использования (по умолчанию: "dall-e-3" ):quality <quality> - качество изображения (выбор: hd , standard ):style <style> - стиль для использования (выбор: vivid , natural )(Для получения дополнительной информации об этих настройках см. В этом блоге 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))
#+begin_ai...#+end_ai Специальные блокиПодобно Org-Babel, эти блоки разграничивают вход (а также для вывода CHATGPT) для модели ИИ. Вы можете использовать его для AI Chat, завершения текста и текста -> генерация изображений. См. Параметры ниже для получения дополнительной информации.
Создать блок, как
#+begin_ai
Is Emacs the greatest editor?
#+end_ai
и пресс Cc Cc . Ввод чата появится встроенным, и как только ответ будет завершен, вы можете ввести свой ответ и так далее. Смотрите демонстрацию ниже. Вы можете нажать Cg в то время как запрос AI работает, чтобы отменить его.
Вы также можете изменить подсказку системы и другие используемые параметры. Системная подсказка вводится до ввода пользователя и «простым» модели, чтобы ответить в определенном стиле. Например, вы можете сделать:
#+begin_ai :max-tokens 250
[SYS]: Act as if you are a powerful medival king.
[ME]: What will you eat today?
#+end_ai
Это приведет к полезной нагрузке API, подобной
{
"messages" : [
{
"role" : " system " ,
"content" : " Act as if you are a powerful medival king. "
},
{
"role" : " user " ,
"content" : " What will you eat today? "
}
],
"model" : " gpt-4o-mini " ,
"stream" : true ,
"max_tokens" : 250 ,
"temperature" : 1.2
}Для некоторых быстрых идей см., Например, потрясающие подсказки CHATGPT.
При генерации изображений с использованием флага :image изображения будут отображаться под встроенным блоком ИИ. Изображения будут храниться (вместе с их подсказкой) внутри org-ai-image-directory , который по умолчанию ~/org/org-ai-images/ .
Вы также можете использовать ввод речи для транскрибирования ввода. Нажмите Cc r для org-ai-talk-capture-in-org чтобы начать запись. Обратите внимание, что это потребует от вас настройки распознавания речи (см. Ниже). Выход речи может быть включен с помощью org-ai-talk-output-enable .
Внутри #+begin_ai...#+end_ai вы можете изменить и выбрать части чата с этими командами:
Cc <backspace> ( org-ai-kill-region-at-point ), чтобы удалить часть чата.org-ai-mark-region-at-point будет отмечать регион в точке.org-ai-mark-last-region будет отмечать последнюю часть чата. Чтобы применить синтаксис, выделенный к вашему #+begin_ai ... блоки просто добавьте имя основного режима языка после _ai . Например #+begin_ai markdown . В частности, для того, чтобы затем правильно выделить код в Backticks, вы можете установить (setq markdown-fontify-code-blocks-natively t) . Убедитесь, что у вас также установлен пакет Markdown-Mode. Спасибо @TavisRudd за этот трюк!
Это поведение по умолчанию включено, чтобы взаимодействие больше похоже на чат. Это может раздражать, когда присутствует длинный выход и буферные свитки во время чтения. Итак, вы можете отключить это с:
( setq org-ai-jump-to-end-of-block nil ) SET (setq org-ai-auto-fill t) для «заполнения» (автоматически обернуть линии в соответствии с fill-column ). Вставленный текст. В основном как auto-fill-mode но для ИИ.
Блок #+begin_ai...#+end_ai может принимать следующие параметры.
По умолчанию содержание блоков ИИ интерпретируется как сообщения для CHATGPT. Текст следующего [ME]: связан с пользователем, текст следующим образом [AI]: связан с ответом модели. При желании вы можете запустить блок с [SYS]: <behavior> вход, чтобы запустить модель (см. org-ai-default-chat-system-prompt ниже).
:max-tokens number - количество максимальных токенов для генерации (по умолчанию: ноль, используйте дефолт Openai):temperature number - температура модели (по умолчанию: 1):top-p number - top_p модели (по умолчанию: 1):frequency-penalty number - частотный штраф модели (по умолчанию: 0):presence-penalty - Наказание за присутствие модели (по умолчанию: 0):sys-everywhere - Повторите системную подсказку для каждого пользовательского сообщения (по умолчанию: ноль) Если у вас много разных потоков разговора по одной и той же теме и настройкам (системная подсказка, температура и т. Д.), И вы не хотите повторять все параметры, вы можете установить свойства прицела файла или создать заголовок Org со свойством Ящик, так что все блоки #+begin_ai...#+end_ai под этим заголовком наследуют настройки.
Примеры:
* Emacs (multiple conversations re emacs continue in this subtree)
:PROPERTIES:
:SYS: You are a emacs expert. You can help me by answering my questions. You can also ask me questions to clarify my intention.
:temperature: 0.5
:model: gpt-4o-mini
:END:
** Web programming via elisp
#+begin_ai
How to call a REST API and parse its JSON response?
#+end_ai
** Other emacs tasks
#+begin_ai...#+end_ai
* Python (multiple conversations re python continue in this subtree)
:PROPERTIES:
:SYS: You are a python programmer. Respond to the task with detailed step by step instructions and code.
:temperature: 0.1
:model: gpt-4
:END:
** Learning QUIC
#+begin_ai
How to setup a webserver with http3 support?
#+end_ai
** Other python tasks
#+begin_ai...#+end_ai
Следующие пользовательские переменные можно использовать для настройки чата:
org-ai-default-chat-model (по умолчанию: "gpt-4o-mini" )org-ai-default-max-tokens как долго должен быть ответ. В настоящее время не может превышать 4096. Если это значение слишком мало, можно отключить ответ (по умолчанию: ноль)org-ai-default-chat-system-prompt Как «запустить» модель. Это подсказка, которая вводится до ввода пользователя. (По умолчанию: "You are a helpful assistant inside Emacs." )org-ai-default-inject-sys-prompt-for-all-messages чтобы повторить систему подсказки для каждого пользовательского сообщения. Иногда модель «забывает», как она была заполнена. Это может помочь напомнить. (По умолчанию: nil ) Когда вы добавляете опцию :image в блок AI, подсказка будет использоваться для генерации изображений.
:image - генерировать изображение вместо текста:size - размер изображения для генерации (по умолчанию: 256x256, может быть 512x512 или 1024x1024):n - количество изображений для генерации (по умолчанию: 1)Следующие пользовательские переменные можно использовать для настройки генерации изображений:
org-ai-image-directory -где хранить сгенерированные изображения (по умолчанию: ~/org/org-ai-images/ ) Похоже на Dall-e, но используйте
#+begin_ai :sd-image
<PROMPT>
#+end_ai
Вы можете запустить img2img, обозначая свое изображение Org-Mode с помощью #+имени и ссылаться на его: изображение-реф из вашего блока Org-AI.
#+begin_ai :sd-image :image-ref label1
forest, Gogh style
#+end_ai
MX ORG-AI-SD-CLIP угадывает предыдущее приглашение изображения на Org-режиме с помощью опроса клипа и спасает его в кольце убийства.
MX Org-AI-SD-Diepdanbooru угадывает подсказку предыдущего изображения на Org-режиме с помощью последователя DeepDanbooru и спасает его в кольце убийства.
Для запроса завершений из локальной модели, обслуживаемой с oobabooga/text-generation-webui, пройдите шаги настройки, описанные ниже
Затем запустите сервер API:
cd ~ /.emacs.d/org-ai/text-generation-webui
conda activate org-ai
python server.py --api --model SOME-MODEL Когда вы добавляете :local ключ к блоку Org-AI и завершения запроса с Cc Cc , блок будет отправлен на локальный сервер API вместо API OpenAI. Например:
#+begin_ai :local
...
#+end_ai
Это отправит запрос в org-ai-oobabooga-websocket-url и транслирует ответ в буфер Org.
Старые модели завершения также могут быть вызваны путем добавления :completion в блок AI.
:completion - вместо использования модели CHATGPT, используйте модель завершения:model - какая модель использовать, см. https://platform.openai.com/docs/models для списка моделейПодробное значение этих параметров см. В документации API OpenAI.
Следующие пользовательские переменные можно использовать для настройки генерации текста:
org-ai-default-completion-model (по умолчанию: "text-davinci-003" ) Вы также можете использовать существующее изображение в качестве ввода для генерации более похожих изображений. Команда org-ai-image-variation будет вызвана для пути файла к изображению, размеру и подсчету, а затем будет генерировать столько изображений и вставить ссылки на них внутри текущего буфера org-mode . Изображения будут храниться внутри org-ai-image-directory . Смотрите демонстрацию ниже.
Для получения дополнительной информации см. Документацию OpenAI. Входное изображение должно быть квадратным, а его размер должен быть менее 4 МБ. И в настоящее время вам нужен вариант, доступный в качестве инструмента командной строки 1 .
org-ai также можно использовать за пределами буферов org-mode . Когда вы включите org-ai-global-mode , префикс Cc Ma будет связан с рядом команд:
| командование | Ключевой связывание | описание |
|---|---|---|
org-ai-on-region | Cc Ma r | Задайте вопрос об выбранном тексте или скажите ИИ что -то с ним. Ответ будет открыт в буфере 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 | Cc Ma s | Суммируйте выбранный текст. |
org-ai-refactor-code | Cc Ma c | Расскажите AI, как изменить выбранную код, с изменениями появится буфер DIFF. |
org-ai-on-project | Cc Ma p | Запустите подсказки и измените / рефакторируйте несколько файлов одновременно. Будет использовать снаряд, если будет доступен, возвращается к текущему каталогу, если нет. |
org-ai-prompt | Cc Ma P | Приведите пользователя для текста, а затем распечатайте ответ AI в текущем буфере. |
org-ai-switch-chat-model | Cc Ma m | Интерактивно изменить org-ai-default-chat-model |
org-ai-open-account-usage-page | Cc Ma $ | Открывает https://platform.openai.com/account/usage, чтобы увидеть, сколько денег вы сгорели. |
org-ai-open-request-buffer | Cc Ma ! | Открывает буфер запроса url . Если что -то не работает, может быть полезно посмотреть. |
org-ai-talk-input-toggle | Cc Ma t | Обычно включите ввод речи для различных команд приглашения. |
org-ai-talk-output-toggle | Cc Ma T | Обычно включить вывод речи. |
Использование буфера Org-Ai-On-Project позволяет вам запускать команды в файлах в проекте, альтернативно также только на выбранном тексте в этих файлах. Вы можете выбрать Readme проекта и спросить: «Что это такое?» Или вам объяснил код. Вы также можете попросить об изменениях кода, которые будут генерировать DIFF. Если вы знаете что -то, кто думает, что только код с включенным Copilot может сделать это, укажите их здесь.
Запуск команды org-ai-on-project откроет отдельный буфер, который позволяет выбрать несколько файлов (и, необязательно, выбирать субрегион внутри файла), а затем запустить подсказку.

Если вы деактивируете «изменение кода», эффект аналогичен запуску org-ai-on-region только что содержимое файла отображается в приглашении.
С активированным «Изменить код» вы можете попросить ИИ изменить или рефакторировать код. По умолчанию («Diffs запроса») деактивировано, мы будем предпринять сгенерировать новый код для всех выбранных файлов/регионов, а затем вы сможете увидеть DIFF на файл и принять решение применить его или нет. С активным «Diffs», AI будет предложено напрямую создать унифицированную дифференциацию, которая может быть применена.
Учитывая названный исходный блок
#+name: sayhi
#+begin_src shell
echo "Hello there"
#+end_src
Мы можем попытаться ссылаться на это по имени, но это не работает.
#+begin_ai
[SYS]: You are a mimic. Whenever I say something, repeat back what I say to you. Say exactly what I said, do not add anything.
[ME]: <<sayhi()>>
[AI]: <<sayhi()>>
[ME]:
#+end_ai
С :noweb yes
#+begin_ai :noweb yes
[SYS]: You are a mimic. Whenever I say something, repeat back what I say to you. Say exactly what I said, do not add anything.
[ME]: <<sayhi()>>
[AI]: Hello there.
[ME]:
#+end_ai
Вы также можете вызвать расширение Noweb с помощью org-ai-noweb: yes заголовок Proprty в любом месте родительских заголовков (заголовок Args имеет приоритет).
Чтобы увидеть, к чему будет расширяться ваш документ, когда отправите в API, запустите org-ai-expand-block .
Это взлом, но он работает очень хорошо.
Создать блок
#+name: identity
#+begin_src emacs-lisp :var x="fill me in"
(format "%s" x)
#+end_src
Мы можем вызвать его и позволить параметрам NOWEB (которые поддерживают LISP) оценить как код
#+begin_ai :noweb yes
Tell me some 3, simple ways to improve this dockerfile
<<identity(x=(quelpa-slurp-file "~/code/ibr-api/Dockerfile"))>>
[AI]: 1. Use a more specific version of Python, such as "python:3.9.6-buster" instead of "python:3.9-buster", to ensure compatibility with future updates.
2. Add a cleanup step after installing poetry to remove any unnecessary files or dependencies, thus reducing the size of the final image.
3. Use multi-stage builds to separate the build environment from the production environment, thus reducing the size of the final image and increasing security. For example, the first stage can be used to install dependencies and build the code, while the second stage can contain only the final artifacts and be used for deployment.
[ME]:
#+end_ai
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 ) ; enable org-ai in org-mode
(org-ai-global-mode) ; installs global keybindings on C-c M-a
:config
( setq org-ai-default-chat-model " gpt-4 " ) ; if you are on the gpt-4 beta:
(org-ai-install-yasnippets)) ; if you are using yasnippet and want `ai` snippets
( 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 " ))
; ; ...rest as above...
или просто с 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 " ) ; if you are on the gpt-4 beta:
(org-ai-install-yasnippets) ; if you are using yasnippet and want `ai` snippetsВы можете напрямую установить токен API в конфигурации:
( setq org-ai-openai-api-token " <ENTER YOUR API TOKEN HERE> " )
В качестве альтернативы, org-ai поддерживает auth-source для получения вашего ключа API. Вы можете хранить секрет в формате
machine api.openai.com login org-ai password <your-api-key>
в вашем файле ~/authinfo.gpg . Если это присутствует, Org-AI будет использовать этот механизм для извлечения токена при выполнении запроса. Если вы не хотите, чтобы org-ai пытался извлечь ключ из auth-source , вы можете установить org-ai-use-auth-source nil перед загрузкой org-ai .
Вы можете переключиться на Azure, настраивая эти переменные, либо интерактивно с Mx 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 в качестве названия машины.
Список доступных моделей см. В документации о недоумении.
Либо переключите службу по умолчанию в вашем конфигурации:
( 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]: Tell me fun facts about Emacs.
#+end_ai
Для аутентификации есть запись, такая как machine api.perplexity.ai login org-ai password pplx-*** в вашем authinfo.gpg или установить org-ai-openai-api-token .
ПРИМЕЧАНИЕ. В настоящее время озадачивание.ai не дает доступа к ссылкам/ссылкам через API, чтобы EMACS не сможет отображать ссылки. У них есть бета -программа для этого бега, и я очень надеюсь, что это будет доступно в ближайшее время.
Похоже на вышеизложенное. Например
#+begin_ai :service anthropic :model claude-3-opus-20240229
[ME]: Tell me fun facts about Emacs.
#+end_ai
Антрические модели здесь. В настоящее время существует только одна версия API, которая установлена через org-ai-anthropic-api-version . Если выйдет другая версия, вы можете найти их здесь.
Для токена API используйте machine api.anthropic.com login org-ai password sk-ant-*** authinfo.gpg
Эти шаги настройки являются необязательными. Если вы не хотите использовать ввод / вывод речи, вы можете пропустить этот раздел.
Примечание: моя личная конфигурация для Org-AI можно найти в этой сути. Он содержит рабочую настройку шепота.
Это было протестировано на MacOS и Linux. Кто -то с компьютером Windows, пожалуйста, проверьте это и дайте мне знать, что нужно сделать, чтобы заставить его работать (спасибо!).
Ввод речи использует Whisper.el и ffmpeg . Вам нужно напрямую клонировать репо или использовать прямой. Эль, чтобы установить его.
brew install ffmpeg на macOS) или sudo apt install ffmpeg на Linux.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 speech settings, optional
( setq org-ai-talk-say-words-per-minute 210 )
( setq org-ai-talk-say-voice " Karen " )На macOS вам нужно будет сделать еще две вещи:
Вы можете использовать помощника Tccutil:
git clone https://github.com/DocSystem/tccutil
cd tccutil
sudo python ./tccutil.py -p /Applications/Emacs.app -e --microphone Когда вы теперь запускаете ffmpeg -f avfoundation -i :0 output.mp3 из оболочки emacs, не должно быть abort trap: 6 ошибка.
(В качестве альтернативы tccutil.py см. Метод, упомянутый в этом выпуске.)
Вы можете использовать выход ffmpeg -f avfoundation -list_devices true -i "" Чтобы перечислить устройства аудио ввода, а затем рассказать Whisper.el об этом: (setq whisper--ffmpeg-input-device ":0") . :0 - индекс микрофона, см. Вывод вышеуказанной команды, чтобы использовать еще одну.
Я создал помощника Emacs, который позволяет вам выбрать микрофон интерактивно. Смотрите эту суть.
Мой полная конфигурация с поддержкой речи затем выглядит как:
( 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. Чтобы включить это, перейдите к Preferences -> Keyboard -> Dictation , включите его и настройте ярлык. По умолчанию CTRL-CTRL.
Путь (Defun Whisper-check-install и run) реализован) не работает на Win10 (см. #66).
Обходной путь - это установить Whisper.cpp и модель вручную и патч:
( defun whisper--check-install-and-run ( buffer status )
(whisper--record-audio)) Выход речи в не-макосских системах по умолчанию по умолчанию использует пакет Greader, который использует Espeak внизу для синтеза речи. Вам нужно будет установить Greader вручную (например, через Mx package-install ). С этого момента это должно «просто работать». Вы можете проверить его, выбрав немного текста и вызывая Mx org-ai-talk-read-region .
API для стабильной диффузии может быть размещен с помощью проекта Custable-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 -адрес соответствующим образом.
Поскольку версия 0.4 Org-AI поддерживает местные модели, обслуживаемые Oobabooga/Text Generation-Webui. Смотрите инструкции по установке, чтобы настроить его для вашей системы.
Вот настройка прогулки, которая была проверена на Ubuntu 22.04. Он предполагает, что Miniconda или Anaconda, а также GIT-LFS для установки.
conda create -n org-ai python=3.10.9
conda activate org-ai
pip3 install torch torchvision torchaudiomkdir -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 поддерживает ряд языковых моделей. Обычно вы устанавливаете их из Huggingface. Например, чтобы установить модель CodeLlama-7b-Instruct :
cd ~ /.emacs.d/org-ai/text-generation-webui/models
git clone [email protected]:codellama/CodeLlama-7b-Instruct-hf cd ~ /.emacs.d/org-ai/text-generation-webui
conda activate org-ai
python server.py --api --model CodeLlama-7b-Instruct-hf В зависимости от вашего аппаратного обеспечения и используемой модели вам может потребоваться настроить параметры сервера, например, использование --load-in-8bit чтобы уменьшить использование памяти или --cpu если у вас нет подходящего графического процессора.
Теперь вы должны иметь возможность использовать локальную модель с Org-AI, добавив :local опцию в блок #+begin_ai :
#+begin_ai :local
Hello CodeLlama!
#+end_ai
Нет, OpenAI - самая легкая для настройки (вам нужен только ключ API), но вы также можете использовать местные модели. Посмотрите, как использовать стабильную диффузию и локальную LLM с Oobabooga/Text Generation-Webui выше. Антропический Клод и Несмотря на то, что они также поддерживаются. Пожалуйста, откройте проблему или PR для других услуг, которые вы хотели бы увидеть поддержанными. Я могу быть медленным ответом, но добавлю поддержку, если заинтересован в достаточном количестве.
Пакет GPTEL предоставляет альтернативный интерфейс для API OpenAI CHATGPT: https://github.com/karthink/gptel
Если вы найдете этот проект полезным, пожалуйста, рассмотрите возможность спонсоров. Спасибо!
ПРИМЕЧАНИЕ. Согласно реализации вариации изображения, требуется установка скручивания командной строки. Причина этого заключается в том, что API OpenAI ожидает MultipartArt/Form-Data, и EMACS встроенный url-retrieve этого не поддерживает (по крайней мере, я не выяснил, как). Переход на request.el может быть лучшей альтернативой. Если вы заинтересованы в содействии, PRS очень приветствуются! ↩