π [Python] ν΄λμ€λ©μλμ λν΄μ
ν΄λμ€λ©μλ..?
νλ‘μ νΈλ₯Ό μ§ννλ€λ³΄λ, @classmethod
λ₯Ό μ¬μ©νλ μΌμ΄ μμλ€.
chatgpt apiλ₯Ό μ¬μ©νλ©΄μ, λ΅λ³μ λ°μμ€λλ°μ νμν λΆλΆλ€μ __init__()
μΌλ‘ λΆλ¦¬νλ κ³Όμ μμ μ¬μ©νλ€.
κΈ°μ‘΄ chatgpt api code
messages = []
class ChatGptApi:
openai.api_key = CHATGPT_API_KEY # APIν€ μ
λλ€. μΈλΆμ 곡κ°νλ©΄ μλ©λλ€.
def get_completion(content):
# μ¬μ©μ μ
λ ₯μ λ°μ΅λλ€.
# content = input("input content: ")
print("input message: ", content)
# μ¬μ©μ μ
λ ₯μ messagesμ μΆκ°ν΄μ€λλ€.
messages.append({"role": "user", "content": f"{content}"})
completion = openai.ChatCompletion.create(
model="gpt-3.5-turbo", # λͺ¨λΈ μ§μ
messages=messages, # μ§λ¬Έ λ° λ΅λ³
max_tokens=1024, # μ΅λ ν ν° μ μ ν
n=1, # λ΅λ³ κ°μ
stop=None, # λ΅λ³ μ€λ¨ μμ½μ΄ μ€μ
temperature=0.5 # λ΅λ³μ μ°½μμ± μ€μ
)
# gptλ‘λΆν° μλ΅μ λ°μ΅λλ€.
# strip() : μλ΅μ΄ μ¬ λ, λΉ κ³΅κ° μ κ±°
assistance_content = completion.choices[0].message['content'].strip()
# assistanceμ μ΄μ λν λ΅λ³μ μ μ₯ν©λλ€.
messages.append({"role": "assistant", "content": f"{assistance_content}"})
print(f'ChatGPT : {assistance_content}')
return assistance_content
λ³κ²½ν chatgpt api code
messages = []
class ChatGptApi:
openai.api_key = CHATGPT_API_KEY # APIν€ μ
λλ€. μΈλΆμ 곡κ°νλ©΄ μλ©λλ€.
def __init__(self):
self.model = "gpt-3.5-turbo" # λͺ¨λΈ μ§μ
self.max_tokens = 1024 # μ΅λ ν ν° μ μ ν
self.n = 1 # λ΅λ³ κ°μ
self.stop = None # λ΅λ³ μ€λ¨ μμ½μ΄ μ€μ
self.temperature = 0.5 # λ΅λ³μ μ°½μμ± μ€μ
self.completion = openai.ChatCompletion.create(
model = self.model,
messages = messages, # μ§λ¬Έ λ° λ΅λ³
max_tokens = self.max_tokens,
n = self.n,
stop = self.stop,
temperature = self.temperature
)
@classmethod
def get_completion(cls, content):
# μ¬μ©μ μ
λ ₯μ λ°μ΅λλ€.
print("input message: ", content)
# μ¬μ©μ μ
λ ₯μ messagesμ μΆκ°ν΄μ€λλ€.
messages.append({"role": "user", "content": f"{content}"})
completion = cls().completion
# gptλ‘λΆν° μλ΅μ λ°μ΅λλ€.
assistance_content = completion.choices[0].message['content'].strip()
# assistanceμ μ΄μ λν λ΅λ³μ μ μ₯ν©λλ€.
messages.append({"role": "assistant", "content": f"{assistance_content}"})
print(f'ChatGPT : {assistance_content}')
return assistance_content
λ°λ λΆλΆ?
get_completion()
μ 보면, @classmethod
λ°μ½λ μ΄ν°μ ν¨κ» cls
μΈμμ cls().completion
μ λ³Ό μ μλ€.
μ΄μ μ΄ κ²μ μλ―Έμ μ¬μ© μ΄μ μ λν΄ μ 리νκ² λ€.
@classmethod
@classmethod
λ ν΄λμ€λ‘ νΈμΆνκΈ° μν λ©μλμ΄λ€.
cls
λ classμ μ€λ§λ‘ νμ΄μ¬μμ κ΄λ‘λ‘ μ¬μ©λλ λ³μλͺ
μ΄κ³ , μ΄κ±΄ ν΄λμ€ λ³ΈμΈ
μ λ»νλ λ³μλ€.
λ³΄ν΅ class λ΄λΆμ methodμμ self
λ₯Ό μ°λ κ²½μ°κ° λ§μλ°, selfλ μΈμ€ν΄μ€ λ³ΈμΈ
μ λ»νλ€λ©΄, clsλ ν΄λμ€ μκΈ° μμ μ΄λ€.
μ μΈκΉ?
def get_completion(cls, content):
# μ¬μ©μ μ
λ ₯μ λ°μ΅λλ€.
print("input message: ", content)
# μ¬μ©μ μ
λ ₯μ messagesμ μΆκ°ν΄μ€λλ€.
messages.append({"role": "user", "content": f"{content}"})
completion = ChatGptApi().completion
# gptλ‘λΆν° μλ΅μ λ°μ΅λλ€.
assistance_content = completion.choices[0].message['content'].strip()
# assistanceμ μ΄μ λν λ΅λ³μ μ μ₯ν©λλ€.
messages.append({"role": "assistant", "content": f"{assistance_content}"})
print(f'ChatGPT : {assistance_content}')
return assistance_content
μ μ½λλ @classmethod λ°μ½λ μ΄ν°λ₯Ό μ¬μ©νμ§ μμ κ²½μ°μ μ½λμ΄λ€.
λ¬Όλ‘ μ μμ μΌλ‘ λμνλ κ²μ λΆλͺ νλ€.
λ€λ§, ν΄λμ€ λ³ΈμΈμ νΈμΆμ΄ νμν κ²½μ°μλ Pythonic(νμ΄μ¬μ€λ¬μ΄)
μ½λλ₯Ό μν΄ λ°μ½λ μ΄ν°λ₯Ό ν΅ν λͺ
μκ° μμΌλ©΄ μ’κΈ° λλ¬Έμ μ¬μ©νλ€. β λ§μκΉ(?)
@staticmethod
@staticmethod
λ self
μ cls
μΈμλ₯Ό νμλ‘ νμ§ μλ λ©μλμ΄λ€.
class Robot:
...
# @staticmethod μ£Όμμ²λ¦¬
def μ€νν±λ©μλ():
print('μ€νν±λ©μλ νΈμΆ')
robot = Robot('λ€μ½')
robot.μ€νν±λ©μλ() # μΈμ€ν΄μ€λ‘ νΈμΆ
Robot.μ€νν±λ©μλ() # ν΄λμ€λ‘ νΈμΆ
'''
>>>
TypeError: μ€νν±λ©μλ() takes 0 positional arguments but 1 was given
'''
μ μμ λ₯Ό 보면 μΈμ€ν΄μ€λ‘ μ€νν±λ©μλ()λ₯Ό νΈμΆνλλ° μλ¬κ° λ°μν κ²μ λ³Ό μ μλ€.
μΈμλ‘ μ무 κ²λ λ°μ§ μμμΌ νλλ°, 1κ°μ μΈμκ° λ€μ΄μλ€λ λ»μ΄λ€.
μ¬κΈ°μ μ μ μλ κ²μ μΈμ€ν΄μ€λ‘ λ©μλλ₯Ό νΈμΆν λ, μΈμλ₯Ό λ°λ‘ λ£μ§ μμλ μλμΌλ‘ μΈμκ° λ€μ΄κ°λ€λ λ»μ΄κ³ , μ΄ μΈμλ λ°λ‘ self
μΈ κ²μ΄λ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μλ λ κ°μ§ λ°©λ²μ΄ μλ€.
-
self μΈμλ₯Ό λ£μ΄μ£Όλ λ°©λ²
def μ€νν±λ©μλ(): print('μ€νν±λ©μλ νΈμΆ')
- μ΄λ κ² νλ©΄ μ€νν±λ©μλλ μΈμ€ν΄μ€λ©μλκ° λλ κ²μ΄λ€. νμ§λ§, ν΄λμ€μμ νΈμΆμ νκ²λ κ²½μ° μΈμ€ν΄μ€ μΈμλ₯Ό νμλ‘ νκ² λλ€.
-
@staticmethod
λ₯Ό μ¬μ©νλ λ°©λ²@staticmethod def μ€νν±λ©μλ(): print('μ€νν±λ©μλ νΈμΆ')
- μ΄λ κ² νλ©΄ μΈμλ₯Ό λ°μ§ μμλ λμνλ ν΄λμ€ λ΄μ μ μ λ©μλλ₯Ό μ€νν μ μλ€.
κ·Έλ₯ μ΄λ€ μμ±μλ λ³νλ₯Ό μΌμΌν€μ§ μκ³ , μ λ ₯μ΄ λ€μ΄μ€λ©΄ νμ κ°μ μΆλ ₯μ λ°ννλ μμν¨μ λΌκ³ μκ°νμ.
μμ½
@classmethod
μ @staticmethod
λ κ°μ²΄μ λ©μλλ₯Ό λ μ§κ΄μ μΌλ‘ μ€κ³νκ³ κ°νΈνκ² νΈμΆνκΈ° μν λ°μ½λ μ΄ν°μ΄λ€.
μμΌλ‘ μ΄ λ λ μμ λ§λλ©΄ ν΄λμ€λ‘ νΈμΆνκΈ° μν λ©μλ, self, cls μΈμκ° νμ μλ λ©μλ λ‘ μ΄ν΄νλ©΄ νΈνκ² λ€.
λκΈλ¨κΈ°κΈ°