놀라운 유피터랩의 세계에 잘 오셨어요
이제 2주 차예요
3일째예요
이 공책을 꺼내요
대화형 인공지능인 채팅 봇에 대해 알아보도록 하죠.
먼저 일반적인 가져오기와 환경 변수의 일반적인 설정으로 시작하죠
오픈AI를 초기화하죠
이번에는 오픈아이를 쓸 거예요
원한다면 다른 모델로 바꾸는 연습으로 사용할 수 있어요
기본적인 시스템 메시지부터 시작할게요
정말 도움이 되는 조수네요
좋아요
이제 비트 코드의 메시지 구조를 얘기해 볼게요
먼저 오픈AI에 즉각 메시지를 보내는 구조를 다시 알려주세요
이런 건 이제 질리게 봤으니까 제가 설명하는 게 지겹겠죠
저기 있네요
한 번 더요
잘 아시네요
시스템에 사용자를 제공하는 사전 목록이죠 보조가 응답하고 그 다음 사용자가
응답하는 거죠
다른 게 있다고 말씀드렸죠? 지금은 아니에요
시스템 사용자 보조요
사용자 보조요
사용자 보조 사용자 등등이요
이제 채팅이라는 함수를 쓸 거예요
그 함수 채팅은 두 개의 입력 메시지와 역사를 취할 거예요
이 메시지는 현재 채팅방이 답변해야 할 메시지를 나타내죠
모든 이전의 메시지와 교류는 역사가 기록하고 있죠
역사의 구조는 이렇게 생겼을 거예요
목록이 될 겁니다 목록으로 구성된 목록이죠
이런 하위 목록은 사용자가 뭐라고 대답하고 비서가 뭐라고 대답하고 사용자가 뭐라고
대답하고 비서가 뭐라고 대답하는지 등이죠
왜 이런 부탁을 하는 걸까요?
왜 매개 변수가 있는 저런 함수를 써야 하죠? 왜 이런 인수가 있는 거죠?
그 대답은 그러디오가 채팅 유저 인터페이스와 함께 사용하기 위해 기대하는 특정한 유형의 함수이기
때문이죠
그래서 그라디오는 우리가 메시지를 받는 채팅이라는 함수를 쓰길 기대하죠
이 구조에서 히스토리를 선택하고 응답을 반환할 겁니다 이 채팅에 대한
응답이요
그래서 그 형식을 고려하는 거죠
이 함수에 대한 우리 작업은 이런 종류의 메시지를 여기로 변환하는 거죠
이 구조를 통해 한 열씩 반복해야 합니다 위에 보이는 이 구조를 구축하고요
이해가 되면 좋겠네요
그렇지 않다면 제가 보여드릴 때 이해가 될 거예요
채팅이라는 함수를 정의하고 있어요
입력 메시지에 응답해야 하는 메시지가 필요합니다 이전 메시지의 기록도 필요하고요
먼저 메시지 목록을 설정합니다 이 사람이 되겠죠
시작 부분에 시스템 프롬프트로 채우죠
물론 그런 다음 역사를 반복하겠죠
역사의 각 요소는 두 개의 값을 가진 리스트 중 하나죠
사용자 메시지 비서 메시지에 그걸 풀어놓을게요
사용자 메시지와 보조 메시지를 추가해요
매번요
역사에서 각 행은 이 목록에서 두 행으로 바뀌죠
하나는 사용자를 위한 것 하나는 보조를 위한 것이죠
이해가 되면 좋겠네요
지금요
아니면 언제든 괜찮아요
그럴 필요 없어요
언제든 print문을 넣을 수 있다고 말하려 했어요
제가 선견지명이 있어서 인쇄물도 몇 개 넣었어요 TED TED TED TED
곧 보게 될 거예요
히스토리를 프린트하고 메시지를 프린트할 거예요
Get in get 역시 볼 수 있죠
다음 줄은 이 채팅방에서 아주 익숙하실 텐데요 이 시점에서 이 메서드, 이
함수 죄송합니다, 이 시점에서 이 메시지 세트를 가지고 OpenAI를
호출할 거예요
OpenAI 채팅 .완성 .Create를 입력해요
모델에서 전달하고 메시지를 전달하고 결과를 스트리밍해달라고 요청하죠
그렇게 하죠
그런 다음 검토하고 응답을 유도하죠
다시 말씀드리지만 이건 함수가 아니에요
하나씩 반응을 산출하기 때문에 발전기라고 할 수 있죠
네
이제 이걸 좀 전에 슬라이드에서 본 사용자 인터페이스로 바꿀 거예요 인스턴트 메시지 스타일
상호 작용이 있는 사용자 인터페이스요
할 일이 많아요 비트가 계속 오는 메시지를
캔버스로 만들어서 어떻게 만들지 알아내야 하니까요
이 채팅창에 올라온 반응을 보면요
눈치챘는지 모르겠지만 당연히 거짓말이죠
아주 쉬울 거예요
한 줄로 할 거예요
그러디오는 채팅 인터페이스라는 독창적인 걸 내놓는데 채팅 인터페이스는
이런 구조를 가진 단일 함수를 기대하죠
이 특정한 형식으로 메시지와 역사를 취하는 함수를 작성했다면 Gadio에선
코드 한 줄로 끝나죠
그렇게 쉬운지 볼까요?
저걸 실행하는 걸 기억해야 합니다 채팅 생성기를 정의하도록요
이제 인터페이스를 실행할 거예요
여기 있네요
채팅 인터페이스예요
다른 창으로 보여드리죠 그게 더 좋거든요
이렇게 말해요
안녕하세요
무엇을 도와드릴까요?
넥타이 하나 사려고요
어떤 넥타이를 찾으세요?
특정한 색상, 패턴이나 재료가 있나요?
Get it, get it, get it. 대충 아시겠죠?
하지만 빨간색 넥타이는 고전적인 선택이에요
몇 가지 선택지를 드리죠
답이 나왔네요
빨간색을 고른 이유는 여러분이 이미 아는 걸 보여드리고 싶었기 때문이에요
이 대화의 맥락을 갖고 있고 전에 뭐가 있었는지도 알죠
다시 한번 말씀드리지만 비트가 처음 대화했을 때의 메모리를 가진 것 같아요
넥타이를 사고 싶다고 했어요
우리가 상호 작용할 때마다 채팅 메서드, 함수 생성기가 결국엔 제대로 작동해요 get
it
채팅 생성기가 호출됐어요
지금까지의 역사를 전부 담고 있어요
메시지 집합을 구축하고 오픈AI에 전송하는 거죠
통화 내역이 전부 제공되고 있어요
그래서 이전의 맥락이 있는 거예요
LLM도 아니고 GPT 4도 아닙니다 30년 전에 했던 말을 기억하는 것도 아니죠
출동할 때마다 전부 전달해요
이쯤 되면 눈치채셨겠지만요
장황하게 말해서 미안하지만 염장 지르는 게 중요하다고 생각해요
네, 기억하세요? 아래에 print문이 있는데 지금은
꽤 두툼하죠 마지막 걸 보죠
마지막 건 역사고 이건 그래디오가 보낸 거예요
그럼 보일 거예요 우리가 말한 대로 우리가 말한 대로요
그리고 GPT 40을 위해 올바른 포맷으로 변환했죠
GPT 4 미니요
역할 시스템 콘텐츠 목록으로 변환했어요
정말 도움이 되는 조수네요
사용자가 안녕하세요라고 하죠
그러자 조수가 어떻게 도와드리면 되냐고 물었어요
계속해서요
그래서 이렇게 바꿨죠
좋아요, 시작하기 전에 잠깐 옆길로 새죠 중요한 거예요
나 혼자 떠드는 게 아니에요
당신과 함께 그 씨앗을 뿌리고 싶어요
나중에 다시 얘기하겠지만 중요한 부분이에요 어쩌면 당신이 생각해둔
것일 수도 있고요
그렇지 않다면 그래야겠죠
언급하자면 이렇게 생각하실 수 있어요 시스템 사용자 비서가 이 구조에 대해서요
이것도 그래요
어떤 구조적인 방법으로 LLM에 Get이 전달되나요?
우리가 어떻게든 이 데이터를 LLM에 제공할 때 사전이나 사전 목록
같은 어떤 식으로 제공되나요?
LM은 토큰만 받는 줄 알았거든요
토큰의 리스트를 선택하고 가장 가능성이 높은 다음 토큰을 생성하죠
그럼 이 사전 전체 목록은 어떻게 토큰의 세계로 변환하죠?
그런 생각을 한다면 정말 좋을 거예요
아주 좋아요
답은 간단합니다. 토큰을 전달하는 것입니다. 실제 GPT 4개,
GPT 4개 LLM으로요.
오픈AI는 이것을 토큰의 시리즈로 바꾸어 놓습니다. 특별한 토큰을 가지고 있는데 시스템 프롬프트의
시작이라고 설명하는 방법이죠.
사용자와 보조 대응의 시작이죠
그 말을 하는 마크업이 있고 그 전체 마크업을 토큰화합니다 LLM에 정보를 전달하는
특별한 자리 표시자 토큰을 포함해서요
이제 시스템 프롬프트 모드로 바꿀게요
시스템 프롬프트 텍스트가 있네요
이제 시스템 프롬프트 모드에서 벗어났어요
사용자 메시지 같은 걸 하고 있죠
이 구조가 OpenAI API 전송이에요
패로 변환하죠
이 토큰들이 LLM에 입력되어 get 다음 토큰을 예측하죠
Get it, get it, get it's right, get's right, right.
그런데 LLM은 이 특별한 토큰이 시스템 메시지를 의미한다는 것과 이를 높은 수준의 지시로 해석해야
한다는 것을 어떻게 알까요?
이 토큰이 사용자를 의미하고 이건 비서를 의미한다는 걸 어떻게 알까요?
어떤 식으로든 그런 능력을 아키텍처에 구현한 건가요?
그에 대한 답은 아주 간단해요
아뇨, 그렇게 훈련받았으니까요
많은 데이터와 구조로 훈련되었고 수백만 개의 예로 훈련되었어요
시스템 지침에서 특정 지침을 받았을 때 다음 토큰과 반응은
시스템 프롬프트를 준수하는 것이라는 것을 배우게 되죠
너무 단순화했어요
뉘앙스가 좀 더 있어요 셰프 같은 기술과 관련해서요
비트 박스를 아는 사람들은 너무 단순화됐다고 하겠지만 그게 일반적인
개념이에요
기본 아이디어예요
이 구조는 일종의 API 구조예요
오픈AI에 우리가 원하는 걸 이렇게 전달하는 거죠
오픈아이는 그 구조를 토큰으로 바꾸죠
그럼 이제 처음으로 넘어가서 그라디오는 이런 포맷의 데이터를 주죠
이것을 OpenAI에 보내는 이 형식에 매핑합니다 OpenAI는 이것을 특별한 토큰을 포함한 토큰으로
변환하죠
지금까지의 모든 대화에 해당하는 LLM으로 들어갑니다 대화 전체를
담을 때마다 가장 그럴듯한 다음 토큰 배열을 생성하죠 그다음으로 나올 가능성이
가장 큰 토큰요
그게 우리에게 돌아오는 거고 우린 그걸 원조 대응이라고 생각하죠
그래서 그게 꽤 긴 사이드바라는 걸 깨달았죠
아주 중요한 기본적 이해예요
다시 돌아오죠 특히 오픈 소스 모델을 볼 때요
생성된 토큰들을 직접 볼 것입니다. 특별한 토큰들을요.
다음 비디오까지 잠시 멈추겠습니다 그때 이 챗봇을 만들
거예요