LangChainãçšãã4çš®é¡ã®RAG質åå¿çchainã®å®è£ ãšæ§èœæ¯èŒ
ã¯ããã«
ãã®èšäºã§æ³å®ããŠããèªè ã®æ¹:
- LangChainã§ç°¡åã§ãã³ãŒããæžããããšããã人
- LLM chainã«ã€ããŠãã£ãããšçè§£ããŠãã人
å ¬éãããŠããLLMãapiçµç±ã§çšããŠæ§ã ãªåŠçãèšè¿°ã§ããã©ã€ãã©ãª ãLangChainãã«ãŠ, äž»ã«å€éšããææžãäžããéã«çšãããã以äžã®4ã€ã®chainããåç¥ã®æ¹ãå€ããšæããŸãã
- stuff chain
- map reduce chain
- map rerank chain
- refine chain
ä»åã¯, å®éã«streamlitãçšããŠ4ã€ã®chainã䜿çšããchatã¢ããªã®ãã¢äœæã, ãããçšããŠchainããšã®æ§èœæ¯èŒãè¡ããŸãã!
æ¯èŒã§ã¯åçŽãªå¿çèœåã®æ¯èŒã«å ããŠ, çææéãAPIæéã®èгç¹ãããæ¯èŒãè¡ãªã£ãã®ã§, ãã²èªãã§ã¿ãŠãã ãã!
TL;DR
ä»åã®å®éšã¯ä»¥äžã®gifç»åã®ãããªãã¢ã¢ããªãçšããŠè¡ããŸãããç°¡åãªçµè«ã¯ä»¥äžã®éãã§ã!

- ãã©ã³ã¹ãåªå ããå Žå : stuff
- 粟床ãåªå ããå Žå : refine
- æç« ãšè³ªåã®åœ¢åŒãç¹å®ã®åœ¢ã«åºå®ãããå Žå : map reduce/map rerank
â» ä»åã®æ¯èŒå®éšãèžãŸããå人çãªèŠè§£ã§ããåœããåã§ãã, å®éã«ã¯ãŠãŒã¹ã±ãŒã¹ããšã«æé©ãªãã®ãéžã¶ããšã«ãªããŸãã
4çš®é¡ã®chainã«ã€ããŠ
åãã«ä»åå®è£ ããŠæ§èœãæ¯èŒãã4çš®é¡ã®chainã«ã€ããŠ, ãã®ä»çµã¿ã説æããåŸã«äžè¬çãªæ¯èŒã«ã€ããŠãŸãšããŠãããŸãããããã§ã«ãåç¥ã®æ¹ã¯èªã¿é£ã°ããŠããã ããŠåé¡ãããŸãã!
åchainã®æ§é 詳现
stuff chain
stuff chainã¯ä»¥äžã®ã€ã¡ãŒãžã®ããã«, äžããããè€æ°ã®ææžãchainå éšã§1ã€ã®ããã³ããã®äžã«ãŸãšããŠåã蟌ãã§LLMã«äžããæãç°¡åãªåœ¢åŒã®chainã§ãããã®åœ¢åŒããã«ä»ã®chainãšæ¯èŒããéã«, å®è£ ãç°¡åã§ãã£ããapiå©çšåæ°ãå°ãªããªãããšãç¹åŸŽãšèšããŸãã

map reduce chain
次ã«, map reduce chainã¯ä»¥äžã®ã€ã¡ãŒãžã®éãã®æ§é ãšãªã£ãŠããŸããå ·äœçã«ã¯, äžããããææž1ã€ãã€ã«å¯ŸããŠåçãäœæã, ããããæçµçã«1ã€ã®æçµåçã«ãŸãšãããšããåäœãç¹åŸŽçã«ãªã£ãŠããŸãããŸã, 圢åŒäžããã³ããã«1åç®ã®åçäœæçšãšæçµåçäœæçšã®2çš®é¡ãå¿ èŠã«ãªããŸãã

map rerank chain
3ã€ç®ã®map rerank chainã¯ä»¥äžã®æ§é ã®éãã§ãããã®chainã§ã¯, äžã®map reduce chainãšäŒŒãŠææžã1ã€ãã€LLMã«éããŠåçãäœæãããšãããŸã§ã¯åäžã§ãã, åçæã«LLMã®èªèº«åºŠåããé äœãšããŠåºåãããç®æãç°ãªããŸããããã«ãã£ãŠ, æåŸã«ããäžåºŠåçãäœæããã®ã§ã¯ãªãæãé äœãé«ãåçãæçµåçãšããŠåºåããããšãã§ããŸãã

refine chain
4ã€ç®ã®ãã§ã€ã³ã¯ä»¥äžã®å³ã§è¡šãããrefine chainã§ãããã®ãã§ã€ã³ã§ã¯ææžãåããŠLLMã«å ¥åããç¹ã¯ä»¥åã®ãã§ã€ã³ãšåæ§ã§ãã, æ¯åã®åºåãæ¬¡ã®ææžã«å ããŠLLMã«å ¥åããç¹ãç°ãªããŸããããã«ãã£ãŠ, æç« å šäœã粟床é«ãå ¥åããããšãã§ããç¹ãç¹åŸŽãšãªããŸãã

åchainã®æ§é äžã®æ¯èŒ
以äžã®æ§é ã®éããã, åchainã®æ§é äžã®æ¯èŒã¯ä»¥äžã®è¡šã®éãã«ãŸãšããããŸãã

ãŸã, åchainã®ç¹åŸŽã«é¢ããŠã®è£è¶³èª¬æã¯ä»¥äžã®éãã§ãã
-
å¿çé床 : åŒã³åºãåæ°ã1åã®stuffã¯ãéãã, nåã§ããåææžã«å¯ŸããLLMåŒã³åºãã䞊ååã§ããmapç³»2çš®ã¯ãæ®éã, nåãã€äžŠååãã§ããªãrefineã¯ãé ãããšããŠããŸãã
-
é©ããŠããææžç¹åŸŽ
-
stuffã»map reduce : ææžå šäœã1段éãŸãã¯2段éã§LLMã«å ¥åãããã, ææžå šäœã«éèŠãªæ å ±ãå«ãŸããå Žåã«ç¹ã«æå¹ã§ãã
-
map rerank : ææžã®äžéšã®ã¿ã®åçããæè¯ã®åçãéžã¶ãã, äžéšã®ã¿ã«éèŠãªæ å ±ãå«ãŸããå Žåã«ç¹ã«æå¹ã§ãã
-
refine : äžéšã®ã¿ã®åçãè€æ°ååèµ·çã«åŒã³åºããã, éèŠãªæ å ±ãææžã®å šäœã§ãäžéšã§ã察å¿ããããšãå¯èœã§ãã
-
å®éšãšæ§èœæ¯èŒ
GitHubãªããžããªäžã®ã³ãŒããçšããŠå®éšãšæ§èœæ¯èŒãè¡ããŸãã
å®éšæŠèŠ
ç°å¢
ä»åã¯LLMãšããŠgpt-3.5-turboãæå®ããŸãããŸã, RAG察象æç« ãšããŠä»¥äžã®ãããªåœ¢åŒã®é空æåº«ã®ããã¹ããã¡ã€ã«ãçšæã, ã«ããæ¬æã«é¢ä¿ãªãéšåãæŽåœ¢ããŠãã¯ãã«DB(FAISS)ã«ç»é²ã䜿çšããŸãã
ïŒïŒåäžãäžãç ç©¶ã«ãããäºã€ã®åïŒãäžãç ç©¶ã«ãããäºã€ã®åãã¯äžèŠåºã
ãç§åŠã仿¥ã®ããã«çºéããŠæ¥ããšãå°éã®åéããéåžžã«å€å²ã«åããŠãç ç©¶ã®æ¹æ³ããåå·®äžå¥ã®èгãåããŠãããäºå®ã䜿ãããŠããæ©æ¢°ããç ç©¶éè¡ã®ããæ¹ãèŠããšãæ£ããŸããã«åå·®äžå¥ã§ãããããããããã®ç ç©¶æ¹æ³ãæŠèгãããšãäºã€ã®åã«åé¡ããããšãã§ããã
ããã®äžã€ã¯ã仿¥ç²Ÿå¯ç§åŠãšããããŠããç§åŠã®ã»ãšãã©å
šåéã«ããã£ãŠãçšããããŠããç ç©¶ã®åã§ãããåé¡ãè©³çŽ°ã«æ€èšããŠããããå顿Žçããæç®ããã調ã¹ãŠãæªç¥ã®èª²é¡ãèŠã€ããããã®ããããç ç©¶é¡ç®ã決ãŸããšãããã«ã€ããŠããŸãçè«çãªèå¯ãããŠãã©ãããå®éšãããããç®çãšããé
ç®ã«ã€ããŠã®ç¥èãåŸãããããæ€èšããããããŠå®éšãããã®ãšããã«ãã£ãŠãçµæãè«æãšããŠå ±åããã
ãããããçš®é¡ã®ç ç©¶ã§ãäžçªå€§åãªããšã¯ãããç ç©¶é¡ç®ãèŠã€ããããšã§ããããããèŠã€ããã°ãããšãããããšå·¥å€«ãããŠããã®åé¡ãè§£ããŠè¡ãã°ããã
å®éšã«çšãã質å
ä»åã¯, 4çš®é¡ã®chainã®æ§èœãæ¯èŒããããã« â èŠçŽ, â¡è³ªåå¿ç, â¢çŽæ¥ã®èšè¿°ããªãææ§ãªè³ªå ã®3ã€ã®ã¿ã¹ã¯ãæ³å®ãã質åãããããè¡ããŸãããã®åŸ, äžã®å³ã®éãã«chainããã®åºåã宿§çã«è©äŸ¡ããŠããã£ãæéãšAPIæéã«ã€ããŠãèšæž¬ãè¡ãæ¯èŒããŸããå ·äœçãªè³ªåã¯ä»¥äžã®éãã§ãã
- 質å1 : ãç ç©¶ã«ããã2ã€ã®åãšãããã®ç¹åŸŽãæããŠãã ãããã
- 質å2 : ãèŠèŠåºåã®ç ç©¶ã®å ·äœäŸãæããŠãã ãããã
- 質å3 : ãæ¯èŒç§åŠè«ã«ã€ããŠãããäœãã説æããŠãã ããã

質å1ã®çµæãšèå¯
質å1ã§ã¯ãç ç©¶ã«ããã2ã€ã®åãšãããã®ç¹åŸŽãæããŠãã ãããããchainã«éããŠåçãåŸãŸããããã®è³ªåã§ã¯, æç« å šäœã®ããŒãã§ãã2ã€ã®ç ç©¶ã®åã«ã€ããŠè³ªåããŠãããã, å šäœã®èŠçŽçãªã¿ã¹ã¯ãšãªã£ãŠããŸããæåŸ ãããåçãšããŠã¯ "èŠèŠåºå"ãš"ã¢ããŸã³å"ã®ç ç©¶ã«ã€ããŠè§ŠããããŠããåç ãæããããŸãã
åchainã®åçãã以äžã®åŸåã倿ããŸãã!
- map rerankã®ã¿æ£ããåçãåºåã§ããªãã£ã
- refineã«ã€ããŠã¯ããªã詳ããæ£ãã解説ãã§ããŠãã
- çææé, ã³ã¹ããšãã« stuff < mapç³»å2çš® < refine ã®é¢ä¿ã§ãã£ã
ãã£ãŠ, æç« å šäœã®èŠçŽã®ã¿ã¹ã¯ã«é¢ããŠã¯æç« ã®1éšã®ã¿ãçšããåçãåºåãããmap rerankã¯äžåãã§ããããšãèå¯ãããŸãã
ãã®éã®åchainã®å®éã®åçã¯ä»¥äžã®éãã§ããã(é·ãã®ã§æãããã¿)
-
stuff chain

-
map reduce chain

-
map rerank chain

-
refine chain

ãŸã, çææéãšäœ¿çšAPIæéã«ã€ããŠã®è¡šã¯ä»¥äžã®éããšãªããŸããã

質å2ã®çµæãšèå¯
質å2ã§ã¯ãèŠèŠåºåã®ç ç©¶ã®å ·äœäŸãæããŠãã ããããã質åãšããŠäžããŠããŸãããã®è³ªåã¯æ¬æäžã«ãŠããã€ãã®å ·äœäŸã玹ä»ãããŠãããã, äžéšãæãåºã質åå¿çã¿ã¹ã¯ãšãªã£ãŠããŸããæåŸ ãããåçãšããŠã¯æ£ããå ·äœäŸãåçã§ããŠããåçãæããããŸãã
åchainã®åçãã以äžã®åŸåã倿ããŸãã!
- map reduceã®ã¿æ£ããåçãåºåã§ããªãã£ã
- refineã¯ä»2ã€ãšæ¯ã¹ãŠå¥ã®ããå ·äœçãªããŒããéžæããŠãã
- çææé, ã³ã¹ããšãã«stuffãšåæ§ã®é¢ä¿ãæãç«ã£ãŠãã
ãã£ãŠ, æç« äžéšã®æãåºãã«ãã質åå¿çã«ã¯å šäœã®åçãäœæããåŸã«ãŸãšããŠåºåããmap reduceã¯äžåãã§ããããšãèå¯ãããŸãã
ãã®éã®åchainã®å®éã®åçã¯ä»¥äžã®éãã§ããã(é·ãã®ã§æãããã¿)
-
stuff chain

-
map reduce chain

-
map rerank chain

-
refine chain

ãŸã, çææéãšäœ¿çšAPIæéã«ã€ããŠã®è¡šã¯ä»¥äžã®éããšãªããŸããã

質å3ã®çµæãšèå¯
質å3ã§ã¯ãæ¯èŒç§åŠè«ã«ã€ããŠãããäœãã説æããŠãã ãããã質åãšããŠäžããŠããŸãããã®è³ªåã¯æ¬æäžã«ã¯æç¢ºãªåçããªãæŠå¿µçãªè³ªåã§ãããã, æœè±¡çãªããŒãã«ã€ããŠã®é£æåºŠã®é«ãåçã»èŠçŽã¿ã¹ã¯ãšãªã£ãŠããŸããæåŸ ãããåçãšããŠã¯æç« äžã®èª¬æãããçšåºŠæãåºããŠããããšã«å ããŠç¬èªã§è§£éãã€ããŠãŸãšããããŠããããšãæããããŸãã
åchainã®åçãã以äžã®åŸåã倿ããŸãã!
- map reduceã®ã¿æ£ããåçãåºåã§ããªãã£ã
- refineã¯ä»2ã€ãšæ¯ã¹ãŠæãåºãã ãã§ãªãæ£ããè§£éãè¡ããŠãã
- ã³ã¹ãã®é¢ä¿ã¯ããŸãå€ãããªãã, çææéã«é¢ããŠã¯é¢ä¿ã匷ããªã£ãŠããã
ãã£ãŠ, é£æåºŠã®é«ãæœè±¡çãªè³ªåã«ã¯map_reduceã¯äžåãã§ãã, ããã«ä»2ã€ãšæ¯ã¹ããšrefineã¯äžæ©é²ãã åºåãããŠãããããšãèå¯ãããŸãã
ãã®éã®åchainã®å®éã®åçã¯ä»¥äžã®éãã§ããã(é·ãã®ã§æãããã¿)
-
stuff chain
-
map reduce chain
-
map rerank chain
-
refine chain
ãŸã, çææéãšäœ¿çšAPIæéã«ã€ããŠã®è¡šã¯ä»¥äžã®éããšãªããŸããã

æ§èœæ¯èŒ
ãŸã, 以äžã®å®éšã§åŸãããçµæãããã©ãŒãã³ã¹ããšã«ãŸãšãããšä»¥äžã®è¡šã®éããšãªããŸã!


次ã«, å®éšã§åŸãããAPIæéã«ããã³ã¹ãçææéããŸãšãããšä»¥äžã®2ã€ã®è¡šã®éããšãªããŸã! (ã©ã¡ããstuff chainãåºæºã«ããéã®æ¯çã§ã)


以äžã®è¡šãèŠæ¯ã¹ããš, ããã©ãŒãã³ã¹èгç¹ã§ã¯å§åçã«refineãåªããŠãããšããããšãããããšæããŸããäžæ¹ã§, APIæéã»çææéã®ç¹ã§ã¯refineã¯å£ã£ãŠãããã, ãã®éšåã®ãã¬ãŒããªãããŠãŒã¹ã±ãŒã¹ããšã«èããããšã«ãªãããã§ãããŸã, mapç³»2çš®ã«é¢ããŠã¯ããã©ãŒãã³ã¹ã«ãŠåŸæäžåŸæãã¯ã£ãããšåãããéšåãå®éã«äœ¿çšããéã«ã¯åèã«ãªãããã§ãã
ãããã«
ä»åã¯, LangChainãçšãã4çš®é¡ã®chainã«ã€ããŠå€éšããã®ææžãããšã«å
¥åããã質åã«å¿çãã圢åŒã§å®è£
ãè¡ã, è€æ°ã®è³ªåã®çš®é¡ã«ã€ããŠå®éšãè¡ããŸãã! çµæãšããŠã¯åchainããšã«ããªã倧ããªéããããããšãããã£ãŠããã ãããšæããŸãã
ãŸã, å®è£
é¢ã§ã¯LangChainã®ã©ã€ãã©ãªãæŽæ°ã®å€§ããªç¯ç®ã«ãããšããããšãããä»åŸåããªããªã£ãŠããŸãããšããããããããŸããã, GitHubãªããžããªã¯é©å®ã¢ããããŒãããŠããäºå®ã§ãã
å°ãé·ããªã£ãŠããŸããŸããã, æåŸãŸã§ãèªã¿ããã ãããããšãããããŸãã!
Discussion
ãšãŠãåèã«ãªããŸããæ©æ¢°åŠç¿ã®boostingã®æŠå¿µãå¿çšããæãã§ãããããæ©éãä»äºã§ã掻ãããŠã¿ãããšæããŸãã
è©äŸ¡ã®éšåããããããããŠããã§ããïŒ