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처럼 대답을 하도록 하는 방법
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를 사용
결과는 둘 다 동일하게 위 사진처럼 출력
업다운 게임은 컴퓨터가 생각한 숫자를 맞추는 게임으로, 플레이어는 숫자를 입력하고 컴퓨터가 생각한 숫자와 비교하여 "업(Up)" 혹은 "다운(Down)" 힌트를 받아가며 숫자를 맞추는 게임입니다.
최고 기록을 저장하는 "record.txt"이 있다면 해당 값을 max_cnt에 저장, 없다면 0으로 저장
if cycle == 1
: 게임의 시작 부분에서 한번만 출력하기 위해 사용
게임을 재시작하면 해당 게임의 시도 횟수와 기존 최고 시도 횟수 중 큰 값을 저장
컴퓨터의 숫자, 시도 횟수, cycle을 초기값으로 저장