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 는 상당한 구라쟁이지만 말이다. 

+ Recent posts