Chat AI + GPT
강사: 이숙번님
- GPT
: 확률높은 단어를 나열하여 문장을 생성하는 모델
1. Prompt Engineering
- 분류(Text Classification): 어떤 카테고리인지 분류해줘
- Q&A(Question Answering): 정답을 골라줘
- 요약(summarization): 한 문장으로 요약해줘
- 번역(Translation): 영어로 번역해줘
- 생성(Text Generation): 글을 써줘
- NLP(Natural Language Processing)
NLP의 Tasks들은 데이터 구성조차 다른 서로 별개의 Task인데, GPT 단일 모델이 모든 Task를 풀 수 있었고,
심지어 그전의 모든 모델보다 성능이 뛰어났음.
-> 모든 NLP Task의 SOTA(State-of-the-Art, 최첨단) 달성
- prompt로 json 파일로 변환하기
prompt = """
"괜찮은데", "생각보다 별로네", "그저그래", " 평범했어"
위 각각의 문장을 감정 분류를 해줘.
[{"괜찮은데" : "중립"}]
위의 샘플처럼 list of dictionary 로 만들어줘
"""
response = client.completions.create(
model="gpt-3.5-turbo-instruct",
prompt=prompt,
temperature=1,
max_tokens=512,
)
response
# 줄넘김(\n)을 사용할 때
prompt = """
"""
# json 으로 변환
import json
result = json.loads(response.choices[0].text)
result
# 결과
[{'괜찮은데': '중립'}, {'생각보다 별로네': '부정'}, {'그저그래': '중립'}, {'평범했어': '중립'}]
# 참고
json.dump(): 파이썬 객체를 JSON 형식으로 저장할 때 사용
'[{'괜찮은데': '중립'}, {'생각보다 별로네': '부정'}, {'그저그래': '중립'}, {'평범했어': '중립'}]'
json.loads(): JSON 문자열을 파이썬 객체로 변환할 때 사용
[{'괜찮은데': '중립'}, {'생각보다 별로네': '부정'}, {'그저그래': '중립'}, {'평범했어': '중립'}]
JSON인코딩(Encoding)
: JSON 인코딩은 파이썬 객체를 JSON 형식의 문자열로 변환하는 작업
JSON 디코딩(Decoding)
: JSON 문자열을 파이썬 객체롤 변환하는 작업
- gpt 사용
text = """
삼성 라이온즈 박진만 감독은 한국시리즈에서 아쉽게 준우승에 그쳤지만, 선수들에게 고마움을 표시했다.
"""
prompt = f"""{text}
--------
위 기사가 어떤 분류의 기사인지 알려줘. 아래 각 분류 중에 어떤 분류인지 0~1사이 확률로 알려줘.
["IT", "스포츠", "연애", "사회", "정치"]
결과 포맷:
{{"IT": 0.9, "스포츠": 0.1, "연애": 0, "사회": 0, "정치": 0}}
"""
response = client.completions.create(
model="gpt-3.5-turbo-instruct",
prompt=prompt,
temperature=1,
max_tokens=512,
)
print(response.choices[0].text)
# 결과
{"IT" : 0, "스포츠": 0.9, "연애" : 0, "사회":0, "정치":0.1}
참고 글: Cognitive Prompting(인지적 프롬프팅) - 김창준
유튜브: https://www.youtube.com/watch?v=CkCL8dV_mPk
발표자료: https://docs.google.com/presentation/d/1kayepoiTVT838Tetk02nxeqVmmS9BDc9O7n-4OzJdL8/edit#slide=id.p
너가 **을 하는 전문가라면 어떤 순서대로 이 문제를 해결할거야?, 그 순서에 맞게 내 문제를 해결해줘"
-> 출력을 한 다음에 해결하는 과정을 거쳐야 됨.
msg = [
{"role": "system", "content": "매우 친절한 친구. 이름은 피티. 대답은 짧게"},
{"role": "user", "content": "너에 대해 소개해줘."},
{"role": "assistant", "content": "안녕! 나는 피티야. 친절하게 질문에 답해줄게. 도움이 필요하면 말해줘!"},
{"role": "user", "content": "너는 언제 만들어졌어?"}
]
completion = client.chat.completions.create(
model="gpt-4o",
messages=msg
)
print(completion.choices[0].message.content)
- 챗봇
msg = [
{"role": "system", "content": "매우 친절한 친구. 이름은 피티. 대답은 짧게"},
]
user_msg = input("user: ")
msg.append({"role" : "user", "content": user_msg})
completion = client.chat.completions.create(
model="gpt-4o",
messages=msg
)
print("bot: ", completion.choices[0].message.content)
msg.append({"role" : "assistant", "content": completion.choices[0].message.content})
user_msg = input("user: ")
msg.append({"role" : "user", "content": user_msg})
completion = client.chat.completions.create(
model="gpt-4o",
messages=msg
)
print("bot: ", completion.choices[0].message.content)
msg.append({"role" : "assistant", "content": completion.choices[0].message.content})
print(completion.choices[0].message.content)
- 반복문 사용하기
msg = [
{"role": "system", "content": "매우 친절한 친구. 이름은 피티. 대답은 짧게"},
]
while True:
user_msg = input("user: ")
msg.append({"role" : "user", "content": user_msg})
if user_msg == "끝":
break
completion = client.chat.completions.create(
model="gpt-4o",
messages=msg
)
print("bot: ", completion.choices[0].message.content)
msg.append({"role" : "assistant", "content": completion.choices[0].message.content})
- 피자봇
prompt = """
You are OrderBot, an automated service to collect orders for a pizza restaurant.
You first greet the customer, then collects the order, and then asks if it's a pickup or delivery.
You wait to collect the entire order, then summarize it and check for a final time if the customer wants to add anything else.
If it's a delivery, you ask for an address. Finally you collect the payment.
Make sure to clarify all options, extras and sizes to uniquely identify the item from the menu.
You respond in a short, very conversational friendly style.
The menu includes
pepperoni pizza 12.95, 10.00, 7.00
cheese pizza 10.95, 9.25, 6.50
eggplant pizza 11.95, 9.75, 6.75
fries 4.50, 3.50
greek salad 7.25
Toppings:
extra cheese 2.00,
mushrooms 1.50
sausage 3.00
canadian bacon 3.50
AI sauce 1.50
peppers 1.00
Drinks:
coke 3.00, 2.00, 1.00
sprite 3.00, 2.00, 1.00
bottled water 5.00
"""
msg = [
{"role": "system", "content": prompt},
{"role": "assistant", "content": "안녕하세요. AI 피자입니다. 무엇을 도와드릴까요?"}
]
print("bot: 안녕하세요. AI피자입니다. 무엇을 도와드릴까요? ")
while True:
user_msg = input("user: ")
msg.append({"role" : "user", "content": user_msg})
if user_msg == "끝":
break
completion = client.chat.completions.create(
model="gpt-4o",
messages=msg
)
print("bot: ", completion.choices[0].message.content)
msg.append({"role" : "assistant", "content": completion.choices[0].message.content})
참고 영상: 제대로 알고 쓰면 약점이 거의 없다 (30년 개발자 박종천)
https://youtu.be/L8BPDWxd5K8?si=Z0Q3rFQNbL3l49lF&t=749
2. Function calling
: ChatGPT에게 내가 만든 함수를 설명하고, ChatGPT가 필요할 때 내가 만든 함수를 이용하는 것
https://platform.openai.com/docs/guides/function-calling
- function calling을 이용하여 질문하기
# 두 개의 숫자를 더하는 함수 만들기
def add(a: int, b: int):
return a + b
# ChatGPT에게 함수 설명하기
tools = [
{
"type": "function",
"function": {
"name": "add",
"description": "Add two numbers together",
"parameters": {
"type": "object",
"properties": {
"a": {
"type": "integer",
"description": "The first number to add"
},
"b": {
"type": "integer",
"description": "The second number to add"
}
},
"required": ["a", "b"],
"additionalProperties": False,
}
}
}
]
msg = [
{"role": "system", "content": "계산기"},
{"role": "user", "content": "3-4=?"}
]
result = client.chat.completions.create(
model="gpt-4o",
messages=msg,
tools=tools,
)
result
tool_call = result.choices[0].message.tool_calls[0]
name = tool_call.function.arguments
argumnets = json.loads(tool_call.function.arguments)
print(name)
print(argumnets)
add(argumnets['a'], argumnets['b'])
※ 주의할 점: Object 전달된 문자열을 json.loads()로 파이썬에서 사용이 가능하도록 변환해줘야 됩니다.
출처: AI Hub 교육과정 - WEB+AI (위 내용이 문제가 된다면 댓글에 남겨주세요. 바로 삭제조치하도록 하겠습니다.)
'Programming 개발은 구글로 > 기타 정보' 카테고리의 다른 글
[WEB+AI] 14일차 Embedding(임베딩) + Python (0) | 2024.10.31 |
---|---|
[WEB+AI] 13일차 Chatbot + Python (3) | 2024.10.30 |
[WEB+AI] 11일차 복습 (0) | 2024.10.28 |
[WEB+AI] 10일차 대언어모델 시대 (0) | 2024.10.28 |
[WEB+AI] 9일차 OpenAI API 이해와 활용 (3) | 2024.10.24 |
댓글