pip install langchain
export OPENAI_API_KEY="..."
from langchain.llms import OpenAI
llm = OpenAI(openai_api_key="...")
from langchain.llms import OpenAI
llm = OpenAI(openai_api_key=api_key)
llm.predict("안녕하세요?")
ChatMessage
객체)의 리스트를 인풋으로 받아 메시지를 리턴하는 언어모델입니다. ChatGPT 등이 여기에 해당합니다.from langchain.chat_models import ChatOpenAI
from langchain.schema import HumanMessage
chat_model = ChatOpenAI(openai_api_key=api_key)
messages = [HumanMessage(content="안녕하세요?")]
chat_model.predict_messages(messages)
ChatMessage
는 두 개의 컴포넌트로 이루어져 있습니다:HumanMessage
: 사람 혹은 사용자의 메시지AIMessage
: AI 혹은 assistant의 메시지SystemMessage
: 시스템의 메시지FunctionMessage
: 함수 호출에 따른 메시지from langchain.chat_models import ChatOpenAI
api_key = "your-api-key"
chat_model = ChatOpenAI(openai_api_key=api_key)
chat_model.predict("잠이 안 올 때는 어떻게 하면 좋을지 대답해줘")
HumanMessage
)로 처리해서 추론을 할 수 있으며, temperature 등 언어모델 사용에 필요한 인자들을 함께 파라미터로 넘길 수도 있습니다.from langchain.schema import HumanMessage
text = "잠이 안 올 때는 어떻게 하면 좋을지 대답해줘"
messages = [HumanMessage(content=text)]
chat_model.predict_messages(messages, temperature = 0.1)
from langchain.prompts import PromptTemplate
my_template = """아래의 질문에 대해 한 줄로 간결하고 친절하게 답변하세요.
질문: {question}"""
prompt = PromptTemplate.from_template(my_template)
prompt.format(question="잠이 안 올 때는 어떻게 하면 좋을지 대답해줘")
chat_model.predict(prompt.format(question="잠이 안 올 때는 어떻게 하면 좋을지 대답해줘"))
ChatMessage
를 다루는 데에도 템플릿이 유용한데, 이 경우 내용뿐만 아니라 각 메시지의 역할이나 리스트에서의 위치와 같은 정보들을 활용할 수가 있습니다. ChatMessageTemplate
는 ChatMessage
를 어떻게 템플릿화할지, 즉 그 역할과 내용을 어떻게 다룰지 가이드합니다.from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
#시스템 역할 지정하기
template = """
You are a helpful assistant to help teenagers learn {output_language}.
Answer the question in <{output_language}> within 1~2 sentences.
YOU MUST USE <{output_language}> TO ANSWER THE QUESTION.
Question:"""
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chat_prompt.format_messages(output_language="English",
text="잠이 안 올 때는 어떻게 하면 좋을지 대답해줘")
from langchain.schema import BaseOutputParser
class CommaSeparatedListOutputParser(BaseOutputParser):
"""LLM 아웃풋에 있는 ','를 분리해서 리턴하는 파서."""
def parse(self, text: str):
return text.strip().split(", ")
CommaSeparatedListOutputParser().parse("아기, 여우")
LLMChain
을 사용하여 위의 세 가지 조합을 모두 조합해 보겠습니다!from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (
ChatPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate,
)
from langchain.chains import LLMChain
from langchain.schema import BaseOutputParser
class CommaSeparatedListOutputParser(BaseOutputParser):
"""LLM 아웃풋에 있는 ','를 분리해서 리턴하는 파서."""
def parse(self, text: str):
return text.strip().split(", ")
template = """
너는 5세 아이의 낱말놀이를 도와주는 AI야.
아이가 어떤 카테고리에 해당하는 개체들을 말해달라고 <질문>을 하면
해당 카테고리에 해당하는 단어들을 5개 나열해야 해.
이때 각 단어는 반드시 comma(,)로 분리해서 대답해주고, 이외의 말은 하지 마.
질문:"""
system_message_prompt = SystemMessagePromptTemplate.from_template(template)
human_template = "{text}"
human_message_prompt = HumanMessagePromptTemplate.from_template(human_template)
chat_prompt = ChatPromptTemplate.from_messages([system_message_prompt, human_message_prompt])
chain = LLMChain(
llm=ChatOpenAI(openai_api_key = api_key),
prompt=chat_prompt,
output_parser=CommaSeparatedListOutputParser()
)
chain.run("동물에 대해 공부하고 싶어")