[MODEL I/O - Langauge Models] Chat Models Base
- 출처 : https://python.langchain.com/docs/modules/model_io/
- 이 블로그 글은 LangChain API document의 글을 기반으로 번역되었으며 이 과정에서 약간의 내용이 추가되었습니다.
- MODEL I/O는 Prompts, Language Model, Output Parser로 이루어져 있습니다.
- Chat Models Base에서는 Langchain에서 Chat model을 다루는 여러 가지 방법에 대해 설명합니다.
- 본 글에서는 Chat Model의 기초에 대해 다룹니다.
1. Chat Models
Chat model은 Language model의 변형이라고 이해하면 쉽게 이해할 수 있을 것입니다. Chat model은 Language model을 사용하지만, 인터페이스가 사뭇 다릅니다. 이전에 살펴본 LLM은 "Text In, Text Out"의 인터페이스를 가졌다면, Chat model은 "Chat Messages In, Chat Messages Out"의 인터페이스를 갖습니다.
LLM과 마찬가지로, OpenAI의 API를 사용하기 위해서는 OpenAI Python package를 설치하고, API 키를 입력해야 합니다.
os.environ["OPENAI_API_KEY"] = "PERSONAL_OPENAI_API_KEY"
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI()
Chat model의 인터페이스는 위에서 설명했듯, 문자열이 아닌 메시지에 기반을 두고 있습니다. LangChain이 지원하는 message의 종류는 AIMessage, HumanMessage, SystemMessage 그리고 ChatMessage가 있습니다. 대부분 ChatMessage를 제외한 3개의 메시지를 다룹니다.
- call : Message In -> Message Out
Chat model에 1개 이상의 메시지를 통과시켜 응답을 얻을 수 있습니다.
from langchain.schema import AIMessage, HumanMessage, SystemMessage
chat([HumanMessage(content="Translate this sentence from English to French: I love programming.")])
AIMessage(content="J'adore la programmation.", additional_kwargs={}, example=False)
messages = [
SystemMessage(content="You are a helpful assistant that translates English to French."),
HumanMessage(content="I love programming.")
]
chat(messages)
AIMessage(content="J'adore la programmation.", additional_kwargs={}, example=False)
- generate : Batch call -> Richer outputs
generate를 사용하면 다수의 메시지에 대한 응답을 생성할 수 있습니다. 이것은 추가적인 메시지 파라미터와 함께 LLMResult를 반환합니다.
batch_messages = [
[
SystemMessage(content="You are a helpful assistant that translates English to French."),
HumanMessage(content="I love programming.")
],
[
SystemMessage(content="You are a helpful assistant that translates English to French."),
HumanMessage(content="I love artificial intelligence.")
],
]
result = chat.generate(batch_messages)
result
LLMResult(generations=[[ChatGeneration(text="J'adore la programmation.", generation_info=None, message=AIMessage(content="J'adore la programmation.", additional_kwargs={}, example=False))], [ChatGeneration(text="J'adore l'intelligence artificielle.", generation_info=None, message=AIMessage(content="J'adore l'intelligence artificielle.", additional_kwargs={}, example=False))]], llm_output={'token_usage': {'prompt_tokens': 57, 'completion_tokens': 20, 'total_tokens': 77}, 'model_name': 'gpt-3.5-turbo'}, run=RunInfo(run_id=UUID('7afca9eb-4c6b-4253-a2b3-70e5d868499b')))