본문 바로가기
유니티 최고/유니티 구현

유니티(Unity) 유니티에서 ChatGpt 봇 만들어보기

by Lee_story_.. 2023. 5. 4.
728x90

진행중인 프로젝트에 3D 챗봇 캐릭터를 만들어 보기로 하여 먼저 시험삼아 진행하게 되었습니다!

 

 

그렇기에 이번 글은

1. chat gpt 연결

2. 텍스트 구성

3. 챗봇 음성 대화 및 텍스트 출력!

 

이렇게 3단계로 진행될 예정입니다!

(끝까지... 해보겠습니다.) 

 

시작!

 

먼저  chat gpt연결에서 참고할 글!

 

ChatGPT Unity에서 사용하기

최근 OpenAI 에서 ChatGPT를 드디어 테스트를 끝내고 상용화 하였다고 하여서 Unity로 사용할수 있게 하였다. https://github.com/mok-03/OpenAI_GPTchat-in-Unity GitHub - mok-03/OpenAI_GPTchat-in-Unity: Unity RestAPI GPT chat Unit

programing-note.tistory.com

 

 

 

 

api 키를 받으러 가봅시다!

 

OpenAI API

An API for accessing new AI models developed by OpenAI

platform.openai.com

 

 

 

우측 상단에서 로그인을 하고 

 

view api keys   >> Create key

 

여기서! api키를 생성하고 아래 창을 닫으시면 안됩니다... 꼭 키를 복붙 해놔야하네요

 

이창을 닫으면 더이상 볼수가 없게되어있습니다!

 

이제 코드를 작성 해야하는데 가장 먼저 

 

chat gpt와 우리가 어떻게 데이터를 주고받을지 부터 생각해보아야합니다. 

그러기위해서 데이터를 어떻게 보내주는지 확인하는게 제일빠른 방법이겠죠!

 

이미 chat gpt는 광범위 하게 사용되고 있기에 형식은 서칭으로 다 나올테지만..

 

만약 api 테스트에 대해 알고싶다면? 

아래글로 이동해주세요!

 


 

바쁘시면 그대로 진행하시면 될 것 같습니다!

 

그럼 계속 진행 해보겠습니다. 

 

이제부터는 코드를 작성해야하는데

가장 먼저 json형식을 만드는것부터 시작됩니다. 

 

 

이걸 위한 패키지를 하나 다운 받아줍시다.

바로  newtonsoft라는 json 파일 만들고 읽어주는 역할을 할 패키지로 

 

패키지 매니저 >> 좌측상당 + >> add package by name 클릭!

거기다 com.unity.nuget.newtonsoft-json 를 검색해주면 바로 임포트됩니다!

 

 

 

 

이제 진짜 준비는 끝!

 

코드는 아래의 블로그를 참고 하시면 될것 같습니다! (코드가 너무 잘짜여 있어서 제가 수정할 부분이 없네요..)

 

ChatGPT Unity에서 사용하기

최근 OpenAI 에서 ChatGPT를 드디어 테스트를 끝내고 상용화 하였다고 하여서 Unity로 사용할수 있게 하였다. https://github.com/mok-03/OpenAI_GPTchat-in-Unity GitHub - mok-03/OpenAI_GPTchat-in-Unity: Unity RestAPI GPT chat Unit

programing-note.tistory.com

 

 

중요한 부분만 보겠습니다!

 


[OAI_Chat.cs]  > 데이터 처리부

 

 

변수선언부를 보면 

//키값 받기
    public string OpenAI_Key = "key";
    private string UseKey = "";

    // 토큰수 제한두기
    public int max_tokens = 1000;
    public int ReqestKeyChangeMaxCount = 2;

    // 웹에서 끌어올 데이터 HttpClient  >> json형식으로 
    private static HttpClient client;

    //질문 텍스트 형 변환 출력
    public delegate void stringEvent(string _string);
    public stringEvent CompletedRepostEvent;

    // url만들기
    private int KeyChangeCount = 0;
    private const string ApiUrl = "https://api.openai.com/v1/chat/completions";
    private const string AuthorizationHeader = "Bearer";
    private const string UserAgentHeader = "User-Agent";

이런식으로 나누어져 있습니다. 

 

그리고 프로그램이 시작되면

CreateHttpClient()  >> 사용자 key값을 가지고 헤더 생성

InitReqestData()  >>  질문 초기화

 

위 두 함수를 생성해서 기본적인 틀을 만들어 줍니다. 

 

 

그리고 이값들의 신뢰성을 확인해 줍시다.

ClieantResponse() >> 클라이언트 키값 및 값 신뢰성 확인!

 

 

다음은 차례대로 질문과 답변을 데이터로 변형 하여 받아오고 출력하는 부분

ReqestStringData() >> 질문을 스트링 데이터로

AsyncReqesStringtData () >> 최종 답변데이터 생성

 

 

그리고 버튼을 통해 질문을 입력할 기능을 구현할 함수!

 


[OAI_ChatTester.cs] 

 

시작과 동시에 초기화를 해주고

this.gameObject.GetComponent<OAI_Chat>().CompletedRepostEvent = delegate (string _string) { postText = _string; };

 

 

 

Reqest() >> 버튼으로 동작할 이벤트!

 

Test()  >> 비 동기식 작업으로 AsyncReqesStringtData() 함수 실행

postText = (await this.gameObject.GetComponent<OAI_Chat>().AsyncReqesStringtData(ReqestText, _SendMessageDebugLog: true));

 

 


 

 

 

설명은 위 블로그에도 잘 되어있어 번갈아 보시면 이해가 빠르실것 같습니다!

전체코드도 위 블로그에 있습니다!

 

 

 

그대로 진행하면!

약간 문장이 길어지면 딜레이가 있긴 하네요 

딜레이 로딩도 필요하겠네요!

 

 

 

여기까지 끝!

 

다음은 이걸 음성으로 바꿔 출력해줄 TTS부분을 공부해 오겠습니다!

 

 

 

 

틀린점이 있다면 댓 달아주세요!

댓글