[LLM] Langchain์œผ๋กœ AI E2E ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœํ•ด๋ณด๊ธฐ

๋ฐ˜์‘ํ˜•

ChatGPT๊ฐ€ ํ™”๋‘๊ฐ€ ๋œ์ง€ ์–ด๋Š๋ง 3๊ฐœ์›”์ด ์ง€๋‚˜๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. GPT ๋ชจ๋ธ์ด 3 ๋ฒ„์ „ ์ดํ›„๋กœ ๊ต‰์žฅํžˆ ๋งŽ์€ ๋ณ€ํ™”๋ฅผ ๋ณด์ด๋ฉด์„œ ChatGPT์˜ ๋“ฑ์žฅ์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•„์ฃผ ์ธ๊ธฐ๋ฅผ ์–ป๊ฒŒ ๋˜๋ฉด์„œ ํ•„์ž์ธ ์ €๋„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๋จธ์‹  ๋Ÿฌ๋‹์— ๊ด€์‹ฌ์„ ๋ณด์ด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

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

 

 

 

๊ทธ๋ž˜์„œ Langchain์ด ๋ฌด์—‡์ธ๊ฐ€์š”?

Langchain์€ LLM์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค. ๊ฐ„๋‹จํžˆ ์–˜๊ธฐํ•˜์ž๋ฉด ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•ด ๋ณธ ๊ฒฝํ—˜์ด ์—†๋Š” ๊ฐœ๋ฐœ์ž๋“ค๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋งŒ ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

Langchain์— ๋Œ€ํ•ด ๋“ค์–ด๊ฐ€๋ณด๊ธฐ ์ „์—, Langchain์ด ์ด๋ค„์ง„ ๊ตฌ์„ฑ์„ ๋ณด๋ฉฐ ์–ด๋–ป๊ฒŒ ์ด ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ํƒ„์ƒ๋˜์—ˆ๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

  • LLM(Model I/O): ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ์˜ˆ์ธกํ•˜๋Š” ๋ชจ๋ธ
  • Prompt: ๋ชจ๋ธ์˜ ์ž…๋ ฅ๊ฐ’
  • Chains: LLM๊ณผ Prompt์˜ ๊ฒฐํ•ฉ์ฒด๋กœ ํ˜ธ์ถœ ์‹œํ€€์Šค๋ฅผ ์ƒ์„ฑ
  • Agents: ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ๋‹ค์ด๋‚˜๋ฏนํ•˜๊ฒŒ ํ˜ธ์ถœ
  • Memory: Chain๊ณผ Agents์˜ ์ƒํƒœ๋ฅผ ์ €์žฅ (์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ณผ ๋ชจ๋ธ์˜ ์ถœ๋ ฅ์„ ๊ธฐ์–ตํ•˜๋Š” ์šฉ๋„)
  • Evaluation: ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋กœ ์‘๋‹ตํ•œ ์˜ˆ์ธก ๋ฐ์ดํ„ฐ๋ฅผ ํ‰๊ฐ€ (BETA)

 

Langchain์€ ์œ„์˜ ๋ชจ๋“ˆ ์™ธ์—๋„ ์—ฌ๋Ÿฌ ๋ชจ๋“ˆ๋กœ ์ด๋ค„์ ธ ์žˆ๋Š”๋ฐ, ๊ทธ ์ค‘ Chains, Agents, Memory๊ฐ€ ๋ฐ”๋กœ Langchain์˜ ์ฝ”์–ด ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. LLM์€ ๊ธฐ์กด์— ๊ฐœ๋ฐœ๋œ OpenAI์˜ GPT๋‚˜ Meta์˜ LlaMA ๋“ฑ์˜ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๊ณ , Prompt ์—ญ์‹œ ChatGPT์ฒ˜๋Ÿผ ์‚ฌ์šฉ์ž๊ฐ€ AI์—๊ฒŒ ๋ช…๋ น์„ ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

Langchain์€ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์•„๋‹Œ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ E2E(End to End) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ๊ณผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‚ฌ์ด์— ์ธํ„ฐํŽ˜์ด์Šค ์—ญํ• ์„ ํ•ด์ค๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ๊ฐœ๋ฐœํ•ด ๋ณธ ๊ฒฝํ—˜์ด ์—†๋Š” ๊ฐœ๋ฐœ์ž๋„ ์‰ฝ๊ฒŒ ๋จธ์‹  ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์ž…ํ˜€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ด์— LangChain์—์„œ๋Š” LLM ์ž‘์—…์— ํ•‹์š”ํ•œ ๊ธฐ๋Šฅ์„ ์•„๋ž˜ 7๊ฐœ์˜ ์ถ”์ƒํ™” ๋œ ์ปดํฌ๋„ŒํŠธ๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

  • Schema
    LLM๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค (ex: ๋ฉ”์‹œ์ง€, ๋ฌธ์„œ)

  • Models
    ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์— ๋”ฐ๋ฅธ ์‘๋‹ต ์˜ˆ์ธก ๋ชจ๋ธ (ex: ์–ธ์–ด ๋ชจ๋ธ, ์ฑ„ํŒ… ๋ชจ๋ธ, ํ…์ŠคํŠธ ์ž„๋ฒ ๋”ฉ ๋ชจ๋ธ)

  • Prompts
    ๋ชจ๋ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฉ”์„œ๋“œ๋กœ ํ…์ŠคํŠธ, ์ด๋ฏธ์ง€, ์˜ค๋””์˜ค๋ฅผ ์ผ์ปซ์œผ๋ฉฐ ํ˜„์žฌ๋Š” ํ…์ŠคํŠธ๋งŒ์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. LangChain์—์„œ๋Š” ์ƒ์„ฑํ˜• AI๋ฅผ ์ž˜ ๋ชจ๋ฅด๋Š” ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•ด Prompt template์„ ์ œ๊ณตํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ํ–ˆ๋˜ ๋ฐฉ์‹๋Œ€๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ ธ์™€ ํ”„๋กฌํฌํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋ฉฐ ์ด ์™ธ์—๋„ ์˜ˆ์ œ ์„ ํƒ๊ธฐ(Example Selector)๋ฅผ ์ด์šฉํ•˜์—ฌ ํ”„๋กฌํฌํŠธ์—์„œ ์ƒํ™ฉ์— ๋งž๋Š” ์ •๋ณด๋ฅผ ๋™์ ์œผ๋กœ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐฐ์น˜ํžˆ์—ฌ ๋ณด์—ฌ์ฃผ์–ด ์‰ฝ๊ฒŒ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ๋„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋„ ์ œ๊ณตํ•œ๋‹ค. ์ด ์™ธ์—๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์ข€ ๋” ๋‹จ์ˆœํ•˜๊ณ  ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์‘๋‹ตํ•œ ํ…์ŠคํŠธ ๊ฒฐ๊ณผ๋ฌผ์„ ์งง๊ฒŒ ๊ตฌ์กฐํ™” ์‹œ์ผœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ์ถœ๋ ฅ ํŒŒ์„œ(Output Parser)๊ฐ€ ์žˆ๋Š”๋ฐ, ์›๋ฆฌ๋Š” ๋ชจ๋ธ์— ๋ฏธ๋ฆฌ ์‘๋‹ต ํ˜•ํƒœ๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ด๋ฏธ ์‘๋‹ตํ•œ ๊ฒฐ๊ณผ๋ฅผ JSON ๋“ฑ์˜ ์›ํ•˜๋Š” ๊ตฌ์กฐ๋ฌผ๋กœ ์ถ”์ถœํ•˜๋„๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  • Indexes
    LLM์ด ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์†Œ์Šค์—์„œ ๋ฌธ์„œ๋ฅผ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๋กœ ๋ฌธ์„œ ๋กœ๋”(Document Loaders), ํ…์ŠคํŠธ ๋ถ„ํ• ๊ธฐ(Text Splitter) ๋“ฑ์ด ์กด์žฌํ•˜๋ฉฐ ๋ฌธ์„œ ๋กœ๋”์˜ ๊ฒฝ์šฐ CSV, Dataframe Loader, ํ…์ŠคํŠธ ๋ถ„ํ• ๊ธฐ๋Š” ML ๋ชจ๋ธ ๊ฐœ๋ฐœ์„ ํ•ด๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋Œ€๋ถ€๋ถ„ ์•„๋Š” tiktoken, Markdown ๋“ฑ์„ ์‚ฌ์šฉํ•˜๋ฉฐ ์ด ์™ธ์—๋„ ๋ฒกํ„ฐ ์Šคํ† ์–ด(Vector store), ๊ฒ€์ƒ‰๊ธฐ(Retriever)๊ฐ€ ์žˆ๋‹ค.

  • Memory
    Chains์™€ Agents์˜ ์ƒํƒœ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋กœ ํ”ํžˆ ChatGPT๋ฅผ ์‚ฌ์šฉํ•ด๋ดค๋‹ค๋ฉด ์งˆ์˜์‘๋‹ต์„ ํ•  ๋•Œ ๊ทธ ์งˆ๋ฌธ์„ ์ด์–ด์„œ ๊ณ„์†ํ•˜๋ฉด ๊ทธ ์ƒํƒœ์— ๋”ฐ๋ผ ์‘๋‹ต์„ ๋‹ค๋ฅด๊ฒŒ ์ฃผ๋Š” ๊ฒƒ์„ ๋ดค์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋“ค์ด Chain๊ณผ Agent์ธ๋ฐ, ํ•˜์ง€๋งŒ ์ด๋“ค์€ ์ด์ „์— ํ–ˆ๋˜ ์งˆ์˜์‘๋‹ต ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜์ง€ ์•Š์œผ๋ฉฐ ๊ทธ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Memory๋‹ค. ์ข…๋ฅ˜๋กœ๋Š” BufferMemory, EntityMemory, Knowledge Graph Memory, Summary Memory ๋“ฑ์ด ์žˆ๋‹ค.

  • Chains
    ๋‹ค์–‘ํ•œ LLM์„ ํ˜ธ์ถœํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ 

  • Agents
    ์‚ฌ์šฉ์ž ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•ด์•ผํ•  ์ผ์„ ๊ฒฐ์ •ํ•˜๋Š” AI ์ฝ”์–ด๋กœ ์‹ค์ œ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์œผ๋ฉด Agent๊ฐ€ LLM์„ ์‚ฌ์šฉํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ž‘์—…๊ณผ ์ˆœ์„œ๋ฅผ ๊ฒฐ์ •ํ•˜๋Š”๋ฐ, ์ด ๊ณผ์ •์—์„œ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ถœ๋ ฅ์„ ๊ฐ์‹œํ•˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž์—๊ฒŒ ์ตœ์ข… ์‘๋‹ตํ•ด์ค€๋‹ค. ์ฆ‰, Agent๊ฐ€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ณด๊ณ  ํ•„์š”ํ•˜๋‹ค๋ฉด Google ๊ฒ€์ƒ‰์ด๋‚˜ ChatGPT ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด ์‘๋‹ต์„ ๋ณด์ถฉํ•œ๋‹ค.

 

์šฐ๋ฆฌ๋Š” LLM์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— LLM์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. LLM์€ ํ”„๋กฌํฌํŠธ(Prompt)๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๋Š”๋ฐ, ์ด ํ”„๋กฌํฌํŠธ๋Š” ChatGPT์™€ ๊ฐ™์ด ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๊ณ , ๋˜ ๋‹ค๋ฅธ ๊ฒƒ์œผ๋กœ๋Š” ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์—๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์งˆ๋ฌธํ•˜๋ฉด ์‘๋‹ตํ•˜๋Š” ์‹œ๋‚˜๋ฆฌ์˜ค์™€ ๋ฌธ์„œ ์ „์ฒด๋ฅผ ์ฃผ๋ฉด ์ด ๋ฌธ์„œ๋ฅผ ์งง๊ณ  ๊ฐ„๋žตํ•˜๊ฒŒ ์š”์•ฝํ•˜๋Š” ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ฑ„ํŒ… ๋ฉ”์‹œ์ง€์—๋Š” ๋ชจ๋ธ์˜ ์—ญํ• ์„ ์ง€์ •ํ•˜๋Š” System ๋ฉ”์‹œ์ง€์™€ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์ธ Human ๋ฉ”์‹œ์ง€, ๊ทธ๋ฆฌ๊ณ  ์ž…๋ ฅ๊ฐ’์„ ๋ณด๊ณ  AI๊ฐ€ ์‘๋‹ตํ•œ ๋ฉ”์‹œ์ง€์ธ AI ๋ฉ”์‹œ์ง€๋กœ ๊ตฌ๋ถ„๋˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ๋•Œ ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ์›ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ž์„ธํ•œ ์˜ˆ์ œ๋Š” ์•„๋ž˜์—์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.)

 

Chains๊ฐ€ ์กฐ๊ธˆ ์ƒ์†Œํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ฐ„๋‹จํžˆ ๋งํ•˜์ž๋ฉด ํ•˜๋‚˜์˜ ํ”„๋กฌํฌํŠธ(Prompt)์ž…๋‹ˆ๋‹ค. ์œ„์—์„œ ์–˜๊ธฐํ–ˆ๋‹ค์‹œํ”ผ ํ”„๋กฌํฌํŠธ๋Š” LLM๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ง€๋งŒ Chains๋Š” ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋„˜์–ด ํ”„๋กฌํฌํŠธ์™€ LLM๊ฐ„์˜ ์กฐํ•ฉ์„ ์›Œํฌํ”Œ๋กœ์šฐ(Workflow)๋กœ ๊ตฌ์„ฑํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›๊ณ , Prompt Template์„ ๋งŒ๋“ค์–ด LLM์œผ๋กœ ํฌ๋งทํŒ…ํ•˜์—ฌ ๋„˜๊ธฐ๋Š” ์ด ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ Chains๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

 

 

๊ทธ๋Ÿฌ๋ฉด Langchain์€ ์ด๋Ÿฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์–ด๋–ป๊ฒŒ ๊ฐœ๋ฐœํ•˜๋‚˜์š”?

๊ธฐ๋ณธ์ ์ธ LLM E2E ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์€ ์•„๋ž˜์˜ ์ˆœ์„œ๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

 

  • ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ
  • ํ”„๋กฌํฌํŠธ ์ƒ์„ฑ
  • LLM ๋ชจ๋ธ ์ƒ์„ฑ
  • ํ”„๋กฌํฌํŠธ์™€ LLM ์—ฐ๊ฒฐ
  • ์ƒํƒœ ์ €์žฅ์„ ์œ„ํ•œ Memory ์ƒ์„ฑ
  • ๊ตฌ๊ธ€ ๊ฒ€์ƒ‰, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ, ChatGPT ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ์„ ๋ถ™์—ฌ Agent ์ƒ์„ฑ

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

 

๊ทธ๋Ÿฌ๋ฉด ๊ฐ„๋‹จํ•˜๊ฒŒ OpenAI ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์–ด ๋ด…์‹œ๋‹ค.

 

 

 

์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜

์œ„์—์„œ LLM์€ ํ”„๋กฌํฌํŠธ๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ํ”„๋กฌํฌํŠธ๋กœ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Langchain์—์„œ๋Š” ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€์™€ ๋ฌธ์„œ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ์—ฌ๊ธฐ์„œ๋Š” ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋ฅผ ํ”„๋กฌํฌํŠธ๋กœ ์‚ฌ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

์ฑ„ํŒ… ๋ฉ”์‹œ์ง€๋ฅผ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์‚ฌ์šฉํ•˜๋Š” ChatOpenAI ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ€์ง„ ์žฌ๋ฃŒ๋กœ ๋จน๊ณ  ์‹ถ์€ ์Œ์‹์„ ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€์— ๋Œ€ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉํ•œ ๋ฉ”์‹œ์ง€๋Š” SystemMessage, HumanMessage, AIMessage๋กœ SystemMessage๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์—ญํ• ์„ ์ง€์ •ํ•˜๊ณ , HumanMessage๋กœ ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

AIMessage(
   content='๋‹น๊ทผ๊ณผ ์–‘ํŒŒ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ํŒŒ์Šคํƒ€ ๋ ˆ์‹œํ”ผ ์ค‘ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•ด ๋“œ๋ฆด๊ฒŒ์š”:\n\n1. ๋‹น๊ทผ๊ณผ ์–‘ํŒŒ ํฌ๋ฆผ ํŒŒ์Šคํƒ€: ์–‘ํŒŒ์™€ ๋‹น๊ทผ์„ ๋ณถ์•„ ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ํฌ๋ฆผ๊ณผ ํŒŒ๋งˆ์‚ฐ ์น˜์ฆˆ๋ฅผ ๋„ฃ์–ด ํ’๋ถ€ํ•˜๊ณ  ๋ถ€๋“œ๋Ÿฌ์šด ํฌ๋ฆผ ํŒŒ์Šคํƒ€๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”.\n\n2. ๋‹น๊ทผ๊ณผ ์–‘ํŒŒ ๋กœ์ œ ํŒŒ์Šคํƒ€: ์–‘ํŒŒ์™€ ๋‹น๊ทผ์„ ๋ณถ์•„ ๋กœ์ œ ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ํ† ๋งˆํ†  ์†Œ์Šค์™€ ํฌ๋ฆผ์„ ์„ž์–ด ํ’๋ฏธ ๋„˜์น˜๋Š” ๋กœ์ œ ํŒŒ์Šคํƒ€๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”.\n\n3. ๋‹น๊ทผ๊ณผ ์–‘ํŒŒ ์•Œ๋ฆฌ์˜ค ์˜ฌ๋ฆฌ์˜ค ํŒŒ์Šคํƒ€: ์–‘ํŒŒ์™€ ๋‹น๊ทผ์„ ๊ณฑ๊ฒŒ ๋‹ค์ ธ์„œ ์˜ฌ๋ฆฌ๋ธŒ ์˜ค์ผ์— ๋ณถ์•„ ๊ณ ์†Œํ•œ ์•Œ๋ฆฌ์˜ค ์˜ฌ๋ฆฌ์˜ค ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ํŒŒ์Šฌ๋ฆฌ์™€ ํŒŒ๋งˆ์‚ฐ ์น˜์ฆˆ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๋ฉด์„œ๋„ ๋ง›์žˆ๋Š” ํŒŒ์Šคํƒ€๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”.\n\n์ด ์™ธ์—๋„ ๋‹ค์–‘ํ•œ ํŒŒ์Šคํƒ€ ๋ ˆ์‹œํ”ผ๊ฐ€ ์žˆ์œผ๋‹ˆ, ์ž์‹ ์˜ ์ทจํ–ฅ์— ๋งž๊ฒŒ ๋ณ€ํ˜•ํ•ด๋ณด์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”. ์ฆ๊ฑฐ์šด ์š”๋ฆฌ ์‹œ๊ฐ„ ๋˜์„ธ์š”!',
   additional_kwargs={}, 
   example=False
)

๋งŒ์•ฝ, ๋‹ต์ด ์กฐ๊ธˆ ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์•˜๋‹ค๋ฉด ์ด์–ด์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์–ด์•ผ๊ฒ ์ฃ ? Memory๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๋Š” ๋„์ค‘์— ํ”„๋กฌํฌํŠธ์˜ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•˜์—ฌ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Memory ์ƒ์„ฑ ์—†์ด๋„ ์ฝ”๋“œ์— ์‘๋‹ต ๊ฐ’์„ ๋„ฃ์–ด ์ปจํ…์ŠคํŠธ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ HumanMessage ๋ฐ”๋กœ ๋‹ค์Œ์— ์‘๋‹ต AIMessage๋ฅผ ๋„ฃ๊ณ , ๋‹ค์Œ HumanMessage ํ”„๋กฌํฌํŠธ๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋‹ค์Œ ์‘๋‹ต์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋‚˜์˜ค๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

AIMessage(
    content='๋ฌผ๋ก ์ž…๋‹ˆ๋‹ค! ์น˜์ฆˆ ์—†์ด๋„ ๋ง›์žˆ๋Š” ํŒŒ์Šคํƒ€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์€ ๋‹น๊ทผ๊ณผ ์–‘ํŒŒ๋กœ ๋งŒ๋“œ๋Š” ์น˜์ฆˆ ์—†๋Š” ํŒŒ์Šคํƒ€ ๋ ˆ์‹œํ”ผ ๋ช‡ ๊ฐ€์ง€๋ฅผ ์†Œ๊ฐœํ•ด ๋“œ๋ฆด๊ฒŒ์š”:\n\n1. ๋‹น๊ทผ๊ณผ ์–‘ํŒŒ ์•„๋ผ๋น„์•„ํƒ€ ํŒŒ์Šคํƒ€: ์–‘ํŒŒ์™€ ๋‹น๊ทผ์„ ๋ณถ์•„ ํ† ๋งˆํ†  ์†Œ์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๊ณ ์ถ”์žฅ์ด๋‚˜ ๊ณ ์ถ”๊ฐ€๋ฃจ๋ฅผ ๋„ฃ์–ด ๋งค์ฝคํ•œ ์•„๋ผ๋น„์•„ํƒ€ ์†Œ์Šค๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜์„ธ์š”. ์•„๋ผ๋น„์•„ํƒ€ ์†Œ์Šค๋Š” ์น˜์ฆˆ ์—†์ด๋„ ํ’๋ถ€ํ•œ ๋ง›์„ ๋‚ผ ์ˆ˜ ์žˆ์–ด์š”.\n\n2. ๋‹น๊ทผ๊ณผ ์–‘ํŒŒ ์˜ค์ผ ํŒŒ์Šคํƒ€: ์–‘ํŒŒ์™€ ๋‹น๊ทผ์„ ๋ณถ์€ ํ›„, ์˜ฌ๋ฆฌ๋ธŒ ์˜ค์ผ, ๋งˆ๋Š˜, ํ—ˆ๋ธŒ ๋“ฑ์„ ๋„ฃ์–ด ๊ฐ„๋‹จํ•œ ์˜ค์ผ ํŒŒ์Šคํƒ€๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”. ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ํŒŒ์Šคํƒ€๋Š” ๋‹น๊ทผ๊ณผ ์–‘ํŒŒ์˜ ์‹ฑ๊ทธ๋Ÿฌ์šด ๋ง›์„ ์ฆ๊ธธ ์ˆ˜ ์žˆ์–ด์š”.\n\n3. ๋‹น๊ทผ๊ณผ ์–‘ํŒŒ ๋ ˆ๋ชฌ ํŒŒ์Šคํƒ€: ์–‘ํŒŒ์™€ ๋‹น๊ทผ์„ ๋ณถ์•„ ์‹ ์„ ํ•œ ๋ ˆ๋ชฌ ์ฃผ์Šค์™€ ๊ป์งˆ์„ ๋„ฃ์–ด ์ƒํผํ•œ ๋ง›์„ ๋‚ด๊ณ , ์˜ฌ๋ฆฌ๋ธŒ ์˜ค์ผ๊ณผ ํ—ˆ๋ธŒ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜์„ธ์š”. ์ด๋ ‡๊ฒŒ ๋งŒ๋“  ํŒŒ์Šคํƒ€๋Š” ์น˜์ฆˆ ์—†์ด๋„ ์ƒํผํ•˜๊ณ  ๋ง›์žˆ๊ฒŒ ์ฆ๊ธธ ์ˆ˜ ์žˆ์–ด์š”.\n\n์œ„์˜ ๋ ˆ์‹œํ”ผ๋“ค์€ ์น˜์ฆˆ ์—†์ด๋„ ๋ง›์žˆ๋Š” ํŒŒ์Šคํƒ€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ์•„์ด๋””์–ด์—์š”. ๊ฐœ์ธ์˜ ์ทจํ–ฅ์— ๋งž๊ฒŒ ์žฌ๋ฃŒ์™€ ์–‘์„ ์กฐ์ ˆํ•˜๊ณ , ๋‹ค์–‘ํ•œ ์–‘๋…๊ณผ ํ–ฅ์‹ ๋ฃŒ๋ฅผ ํ™œ์šฉํ•ด๋ณด์„ธ์š”. ์ฆ๊ฑฐ์šด ์š”๋ฆฌ ์‹œ๊ฐ„ ๋˜์„ธ์š”!', 
    additional_kwargs={}, 
    example=False,
)

์ด๋ฅผ ์กฐ๊ธˆ ์‘์šฉํ•˜๋ฉด ์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋Œ€ํ™”ํ˜•์œผ๋กœ ๊ตฌํ˜„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ข€ ๋” ChatGPT์ฒ˜๋Ÿผ ๋Œ€ํ™”ํ˜• ์ธํ„ฐํŽ˜์ด์Šค ํšจ๊ณผ๋ฅผ ์ฃผ๊ณ  ์‹ถ๋‹ค๋ฉด Streaming ์˜ต์…˜์„ ์ด์šฉํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

streaming ์˜ต์…˜์„ ์ฃผ๊ณ , callbacks์— Streaming Standard Output์„ ์ œ๊ณตํ•˜๋Š” StreamingStdOutCallbackHandler ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ChatGPT์ฒ˜๋Ÿผ ๋Œ€ํ™”ํ˜• UI ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

 

๋งˆ์น˜๋ฉฐ...

์—ฌ๊ธฐ๊นŒ์ง€ Langchain์˜ ๊ธฐ๋ณธ์„ ์•Œ์•„๋ณด๊ณ , ๊ฐ„๋‹จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ด๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ ธ๋ดค์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ์‹ฌ์ธต์ ์œผ๋กœ Langchain์„ ์‚ฌ์šฉํ•ด๋ณด๋ ค๋ฉด ๋” ์žฌ๋ฐŒ๋Š” ๊ธฐํš๊ณผ ๊ณ ๋ฏผ์„ ํ•ด๋ด์•ผ ํ•˜๋ฉฐ ๊ทธ๋Ÿฌ๋‹ค๋ณด๋ฉด Langchain์˜ ๋ชจ๋“  ์ปดํฌ๋„ŒํŠธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ƒ์„ฑํ˜• AI e2e ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Langchain์€ ํ˜„์žฌ Python๊ณผ Javascript/Typescript ์–ธ์–ด๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ ๋งŒ์•ฝ, JS, TS๋ฅผ ์ด์šฉํ•˜์—ฌ ์›น UI๋ฅผ ์ž…ํžˆ๊ณ ์ž ํ•œ๋‹ค๋ฉด Javascript ๊ฐ€์ด๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•ด๋ณด์‹ฌ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. ์ฝ˜์†” ํ™”๋ฉด์€ ์•„๋ฌด๋ž˜๋„ ์‹ฌ์‹ฌํ•˜๋‹ˆ ๋ง์ด์ฃ .

 

 

 

 

๋ฐ˜์‘ํ˜•
TAGS.

Tistory Comments