Notice
Recent Posts
Recent Comments
Dharma
[Emacs Lisp] GPT 에게 문의 하는 기능 본문
gtpai 를 이용하니 Multibyte 처리가 안되어 있는 함수를 이용하기 때문에 제대로 동작하지 않는다. 그거와 최대한 유사하게 가장 간단한 기능만을 옮겨봤다.
(defvar gpt-base-url "https://api.openai.com/v1/completions")
(defvar gpt-chat-url "https://api.openai.com/v1/chat/completions")
(defcustom gpt-model ""
"API Model for OpenAI."
:type 'string
:group 'crutil)
(defcustom gpt-api-key ""
"API key for OpenAI."
:type 'string
:group 'crutil)
(defun send-query-to-gpt (text)
"ask to gpt"
(interactive
(list (read-string "물어봐: ")))
(when (null gpt-api-key)
(error "OpenAI API key is not set"))
(let* ((url-headers
`(("Content-Type" . "application/json")
("Authorization" . ,(format "Bearer %s" gpt-api-key))))
(url-data
(json-encode `(("model" . ,gpt-model)
("prompt" . ,text)
("temperature" . 0.7)
("max_tokens" . 1000)))))
(request
gpt-base-url
:type "POST"
:data url-data
:headers url-headers
:parser 'json-read
:success (cl-function
(lambda (&key data &allow-other-keys)
(insert (cdr (assoc 'text (elt (cdr (assoc 'choices data)) 0))))))))
)
적당히 load 될 수 있는 곳에 이 함수를 만들어 두고
(require 'cr-utils)
(setq gpt-model "text-davinci-003")
(setq gpt-api-key "<INSERT YOUR API KEY>")
(global-set-key (kbd "C-c o") 'send-query-to-gpt)
맨 위의 cr-utils 는 send-query-to-gpt 함수가 위치한 파일이다.
이러면 편리하게 사용할 수 있다. GPT 는 상당한 구라쟁이지만 말이다.