[번역] LangChain.js: Conceptual Guide: Messages



LangChain.js 의 주요 구성요소 및 개념(concept)들이 LangChain.js conceptual guide 페이지에 나열되어 있습니다. 이 포스트는 LangChain.js 의 concept 중 하나를 번역했습니다.



메시지 (Messages)


개요

메시지는 채팅 모델에서 통신의 기본 단위입니다. 채팅 모델의 입력과 출력, 대화와 관련된 추가 컨텍스트 또는 메타데이터를 표현하는 데 사용됩니다.

각 메시지는 역할(예: “user”, “assistant”), 내용(예: 텍스트, 다중 모드 데이터), 그리고 채팅 모델 제공업체에 따라 달라질 수 있는 추가 메타데이터를 포함합니다.

LangChain은 모든 채팅 모델에서 통일된 메시지 형식을 제공하여 사용자가 각 모델 제공업체의 구체적인 메시지 형식 세부 사항을 걱정하지 않고도 다양한 채팅 모델을 사용할 수 있도록 합니다.


메시지의 구성 요소

메시지는 일반적으로 다음 정보로 구성됩니다:

  • 역할(Role): 메시지의 역할(예: “user”, “assistant”).
  • 내용(Content): 메시지의 내용(예: 텍스트, 다중 모드 데이터).
  • 추가 메타데이터: ID, 이름, 토큰 사용량 및 기타 모델별 메타데이터.

역할(Role)

역할은 대화에서 다양한 유형의 메시지를 구분하고, 채팅 모델이 메시지 시퀀스에 응답하는 방법을 이해하는 데 도움을 줍니다.

역할설명
system모델의 행동 방식을 지시하거나 추가 컨텍스트 제공. 모든 채팅 모델에서 지원되지 않음.
user사용자의 입력을 나타내며, 일반적으로 텍스트 또는 상호작용 형식.
assistant모델의 응답을 나타내며, 텍스트 또는 도구 호출 요청을 포함할 수 있음.
tool도구 실행 결과를 모델에 전달하는 데 사용. 도구 호출을 지원하는 모델에서 사용.
function (레거시)OpenAI의 레거시 함수 호출 API에 해당. tool 역할을 대신 사용해야 함.

내용(Content)

메시지 내용은 텍스트 또는 다중 모드 데이터(이미지, 오디오, 비디오 등)를 객체 배열로 표현합니다. 내용의 정확한 형식은 채팅 모델 제공업체마다 다를 수 있습니다.

현재 대부분의 모델은 텍스트를 주요 내용 유형으로 지원하며, 일부 모델은 다중 모드 데이터도 지원합니다. 다만, 다중 모드 데이터 지원은 아직 제한적입니다.

관련 자료:


기타 메시지 데이터

채팅 모델 제공업체에 따라 메시지에 다음 데이터가 포함될 수 있습니다:

  • ID: 메시지의 고유 식별자(선택 사항).
  • 이름: 동일한 역할을 가진 서로 다른 개체/화자를 구분하는 이름(일부 모델 미지원).
  • 메타데이터: 타임스탬프, 토큰 사용량 등 추가 정보.
  • 도구 호출(Tool Calls): 모델이 하나 이상의 도구를 호출하도록 요청. 도구 호출 가이드 참고.

대화 구조

채팅 모델에 전달되는 메시지 시퀀스는 모델이 유효한 응답을 생성할 수 있도록 특정 구조를 따라야 합니다.

예시:

사용자 메시지: "안녕하세요, 어떻게 지내세요?"
어시스턴트 메시지: "잘 지내고 있습니다. 물어봐 주셔서 감사합니다."
사용자 메시지: "농담 하나 해줄 수 있나요?"
어시스턴트 메시지: "물론이죠! 왜 허수아비가 상을 받았을까요? 밭에서 뛰어났기 때문이에요!"

채팅 기록 관리에 대한 자세한 내용은 채팅 기록 가이드 참고.


LangChain 메시지

LangChain은 모든 채팅 모델에서 사용 가능한 통합 메시지 형식을 제공합니다. 이 형식은 BaseMessage를 상속하는 클래스로 구현됩니다.

주요 메시지 유형:

  • SystemMessage: 시스템 역할에 해당.
  • HumanMessage: 사용자 역할에 해당.
  • AIMessage: 어시스턴트 역할에 해당.
  • AIMessageChunk: 어시스턴트 역할(스트리밍 응답용).
  • ToolMessage: 도구 역할에 해당.

기타 메시지:

  • RemoveMessage: 특정 역할 없음. 주로 LangGraph에서 채팅 기록 관리용.
  • FunctionMessage (레거시): OpenAI 레거시 함수 호출 API용.

SystemMessage

모델의 행동을 유도하거나 추가 컨텍스트(예: “이 대화는 요리에 관한 것입니다”)를 제공합니다. 제공업체별 지원 방식:

  1. 시스템 메시지 역할로 명시적 포함.
  2. 별도 API 매개변수로 시스템 지침 전달.
  3. 미지원: 일부 모델은 시스템 메시지를 지원하지 않음.

LangChain은 제공업체의 지원 방식에 따라 자동 조정합니다. 시스템 메시지가 지원되지 않으면 HumanMessage에 통합하거나 예외를 발생시킵니다.


HumanMessage

텍스트 내용
대부분의 모델은 텍스트 입력을 기대합니다.

import { HumanMessage } from "@langchain/core/messages";
await model.invoke([new HumanMessage("안녕하세요, 어떻게 지내세요?")]);

: 문자열 입력 시 자동으로 HumanMessage로 변환됩니다.

await model.invoke("안녕하세요, 어떻게 지내세요?");

다중 모드 내용

일부 모델은 이미지, 오디오 등 다중 모드 입력을 지원합니다. 다중 모드 가이드 참고.


AIMessage

모델의 응답을 나타내며 텍스트 또는 도구 호출 요청을 포함할 수 있습니다.

const aiMessage = await model.invoke([new HumanMessage("농담 하나 해주세요")]);
console.log(aiMessage);
// 출력: AIMessage({ content: "왜 닭이 길을 건넜을까요? 반대편으로 가려고요!", ... })

속성

속성표준화 여부설명
contentRaw문자열 또는 콘텐츠 블록 배열.
tool_calls표준화도구 호출 정보.
invalid_tool_calls표준화구문 분석 오류가 있는 도구 호출.
usage_metadata표준화토큰 사용량 등 메타데이터.
id표준화메시지 고유 ID.
response_metadataRaw응답 메타데이터(헤더, 로그프롭 등).

AIMessageChunk

스트리밍 응답 시 사용되며, AIMessage와 유사하지만 ToolCallChunk를 포함합니다.

for await (const chunk of model.stream([new HumanMessage("하늘은 무슨 색인가요?")])) {
  console.log(chunk); // AIMessageChunk 출력
}

통합

청크를 결합하여 최종 응답 생성:

const aiMessage = chunk1.concat(chunk2).concat(chunk3);
// 또는
import { concat } from "@langchain/core/utils/stream";
const aiMessage = concat(chunk1, chunk2);

ToolMessage

도구 실행 결과를 전달하며, tool_call_id와 artifact(추적용 데이터)를 포함합니다. 도구 호출 가이드 참고.


RemoveMessage

LangGraph에서 채팅 기록 관리용으로 사용됩니다. 메모리 가이드 참고.


(레거시) FunctionMessage

OpenAI 레거시 함수 호출 API에 해당. ToolMessage로 대체 권장.


OpenAI 형식

입력 예시

await chatModel.invoke([
  { role: "user", content: "안녕하세요, 어떻게 지내세요?" },
  { role: "assistant", content: "잘 지내고 있습니다." },
  { role: "user", content: "농담 하나 해주세요" },
]);

출력
모델 출력은 LangChain 메시지 형식이므로, 필요한 경우 OpenAI 형식으로 변환해야 합니다.



You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.