본문 바로가기
AI/Contents

OpenAI의 Assistants API로 개인 수학 튜터 만들기

by AI미남홀란드 2023. 12. 5.
728x90

OpenAI는 최근 Assistants API를 출시했는데요, 이를 활용하면 다양한 상호작용이 가능한 AI Assistant를 만들 수 있습니다. 예를 들어, 오늘은 '개인 수학 튜터'라는 Assistant를 만들어 보겠습니다.

 

어떻게 보면 RAG 방식의 챗봇을 구현하기 위해 Open AI 가 다 만들어주고 관리하는 Tool 이라고 생각하면 될 것 입니다.

 

Assistant API는 오마카세 이고 Langchain 은 뷔페 둘의 성격은 비슷한거 같으나 다르다.

DallE 로 만든 생성형 이미지

 

Assistant API의 구조

  • 어시스턴트 : 큰단위 , 스레드 : 대화 내역(각각), 런 : 어떤 스탭을 결정 거치는지
  • 런은 Assistant 인 interpreter 를 쓰지 않아도 무조건 돌아가야하는 단계다.

 

 

시작하기 전에

먼저, Assistants API 사용하려면 OpenAI-Beta: assistants=v1라는 HTTP 헤더를 전달해야 합니다. OpenAI Python 또는 Node.js SDK 사용하면 과정이 자동으로 처리됩니다.

 

Step 1: Assistant 생성하기

 

Assistant 사용자의 질문에 답변하는 엔티티입니다. 여기서는 '수학 튜터' 역할을 하는 Assistant 만들어 볼게요.

 

코드는 'Math Tutor'라는 이름의 Assistant 생성합니다. Assistant 수학 문제를 해결하는 코드를 작성하고 실행하는 역할을 합니다.

 

- 기본적인 OpenAI 라이브러리를 Import 하고, Client 에 api_key 를 넣어주고 assistant 변수에 객체들을 생성합니다 현재 베타버전이기 때문에 언제든 beta라는 이름이 사라질 수 있습니다

 

지시사항에는 수학 선생님에 관련된 지시사항을 넣어줍니다. 이걸 응용하면 다른 봇도 되겠죠? 사회선생님, 과학선생님

 

name : Assistant 이름

instructions : 지시사항

tools : [ Code_interpreter, Retrieval, Functions Callings]

model : 사용할 모델

 

코드와 비교를 해보면된다. name, Insturctions, model, Tools 의 GUI 의 화면을 플레이그라운드로 구성해둔것이다. 

 

Step 2: Thread 생성하기

Thread는 대화의 연속성을 나타냅니다. 사용자가 대화를 시작하면 사용자별 Thread를 생성하는 것이 좋습니다.

스레드의 개념은 우리가 사용하는 ChatGPT에서 new ChatGPT 를 누를때마다 하나씩 생성되는 대화창의 개념이라고 생각하시면 쉽습니다. 그래서 Thread 이 코드를 계속파일에 넣어두면 생성이 계속되기 때문에 홈페이지로 구현할때는 유저가 눌렀을 경우 생기게끔 해주어야하고 Print(thread)를 하는 이유는 쓰레드의 고유의 ID 가 생성이 됩니다 그것을 기억해야합니다

 

Step 3: Thread에 Message 추가하기

사용자의 요청은 Message 형태로 추가됩니다. 예를 들어, 아래의 코드는 사용자가 '3x + 11 = 14'라는 수학 문제를 해결해달라는 요청을 하는 것을 나타냅니다.

이떄도 반드시 message 의 변수안에 뭐가 들었는지 print 를 해서 나중에 쓸 관련 id등을 적어둔다.

 

Step 4: Assistant 실행하기

이제 Assistant 실행하여 사용자의 질문에 답변해야 합니다. 이를 위해 Run 생성합니다.

위에서도 설명한대로 run 을 꼭 지나서 실행되기 때문에 어떤 prompt 를 넣더라도, 관련되서 지시사항을 넣어줄수 있으면 좋을 것이다.

 

Step 5: Run 상태 확인하기

Run 실행되면, 상태를 확인해야 합니다. Run 'queued' 상태에서 시작하여 'completed' 상태로 변경됩니다.

 

Step 6: Assistant 의 응답 표시하기

Run 완료되면, Assistant Thread 추가한 메시지를 확인하고 사용자에게 표시합니다.

 

결과를 보면 이렇게 되어있기 때문에 그에 맞게 인덱싱을 해주면 됩니다. 그래서 , run 단계에서 코드를 조금 수정해서 챗봇을 쉽게 만들수 있겠구나 생각을 했습니다. 어떻게보면 Thread를 통해서 다양하게 데이터적인 측면도 생각해 볼 수 도있고, 되게 좋은 툴이란걸 느꼈습니다.

print("답변 : " + messages.data[3].content[0].text.value)

 

 

 

 

일련의 코드로써의 과정들이 Playground에서 잘 되어있습니다. 어려우시면 코드로 안하셔도 충분히 만들 수 있습니다. 

다들 한번 나만의 도우미를 만들어보시는건 어떨까요..? 물론 과금은 많이 들 것 같습니다. 아직 베타기간동안은 청구는 되지 않는다고하는데 이 때 빨리 뚝딱뚝딱 만들어서 써봅시다.!

728x90