요즘 핫한 생성형 AI 모델 중 하나인 Google Gemini를 직접 테스트해봤다. .
카카오톡 대화내역을 기반으로 챗봇을 만들 수 있을까? 하는 궁금증에서 시작되었다.
Windows 환경에서 LangChain과 Gemini를 연동하고,
FAISS 벡터 DB를 활용해 실제 대화 내용을 검색하고 응답하는 구조로 구현했다.
실행하면, 내가 직접 훈련시킨 챗봇과 자연스럽게 대화할 수 있다..
저는 언니와 나눈 카카오톡 대화 내용을 바탕으로 챗봇을 만들었고,
덕분에 엄마 생신에 관한 대화를 챗봇과 나눠봤는데 신기하고 재밌었다.
1. 카카오톡 대화방의 대화 내용 다운로드
먼저 카카오톡의 대화 내용 내보내기 기능을 통해 텍스트 파일로 대화 내용 전체를 받는다.
그러면 이메일에 zip 파일로 묶여서 파일이 온다.
알집을 풀면 txt파일이 나오는데, 대화 용량에 따라 파일이 여러개일 수도 있고, 파일이 1개일 수도 있다.
2. gemini api key 발급
아래 포스트를 참고하여 gemini api key 를 발급받는다.
[gemini] api key 발급
Gemini API 빠른 시작 | Google AI for Developers Gemini API 빠른 시작 | Google AI for Developers개발자를 위한 Gemini API 시작하기ai.google.dev https://aistudio.google.com/app/apikey?hl=ko 그러면 api key 를 발
ddoance.tistory.com
3. python 패키지 설치
Python 개발을 위한 기본 환경 설정은 완료되었다고 가정한다.
이제 챗봇 개발을 위해 아래 LangChain 관련 라이브러리들을 설치가 필요하다.
- langchain: LLM 워크플로우 전반을 연결해주는 핵심 프레임워크
- langchain-google-genai: Google Gemini API 연동 모듈
- langchain-huggingface: HuggingFace 기반 임베딩 사용
- langchain-community: FAISS 및 Chroma 등 커뮤니티 vectorstore를 포함
- faiss-cpu: 로컬에서 유사도 검색을 빠르게 처리하는 벡터 DB
👉 단, Mac 사용자라면 faiss-cpu 대신 chroma 사용이 더 안정적이다. - chromadb: Mac에서 추천하는 Chroma 벡터 스토어의 핵심 라이브러리
- sentence-transformers: 텍스트를 벡터로 바꿔주는 모델 (임베딩)
- transformers: HuggingFace 임베딩과 모델 호출용 핵심 패키지
- pandas: 대화 데이터를 정제하거나 엑셀로 저장할 때 사용
💻 Windows 환경 (FAISS 사용)
pip install langchain==0.3.23
pip install langchain-google-genai==2.1.2
pip install langchain-huggingface==0.1.2
pip install langchain-community==0.3.21
pip install faiss-cpu
pip install sentence-transformers==4.0.2
pip install transformers==4.51.0
pip install pandas==2.0.3
🍎 macOS 환경 (Chroma 사용)
pip install langchain==0.3.23
pip install langchain-google-genai==2.1.2
pip install langchain-huggingface==0.1.2
pip install langchain-community==0.3.21
pip install chromadb
pip install sentence-transformers==4.0.2
pip install transformers==4.51.0
pip install pandas==2.0.3
4. 실제 코드 구현
1️⃣ 텍스트 파일 로딩 및 정제
대화 텍스트 파일을 불러온 뒤, 날짜/시간/발신자/메시지를 정규표현식으로 파싱하여 정제한다.
with open('Talk_2025.4.3 21_01-4.txt', 'r', encoding='UTF8') as file:
texts = file.readlines()
chat_data = []
for line in texts:
match = re.match(r"(\d{4}\. \d{1,2}\. \d{1,2}\. [오전|오후]{2} \d{1,2}:\d{2}), (.+?) : (.+)", line.strip())
if match:
datetime_str, sender, message = match.groups()
dt = datetime.strptime(datetime_str.replace("오전", "AM").replace("오후", "PM"), "%Y. %m. %d. %p %I:%M")
chat_data.append({
"날짜": dt.strftime("%Y-%m-%d"),
"시간": dt.strftime("%H:%M"),
"발신자": sender.strip(),
"메시지": message.strip()
})
2️⃣ 벡터 데이터 정제 및 FAISS 저장
정제된 대화를 문장 단위로 벡터화해 저장한다.
(또는 이미 저장된 벡터를 로딩할 수 있다.)
chat_texts = [
f"{item['날짜']} {item['시간']} | {item['발신자']}: {item['메시지']}"
for item in chat_data
]
# 처음 저장할 때
# vectorstore = FAISS.from_texts(chat_texts, embedding=embeddings)
# vectorstore.save_local("faiss_store")
# 이미 저장된 벡터 불러올 때 (보안 옵션 허용)
vectorstore = FAISS.load_local("faiss_store", embeddings, allow_dangerous_deserialization=True)
3️⃣ 프롬프트 템플릿 정의
프롬프트는 실제 대화 내용을 모델에게 보여주기 위한 틀이다.
Gemini에게 "대화 상대방처럼 대답하라"고 명시한다.
이때, 나는 ~~ 야를 넣어서 누구와 대화하는지 명시해주는 게 좋다.
prompt = PromptTemplate(
input_variables=["context", "question"],
template="""
다음은 두 사람의 카카오톡 대화 일부야.
이 내용을 참고해서 대화 상대방처럼 자연스럽게 대답해줘.
<대화 내용>
{context}
Q: {question}
A:"""
)
4️⃣ 모델 연결 및 대화 실행
Gemini Pro API를 연결하고, LangChain의 LLMChain을 활용하여 실시간 질의응답을 처리한다.
이때 API key 는 2단계에서 발급받은 key 를 사용한다.
model = ChatGoogleGenerativeAI(
model="gemini-2.0-flash-001",
api_key="YOUR_API_KEY"
)
chain = LLMChain(llm=model, prompt=prompt)
while True:
user_input = input("🙋♂️ 질문: ")
if user_input.lower() in ["exit", "quit"]:
print("👋 챗봇을 종료합니다.")
break
docs = vectorstore.similarity_search(user_input, k=3)
context = "\n".join([doc.page_content for doc in docs])
response = chain.invoke({"context": context, "question": user_input})
print(f"🤖 대화 상대방: {response['text'].strip()}")
5. 전체 코드 (+) 실행 화면
# 모듈 임포트
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.prompts import PromptTemplate
from langchain_huggingface import HuggingFaceEmbeddings
from langchain.chains import LLMChain
from langchain_community.vectorstores import FAISS
import re
from datetime import datetime
import pandas as pd
# 1. 텍스트 파일 불러오기
with open('파일 경로', 'r', encoding='UTF8') as file:
texts = file.readlines()
# 2. 대화 정제
chat_data = []
for line in texts:
line = line.strip()
match = re.match(r"(\d{4}\. \d{1,2}\. \d{1,2}\. [오전|오후]{2} \d{1,2}:\d{2}), (.+?) : (.+)", line)
if match:
datetime_str, sender, message = match.groups()
try:
dt = datetime.strptime(datetime_str.replace("오전", "AM").replace("오후", "PM"), "%Y. %m. %d. %p %I:%M")
chat_data.append({
"날짜": dt.strftime("%Y-%m-%d"),
"시간": dt.strftime("%H:%M"),
"발신자": sender.strip(),
"메시지": message.strip()
})
except Exception as e:
print("⛔️ 날짜 변환 오류:", e)
# 3. 텍스트 정제
chat_texts = [
f"{item['날짜']} {item['시간']} | {item['발신자']}: {item['메시지']}"
for item in chat_data
]
# 4. 벡터스토어 불러오기 (또는 처음 실행 시 저장)
embeddings = HuggingFaceEmbeddings()
# vectorstore = FAISS.from_texts(chat_texts, embedding=embeddings)
# vectorstore.save_local("faiss_store")
vectorstore = FAISS.load_local("faiss_store", embeddings, allow_dangerous_deserialization=True)
# 5. 프롬프트 정의
prompt = PromptTemplate(
input_variables=["context", "question"],
template="""
다음은 두 사람의 카카오톡 대화 일부야.
이 내용을 참고해서 대화 상대방처럼 자연스럽게 대답해줘.
나는 ~~ 야.
<대화 내용>
{context}
Q: {question}
A:"""
)
# 6. Gemini 모델 연결
model = ChatGoogleGenerativeAI(
model="gemini-2.0-flash-001",
api_key="YOUR_API_KEY"
)
# 7. LLM 체인 생성
chain = LLMChain(llm=model, prompt=prompt)
# 8. 대화 루프
while True:
user_input = input("🙋♂️ 질문: ")
if user_input.lower() in ["exit", "quit"]:
print("👋 챗봇을 종료합니다.")
break
docs = vectorstore.similarity_search(user_input, k=3)
context = "\n".join([doc.page_content for doc in docs])
response = chain.invoke({"context": context, "question": user_input})
print(f"🤖 대화 상대방: {response['text'].strip()}")
6. 참고 블로그
Use Gemini AI API with EXCEL File (Gemini API에서 Excel파일을 읽어 대화하기)
Use Gemini AI API with EXCEL File (Gemini API에서 Excel파일을 읽어 대화하기)
Use Gemini AI API with PDF File * Use Gemini AI API with CSV File and Ask Questions like a Chatbot 유투브https://www.youtube.com/watch?v=aAwxa2tfvyg오늘은 파이썬에서 Gemini ai api를 이용하여 Gemini에게 csv 파일이나 PDF 파일을 읽
wono77.tistory.com
카카오톡 챗봇(메신저봇) + 구글 시트 + Gemini 로 자동 CS봇 만들기 테스트입니다. (2부)
카카오톡 챗봇(메신저봇) + 구글 시트 + Gemini 로 자동 CS봇 만들기 테스트입니다. (2부)
배경 및 목적 안녕하세요~ 전승현입니다 🤗 며칠 전에 카카오톡 챗봇(메신저봇)에 구글 시트를 연동해서 그룹채팅방, 오픈채팅방에 자동CS를 해주는 챗봇을 만드는 테스트 글을 작성했습니다. (
www.gpters.org
'side > ai' 카테고리의 다른 글
[gemini] api key 발급 (0) | 2025.03.28 |
---|---|
[chatgpt] chatgpt builder 로 '원영적 사고' 챗봇 만들기 (1) | 2025.03.17 |