
오늘은 파이썬에서 Gemini ai api를 이용하여 Gemini에게 csv 파일이나 PDF 파일을 읽어서 그 내용을 바탕으로 답할 수 있게 하는 방법을 알아보고자 한다
작업 환경은 구글 Colab에서 진행하였다
pip install -U langchain-google-genai langchain-community langchain-huggingface sentence-transformers chromadb pypdf2

langchain-google-genai : LangChain을 사용하여 Google의 Generative AI 모델을 활용하는 패키지.
langchain-community : LangChain 커뮤니티에서 개발된 추가적인 유틸리티 패키지들.
langchain-huggingface : Hugging Face의 모델을 LangChain에서 사용할 수 있도록 해주는 패키지.
sentence-transformers : 문장을 벡터로 변환하는 데 사용되는 변환기 모델을 제공하는 패키지.
chromadb : 빠르고 유연한 검색과 필터링을 위한 인덱싱 및 데이터베이스 관리 시스템.
pypdf2 : PDF 파일을 처리하고 분석하는 Python 라이브러리.
Google AI Studio로 가서 프로젝트를 생성한 후, API 키를 생성한다

# 모듈 임포트
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain import PromptTemplate, LLMChain
from langchain_community.vectorstores import Chroma
from langchain_huggingface import HuggingFaceEmbeddings
from PyPDF2 import PdfReader
# Google Generative AI API 키 설정
model = ChatGoogleGenerativeAI(model="gemini-pro",
api_key="Google AI Studio에서 생성한 API 키")
# 프롬프트 템플릿 정의
prompt = PromptTemplate(input_variables=["question"], template="Q: {question}\nA: (응답은 최대 3줄로 제한해 주세요)")
# LLM 체인 생성
chain = LLMChain(llm=model, prompt=prompt)
# PDF 파일 로드 및 텍스트 추출
reader = PdfReader('세이노의 가르침.pdf')
text = "".join(page.extract_text() for page in reader.pages)
# 벡터 데이터베이스 설정
embeddings = HuggingFaceEmbeddings()
vectorstore = Chroma.from_texts([text], embedding=embeddings)
위의 코드는 Google Generative AI 모델과 LangChain을 사용하여 PDF 문서의 내용을 처리하고, 그 내용을 기반으로 질문에 답변하는 시스템을 구축한 코드이다
실험을 위해서 무료로 제공되는 PDF 책인 "세이노의 가르침" 책을 가져왔다
그래서 해당 파일을 PDF 파일을 로드하고 텍스트로 추출했다
# 질의응답 예제
query = "세이노의 가르침은 뭐야?"
answer = chain.run(question=query, docs=docs)
limited_answer = '\n'.join(answer.split('\n')[:3]) # 최대 3줄로 제한
# 결과 출력
print(f"Question: {query}")
print(f"Answer: {answer}")

잘 나오는 것을 확인할 수 있다 :)
CSV 파일 역시 환경은 코랩에 진행하였다
!pip uninstall -y pandas
!pip install pandas==2.1.4
!pip install -U langchain-google-genai langchain-community langchain-huggingface sentence-transformers chromadb pypdf2
먼저 필요한 라이브러리들을 설치해준다
# 모듈 임포트
import pandas as pd
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain import PromptTemplate, LLMChain
from langchain_community.vectorstores import Chroma
from langchain_huggingface import HuggingFaceEmbeddings
# Google Generative AI API 키 설정
model = ChatGoogleGenerativeAI(model="gemini-pro",
api_key="Google AI Studio에서 생성한 API 키")
# CSV 파일 로드
df = pd.read_csv('dog_analysis_normalized.csv')
# 데이터프레임을 텍스트로 변환
texts = df.apply(lambda row: ' '.join(row.values.astype(str)), axis=1).tolist()
# 벡터 데이터베이스 설정
embeddings = HuggingFaceEmbeddings()
vectorstore = Chroma.from_texts(texts, embedding=embeddings)
# 프롬프트 템플릿 정의
prompt = PromptTemplate(
input_variables=["question"],
template="Q: {question}\nA: (응답은 CSV 데이터를 기반으로 작성하세요)"
)
# LLM 체인 생성
chain = LLMChain(llm=model, prompt=prompt)
CSV 파일에서 데이터를 추출하고, 이를 벡터화한 후, 질문에 대한 답변을 생성하도록 하였다 이렇게 하면 Google Generative AI와의 통합을 통해 CSV 데이터에 기반한 응답을 할 수 있다
# 질의응답 예제
query = "강아지가 화나있고, 뛰고 있어 어떻게 해야해?"
docs = vectorstore.similarity_search(query)
answer = chain.run(question=query, docs=docs)
# 결과 출력
print(f"Question: {query}")
print(f"Answer: {answer}")
