OpenAI는 최근 Assistants API를 출시했는데요, 이를 활용하면 다양한 상호작용이 가능한 AI Assistant를 만들 수 있습니다. 예를 들어, 오늘은 '개인 수학 튜터'라는 Assistant를 만들어 보겠습니다.
어떻게 보면 RAG 방식의 챗봇을 구현하기 위해 Open AI 가 다 만들어주고 관리하는 Tool 이라고 생각하면 될 것 입니다.
Assistant API는 오마카세 이고 Langchain 은 뷔페 둘의 성격은 비슷한거 같으나 다르다.
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에서 잘 되어있습니다. 어려우시면 코드로 안하셔도 충분히 만들 수 있습니다.
다들 한번 나만의 도우미를 만들어보시는건 어떨까요..? 물론 과금은 많이 들 것 같습니다. 아직 베타기간동안은 청구는 되지 않는다고하는데 이 때 빨리 뚝딱뚝딱 만들어서 써봅시다.!
'AI > Contents' 카테고리의 다른 글
ReAct Prompting 에 대하여 (0) | 2023.12.13 |
---|---|
전참시에 나온 ChatGPT를 사용하는 ZionT (2) | 2023.12.12 |
[Langchain] RAG 멀티모달을 활용한 추론 - 이력서 첨삭 튜터 (1) | 2023.11.30 |
Andrew Ng prompt for ChatGPT (2) | 2023.11.27 |
ChromaDB로 RAG(Retrieval-Augmented Generation)방식의 챗봇 구현하기 (1) | 2023.11.24 |