๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป IT·๊ธฐ์ˆ ·ํ†ต๊ณ„

[API] ChatGPT Python์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ - Part.1 (์ˆ˜์ •)

by nowgeun 2023. 1. 17.
728x90

[์ˆ˜์ • 2023.03.08] 

ChatGPT ๊ณต์‹ API๊ฐ€ ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ํ™•์ธํ•ด์ฃผ์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค!

 

[API] ChatGPT Python์œผ๋กœ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ - Part.2

ํšŒ์‚ฌ ์—…๋ฌด์— ์น˜์—ฌ ์ •๋ง ์˜ค๋žœ๋งŒ์— ํฌ์ŠคํŒ…์„ ํ•˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž... ๋ช‡ ๋‹ฌ ์ „ ์ฏค์— ChatGPT ๊ด€๋ จ ํฌ์ŠคํŒ…์„ ํ•œ ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹น์‹œ์—๋Š” API๊ฐ€ ๊ณต๊ฐœ๋˜์ง€ ์•Š์•„ GPT 3.0 ๋ฒ„์ „์ธ InstructGPT๋กœ ๋Œ€์‹  ์‚ฌ์šฉ์„ ํ–ˆ

jakely.tistory.com

 

[์ˆ˜์ • 2023.02.04] 

๋ ˆ๋”ง์—์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๊ธ€์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

Reddit Post
InstructGPT vs ChatGPT

์š”์•ฝ์„ ํ•˜์ž๋ฉด ChatGPT์™€ text-davinci-003 ๋ชจ๋ธ์€ ์กฐ๊ธˆ ๋‹ค๋ฅด๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. text-davinci-003์€ InstructGPT์˜ ๋ชจ๋ธ๋กœ ์ง€์‹œ์‚ฌํ•ญ์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ตœ์ ํ™”๊ฐ€ ๋œ ๋ชจ๋ธ์ด๋ฉฐ, ChatGPT๋ชจ๋ธ์€ InstructGPT๋ชจ๋ธ์„ fine-tuningํ•˜์—ฌ ๋งŒ๋“ค์–ด๋‚ธ ๋ชจ๋ธ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์œ ์‚ฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํƒ‘์žฌํ–ˆ์ง€๋งŒ, optimization ๋ฐฉํ–ฅ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ ๊ฐ™์€ ๋ชจ๋ธ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ œ๊ฐ€ ์•„๋ž˜์— ์†Œ๊ฐœํ•œ ์ฝ”๋“œ๋Š” InstructGPT๋กœ ๋ณด์…”์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค๋งŒ ์„ฑ๋Šฅ๋ฉด์—์„œ๋Š” ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ด์ง€๋Š” ์•Š์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (OpenAI ์ปค๋ฎค๋‹ˆํ‹ฐ ์“ฐ๋ ˆ๋“œ)

 

ChatGPT์˜ API๋ฒ„์ „ ๋ฆด๋ฆฌ์ฆˆ๋Š” ๊ณง ๋œ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. (๊ด€๋ จ ๊ธฐ์‚ฌ)


 

ChatGPT๋Š” ์ถœ์‹œ ์งํ›„ ๊ฐ์ข… ์ธ๊ณต์ง€๋Šฅ, ๋ฐ์ดํ„ฐ, IT ๊ด€๋ จ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ํฐ ํ™”๋‘๊ฐ€ ๋˜์—ˆ๋‹ค.

์–ด๋– ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ–ˆ๊ณ  ํ•™์Šต ๋ฐ์ดํ„ฐ๋ฅผ ์–ผ๋งˆ๋‚˜ ์‚ฌ์šฉํ–ˆ๋Š”์ง€๋Š” ์—…๊ณ„ ์‚ฌ๋žŒ๋“ค์ด ์•„๋‹Œ ์ด์ƒ ํฌ๊ฒŒ ๊ด€์‹ฌ์ด ์—†์„ ๊ฒƒ์ด๋‹ค. 

 

๋ฐฑ๋ฌธ์ด๋ถˆ์—ฌ์ผ๊ฒฌ

 

์ผ๋‹จ ChatGPT๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋Œ€๋‹จํ•œ์ง€๋Š” ์ง์ ‘ ์ฒดํ—˜ํ•˜๊ณ  ๋Š๋ผ๋Š” ํŽธ์ด ๋” ๋น ๋ฅผ ๊ฒƒ์ด๋ผ ์ƒ๊ฐ๋œ๋‹ค. [ChatGPT ๋ฐ”๋กœ๊ฐ€๊ธฐ] (์ ‘์†์ž ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์„œ์ธ์ง€ ์ฒดํ—˜์šฉ ์‚ฌ์ดํŠธ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๋‹ซ์€ ๊ฒƒ ๊ฐ™๋‹ค)


Python์œผ๋กœ ๊ตฌํ˜„

OpenAI์— ๊ฐ€์ž…ํ•œ ๋’ค, API Key๋ฅผ ๋ฐ›์œผ๋ฉด ์ง์ ‘ ์ฒดํ—˜์„ ํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค.

1. OpenAI์— ๊ฐ€์ž…ํ•˜๊ณ  ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค > API ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•˜์—ฌ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ ํ”„๋กœํŒŒ์ผ์„ ํด๋ฆญ

2. View API keys ๋ฉ”๋‰ด ํด๋ฆญ

3. API key ์ƒ์„ฑ

4. ํ‘œ์‹œ๋œ API key๋ฅผ ๋ณต์‚ฌํ•ด์„œ ์‚ฌ์šฉ

 

API Key๋Š” ๋”ฐ๋กœ ๋งŒ๋ฃŒ๊ธฐ๊ฐ„์ด ์—†๋‹ค๊ณ  ํ•˜๋‹ˆ, ํ•œ ๋ฒˆ ๋ฐ›๊ณ  ๋‚œ ๋’ค์—๋Š” OpenAI์—์„œ ํ—ˆ๋ฝํ•˜๋Š” ํŠธ๋ž˜ํ”ฝ ๋งŒํผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜๋ฉด ChatGPT ์›น์‚ฌ์ดํŠธ์— ํ•œ ๋ฒˆ ์ ‘์†ํ•œ ๋’ค๋กœ๋Š” ์ง์ ‘ ์ ‘์†ํ•˜์ง€ ์•Š์•„๋„ ์‚ฌ์šฉ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

(์ˆ˜์ • 2023.02.04:  ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” InstructGPT ์— ๋Œ€ํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ChatGPT์˜ API๋Š” ์•„์ง ๋ฆด๋ฆฌ์ฆˆ ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์„ฑ๋Šฅ์ ์ธ ๋ฉด์—์„œ๋Š” ์•„์ฃผ ํฐ ์ฐจ์ด๋Š” ์—†์œผ๋ฏ€๋กœ ChatGPT ์˜ ์ ‘๊ทผ์ด ์ œํ•œ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ์–ด๋ ต๋‹ค๋ฉด ๋Œ€์‹  ์‚ฌ์šฉํ•ด๋„ ๋ฌด๋ฐฉํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค)

 

Dependency ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

pip install openai

** ๋งŒ์•ฝ ์„ค์น˜ํ•  ๋•Œ pip ์ธ์ฝ”๋”ฉ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค๋ฉด ** > ์ฐธ๊ณ  ๋งํฌ

 

์˜์ƒ๋„ ๋ณผ ์‹œ๊ฐ„์ด ์—†๋Š” ์‚ฌ๋žŒ๋“ค์„ ์œ„ํ•ด์„œ...

1. openai-0.26.1.tar.gz ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ

2. 7zip ์ด์šฉํ•˜์—ฌ ์••์ถ•ํ’€๊ธฐ

3. ํ•ด๋‹น ๊ฒฝ๋กœ๋กœ ์ด๋™ ํ›„, setup.py ์ฝ”๋“œ ๋‚ด ํŒŒ์ผ์„ ์—ฌ๋Š” ๋ถ€๋ถ„์— ์ธ์ฝ”๋”ฉ์„ ๋ช…์‹œํ•ด์ค€๋‹ค.

~~~ ์ƒ๋žต ~~~
with open(version_path, "rt", encoding='utf-8') as f:
    exec(f.read(), version_contents)
    
with open("README.md", "r", encoding='utf-8') as fh:
    long_description = fh.read()

    

4. ๋‹ค์‹œ python setup.py install ์ง„ํ–‰  > ์—ฌ๊ธฐ์„œ ๋‹ค๋ฅธ ์—๋Ÿฌ ๋ฐœ์ƒํ•จ 

5. cd ~ ๋กœ ๊ฒฝ๋กœ ๋ฆฌ์…‹ ํ›„ pip install openai ์ง„ํ–‰

 

4๋ฒˆ์—์„œ ์„ค์น˜ ํ•œ๋’ค ๋ฐœ์ƒํ•œ ์บ์‹œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์„ค์น˜๋ฅผ ์ง„ํ–‰ํ•ด์„œ ๋˜๋Š” ๊ฒƒ์œผ๋กœ ์ถ”์ธก๋œ๋‹ค. ์–ด์จ‹๋“  ์„ค์น˜๋งŒ ๋์œผ๋ฉด ์ƒ๊ด€์—†์ง€

์†Œ์Šค์ฝ”๋“œ

๐Ÿ“ chatgpt
  ใ„ด ๐Ÿ“„ main.py

main.py

import openai
import argparse

YOUR_API_KEY = '์—ฌ๊ธฐ์— API KEY ์ž…๋ ฅ'


def chatGPT(prompt, API_KEY=YOUR_API_KEY):
    
    # set api key
    openai.api_key = API_KEY

    # Call the chat GPT API
    completion = openai.Completion.create(
			  engine = 'text-davinci-003'     # 'text-curie-001'  # 'text-babbage-001' #'text-ada-001'
			, prompt = prompt
			, temperature = 0.5 
			, max_tokens = 1024
			, top_p = 1
			, frequency_penalty = 0
			, presence_penalty = 0)

    return completion['choices'][0]['text']


def main():
    # ์ง€๋ฌธ ์ž…๋ ฅ ๋ž€
    prompt = input("Insert a prompt: ")
    print(chatGPT(prompt).strip())


if __name__ == '__main__':
    main()

 

์‹คํ–‰ ๋ฐฉ๋ฒ•

cd chatGPT/
python3 main.py

 

์‹คํ–‰ ๊ฒฐ๊ณผ ๋ชจ์Œ

1. ๋ถˆ๊ณ ๊ธฐ ๋ ˆ์‹œํ”ผ ๋ฌผ์–ด๋ณด๊ธฐ

 

2. ๋…๋„๋Š” ๋ˆ„๊ตฌ๋•…?

๊ธฐํŠนํ•œ ๋…€์„... (โ´โ—ก`โ)

 

3. ์ฝ”๋“œ์ข€ ์งœ์ฃผ์„ธ์š”

 

๋žœ๋คํ•˜๊ฒŒ ํ•œ ๋ช…์„ ๋ฝ‘์œผ๋ผ๋Š” ์ฝ”๋“œ๋„ ์ž˜ ์งœ์ค€๋‹ค...

 

์ฐฝ์˜๋ ฅ์ด ๋ฐ”๋‹ฅ๋‚˜์„œ ์—ฌ๊ธฐ๊นŒ์ง€...

 

๐Ÿ˜ ๐Ÿ˜ ๐Ÿ˜ 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€