LangChain for LLM App Development

#DeepLearning.AI #Review

์ด ์ปจํ…์ธ ๋Š” DeepLearning.AIarrow-up-right ์˜ ShortCourse ์ค‘ ํ•˜๋‚˜์ธ LangChain for LLM Application Developmentarrow-up-right ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

LangChain

  • LangChain ์€ LLM ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ ์ž…๋‹ˆ๋‹ค

  • LangChain ์€ 2๊ฐ€์ง€ ์–ธ์–ด๋ฅผ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค

    • Python

    • JavaScript (TypeScript)

LangChain ์€ ๋‹ค์Œ 5๊ฐ€์ง€์˜ ์ปดํฌ๋„ŒํŠธ๋“ค๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Models

  • Large Language Models

  • Chat Models

  • Text Embedding Models

Prompts

  • Prompt Templates

  • Output Parsers

  • Example Selectors

Indexes

  • Document Loaders

  • Text Splitters

  • Vector Stores

  • Retrievers

Chains

  • Prompt + LLM + Output Parser

  • Application Specific Chains

Agents

  • Agent Types

  • Agent Toolkits

Models, Prompts and Output Parsers

  • Model ์€ LLM API ์™€ ์‰ฝ๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์žฅ์น˜ (์˜ˆ๋ฅผ ๋“ค์–ด, OpenAI Chat API ์ „์šฉ ํด๋ž˜์Šค)

  • Prompt ๋Š” ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” Prompting ํฌ๋งท์„ ์ฝ”๋“œ ๋‚ด ๊ฐ์ฒด๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋ฉฐ, ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ Prompt ๋“ค์„ LangChain ์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค

  • Output Parser ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” LLM ์—๊ฒŒ ํŠน์ • ํ˜•์‹์˜ ๋ฐ˜ํ™˜๊ฐ’์„ ์š”์ฒญํ•˜๋”๋ผ๋„, ์‹ค์ œ๋กœ ๋Œ์•„์˜ค๋Š” ๋ฐ์ดํ„ฐ๋Š” string ์ด๋ฏ€๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฝ”๋“œ ๋‚ด ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” parsing ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

  • LangChain ์—์„œ Output Parser ๊ด€๋ จ ์ฝ”๋“œ ์ค‘์—๋Š” Prompt ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ Output ํฌ๋งท์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์„ ๋„์™€์ฃผ๋Š” ๋„๊ตฌ๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค

LangChain: Memory

๋Œ€ํ˜• ์–ธ์–ด ๋ชจ๋ธ(LLM)์„ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ LLM์€ 'stateless' ํ•˜๋‹ค๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค. LLM๊ณผ์˜ ๋ชจ๋“  transaction์€ ๋…๋ฆฝ์ ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. OpenAI LLM API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฑ—๋ด‡์„ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค. LLM์—๊ฒŒ ์ด์ „ ๋Œ€ํ™”๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ ์งˆ๋ฌธ์„ ๋˜์งˆ๋•Œ ์ด์ „ ๋Œ€ํ™”์˜ ๊ธฐ๋ก(history)์„ ํ•จ๊ป˜ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

LLM์€ ๋งˆ์น˜ ๋ฉ”๋ฉ˜ํ† ์˜ ์ฃผ์ธ๊ณต๊ณผ ๋น„์Šทํ•˜๋‹ค..

LangChain ํŒจํ‚ค์ง€์—๋Š” ์ด๋Ÿฌํ•œ Memory ์š”์†Œ๋ฅผ ์‰ฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์žฅ์น˜๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ์„  ๋Œ€ํ™”ํ˜• LLM ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ Memory ๋ชจ๋“ˆ๋“ค์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ConversationBufferMemory

  • ConversationBufferWindowMemory

  • ConversationTokenBufferMemory

  • ConversationSummaryMemory

Converation Buffer Memory

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ํ˜•ํƒœ์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋“ˆ ์ž…๋‹ˆ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ๋ฒ„ํผ์— ์ด์ „ ๊ธฐ๋ก๋“ค์„ ๋‹ด์•„ ๋‹ค์Œ ์ถœ๋ ฅ์— ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ ์ž…๋‹ˆ๋‹ค.

Conversation Buffer Memory ์˜ˆ์‹œ

์œ„ ๊ทธ๋ฆผ์—์„œ๋„ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด์ „ ๋Œ€ํ™” ๊ธฐ๋ก์„ ๋ชจ๋‘ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์˜ Memory ๊ด€๋ฆฌ๋Š” ์ด์ „ ๊ธฐ๋ก์„ ๋ชจ๋‘ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์—์„œ ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋Œ€ํ™”๊ฐ€ ๊ธธ์–ด์งˆ์ˆ˜๋ก LLM์ด ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ํ† ํฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌํ•ด์•ผํ•˜๋Š” ํ† ํฐ์˜ ๊ฐœ์ˆ˜๋Š” ๊ณง ๋น„์šฉ ๋ฌธ์ œ๋กœ ๋˜๋Œ์•„์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์กฐ์‹ฌํ•ด์„œ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์žˆ๋Š” Memory ๋ชจ๋“ˆ ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์‹ค์ œ ์ฝ”๋“œ ์˜ˆ์‹œ ์ž…๋‹ˆ๋‹ค.

Conversation Buffer Window Memory

์ด๋ฆ„์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฒ„ํผ ๋ฉ”๋ชจ๋ฆฌ ์ž…๋‹ˆ๋‹ค. ํ•œ ๊ฐ€์ง€ ์ฐจ์ด์ ์€ Window ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์‹ค์ œ Conversation Buffer Window Memory๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์ž‘์—…์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ k์˜ ์–‘์˜ ์ •์ˆ˜ ๊ฐ’์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. k๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์€ window size ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœ ๋ฒ„ํผ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‹จ์ ์œผ๋กœ ์ง€๋ชฉ๋ฐ›๋˜ ๋น„ํšจ์œจ์ ์ธ ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ ๋ˆ„์ ์„ ํšŒํ”ผํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜ ์ž…๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•œ ์ „๋žต์œผ๋กœ, ์ด์ „ k ๊ฐœ์˜ ๋Œ€ํ™” ์ด๋ ฅ๋งŒ ๋‹ค์Œ ๋Œ€ํ™”์˜ ํžˆ์Šคํ† ๋ฆฌ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

Convesation Buffer Window Memory ์˜ˆ์‹œ

์œ„ ๊ทธ๋ฆผ์€ ๋‹ค์†Œ ๊ทน๋‹จ์ ์ธ ์˜ˆ์‹œ์ด๊ธด ํ•˜์ง€๋งŒ, window ์‚ฌ์ด์ฆˆ๊ฐ€ 0์ธ ๊ฒฝ์šฐ ์ด์ „ ๋Œ€ํ™”๊ธฐ๋ก์„ ๋‚จ๊ธฐ์ง€ ์•Š๋Š” ๊ฒƒ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ง์ „ ๋Œ€ํ™”์—์„œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ •๋ณด๋ฅผ ๋‹ค์Œ ๋Œ€ํ™”์—์„œ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. k ๊ฐ’์„ ์กฐ์ ˆํ•˜์—ฌ ํ† ํฐ ๊ฐœ์ˆ˜๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

Convesation Token Buffer Memory

Buffer Windlow Memory์™€ ๋น„์Šทํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ž…๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ํžˆ์Šคํ† ๋ฆฌ์˜ ๊ฐœ์ˆ˜๋กœ ๋ˆ„์ ๋˜๋Š” ํžˆ์Šคํ† ๋ฆฌ ํ† ํฐ ์–‘์„ ์กฐ์ ˆํ•˜์˜€๋‹ค๋ฉด, ์ด๋ฒˆ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” ์ข€ ๋” ์ง๊ด€์ ์œผ๋กœ ํ† ํฐ ๊ฐœ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Conversation Summary Buffer Memory

์ด์ „ ๋Œ€ํ™” ๊ธฐ๋ก์˜ ์ผ๋ถ€๋งŒ ๋‚จ๊ธฐ๋Š” ๋ฐฉ์‹์€ ๊ฒฐ๊ตญ ์†์‹ค๋˜๋Š” ์ •๋ณด๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ๋ฐ–์— ์—†์Šต๋‹ˆ๋‹ค. ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์€ ์†์‹ค๋˜๋Š” ์ •๋ณด๊ฐ€ ์žˆ๊ธฐ ๋งˆ๋ จ์ด๋ฉฐ, ์ด๋ฅผ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€ํ™” ๊ธฐ๋ก์„ ์š”์•ฝํ•˜์—ฌ ์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ ์žฌ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ๊ฐํ•ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด Conversation Summary Buffer Memory ์ž…๋‹ˆ๋‹ค.

์ด Memory์˜ ํŠน์ง•์€ ๊ธฐ์กด๊ณผ ๋‹ค๋ฅด๊ฒŒ ํžˆ์Šคํ† ๋ฆฌ ์ฒ˜๋ฆฌ ์ž‘์—…์— LLM์ด ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์  ์ž…๋‹ˆ๋‹ค. ์ถ”๊ฐ€์ ์ธ ํ† ํฐ ํ™œ์šฉ์ด ์˜ˆ์ƒ๋˜์ง€๋งŒ, ๋‹จ์ˆœํ•˜๊ฒŒ ํžˆ์Šคํ† ๋ฆฌ๋ฅผ ๋ˆ„์ ์‹œ์ผœ ๋ฌด์˜๋ฏธํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ํ† ํฐ๊ฐœ์ˆ˜ ๋ณด๋‹ค๋Š” ํ˜„์ €ํžˆ ์ ์„ ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ๊ฐ•์ขŒ์—์„œ ์ œ๊ณตํ•˜๋Š” ์˜ˆ์‹œ ์ž…๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” ์‹ค์ œ Summary Buffer ๋กœ ์š”์•ฝ๋œ ํ”„๋กฌํ”„ํŠธ ํ…œํ”Œ๋ฆฟ ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋Œ€ํ™”(Current conversation)์—์„œ ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๊ฐ€ ์ด์ „ ๋Œ€ํ™”์˜ ๋งฅ๋ฝ์„ ์š”์•ฝํ•˜์—ฌ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Last updated