콘텐츠로 이동

RAG 라마인덱스 한글 소설

한글 소설 생성을 위한 ChatGPT 프롬프트

마법 판타지 소설에서 주인공이 성장해 가는 이야기를 작성해줘. 스승이 있는 경우, 스승의 이름을 지정해줘.
마법학교에 입학하는 경우, 지리적 위치와 이름을 지정해줘.
짧은 애피소드 단위로 단원을 분리해줘.
단원은 1, 2 등으로 구분해줘.

파일 분리 및 업로드

파일을 장별로 분리하여 생성한 , data 폴더에 업로드

실행 준비

!pip install llama-index
!pip install llama-index-core
!pip install llama-index-llms-openai
!pip install llama-index-llms-replicate
!pip install llama-index-embeddings-huggingface

문서 및 인덱스 생성

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("data").load_data()

# 인덱스 생성 (기본으로 gpt-turbo-3.5 사용)
#index = VectorStoreIndex.from_documents(documents)

# 인덱스 생성시 다른 모델을 사용하도록 지정
#llm = OpenAI(model="gpt-4o-mini")  # 또는 "gpt-4o", "gpt-3.5-turbo-16k" 등
client = OpenAI()
index = VectorStoreIndex.from_documents(documents, llm=client)

오류 해결한 수정된 방식

import os
os.environ["OPENAI_API_KEY"] = "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"
os.environ["OPENAI_PROJECT"] = "proj_gXjHWOE9nRRP6zbyHJ0NfdTj"  # 모델 권한을 켜 둔 그 프로젝트 ID


from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from llama_index.embeddings.openai import OpenAIEmbedding

# 최신 OpenAI 임베딩 모델 지정
embed_model = OpenAIEmbedding(model="text-embedding-3-small")

# 문서 생성
documents = SimpleDirectoryReader("data").load_data()

# 인덱스 생성 (임베딩 모델 주입)
index = VectorStoreIndex.from_documents(documents, embed_model=embed_model)

쿼리 실행

query_engine = index.as_query_engine()
response = query_engine.query("주인공의 이름은 무엇인가요?")

# 결과 출력
print("질의 결과:", response)

쿼리 실행

response = query_engine.query("주인공의 스승의 누구인가요?")

# 결과 출력
print("질의 결과:", response)

인덱스 저장

index.storage_context.persist()

저장된 인덱스 불러오기

from llama_index.core import StorageContext, load_index_from_storage

# rebuild storage context
storage_context = StorageContext.from_defaults(persist_dir="./storage")

# load index (gpt-turbo-3.5 기본 사용)
index = load_index_from_storage(storage_context)

# 변경된 방식. llm 모델은 인덱스와는 관련이 없고 이후 query엔진에 영향을 줌.
client = OpenAI()
index = load_index_from_storage(storage_context, llm=client)

로드된 인덱스 테스트

query_engine = index.as_query_engine()
response = query_engine.query("주인공이 부여받은 마법은 무엇인지? 한글로 답변해줘")

# 결과 출력
print("질의 결과:", response)