파이썬 AI 실습/나만의 AI챗봇 만들기(API버전)

나만의 AI챗봇만들기(API버전) - 4. AI챗봇 : 이전 질문 기억하고 답변하기

파기차차 2024. 7. 31. 23:56
728x90
반응형
SMALL

ㅁ 개요

 

O 프로젝트 소개

 

 

 - 이번 글은 이전글(나만의 AI챗봇만들기(API버전) - 3. AI챗봇 : 계속 질문하기)에 이은 5번째 글로 이전 글들의 프로그램들은 이전 질문에 대한 기억이 없습니다. 따라서 이전 질문들과 연관지어 질문할 수 없어 다시 처음부터 질문해야 하는 불편함이 존재하는데, 여기서는 AI챗봇이 이전 질문들을 기억하고 대답할 수 있도록 하는 방법에 대해 알아보겠습니다.

 

 

O 완성된 프로그램 실행 화면

 

 

 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다.

 

 

1. 4.py 실행 시 첫번째 질문이 루트4에대한 답을 묻고 있으며, AI챗봇이 '2'로 대답하였습니다.

그리고 추가 질문으로 왜 '2'가 답인지 물어 보았는데, 이전 질문은 기억하고 있으므로 엉뚱한 답을 하는 것이 아니라, 이전 내용에 대한 답변을 잘 하고 있음을 볼 수 있습니다.

 


 

ㅁ 세부 내용

 

O 완성된 소스

 

소스파일 : 4.py

 

 

from config import *
from groq import Groq
import time

# client = Groq(
#     api_key=os.environ.get("GROQ_API_KEY"),
# )


print("AI챗봇을 종료하려면 'bye'를 입력하세요.\n")

content = ""

while True:

    prompt = input("궁금하신 점을 질문을 해주세요 : ")

    if prompt == 'bye':
        print("AI챗봇을 종료합니다.")
        break


    client = Groq(
        api_key=GROQ_API_KEY,
    )

    chat_completion = client.chat.completions.create(
        messages=[
            {
                "role": "system",
                "content": "모든 응답은 한국어로 작성해 주세요.",
            },
            {
                "role": "user",
                "content": content,  ############### 이전 질문 기억하고 답변하기 #######################
            },
            {
                "role": "user", 
                "content": prompt,
            }
        ],
        # model="gemma-7b-it",
        model="llama3-8b-8192",
        # model="llama3-groq-8b-8192-tool-use-preview",
    )

    print(chat_completion.choices[0].message.content)
    msg = chat_completion.choices[0].message.content ############### 이전 질문 기억하고 답변하기 #######################
    print("\n============================================================\n")

    time.sleep(1)

    content = content + msg ############### 이전 질문 기억하고 답변하기 #######################

 

 

O 소스 실행 방법

 
 
 - 소스파일 다운로드 후 cmd 또는 파워쉘 등에서 아래와 같이 실행하시기 바랍니다.

 

 
 > python 4.py

 


 
 

O 주요 내용

 

아래 소스코드에 대한 주요 내용만 설명하겠습니다.

 

 

소스 파일 : 4.py

 

line 7 : 이전 질의/응답의 내용을 받을 수 있도록 content 변수를 정의합니다.

line 25~28 : 사용자의 역할을 정의하는데, 여기에 이전 질의/응답을 content(질의문)에 함께 넣어줍니다. 이를 통해 AI챗봇이 이전 질의/응답의 내용을 파악할 수 있습니다.

line 29~32 :사용자가 새로운 질문(prompt)을 합니다.

line 40 : 이번에 질의한 내용에 해당하는 답변(응답값)을 msg변수에 할당하고

line 43 : content변수에 이전 질의/응답(content) + 이번 질의에 대한 응답값을 함께 담아둡니다. 이를 통해 content변수에 항상 이전의 모든 질의/응답의 내용을 가지고 있도록 해줍니다.

 

 

 

 

 

 

 


 

ㅁ 정리

 

O 우리가 배운 내용

 
 - 이전 글들의 프로그램들은 AI챗봇이 이전 질문에 대한 기억이 없었습니다. 따라서 이전 질문들과 연관지어 질문할 수 없어 다시 처음부터 질문해야 하는 불편함이 존재하였는데, 오늘은 이런 문제를 개선하여 AI챗봇이 이전 질문들을 기억하고 대답할 수 있도록 개선하는 방법에 대해 알아보았습니다.
 

 

핵심내용

아래 코드에서 노란색으로 표시된 부분이 핵심 내용으로 이를 통해 이전 질의/응답을 AI챗봇이 기억할 수 있게 합니다.

===============================================

    chat_completion = client.chat.completions.create(
        messages=[
            {
                "role": "system",
                "content": "모든 응답은 한국어로 작성해 주세요.",
            },
            {
                "role": "user",
                "content": content,  # 이전 질의/응답을 기억 
            },
            {
                "role": "user", 
                "content": prompt,
            }
        ],
        # model="gemma-7b-it",
        model="llama3-8b-8192",
        # model="llama3-groq-8b-8192-tool-use-preview",
    )

    print(chat_completion.choices[0].message.content)
    msg = chat_completion.choices[0].message.content # 이번 prompt에 대한 챗봇의 응답값을 msg변수에 담고
    print("\n============================================================\n")
    time.sleep(1)
    content = content + msg # 이전 질의/응답과 이번 응답을 합쳐서 content변수에 할당 

===============================================

 

 

 

오늘은 여기까지이며, 위의 내용이 유익하셨다면, 광고 한번씩만 클릭 부탁드립니다.

 

 

감사합니다.

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST