3장. LangChain 기본 구조와 LCEL
용어 짚고 가기
체인(chain)여러 부품을 차례로 이어, 앞 부품의 결과를 뒤 부품이 받아 일하게 만든 것입니다. chain 은 "사슬"이라는 뜻으로, 고리를 하나씩 이어 붙인다는 데서 왔습니다.LCEL(LangChain Expression Language)LangChain 표현 언어입니다. LangChain, Expression(표현식), Language(언어)를 줄인 말입니다. 부품을prompt | model | parser처럼|로 이어 체인을 쓰는 방식입니다.파이프(pipe)|기호입니다. 앞의 결과를 뒤로 흘려보내는 관이라는 뜻으로, 명령 창에서 쓰던 이름을 그대로 가져왔습니다. 키보드에서는 Enter 위의 역슬래시(\) 키를 Shift 와 함께 누릅니다.러너블(Runnable)LangChain 에서 "실행할 수 있는 부품"을 모두 아우르는 이름입니다. run(실행하다)에 -able(~할 수 있는)을 붙인 말입니다. 프롬프트, 모델, 파서, 체인이 모두 러너블입니다.invoke입력 하나를 넣고 결과 하나를 받는 손잡이입니다. invoke 는 "불러서 실행하다"라는 뜻입니다.batch입력 여러 개를 한꺼번에 넣고 결과 목록을 받는 손잡이입니다. batch 는 "한 번에 굽는 빵 한 판"처럼 "한 묶음"이라는 뜻입니다.stream결과를 다 만들 때까지 기다리지 않고 조각이 생기는 대로 받는 손잡이입니다. stream 은 "시냇물, 흐름"이라는 뜻입니다.프롬프트 템플릿(prompt template)빈칸이 있는 프롬프트의 틀입니다. 빈칸은{place}처럼 중괄호로 적고, 나중에 값을 넣어 완성합니다. template 은 "본뜨는 틀, 양식"이라는 뜻입니다.변수(variable)프롬프트 템플릿의 빈칸 이름입니다.{place}의 place 가 변수입니다. variable 은 "바뀔 수 있는 것"이라는 뜻입니다.ChatPromptTemplate역할(system, human, ai)마다 한 줄씩 메시지 틀을 적는 채팅용 프롬프트 템플릿입니다. Chat(대화)과 Prompt Template 을 붙인 이름입니다.프롬프트 값(PromptValue)프롬프트 템플릿에 값을 채운 결과입니다. 모델에 그대로 넣을 수 있는 꼴입니다. value 는 "값"이라는 뜻입니다.출력 파서(output parser)모델의 답에서 필요한 것만 꺼내 쓰기 좋은 꼴(글, 목록, 사전)로 바꾸는 부품입니다. parse 는 "문장을 쪼개어 뜻을 읽다"라는 뜻입니다.StrOutputParser모델의 답(AIMessage)에서 글만 꺼내는 출력 파서입니다. Str 은 string(글자열)을 줄인 말입니다.최대 토큰 수(max_tokens)모델이 답으로 쓸 수 있는 토큰의 상한입니다. max 는 maximum(가장 많은)을 줄인 말입니다. 넘으면 답이 중간에 잘립니다.시간 제한(timeout)모델의 답을 기다리는 가장 긴 시간(초)입니다. time(시간)과 out(다 됨)을 붙인 말로, "시간이 다 됐다"는 뜻입니다.제로샷(zero-shot)예시 없이 지시만으로 답하게 하는 방식입니다. shot 은 "한 번 해 보기"라는 뜻으로, 보여 준 예시가 0 번이라는 말입니다.퓨샷(few-shot)질문과 답의 예시를 몇 개 보여 주고 같은 꼴로 답하게 하는 방식입니다. few 는 "몇 개"라는 뜻입니다.단계별 지시(step-by-step instruction)모델이 할 일을 "먼저 ~하고, 그다음 ~한다"처럼 순서대로 적어 주는 지시입니다. step 은 "걸음, 단계"라는 뜻입니다.RunnableLambda내가 쓴 파이썬 함수를 체인의 부품으로 만들어 주는 것입니다. lambda 는 이름 없는 작은 함수를 부르는 말로, 그리스 문자 λ(람다)에서 왔습니다.RunnablePassthrough받은 입력을 아무것도 바꾸지 않고 그대로 넘기는 부품입니다. passthrough 는 "그대로 지나가기"라는 뜻입니다.RunnableParallel같은 입력을 여러 부품에 동시에 넣고 결과를 사전 하나로 모으는 부품입니다. parallel 은 "나란한"이라는 뜻입니다.부분 채우기(partial)프롬프트 템플릿의 빈칸 가운데 일부만 먼저 채워 두는 일입니다. partial 은 "일부분의"라는 뜻입니다.