
emacs org模式的次要模式,可訪問生成AI模型。當前支持的是
在組織內部的緩衝區內您可以
注意:要使用OpenAI API,您需要一個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類似,這些障礙物劃定了AI模型的輸入(以及ChatGpt的輸出)。您可以將其用於AI聊天,文本完成和文本 - >圖像生成。有關更多信息,請參見下面的選項。
創建一個像
#+begin_ai
Is Emacs the greatest editor?
#+end_ai
並按Cc Cc 。聊天輸入將顯示內聯,一旦響應完成,您就可以輸入回復等等。請參閱下面的演示。您可以在AI請求運行以取消它時按Cg 。
您還可以修改系統提示和所使用的其他參數。在用戶的輸入之前註入系統提示,並以某種樣式的方式“ primes”“素數”。例如,您可以做:
#+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標誌生成圖像時,圖像將出現在AI塊內聯的下方。圖像將在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但適用於AI。
#+begin_ai...#+end_ai塊可以採用以下選項。
默認情況下,AI塊的內容被解釋為chatgpt的消息。以下文本[ME]:與用戶關聯,文本下面的[AI]:與模型的響應相關聯。您可以選擇地使用[SYS]: <behavior>輸入來啟動模型的塊(請參見下面的org-ai-default-chat-system-prompt )。
:max-tokens number - 要生成的最大令牌數(默認值: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 (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。如果此值太小,則可能會切斷答案(默認:nil)org-ai-default-chat-system-prompt如何“啟用”模型。這是在用戶輸入之前註入的提示。 (默認: "You are a helpful assistant inside Emacs." )org-ai-default-inject-sys-prompt-for-all-messages 。有時,該模型會“忘記”其底漆。這可以幫助提醒它。 (默認: nil ) 當您在AI塊中添加一個:image選項時,該提示將用於圖像生成。
: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-ai塊中引用image-ref。
#+begin_ai :sd-image :image-ref label1
forest, Gogh style
#+end_ai
mx org-ai-sd-clip通過剪輯審訊器猜測上一個圖像在org模式上的提示,並將其保存在殺戮環中。
MX org-ai-sd-deepdanbooru通過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當您在ORG-AI塊中添加A :local密鑰並使用Cc Cc請求完成時,該塊將發送到本地API服務器而不是OpenAI API。例如:
#+begin_ai :local
...
#+end_ai
這將向org-ai-oobabooga-websocket-url發送請求,然後將響應流式傳輸到ORG緩衝區中。
還可以通過在AI塊中添加:completion選項來提示較舊的完成模型。
:completion - 而不是使用ChatGPT模型,而是使用完成模型:model要使用的模型,請參閱https://platform.openai.com/docs/models有關模型的列表有關這些參數的詳細含義,請參見OpenAI API文檔。
以下自定義變量可用於配置文本生成:
org-ai-default-completion-model (默認: "text-davinci-003" )您還可以使用現有圖像作為輸入來生成更相似的圖像。 org-ai-image-variation命令將提示通往圖像,大小和計數的文件路徑,然後在當前的org-mode緩衝區中生成盡可能多的圖像並插入到它們的鏈接。圖像將存儲在org-ai-image-directory中。請參閱下面的演示。
有關更多信息,請參見OpenAI文檔。輸入圖像必須為正方形,其大小需要小於4MB。目前,您需要用作命令行工具1的捲髮。
org-ai也可以在org-mode緩衝區外使用。當您啟用org-ai-global-mode時,前綴Cc Ma將綁定到許多命令:
| 命令 | 鑰匙扣 | 描述 |
|---|---|---|
org-ai-on-region | Cc Ma r | 詢問有關選定文本的問題,或告訴AI對此做些事情。響應將在組織模式緩衝區中打開,以便您可以繼續對話。設置可變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-promoject緩衝區可以使您可以在項目中的文件上運行命令,或者僅在這些文件中的選定文本上運行命令。您可以選擇項目的回教徒,然後詢問“這是什麼意思?”或向您解釋了代碼。您還可以要求更改代碼,這將產生差異。如果您知道只有啟用Copilot的VS代碼的人可以做到這一點,請在此處指向它們。
運行org-ai-on-project命令將打開一個單獨的緩衝區,該緩衝區允許您選擇多個文件(並選擇地選擇文件中的子區域),然後在其上運行提示。

如果您停用“修改代碼”,則該效果類似於運行org-ai-on-region of the File內容都出現在提示符中。
通過激活“修改代碼”,您可以要求AI修改或重構代碼。默認情況下(“請求diffs”)已停用,我們將提示為所有選定的文件/區域生成新代碼,然後您可以看到每個文件的diff並決定應用它。使用“請求差異”活動,將要求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
您還可以使用org-ai-noweb: yes在父級標題中的任何位置,標題是特有的(Header 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之前將org-ai-use-auth-source設置為nil 。
您可以通過自定義這些變量來切換到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作為機器名稱。
有關可用模型的列表,請參見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]: Tell me fun facts about Emacs.
#+end_ai
對於身份驗證,在您的authinfo.gpg中或設置org-ai-openai-api-token中的machine api.perplexity.ai login org-ai password pplx-*** 。
注意:當前,Perplexity.ai無法通過API訪問參考/鏈接,因此Emacs將無法顯示參考。他們有一個用於該跑步的Beta程序,我肯定希望這將很快能夠提供。
類似於上述。例如
#+begin_ai :service anthropic :model claude-3-opus-20240229
[ME]: Tell me fun facts about Emacs.
#+end_ai
人類模型在這裡。目前,只有一個通過org-ai-anthropic-api-version設置的API版本。如果其他版本出現,您可以在這裡找到它們。
對於API令牌使用machine api.anthropic.com login org-ai password sk-ant-***在您的authinfo.gpg中。
這些設置步驟是可選的。如果您不想使用語音輸入 /輸出,則可以跳過此部分。
注意:我可以在此要旨中找到我的org-ai的個人配置。它包含一個工作的耳語設置。
這已在MacOS和Linux上進行了測試。有人使用Windows計算機,請測試一下,讓我知道需要做些什麼才能使其正常工作(謝謝!)。
語音輸入使用hisper.el和ffmpeg 。您需要直接克隆回購或使用driew.el安裝。
brew install ffmpeg )或在Linux上sudo apt install ffmpeg 。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現在,當您從emacs shell中運行ffmpeg -f avfoundation -i :0 output.mp3時,應該沒有abort trap: 6錯誤。
(作為tccutil.py的替代方案,請參見本期中提到的方法。)
您可以使用ffmpeg -f avfoundation -list_devices true -i "" (setq whisper--ffmpeg-input-device ":0")輸出列出音頻輸入設備,然後告訴Whisper.el。 :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 Distation,而不是耳語。為此,請轉到Preferences -> Keyboard -> Dictation ,啟用它並設置快捷方式。默認值為ctrl-ctrl。
實現的方式(Defun Whisper-檢查安裝安裝)在Win10上不起作用(請參閱#66)。
解決方法是安裝hisper.cpp並手動型號和補丁:
( defun whisper--check-install-and-run ( buffer status )
(whisper--record-audio))非摩托馬州系統上的語音輸出默認用於使用Greader軟件包,該程序包在下面使用以綜合語音。您需要手動安裝Greader(例如,通過Mx package-install )。從那時起,應該“工作”。您可以通過選擇一些文本並調用Mx org-ai-talk-read-region進行測試。
穩定擴散的API可以通過穩定的擴散 - 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.txtoobabooga/text-generation-webui支持許多語言模型。通常,您會從擁抱面上安裝它們。例如,安裝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 ,如果您沒有合適的GPU。
現在,您應該能夠通過在#+begin_ai塊中添加:local選項:
#+begin_ai :local
Hello CodeLlama!
#+end_ai
不,OpenAI是最容易設置的(您只需要一個API鍵),但是您也可以使用本地型號。請參閱上面的Oobabooga/text-generation-webui使用穩定擴散和局部LLM。還支持擬人化的克勞德(Claude)和困惑。請為您希望看到的其他服務打開問題或公關。我的響應速度可能很慢,但是如果有足夠的興趣,我會增加支持。
GPTEL軟件包提供了OpenAi Chatgpt API的替代界面:https://github.com/karthink/gptel
如果您發現此項目有用,請考慮贊助。謝謝你!
注意:彎曲的圖像變化實現需要安裝命令行捲曲。原因是OpenAI API期望多部分/form-data請求,而emacs內置的url-retrieve不支持這一點(至少我還沒有弄清楚如何)。切換到request.el可能是更好的選擇。如果您有興趣貢獻,則非常歡迎PR! ↩