이 프로젝트는 Pokémon Go UX를 향상시키기 위해 설계된 엔드투엔드 아키텍처입니다. 여기에서는 RAG(Retrieval-Augmented Generation) 시스템을 활용하여 개인화된 응답을 제공하는 여러 LLM(Large Language Model) gpt-4
에이전트와 관련된 순차적 프로세스를 보여줍니다.
아키텍처에 대한 심층적인 이해와 전체 기사에 액세스하려면 내 웹사이트를 방문하세요.
아키텍처를 자세히 살펴보고 애플리케이션을 탐색하려면 Langchain 라이브러리 및 Faiss by Meta와 함께 Python 3.10
설치되어 있는지 확인하십시오.
중요 사항:
시스템 - 전체 설정 프로세스는 Unix 기반 시스템용으로 설계되었으므로 다음 Makefile 명령을 사용하여 시스템에서 로컬로 실행할 수 있습니다. 그렇지 않으면 터미널에서 Makefile 명령을 복제할 수 있습니다.
환경 변수 - 다음 명령 각각은 .env
파일에 정의된 변수를 source
사용하므로 OpenAI API 키가 제자리에 있는지 다시 확인하세요. 영구적으로 변경하려면 이러한 변수를 셸 초기화 스크립트(예: Unix/Linux/MacOS의 경우 .bashrc
, .bash_profile
, .zshrc
또는 Windows의 환경 변수)에 추가해야 합니다.
다음 명령을 사용하여 가상 환경을 만듭니다.
make create_venv
다음 명령을 사용하여 가상 환경을 활성화합니다.
source .venv/bin/activate
다음 명령을 사용하여 종속성을 설치합니다.
make install_dev
다음 명령을 사용하여 테스트 종속성을 설치합니다.
make install_test
다음 명령을 사용하여 API 서버를 실행합니다.
make api_server
Swagger UI 문서를 표시하여 사용 가능한 엔드포인트를 확인하십시오: http://localhost:8000/docs
다음 명령을 사용하여 Streamlit 앱을 실행합니다.
make display_ui
다음은 시스템이 처리할 수 있는 다양한 상호 작용 유형의 예이며, 의도 유형과 구조 유형으로 분류됩니다.
defense_suggestion
: 알 수 없는 포켓몬이 나타났고 이에 맞서 포켓몬을 사용하려면 사용자에게 제안이 필요합니다. 사용자는 입력의 일부로 포켓몬의 이름을 제공해야 합니다.
information_request
: 사용자는 포켓몬에 대해 더 알고 싶어합니다. 입력에서 사용자는 다음 입력 텍스트 구조 중 하나를 제공해야 합니다. (1) 정보 요청이 있는 포켓몬의 이름, (2) 정보 요청이 있는 포켓몬의 이름을 명시적으로 언급하지 않고 자연어로 포켓몬에 대한 설명 포켓몬이 무엇인지 추측하려는 의도, 또는 (3) 진화, 다이어트, 서식지, 기본 통계 등과 같은 특정 속성을 묻는 포켓몬 이름이 명시적으로 언급된 포켓몬에 대한 질문입니다.
squad_build
: 사용자는 상대 포켓몬 유형을 기반으로 포켓몬 팀을 구성하려고 합니다. 사용자는 입력의 일부로 포켓몬 이름 목록을 제공해야 합니다.
None
: GPT-4 자체 응답을 반환합니다. 사용자 요청은 위 카테고리에 속하지 않습니다.
프롬프트 예 :
의도 유형 | 구조 유형 | 예 |
---|---|---|
방어_제안 | any | 공원에서 한가로이 쉬고 있는 야생 그로빌을 우연히 발견했습니다! 포켓몬을 물리치려면 어떤 포켓몬을 선택해야 할까요? |
정보_요청 | pokemon_names | 알았어, 포켓몬스터! Snorlax와 Pikachu에 대한 모든 것을 알아볼 시간입니다! |
정보_요청 | natural_language_question | 어떤 종류의 서식지에서 사이덕을 찾을 수 있는지 아시나요? |
정보_요청 | natural_language_description | 어떤 포켓몬이 등에 있는 식물 구근으로 알려진 풀/독 듀얼 타입 포켓몬인지 짐작할 수 있나요? 진화하면서 큰 식물로 자라납니다. |
분대_빌드 | any | 소방 체육관 관장에 도전할 시간입니다! 그는 Ninetales와 Combusken으로 구성된 강력한 팀을 갖고 있지만 스쿼드를 구성하려면 당신의 도움이 필요합니다 |
없음 | any | 나는 프레즐을 좋아한다 |
응답 예 :
프롬프트: 어떤 종류의 서식지에서 루카리오를 찾을 수 있는지 아시나요?
JSON mode
활성화하여 응답합니다.
{
"header" : " Lucario can be found in Cave, Forest, and Mountain habitats. n " ,
"body" : [
" ### Lucario nn **ID**: 448 nn **Stats**: - HP: 70 n - Speed: 90 n - Attack: 110 n - Special-Attack: 115 n - Defense: 70 n - Special-Defense: 70 nn **Height**: 1.2m **Weight**: 54.0kg nn **Types**: fighting, steel nn **Abilities**: steadfast, inner-focus, justified nn **Damage Relations**: n - no damage to: ghost n - half damage to: flying n - double damage to: normal n - half damage from: rock n - double damage from: flying n "
],
"sprites" : {
"Lucario" : [
" https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/448.png " ,
" https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/back/shiny/448.png " ,
" https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/448.png " ,
" https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/shiny/448.png "
]
},
"intent_type" : " information_request " ,
"intent_structure" : " natural_language_question "
}