4장. 대화형 챗봇과 메모리 전략
용어 짚고 가기
구조화된 출력(structured output)모델의 답을 줄글 대신 정해 둔 칸(열쇠와 값)으로 받는 것입니다. structure 는 "짜임, 구조"라는 뜻입니다.JSON(JavaScript Object Notation)자바스크립트 객체 표기법입니다. JavaScript(웹 프로그래밍 언어), Object(객체), Notation(표기법)의 머리글자입니다.{"목적지": "제주도"}처럼 열쇠와 값을 적는 글의 형식으로, 파이썬의 사전과 모양이 거의 같습니다.파서(parser)글을 읽어 쓰기 좋은 모양(글자열, 사전, 객체)으로 바꾸는 부품입니다. parse 는 "문장을 낱낱이 뜯어 분석하다"라는 뜻입니다.JsonOutputParser모델이 쓴 JSON 글을 파이썬 사전으로 바꾸는 LangChain 의 파서입니다. Output 은 "출력"이라는 뜻입니다.스키마(schema)데이터가 어떤 칸과 어떤 자료형을 가져야 하는지 적은 설계도입니다. 그리스 말로 "모양, 형태"라는 뜻에서 왔습니다.Pydantic파이썬 클래스로 데이터의 틀을 정하고, 들어온 값이 틀에 맞는지 검사하는 라이브러리입니다. Py(파이썬)와 pedantic(깐깐한)을 합친 이름으로, 값을 깐깐하게 검사한다는 뜻을 담았습니다.BaseModelPydantic 에서 틀을 만들 때 물려받는 기본 클래스입니다. base 는 "바탕"이라는 뜻입니다.FieldPydantic 틀의 칸 하나에 설명(description)과 범위(ge, le) 같은 조건을 붙이는 함수입니다. field 는 "입력 칸"이라는 뜻입니다.검증(validation)값이 정해 둔 조건에 맞는지 확인하는 일입니다. valid 는 "유효한"이라는 뜻입니다. 맞지 않으면ValidationError가 납니다.with_structured_output모델에게 틀(스키마)을 건네고, 그 틀에 맞춘 답을 객체로 돌려받게 하는 LangChain 의 메서드입니다. "구조화된 출력과 함께"라는 뜻입니다.메모리(memory)챗봇이 앞의 대화를 기억하는 것처럼 보이게 하는 장치입니다. 실제로는 우리 코드가 대화 기록을 모아 두었다가 요청마다 함께 보냅니다. memory 는 "기억"이라는 뜻입니다.대화 기록(chat history)지금까지 주고받은 메시지의 목록입니다. history 는 "지나온 일, 역사"라는 뜻입니다.MessagesPlaceholder프롬프트 틀 안에 메시지 목록이 들어갈 자리를 비워 두는 부품입니다. placeholder 는 "자리를 맡아 두는 것"이라는 뜻입니다.세션(session)한 사람과 이어지는 대화 한 묶음입니다. 세션 id(identifier, 식별자)로 손님마다의 기록을 나눕니다. session 은 "한 차례의 모임, 회기"라는 뜻입니다.InMemoryChatMessageHistory대화 기록을 컴퓨터 메모리(RAM) 안의 목록에 담아 두는 LangChain 의 기록 상자입니다. in memory 는 "메모리 안에"라는 뜻으로, 프로그램을 끄면 사라집니다.RunnableWithMessageHistory체인을 감싸서, 부를 때마다 세션의 기록을 꺼내 넣고 답이 나오면 기록에 덧붙이는 LangChain 의 부품입니다. "메시지 기록을 단 실행 가능한 것"이라는 뜻입니다.Window 메모리(window memory)대화 기록 가운데 최근 것만 창문 크기만큼 남겨 보내는 전략입니다. window 는 "창문"이라는 뜻으로, 창으로 보이는 만큼만 본다는 데서 왔습니다.trim_messages메시지 목록을 토큰 상한에 맞게 잘라 주는 LangChain 의 함수입니다. trim 은 "다듬다, 잘라 내다"라는 뜻입니다.Summary 메모리(summary memory)오래된 대화를 짧은 요약으로 바꿔, 요약과 최근 대화를 함께 보내는 전략입니다. summary 는 "요약"이라는 뜻입니다.