[AI] 5월 13일자 100분 토론 분석기 만들어보자.

늘 공부하는 괴짜·2025년 5월 19일
0

AI : Langchain (RAG)

목록 보기
22/38

이 포스팅은 정치글이 아님을 알립니다!!!!!

1. 참고 스크립트는 여기에...

내가 막 만든거 아님... 이거 그대로 복사해서 넣었음.

2025.05.13 [1100회] 21대 대선 D-21..표심 흔들 변수는?

https://program.imbc.com/BBS/toron?list_id=5464660&list_use=1&page=1&bbs_id=toron_content

2. text 처리 모듈

Langchain의 TextLoader 와 RecursiveCharacterTextSplitter 를 사용했다.
청크는 200byte, overlap은 50byte 설정

3. 임베딩 모델

허깅페이스의 sentence-transformers/paraphrase-xlm-r-multilingual-v1 을 사용했다. Vector dimension 은 768임.

4. 언어모델

Ollama 로 미리 받아놓은 exaone3.5:7.8b 을 사용했다. 일단 한국어를 잘하니까...

5. Vector

Faiss 를 사용했다. 허깅페이스 embedding 설정.

6. 데이터 넣기.

from langchain_text_splitters import RecursiveCharacterTextSplitter
from modules.llm.embedding_huggingface import getEmbeddingHuggingface  
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores.faiss import FAISS
import os

# TXT 파일 로드
loader = TextLoader("./100min.txt", encoding="utf-8")
documents = loader.load()

# 문서 분할
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=200,
    chunk_overlap=50,
    length_function=len
)
split_docs = text_splitter.split_documents(documents)

# 임베딩 모델 불러오기
embedding_model = getEmbeddingHuggingface()

# FAISS 벡터 저장소에 문서 저장
try:
    vectorstore = FAISS.from_documents(
        documents=split_docs,
        embedding=embedding_model
    )

    # 인덱스를 로컬에 저장 (예: ./faiss_index)
    vectorstore.save_local("faiss_index_100_min")

    print("Documents processed and FAISS index saved successfully")
except Exception as e:
    print(f"Error processing documents: {e}")

7. 모델에게 질문

import os
from langchain.chains import RetrievalQA
from langchain_community.vectorstores.faiss import FAISS
from langchain_community.llms import Ollama
from langchain.prompts import PromptTemplate
from langchain_huggingface import HuggingFaceEmbeddings


# 1. 허깅페이스 임베딩 로드
embedding_model_name = "sentence-transformers/paraphrase-xlm-r-multilingual-v1"

# 허깅페이스 토큰 설정
huggingface_token = os.getenv("HUGGINGFACE_API_KEY")

# 2. 허깅페이스 임베딩 모델 초기화
embeddings = HuggingFaceEmbeddings(
    model_name=embedding_model_name,
    model_kwargs={"device": "cpu"},
    encode_kwargs={"normalize_embeddings": True}
)

# 3. FAISS 인덱스를 저장한 경로
faiss_index_path = "faiss_index_100_min"

vectorstore = FAISS.load_local(
    folder_path=faiss_index_path,
    embeddings=embeddings,
    allow_dangerous_deserialization=True
)

# 4. Retriever 설정
retriever = vectorstore.as_retriever()

# 5. LLM 설정
llm = Ollama(model="exaone3.5:7.8b")

# 6. 커스텀 프롬프트 정의
custom_prompt = PromptTemplate(
    input_variables=["context", "question"],
    template="""
        당신은 정치 및 경제 전문가입니다. 다음의 토론을 참고하여 질문 내용에 대한 답변을 작성하세요. 
        ** 매우 중요: 제공되는 토론 내용 외의 내용은 절대 작성하지 마세요.**
        ** 매우 중요: 제공되는 토론 외의 판단은 하지 마세요.**

        *한국어* 로 답변하세요.
        
        토론 내용:
        {context}

        질문:
        {question}

        각 토론자들의 토론 요약:
    """.strip()
    )


# 7. 체인 구성
chain = RetrievalQA.from_chain_type(
    llm=llm,
    retriever=retriever,
    chain_type_kwargs={"prompt": custom_prompt}
)
# 8. 체인 실행
result = chain({"query": "오늘 토론 내용을 요약해줘"})
print(result["result"])

8. 결과

profile
인공지능이라는 옷을 입었습니다. 뭔가 멋지면서도 잘 맞습니다.

0개의 댓글