2023.12.14 - [Study/LLM] - ChatGPT Prompt Engineering for Developers : Usage (2)

 

이어서 ~

마지막으로 customized Chatbot 만들기랑, OpenAI [ Text Generation ] Documentation 살펴보고 마무리. 

 

 


 

Chatbot

 

< Chat Model > 의 개요
system의 역할 및 Assistant(chat model) - User(a person)

 

 

 가장 최근 openai로 업그레이드해서 버전 체크했을 때 나오는 결과

 

Version : 1.3.8

 

api key 발급받아서 Chat Completions API 호출하는 과정 

 

 

 

강의는 옛날 버전 `0.27.0` 이라서 openai.ChatCompletion.create( )으로 호출하는 것을 보여주는데 

내가 하고 있는 버전 `1.3.8`은 client.chat.completion.create( )으로 호출해야 했다. 

 

그리고 기본으로 크레딧이 $18가 주어지긴 하는데 추가 이용시 결제될 카드를 등록해 놓지 않으면 크레딧이 있더라도 발급받은 api_key로 코드가 실행되지 않고 Error code 429 (please check your plan and billing details.) 가 떴다. 

 

위와 같이 'Chat models'  은 input으로 리스트 형식의 메시지를 받고, 설정한 모델 (gpt 3.5 turbo)로부터 생성된 메시지를 output으로 반환한다. 'Chat fomat'이 주고받는 형식의 대화를 위에 만들어진 건 맞는데, 대화 없이 single-turn task도 가능하다. 

 

 

[ Helper Funtion ]

 

prompt나 message 부분만 작성하여 바로 응답을 받을 수 있도록 만든 헬퍼 함수의 두 가지 버전이다. 첫번째는 message 속에 들어가는 prompt를 인자로 받고, 두번째는 아예 message를 인자로 받는 함수로 만들어줬다. 

 

for single-turn task

 

multi-turn 도 가능

 

 

가장 주요 인자는 messages인데,

 - must be an array of message objects

 - each object has a role ( "system" / "user" / "assistant") : content.

 - conversations can be as short as one message or many back and forth turns.

 

예를 들어보면 아래와 같다.

 내가 애용하는 어플인 스픽을 모티브로 특정 주제로 대화를 나누는 chat model을 설계했다.

 

보통 제일 먼저 'system' role에 대한 내용을 입력해주고, 'user'와 'assistant' 내용이 번갈아 나오도록 구성해주면 된다. 
서두에서 언급했듯이, 'system' 부분이 'assistant'이 어떻게 답변을 반환할지에 대한 가이드를 주는 기능이다. (set the behavior of the assistant - eg. personaility, specific instructions) 'system' role을 정해주지 않아도 일반적인 assistant 답변으로 반환이 가능하지만 역할을 정해주어야 원하는 대답을 얻어낼 확률이 높다. 

 

이렇게 messages를 만들어 두고 ``` get_completion_from_messages(messages=messages, model, temperature=1) ``` 함수를 호출했더니 아래와 같은 응답이 반환되었다.

뭔가 진짜 스픽 말투랑 비슷한 것 같기도 하고~ 그런데 스픽은 GPT4 모델을 이용한다.

 

여기서 주의할 점은, 모델이 대화 기록(과거 user requests)을 기억하고 있지 않기 때문에 각 request에서 대화에서 언급되었던 모든 관련된 정보들을 제공해줘야 한다는 것이다. (만약 지난 대화를 모두 입력할 수 없는 상황이라면 어떻게 해서든 줄여서 입력을 해야한다. )

예시를 들어보면 아래와 같다. 

 

[ 상황 1 : 내 이름을 알려줬지만 새로 message를 입력하니까 이름을 모른다고 답변한다. ]

 

1-1 message prompt
1-1 Assistance's response

 

1-2 message prompt
1-2 Assistance's response (이름 모름)

 

 

[ 상황 2 : 위 대화의 구성 요소들을 messages에 한 번에 입력해준다. ]

 

2-1 message prompt
2-1 Assistance's response (과거 대화까지 한 번에 입력해주니 이름을 알려준다)

 

 


 

 

 활용예시 - Orderbot )  


피자 식당에서 주문을 받는 orderbot을 만든다고 할 때, 'user'의 prompt랑 'assistant'의 response를 자동으로 모으도록 할 수 있다. 

 

- 사전에 'user'의 주문 및 질문에 'assistant'가 응답하기 위해 필요한 정보들 및 응답 방식을 정리해둔 'system'을 만들어 둔다.

- 위에서 만들어둔거에 .append({'role':'user', 'content':f"{prompt}"})로 유저의 입력을 바로 받아내도록 한다. 

- 이 prompt에 대한 response를 또 다시 .append({'role':'assistant', 'content':f"{response}"}) 로 하여 응답이 반환되도록 한다. 

 

 

 


https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/8/chatbot