from google.colab import drive
drive.mount('/content/drive')
Novel Generation with LLM
- Langchain API를 이용해서 소설을 작성해볼 예정입니다.
- 직접 프롬프트를 제작하고, 이를 Langchain api에 입력해 소설을 출력해봅니다.
!pip install openai langchain
from typing import Dict, List
from langchain import LLMChain
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import ChatPromptTemplate
from pydantic import BaseModel
OpenAI API key
import getpass
import os
os.environ["OPENAI_API_KEY"] = getpass.getpass()
TMP_PATH = "/content/drive/MyDrive/dataset/Novel_generation/single_prompt/prompt_template.txt"
Langchain prompt
- Lang유저 입력을 이용해서 prompt를 전달해봅시다.hain prompt
class UserRequest(BaseModel):
genre: str
characters: List[Dict[str, str]]
idea: str
def read_prompt_template(file_path: str) -> str:
with open(file_path, "r") as f:
prompt_template = f.read()
return prompt_template
def generate_novel(req: UserRequest) -> Dict[str, str]:
writer_llm = ChatOpenAI(temperature=0.1, max_tokens=500, model="gpt-3.5-turbo")
writer_prompt_template = ChatPromptTemplate.from_template(
template=read_prompt_template(TMP_PATH)
)
writer_chain = LLMChain(
llm=writer_llm, prompt=writer_prompt_template, output_key="output"
)
result = writer_chain(req.dict())
return {"results": result["output"]}
Prompt 참고자료 작성
- txt 파일에 존재하는 템플릿 프롬프트를 동작시킬 프롬프트를 작성합니다.
- user_data에 의해 작성된 데이터는 이미 생성된 템플릿 프롬프트에 추가되어 처리됩니다.
user_data = {
"genre": "판타지",
"characters": [
{
"name": "김철수",
"role": "주인공"
},
{
"name": "이영희",
"role": "조연"
}
],
"idea": "날씨가 추워지고 있습니다."
}
request_instance = UserRequest(**user_data)
generate_novel(request_instance)