나만의 챗봇 만들어 보기(Open AI 어시스턴스 실습)
과제
Open AI 어시스턴스 만들기
어시스턴트와 관련 된 기본용어 찾아서 정리해보기, 어시스턴트id,스레드id
어시스턴트에 간단하게 이력서샘플 만들어서 업로드
어시스턴트 api로 바꾸기
Assistants API 구조
기본요소
*assistant=목적에 맞는 로봇
from openai import OpenAI
import time
# OpenAI API 키 설정
client = OpenAI(api_key="")
#assistant 생성
assistant = client.beta.assistants.create(
name="Math Tutor",
instructions="You are a personal math tutor. Answer questions briefly, in a sentence or less.",
model="gpt-3.5-turbo",
)
# # 생성된 챗봇의 정보를 JSON 형태로 출력합니다.
print(assistant)
assistant_id=""
*thread=카톡 방,하나의 thread 안에 여러개의 메세지 존재
# # # 새로운 스레드를 생성합니다.
thread = client.beta.threads.create()
print(thread)
#resume thread
thread_id = ""
*message=thread 안에 있는 대화들
종류
-system:어시스턴트가 참고할 만한 전역조건
-user: 사용자의 질문
-assistant: ai의 답변
thread는 여러개의 메세지를 가지고 있을 수 있다
message{
role:user//user 메세지
content는 물어보고 싶은 거 담으면 된다
}
message = client.beta.threads.messages.create(
thread_id,
role="user",
content="서찬의 전화번호 알고 싶습니다",
)
print(message)
*run:어시스턴트가 정해진 대화를 통해 객채를 만듬, 실행시점을 관리
어시스턴트와 쓰레드는 독립(수학 과학 관련된 로봇과 관련없는 수학과 과학 관련된 카톡방)
일관성을 위해 하나의 주제에 맞는 어시스턴트에 하나의 주제에 맞는 쓰레드가 좋다
run을 사용할 때는 쓰레드와 어시스턴트가 독립적이기에 각각 아이디를 받아온다
status
queued 대기중-비동기처리로 단계관리하기 위해->원하는 시점에 데이터를 받아 올 수 있다
completed 질문 답변 완료
list로 답변 확인
# 실행할 Run 을 생성합니다.
# Thread ID 와 Assistant ID 를 지정합니다.
run = client.beta.threads.runs.create(
thread_id="",
assistant_id="",
)
print(run)
run_id = run.id
while True:
run = client.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id= run_id,
)
if run.status == "completed":
break
else:
time.sleep(2)
# print(run)
thread_messages = client.beta.threads.messages.list(thread_id)
print(thread_messages.data[0].content[0].text.value)
Assistants API
->chatgpt의 텍스트 형식의 도구의 제약을 해소하기 위해 탄생
code interpreter
-디버깅과 다른 느낌
-토큰 제한수를 넘는 데이터를 위해 쿼리문을 작성해서 토큰을 효율적이게 사용
-쉽게 말해 엄청난 양의 데이터 분석 가능
retrieval
-검색
-우리의 자료로 결과를 낼 수 있다
-문서를 gpt에게 학습을 시켜 그 문서를 토대로 답변을 해준다
function
-내가 만든 함수를 기반으로 어시스턴트가 사용할 수 있게 만들어준다(예를들어 검색으로 학습한 문서를 기반으로 함수를 만들 수 있다)
Retreieval을 활용하여 이력서 학습을 시켜 나만의 챗봇 만들기
1. openai api 사이트에서 내가 만든 어시스턴트에 내 이력서 파일을 넣어준다(+추가로 instructions도 수정 가능)
2. 프로트엔드 서버에서 입력값 받아와 출력하기
아래 블로그에서 참고
Front & Back 서버 연결(axios 실습) :: West_Cold (tistory.com)
from openai import OpenAI
import time
from flask import Flask, request, jsonify
from flask_cors import CORS
app = Flask(__name__)
CORS(app) # 모든 출처에서의 요청을 허용합니다.
# OpenAI API 키 설정
client = OpenAI(api_key="")
@app.route('/sendMessage', methods=['POST'])
def send_message():
data = request.get_json()
user_input = data.get('user_input')
try:
assistant_id=""
#resume thread
thread_id = ""
message = client.beta.threads.messages.create(
thread_id,
role="user",
content=user_input,
)
# 실행할 Run 을 생성합니다.
# Thread ID 와 Assistant ID 를 지정합니다.
run = client.beta.threads.runs.create(
thread_id=thread_id,
assistant_id=assistant_id,
)
run_id = run.id
while True:
run = client.beta.threads.runs.retrieve(
thread_id=thread_id,
run_id= run_id,
)
if run.status == "completed":
break
else:
time.sleep(2)
thread_messages = client.beta.threads.messages.list(thread_id)
ai_response = thread_messages.data[0].content[0].text.value
return jsonify({"description": ai_response})
except Exception as e:
return jsonify({"error": str(e)})
if __name__ == '__main__':
print("Flask 애플리케이션이 실행되었습니다.")
app.run(debug=True)
3. 결과
참고영상
https://youtu.be/kKhWkG5Di5s?si=Pvi8JbR_vmqZcdpt
https://youtu.be/-Wne4a-8RlY?si=bpn6IyXQIQBXal86