rag

๊ฐœ์š”

  1. ์ „์ฒ˜๋ฆฌ

  2. ์„œ๋น„์Šค

๋‘๊ฐœ์˜ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.

์ „์ฒ˜๋ฆฌ

์ „์ฒ˜๋ฆฌ๋ฅผ ํ•ด์„œ ๊ฐ€์ง€๊ณ ์ž‡๋Š” ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ embedํ•ด์„œ ๋””๋น„์— ๋„ฃ์–ด๋‘”๋‹ค.

์„œ๋น„์Šค

์ •๋ฆฌ

Document Loader

https://python.langchain.com/v0.2/docs/integrations/document_loaders/

๋งŽ์€๊ฒƒ์ค‘์— ์•Œ์•„์„œ ๊ณจ๋ผ์“ฐ๋ฉด ๋œ๋‹ค.

https://python.langchain.com/v0.2/docs/integrations/document_loaders/unstructured_file/

์ผ๋‹จ ๋‚œ ์ด๊ฑธ๋กœ ์„ ํƒ

Document Splitter

๋„ํ๋จผํŠธ 1๊ฐœ๋กœ ๋กœ๋“œ๊ฐ€ ๋œ๋‹ค. ์ด ๋ฌธ์„œ๋ฅผ ๋‹ค llm์œผ๋กœ ๋ณด๋‚ด๋„ ๋˜๋‚˜ ๋น„์šฉ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  llm์—์„œ ์ตœ๋Œ€ ํฌ๊ธฐ๊ฐ€ ์ž‡์–ด์„œ ์ „๋ถ€๋‹ค ํ•œ๊บผ๋ฒˆ์— ๋ณด๋‚ด์ง€ ๋ชปํ•œ๋‹ค.

ํ•„์š”์—†๋Š”๋ถ€๋ถ„๊นŒ์ง€ ๋ณด๋‚ด์„œ ๋น„์šฉ์„ ๋‚ด๋Š”๊ฒƒ๋ณด๋‹ค ์งค๋ผ์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„๋งŒ ๋ณด๋‚ด๋ฉด ๋” ์ข‹์„๊ฑฐ๊ฐ™๋‹ค.

14๊ฐœ๋กœ ์งค๋ผ์ง„๊ฑธ ๋ณผ์ˆ˜ ์žˆ๋‹ค.

๋” ๋งŽ์ด ์ž˜๋ผ๋ณด์ž.

14๊ฐœ๊ฐ€ 2482๋กœ ๋Š˜์–ด๋‚ฌ๋‹ค. ๊ทผ๋ฐ ๋ฌธ์žฅ์ด ์งค๋ฆผ.. llm์ด ์ดํ•ด๋ฅผ ๋ชปํ•จ.

overlap์„ ์‚ฌ์šฉํ•˜์ž.

openai๋Š” length๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  token์„ ์‚ฌ์šฉํ•œ๋‹ค.

https://platform.openai.com/tokenizer

ํ† ํฐ๊ณผ character๊ฐ€ ๋‹ค๋ฅธ๊ฑธ ์•Œ์ˆ˜์žˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ฌธ์„œ๋ฅผ token๋‹จ์œ„๋กœ ์ดํ•ดํ•ด์•ผํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

๋งํฌ์—์„œ tikoken ํŒจํ‚ค์ง€๋ฅผ ์ถ”์ฒœํ•œ๋‹ค.

https://github.com/openai/tiktoken

์‚ฌ์šฉํ•˜์ž.

๋ฌธ์„œ๊ฐ€ ์ž˜ ๋‚˜๋ˆ ์กŒ๋‹ค. ์ด์ œ ์ž„๋ฒ ๋”ฉ์„ ํ•ด์„œ ๋””๋น„์— ๋„ฃ์–ด๋ณด์ž.

Embedding ํ•˜๊ธฐ

๋ฌธ์„œ๋ฅผ ์ˆซ์ž๋กœ ๋ฐ”๊ฟ”์„œ ๋””๋น„์— ๋„ฃ์„์ค€๋น„๋ฅผ ํ•˜๋Š”๊ฒƒ์ž„ ์ด ์ˆซ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์œ ์‚ฌ๋„๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

์ฃผ์˜์‚ฌํ•ญ์€ ์ž„๋ฒ ๋”ฉ ๋ฐฉ์‹์„ ์ง€๊ธˆ ๊ฒฐ์ •ํ•˜๋ฉด ๋‚˜์ค‘์— query๋ฅผ ํ• ๋•Œ๋„ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํ•ด์•ผํ•œ๋‹ค.

openai embeding์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.๋‹ค๋ฅธ๊ฒƒ๋“ค๋„ ์žˆ์œผ๋‹ˆ ์ฐพ์•„์„œ ๋ณด์‹œ์š”

https://github.com/turbomaze/word2vecjson ์„ ์ฐธ๊ณ ํ•˜์‹œ์š”

๋‚œ ์ผ๋‹จ ๋ชฐ๋ผ๋„ ๋˜๋Š”๊ฑฐ๊ฐ™์•„์„œ ๋ฐ”๋กœ ์ฝ”๋“œ๋กœ ์ง„ํ–‰

https://python.langchain.com/v0.2/docs/integrations/text_embedding/openai/

OpenAI Embedding์„ ์‚ฌ์šฉํ•˜์ž.

Embedding์„ ๋””๋น„(FAISS) ์— ๋„ฃ๊ธฐ

์ž„๋ฒ ๋”ฉ์„ ํ•ด์„œ FAISS ์— ์ž…๋ ฅํ•˜๊ธฐ

์œ ์‚ฌ๋„ ๊ฒ€์‚ฌ๋ฅผ ํ•ด์„œ ๋ฌธ์žฅ์„ ์ž˜ ์ฐพ์•„์˜จ๋‹ค. ์ด๊ฑธ ํ”„๋กฌํ”„ํŠธ๋กœ llm์— ๋ณด๋‚ด๋ฉด ๋œ๋‹ค.

๋ณดํ†ต 3๊ฐœ๋‚˜ 5๊ฐœ๊ฐ€ ์ข‹๋‹ค๊ณ ํ•œ๋‹ค.

Embedding cache

ํ• ๋•Œ๋งˆ๋‹ค ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

๋””๋น„์— ์ž…๋ ฅํ•œ ๊ฒƒ์€ ๋กœ์ปฌ ๋“œ๋ผ์ด๋ธŒ์— cache๋ฅผ ํ•˜์ž. ๊ทธ๋Ÿฌ๋ฉด openai์— ๋‹ค์‹œ ์š”์ฒญํ•˜์ง€ ์•Š์•„์„œ ์š”๊ธˆ์ด ์ค„์–ด๋“ ๋‹ค.

์ด์ œ ์ด ๊ฒฐ๊ณผ๋ฅผ llm์— ๋ณด๋‚ผ๊ฐ€?

๊ฒ€์ƒ‰๋œ ๊ฒฐ๊ณผ๋ฅผ prompt์— ๋„ฃ๊ณ  llm์— ๋ณด๋‚ด๊ธฐ

DocumentsChain (๋ฌธ์„œ๋ฅผ vector์—์„œ ๊ฐ€์ ธ์™€์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹)

  1. stuff - vector ๊ฒ€์ƒ‰์— ๊ฑธ๋ฆฐ ๋ชจ๋“  ๋ฌธ์„œ๋ฅผ prompt์— ๋„ฃ์–ด์„œ ๋ณด๋‚ธ๋‹ค.

  2. map reduce

  3. refine

๊ทธ๋ฆผ์œผ๋กœ ์„ค๋ช…

  1. stuff

alt text
  1. map reduce

alt text
  1. refine

alt text

stuff ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ ๋ฌธ์„œ๋ฅผ prompt์— ๋„ฃ์–ด์„œ ๋ณด๋‚ด์ž.

stuff๋ผ๊ณ  ๋ถ€๋ฅด๋˜๋ฐ .

์ด๊ฑด ์œ„ ์ƒ˜ํ”Œ์—์„œ ์ฒ˜๋ฆฌํ–ˆ๋‹ค. https://python.langchain.com/v0.2/docs/tutorials/summarization/#stuff

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

We can use chain_type="stuff", especially if using larger context window models such as:

128k token OpenAI gpt-4-turbo-2024-04-09 200k token Anthropic claude-3-sonnet-20240229

beautifulsoup4 ํŒจํ‚ค์ง€๋กœ ์›น์„ ํฌ๋กค๋ง ํ•ด์˜ค๊ณ  ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ llm์— ๊ฐ™์ด ๋„ฃ์–ด์„œ ์š”์•ฝ์„ ๋ฐ›์ž.

ํŒŒ์ผ์ด ํฌ๋‹ˆ๊นŒ. ํฐ๋ชจ๋ธ๋กœ ํ•˜์ž.

map reduce

"๋งต" ๋‹จ๊ณ„์—์„œ ๊ฐ ๋ฌธ์„œ๋ฅผ ์ž์ฒด์ ์œผ๋กœ ์š”์•ฝํ•œ ๋‹ค์Œ ์š”์•ฝ์„ ์ตœ์ข… ์š”์•ฝ์œผ๋กœ "์ถ•์†Œ"ํ•ฉ๋‹ˆ๋‹ค

https://python.langchain.com/v0.2/docs/tutorials/summarization/#map-reduce

vector store์—์„œ ๊ฒ€์ƒ‰์„ ํ•˜๋„๋ก ์ฒด์ธ์„ ๊ตฌ์„ฑ

๊ฒฐ๊ณผ ๋‚˜์˜จ ๋‚ด์šฉ์„ ๋‹ค์‹œ ๋งˆ์ง€๋ง‰ prompt์— ๋„ฃ์–ด์„œ ์ตœ์ข… ์ฟผ๋ฆฌ llm์— ๋ณด๋‚ด๊ธฐ

์š”์ฒญํ•ด๋ณด๊ธฐ

Refine

์ด๊ฑด ์ง์ ‘ ํ•ด๋ณด์‹œ์š”

๋ฌธ์„œ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์š”์•ฝํ•˜๋Š”๋ฐ ๊ธฐ์กด์— ์š”์•ฝ๋œ ๊ฒƒ๊ณผ ํ•จ๊ป˜ ๋‹ค์‹œ ์š”์•ฝ์„ ํ•˜๋Š” ๋ฐฉ์‹ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

Last updated

Was this helpful?