ChatGPT AKKA 연계 활용편
ChatGPT OpenAPI 연동
다양한 프롬프트를 테스트해야하기때문에 ChatGPT(OpenAI) API를 이용하는 유닛테스트기를 먼저 생성
일반적인 응답속도가 30초 이상이여서 이대로는 서비스로 활용불가
프롬프트 유형화
- 유형별 인사이트를에 필요한 프롬프트 : 트렌드/제품품질/고객만족과 관련한 것들로 작성
프롬프트 데이터
프롬프트도 중요하지만, 프롬프트에 활용된 데이터에 따라 인사이트가 달라지며 시즌별로 최신을 반영해야합니다. 실시간일 필요는 없습니다.
어떠한 인사이트인경우 랭킹이 높은것보다 낮은것이 유용할수 있으며, 항상 1위를 차지하는 고정 단어일경우 제외 처리하는것이 유용할수도 있습니다.
가령 상담시스템에서 "상담" 이란 단어는 아무런 의미가 없을수 있습니다.
성능을 위한 인덱싱 전략
ChatGPT의 응답시간이 비교적 길기때문에~ API 이용중 GTP의 결과를 검색엔진화하고
사용자는 검색엔진을 통해 빠른 결과를 획득하는 하이브리드 전략입니다. 프롬프트가 어느정도 유형화가 되었을때 활용할수 있습니다.
물론 ChatGpt와 비슷한 수준에 자연어를 통한 사용자의도 파악하는 AI기술이 있다고 하면 더 높은 수준으로 검색 기술과 연동할수 있습니다.
고성능 블락킹없는 이벤트 적재는 다음 AKKAStream을 참고
- psmon/EventListenerAPI (github.com) - 닷넷버전
- java-labs/springweb/src/test/java/com/webnori/springweb/akka at master · psmon/java-labs (github.com) - 자바버전
CRUD 전략
- GPT의 분석을 실시간 제공이아닌~ 인덱스된 최근항목을 제공하고 요청이 있을시 GPT의 최신 정보가 추가되어 다음 요청시 준비된 데이터를 제공하는 전략
- 유용한 고정 프롬프트가 100개이내이고 최근 정보를 효율적으로 전달할때 활용가능 전략
- GPT의 응답값을 검색엔진에 업데이트~
적용
var elkCacheData = await _searchService.FindGptReultByFilter(gPTMetaData, 20); GPTResponse gPTResponse = new GPTResponse(); if (elkCacheData.Count > 0) { gPTResponse.FromGPTResutEntity(elkCacheData[0]); gPTResponse.isCache = true; GPTResultEntityCmd gPTResultEntityCmd = new GPTResultEntityCmd() { command = "save", prompt = promptBuild.ToString(), gPTMetaData = gPTMetaData }; _actorBridge.Tell(gPTResultEntityCmd); } else { gPTResponse = await _gPTEngine.GetChatCompletions(promptBuild.ToString(), gPTMetaData); gPTResponse.isCache = false; } return gPTResponse;
- GPT에 분석의뢰~
- 유사데이터가 최근에 있다고하면
- 유사데이터를 우선제공
- 액터를 사용하여~ 새로운 분석을 시도하고 결과를 저장 ( 다음에 이용됨 )
- 유사데이터가 없다고하면
- GPT에 의뢰하고 응답을 이용
- 모든 응답은 다음시도때 빠른 응답을 위해 분석결과를 신규로 저장
- CHATGPT를 활용하는 동일한 기능을 하는 유닛에 엘라스틱과 하이브리드로 적동하여 응답속도 1000ms 이하로 기능제공
- 응답시간이 긴경우 부분결과를 중간에 업데이트하는 Stream기능을 OpenAPI에서 지원합니다. - 사용성 추가 스트리밍 전략