언어모델 LLM/렝체인 Langchain

LangChain으로 만드는 AI 강아지 이름 생성기

General AI 2024. 7. 6. 23:16
728x90
반응형

LangChain으로 만드는 AI 강아지 이름 생성기

새로운 반려견을 맞이했는데 이름을 짓기 어려우신가요? 아니면 그냥 재미로 독특한 강아지 이름을 만들어보고 싶으신가요? 우리의 AI 강아지 이름 생성기가 도와드리겠습니다! 이 프로젝트는 사용자가 강아지의 특징을 입력하면, AI가 그에 맞는 귀엽고 독특한 이름을 제안해주는 방식으로 작동합니다. LangChain의 강력한 기능과 OpenAI의 언어 모델을 결합하여 만들어졌죠. LangChain과 OpenAI의 GPT 모델을 사용하여 재미있고 창의적인 프로젝트를 만들어보려고 합니다. 🐶

LangChain으로 만드는 AI 강아지 이름 생성기

 

전체코드

이 코드는 단순한 사용자 인터페이스를 제공하며, 사용자가 원하는 만큼 반복해서 강아지 이름을 생성할 수 있습니다. 또한 오류 처리를 통해 프로그램의 안정성을 높였습니다.

# 필요한 라이브러리 임포트
import os
from dotenv import load_dotenv
from langchain_openai import OpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import CommaSeparatedListOutputParser

# .env 파일에서 환경 변수 로드
load_dotenv()

# OpenAI API 키 가져오기
openai_api_key = os.getenv("OPENAI_API_KEY")
if not openai_api_key:
    raise ValueError("OPENAI_API_KEY가 .env 파일에 설정되지 않았습니다.")

# 언어 모델 초기화
# temperature를 0.8로 설정하여 더 창의적인 이름을 생성합니다.
llm = OpenAI(temperature=0.8)

# 출력 파서 정의
# 생성된 강아지 이름을 쉼표로 구분된 리스트로 파싱합니다.
output_parser = CommaSeparatedListOutputParser()

# 프롬프트 템플릿 정의
# {format_instructions}를 추가하여 출력 형식을 지정합니다.
prompt = PromptTemplate(
    input_variables=["characteristics", "num_names"],
    template="Create {num_names} cute and unique dog names for a dog with the following characteristics: {characteristics}. "
             "Names should be creative, memorable, and suitable for a dog. "
             "{format_instructions}",
    partial_variables={"format_instructions": output_parser.get_format_instructions()}
)

# 체인 생성
# 프롬프트, 언어 모델, 출력 파서를 연결합니다.
chain = prompt | llm | output_parser

# 메인 함수 정의
def main():
    print("강아지 이름 생성기에 오신 것을 환영합니다!")
    print("이 프로그램은 LangChain과 OpenAI를 사용하여 귀여운 강아지 이름을 생성합니다.")
    print("-----------------------------------------------------")

    while True:
        # 사용자 입력 받기
        characteristics = input("\n강아지의 특징을 설명해주세요 (예: 작고 활발한 흰색 푸들): ")
        num_names = int(input("몇 개의 이름을 제안받고 싶으신가요? "))

        # 체인 실행 및 결과 출력
        try:
            response = chain.invoke({"characteristics": characteristics, "num_names": num_names})

            print(f"\n'{characteristics}' 특징을 가진 강아지를 위한 {num_names}개의 이름 제안:")
            for i, name in enumerate(response, 1):
                print(f"{i}. {name.strip()}")
        except Exception as e:
            print(f"오류가 발생했습니다: {e}")

        # 계속할지 묻기
        continue_choice = input("\n다른 이름을 생성하시겠습니까? (y/n): ")
        if continue_choice.lower() != 'y':
            print("강아지 이름 생성기를 이용해 주셔서 감사합니다.")
            break

# 스크립트가 직접 실행될 때만 main 함수 호출
if __name__ == "__main__":
    main()

코드 살펴보기

먼저, 필요한 라이브러리를 임포트하고 OpenAI API 키를 설정합니다.

import os
from dotenv import load_dotenv
from langchain_openai import OpenAI
from langchain_core.prompts import PromptTemplate
from langchain_core.output_parsers import CommaSeparatedListOutputParser

load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")

그 다음, OpenAI 모델을 초기화하고 출력 파서를 설정합니다.

llm = OpenAI(temperature=0.8)
output_parser = CommaSeparatedListOutputParser()

여기서 temperature를 0.8로 설정한 이유는 더 창의적인 이름을 생성하기 위해서입니다. 이제 프롬프트 템플릿을 정의합니다.

prompt = PromptTemplate(
    input_variables=["characteristics", "num_names"],
    template="Create {num_names} cute and unique dog names for a dog with the following characteristics: {characteristics}. "
             "Names should be creative, memorable, and suitable for a dog. "
             "{format_instructions}",
    partial_variables={"format_instructions": output_parser.get_format_instructions()}
)

이 템플릿은 강아지의 특징과 원하는 이름의 개수를 입력받아 AI에게 적절한 지시를 내립니다. 마지막으로, 체인을 생성하고 실행합니다.

chain = prompt | llm | output_parser

characteristics = input("강아지의 특징을 설명해주세요: ")
num_names = int(input("몇 개의 이름을 제안받고 싶으신가요? "))

response = chain.invoke({"characteristics": characteristics, "num_names": num_names})

print(f"\n'{characteristics}' 특징을 가진 강아지를 위한 {num_names}개의 이름 제안:")
for i, name in enumerate(response, 1):
    print(f"{i}. {name.strip()}")

사용 예시

이 프로그램을 실행하면 다음과 같은 결과를 얻을 수 있습니다:

강아지의 특징을 설명해주세요: 작고 활발한 흰색 푸들
몇 개의 이름을 제안받고 싶으신가요? 5

'작고 활발한 흰색 푸들' 특징을 가진 강아지를 위한 5개의 이름 제안:
1. 스니커스 (Snickers)
2. 코튼볼 (Cotton Ball)
3. 지지 (Ziggy)
4. 폼폼 (Pom Pom)
5. 프로스티 (Frosty)

LangChain으로 만드는 AI 강아지 이름 생성기

마치며

이렇게 LangChain과 OpenAI를 활용하여 간단하면서도 재미있는 강아지 이름 생성기를 만들어보았습니다. 이 프로젝트를 통해 AI 언어 모델의 창의성과 LangChain의 유연성을 경험해보셨길 바랍니다.우리는 이 코드를 기반으로 다양한 변형을 만들어볼 수 있을 것입니다. 예를 들어, 고양이 이름 생성기나 회사 이름 생성기 등으로 확장해볼 수 있겠죠. 🚀🐾

728x90
반응형