TIL 240222

hyeo71·2024년 2월 22일
0

2024 내배캠 AI 트랙

목록 보기
36/79

LangChain

AI에게 대답 예시 알려주기(template, messages)

template

from langchain.chat_models import ChatOpenAI
from langchain.prompts.few_shot import FewShotPromptTemplate
from langchain.callbacks import StreamingStdOutCallbackHandler
from langchain.prompts.prompt import PromptTemplate

chat = ChatOpenAI(
    temperature=0.1, 
    streaming=True, 
    callbacks=[StreamingStdOutCallbackHandler()],
)

examples = [
    {
        "question": "What do you know about France?",
        "answer": """
            Here is what I know:
            Capital: Paris
            Language: French
            Food: Wine and Cheese
            Currency: Euro
        """,
    },
    {
        "question": "What do you know about Italy?",
        "answer": """
            I know this:
            Capital: Rome
            Language: Italian
            Food: Pizza and Pasta
            Currency: Euro
        """,
    },
    {
        "question": "What do you know about Greece?",
        "answer": """
            I know this:
            Capital: Athens
            Language: Greek
            Food: Souvlaki and Feta Cheese
            Currency: Euro
        """,
    },
]

example_template = """
    Human : {question}
    AI:{answer}
"""
example_prompt = PromptTemplate.from_template(example_template)

prompt = FewShotPromptTemplate(
    example_prompt=example_prompt,
    examples=examples,
    suffix="Human: What do you know about {country}?",
    input_variables=["country"],
)

chain = prompt | chat

chain.invoke({"country": "Turkey"})

AI에게 examples의 question처럼 질문이 들어오면 answer처럼 대답을 하도록 하는 방법

messages

from langchain.prompts.few_shot import FewShotChatMessagePromptTemplate
from langchain.prompts import ChatPromptTemplate


example_prompt = ChatPromptTemplate.from_messages(
    [
        ("human", "What do you know about {country}?"),
        ("ai", "{answer}"),
    ]
)

example_prompt = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples,
)

final_prompt = ChatPromptTemplate.from_messages(
    [
        ("system", "You are a geography expert"),
        example_prompt,
        ("human", "What do you know about {country}?"),
    ]
)

chain = final_prompt | chat

chain.invoke({"country": "Germany"})

examples까지는 동일
import FewShotPromptTemplate, PromptTemplate를 변경
template에서는 suffix, input_variables를 사용하지만 messages에서는 prompt를 분리하고 system, ai, human 형식의 messages를 사용
결과는 둘 다 동일하게 위 사진처럼 출력


파이썬 개인 과제

1번) Up Down 게임 만들기

업다운 게임은 컴퓨터가 생각한 숫자를 맞추는 게임으로, 플레이어는 숫자를 입력하고 컴퓨터가 생각한 숫자와 비교하여 "업(Up)" 혹은 "다운(Down)" 힌트를 받아가며 숫자를 맞추는 게임입니다.

필수 기능

  • 컴퓨터는 1부터 100 사이의 랜덤한 숫자를 생성합니다.
  • 플레이어는 숫자를 입력하고, 입력한 숫자와 컴퓨터의 숫자를 비교하여 "업" 또는 "다운" 힌트를 제공합니다.
  • 플레이어가 컴퓨터의 숫자를 정확히 맞히면 시도한 횟수를 알려줍니다.
  • 플레이어가 숫자를 맞힐 때까지 위 과정을 반복합니다.

추가 기능

  • 플레이어가 입력한 숫자가 범위를 벗어날 경우, 적절한 안내 메시지를 출력하여 유효한 범위 내의 숫자를 입력하도록 유도하세요.
  • 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가하세요.
  • 게임이 종료될 때 플레이어의 최고 시도 횟수를 기록하고, 다음 게임에서 이를 표시하는 기능을 구현하세요.

이전 게임 최고 시도 횟수 가져오기

최고 기록을 저장하는 "record.txt"이 있다면 해당 값을 max_cnt에 저장, 없다면 0으로 저장
if cycle == 1: 게임의 시작 부분에서 한번만 출력하기 위해 사용

게임 재시작

게임을 재시작하면 해당 게임의 시도 횟수와 기존 최고 시도 횟수 중 큰 값을 저장
컴퓨터의 숫자, 시도 횟수, cycle을 초기값으로 저장


UpDown 게임 소스코드

0개의 댓글