이전에 google의 gemini model을 활용해 Rag를 구현한 코드가 있는데, 오랜만에 실행시켜보니 에러가 발생해서 원인과 해결과정을 정리해 보았습니다.
오류가 작성한 코드는 아래와 같았습니다.
from langchain.chains.query_constructor.base import (
StructuredQueryOutputParser,
get_query_constructor_prompt,
)
from langchain_openai import ChatOpenAI
from langchain_google_genai import ChatGoogleGenerativeAI
llm = ChatGoogleGenerativeAI(temperature=0, model="gemini-1.5-flash")
크게 어려운 내용은 없고, model을 지정하는 코드였습니다. 그런데 아래 에러가 발생했습니다.
GPT에게 물어보니, 이 에러는 Google Cloud Application Default Credentials (ADC)와 관련된 문제였습니다. 간단히 말해, Google Cloud API를 사용하려면 애플리케이션이 인증을 통해 권한을 가져야 하는데, 이를 위한 기본 인증 자격 증명(Default Credentials)이 설정되지 않았기 때문에 발생한 것입니다. ADC는 일반적으로 Google Cloud SDK를 통해 설정된 기본 자격 증명을 사용하는데 "gcloud auth application-default login" 명령어를 실행하지 않았거나, gcloud CLI가 제대로 설치되지 않은 경우 에러가 발생할 수 있다고해서 다 설치를 해주도록 하였습니다.
1. brew install --cask google-cloud-sdk
2. gcloud init
3. gcloud auth application-default login
위 명령을 순차적으로 실행해주니 ADC 관련 오류가 해결되고 코드가 정상적으로 실행되었습니다. 그런데 다른 코드에서 또 에러가 발생하였습니다.
이 에러는 Google Generative AI API에 요청을 보낼 때 인증 토큰의 인증 스코프(authentication scope)가 불충분하기 때문에 발생한 것이었습니다. 찾아보니 Google Cloud는 프로젝트 단위로 리소스와 API 사용을 관리하기 때문에, Google Gemini API를 사용하려면 Google Cloud 프로젝트를 반드시 생성하고 지정해줘야했습니다. 현재 제가 지정한 프로젝트가 있는지 "gcloud config list"로 확인해보았고 지정된 프로젝트가 없는걸 확인할 수 있었습니다.
따라서 우선 프로젝트를 지정해주었습니다.
gcloud config set project [PROJECT_ID]
그리고 다시 확인해보았습니다.
프로젝트가 잘 지정된 모습을 볼 수 있었습니다. 하지만 이후에도 같은 에러가 발생했고 몇가지 추가 작업을 거쳐야했습니다.
1. Google Cloud Consol 접속 및 로그인
2. 지정한 프로젝트에 접근하여 API 및 서비스 -> 라이브러리 -> Generative Language API 활성화
3. 사용자 인증 정보에서 제한사항 목록에 "Generative Language API"를 포함
4. 서비스 계정 생성 및 json 키 발급
5. json key 저장 및 환경 변수 설정
export GOOGLE_APPLICATION_CREDENTIALS="{경로}"
혹시 몰라 .env 파일에도 위의 경로르 지정해줍니다. 그 후, "echo $GOOGLE_APPLICATION_CREDENTIALS" 명령어로 json key 파일 경로가 정상 출력되는걸 확인하고 코드를 재실행해주면, 정상적으로 gemini api 가 호출 되는걸 볼 수 있습니다.
'RAG' 카테고리의 다른 글
[RAG] RAG (Retrieval-Augmented Generation) (0) | 2024.03.25 |
---|