
LangChain ãžã® OpenAIã®RAGæŠç¥ã®é©çš
以äžã®èšäºãé¢çœãã£ãã®ã§ãããããŸãšããŸããã
1. ã¯ããã«
ãOpen AIãã¯ãã¢ããŒã§äžé£ã®RAGå®éšãå ±åããŸãããè©äŸ¡ææšã¯ã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠç°ãªããŸãããäœãæ©èœããäœãæ©èœããªãã£ããã確èªããã®ã¯è峿·±ãããšã§ãã以äžã§ã¯ãåææ³ã説æãããããããèªåã§å®è£ ããæ¹æ³ã瀺ããŸããã¢ããªã±ãŒã·ã§ã³ã§ã®ãããã®æ¹æ³ãçè§£ããèœåã¯éåžžã«éèŠã§ããåé¡ãç°ãªãã°ç°ãªãæ€çŽ¢ææ³ãå¿ èŠãšãªãããããäžèœã®ã解決çã¯ååšããŸããã

2. RAG ã¹ã¿ãã¯ã«ã©ã®ããã«é©åããã
ãŸããåææ³ãããã€ãã®ãRAGã«ããŽãªãã«åé¡ããŸãã以äžã¯ãã«ããŽãªå ã®åRAGå®éšã瀺ããRAGã¹ã¿ãã¯ã«é 眮ããå³ã§ãã

3. ããŒã¹ã©ã€ã³
è·é¢ããŒã¹ã®ãã¯ãã«ããŒã¿ããŒã¹æ€çŽ¢ã¯ãã¯ãšãªã髿¬¡å 空éã«åã蟌ã¿ïŒè¡šçŸïŒãããè·é¢ãã«åºã¥ããŠé¡äŒŒã®åãèŸŒã¿ææžãèŠã€ããŸããOpenAIã®ç ç©¶ã§äœ¿çšãããããŒã¹ã±ãŒã¹ã®æ€çŽ¢æ¹æ³ã§ã¯ãã³ãµã€ã³é¡äŒŒæ§ã«ã€ããŠèšåããŸããããLangChainãã«ã¯60以äžã®ãã¯ãã«ã¹ãã¢çµ±åãããããã®å€ãã¯é¡äŒŒæ§æ€çŽ¢ã§äœ¿çšãããè·é¢é¢æ°ãå¯èœã«ããŸããããŸããŸãªè·é¢ã¡ããªã¯ã¹ã«é¢ããæçšãªããã°æçš¿ã¯ãWeaviate ãš Pinecone ã§èŠã€ããããšãã§ããŸãã
4. ã¯ãšãªå€æ
ãã¯ãšãªå€æã(Query Transformations) ã¯ãæ€çŽ¢ãæ¹åããããã«ãŠãŒã¶ãŒå ¥åã倿ããããšã«éç¹ã眮ããäžé£ã®ã¢ãããŒãã§ãã ãã®ãããã¯ã«é¢ããæè¿ã®ããã°ã¯ãã¡ããåç §ããŠãã ããã
ãOpenAIãã¯æ¬¡ã®2ã€ã®æ¹æ³ãå ±åããŸããã
ã»Query expansion : LangChain ã®ãMulti-query retrieverãã¯ãLLM ã䜿çšããŠã¯ãšãªæ¡åŒµãå®çŸããç¹å®ã®ãŠãŒã¶ãŒå ¥åã¯ãšãªã«å¯ŸããŠããŸããŸãªèгç¹ããè€æ°ã®ã¯ãšãªãçæããŸããã¯ãšãªããšã«ãé¢é£ããããã¥ã¡ã³ãã»ãããååŸãããã¹ãŠã®ã¯ãšãªã«ãããäžæã®çµåãååŸããŸãã
ã»HyDE : LangChainã®ãHyDEã(Hypothetical Document Embeddings) retrieverã¯ãåä¿¡ã¯ãšãªã«å¯ŸããŠä»®èª¬ããã¥ã¡ã³ããçæããåã蟌ã¿ãæ€çŽ¢ã«äœ¿çšããŸã (è«æãåç §)ããããã®ã·ãã¥ã¬ãŒããããææžã¯ã質åãããç®çã®ãœãŒã¹ææžãšã®é¡äŒŒæ§ãé«ãå¯èœæ§ããããšããèãã§ãã
èæ ®ãã¹ãä»ã®ã¢ã€ãã¢ã¯ã次ã®ãšããã§ãã
ã»Step back prompting : ãã®è«æã§ã¯ãæšè«ã¿ã¹ã¯ã®å Žåãã¹ãããããã¯ã®è³ªåã䜿çšããŠãããé«ãã¬ãã«ã®æŠå¿µãŸãã¯ååã«åºã¥ããçãã®åæãè¡ãããšãã§ããããšã瀺ããŠããŸããããšãã°ãç©çåŠã«é¢ãã質åã¯ããŠãŒã¶ãŒã®ã¯ãšãªã®èåŸã«ããç©çåçã«é¢ãã質åãšåçã«æœè±¡åã§ããŸããæçµçãªçãã¯ãå ¥åããã質åãšã¹ãããããã¯ã®çãããå°ãåºãããšãã§ããŸãã詳ããã¯ããã®ããã°æçš¿ãŸãã¯LangChainå®è£ ãåç §ããŠãã ããã
ã»Rewrite-Retrieve-Read : ãã®è«æã§ã¯ãæ€çŽ¢ãæ¹åããããã«ãŠãŒã¶ãŒã®è³ªåãæžãçŽããŠããŸãã 詳现ããã¯ãLangChainå®è£ ãåç §ããŠãã ããã
5. ã«ãŒãã£ã³ã°
è€æ°ã®ããŒã¿ã¹ãã¢ã«ããã£ãŠã¯ãšãªãå®è¡ããå Žåã質åãé©åãªãœãŒã¹ã«ã«ãŒãã£ã³ã°ããããšãéèŠã«ãªããŸãããOpenAIãã®ãã¬ãŒã³ããŒã·ã§ã³ã§ã¯ã2 ã€ã®ãã¯ãã«ã¹ãã¢ãš1ã€ã®SQLããŒã¿ããŒã¹ã®éã§è³ªåãã«ãŒãã£ã³ã°ããå¿ èŠããããšå ±åãããŸãããLangChainã¯ãLLM ã䜿çšããŠãŠãŒã¶ãŒå ¥åãäžé£ã®å®çŸ©ããããµããã§ãŒã³ (ãã®å Žåã®ããã«ãç°ãªããã¯ãã«ã¹ãã¢ã§ããå¯èœæ§ããããŸã) ã«ã²ãŒãããã«ãŒãã£ã³ã°ããµããŒãããŠããŸãã
6. ã¯ãšãªã®æ§ç¯
ãOpenAIãã®èª¿æ»ã§èšåãããŠããããŒã¿ãœãŒã¹ã®1ã€ã¯ãªã¬ãŒã·ã§ãã« (SQL) ããŒã¿ããŒã¹ã§ãããããå¿ èŠãªæ å ±ãæœåºããã«ã¯ãŠãŒã¶ãŒå ¥åããæå¹ãª SQLãçæããå¿ èŠããããŸãããLangChainã¯text-to-sqlããµããŒãããŠããŸããããã«ã€ããŠã¯ãã¯ãšãªæ§ç¯ã«çŠç¹ãåœãŠãæè¿ã®ããã°ã§è©³ããã¬ãã¥ãŒããŠããŸãã
èæ ®ãã¹ãä»ã®ã¢ã€ãã¢ã¯ã次ã®ãšããã§ãã
ã»Text-to-metadata filter (ãã¯ãã«ã¹ãã¢)
ã»Text-to-Cypher (ã°ã©ãããŒã¿ããŒã¹)
ã»Text-to-SQL+semantic (Postgres with Pgvectorã®åæ§é åããŒã¿)

7. ã€ã³ããã¯ã¹ã®æ§ç¯
ãOpenAIãã¯ãããã¥ã¡ã³ãã®åã蟌ã¿äžã«ãã£ã³ã¯ãµã€ãºãå®éšããã ãã§ãããã©ãŒãã³ã¹ãå€§å¹ ã«åäžãããšå ±åããŸãããããã¯ã€ã³ããã¯ã¹æ§ç¯ã®äžå¿çãªã¹ãããã§ããããããã£ã³ã¯ãµã€ãºããã¹ãã§ãããªãŒãã³ãœãŒã¹ã® Streamlitã¢ããªããããŸãã

ãã¡ã€ã³ãã¥ãŒãã³ã°ã®åã蟌ã¿ã«ããããã©ãŒãã³ã¹ã®å€§å¹ ãªåäžã¯å ±åãããŠããŸããããè¯å¥œãªçµæã¯å ±åãããŠããŸãããOpenAIãã¯ãããã¯ãããããç°¡åã«ã§ããææããšããŠæšå¥šãããªããšè¿°ã¹ãŠããŸããããã¡ã€ã³ãã¥ãŒãã³ã°ã®ããã®ã¬ã€ããå ±æããŠãããããã«ã€ããŠè©³ãã説æãã HuggingFace ã®éåžžã«åªãããã¥ãŒããªã¢ã«ãããã€ããããŸãã
8. åŸåŠç
ååŸåŸãLLMåã蟌ã¿ã®åã«ããã¥ã¡ã³ããåŠçããããšã¯ãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠéèŠãªæŠç¥ã§ããåŸåŠçã䜿çšããŠãååŸããããã¥ã¡ã³ãã®å€æ§æ§ãææ°æ§ã匷å¶ã§ããŸããããã¯ãè€æ°ã®ãœãŒã¹ããããã¥ã¡ã³ããããŒã«ããå Žåã«ç¹ã«éèŠã«ãªããŸãã
ãOpenAIãã¯æ¬¡ã®2ã€ã®æ¹æ³ãå ±åããŸããã
ã»Re-rank : LangChain ãš Cohere ReRankã®çµ±åã¯1ã€ã®ã¢ãããŒãã§ããã倧éã®ããã¥ã¡ã³ããååŸããå Žåã®ããã¥ã¡ã³ãå§çž® (åé·æ§ã®åæž) ã«äœ¿çšã§ããŸããããã«é¢é£ããŠããRAG-fusionãã¯çžäºã©ã³ã¯ãã¥ãŒãžã§ã³ (ããã°ãšå®è£ ãåç §) ã䜿çšããŠãmulti-query (äžã§èª¬æ) ãšåæ§ã«ãååŸè ããè¿ãããããã¥ã¡ã³ãã ReRank ããŸãã
ã»Classification : OpenAI ã¯ãååŸããåããã¥ã¡ã³ãããã®å 容ã«åºã¥ããŠåé¡ããåé¡ã«å¿ããŠç°ãªãããã³ãããéžæããŸããããã㯠2 ã€ã®ã¢ã€ãã¢ãçµã³ã€ããŸããLangChain ã¯ãåé¡ã®ããã®ããã¹ãã®ã¿ã°ä»ã (ããšãã°ã颿°åŒã³åºãã䜿çšããŠåºåã¹ããŒãã匷å¶ãã) ããµããŒãããŸããåè¿°ããããã«ãè«çã«ãŒãã£ã³ã°ã䜿çšããŠãã¿ã°ã«åºã¥ããŠã«ãŒãã£ã³ã°ããããšãã§ããŸã (ãŸãã¯ãè«çã«ãŒãã£ã³ã°ãã§ãŒã³èªäœã«ã»ãã³ãã£ã㯠ã¿ã°ä»ãã®ããã»ã¹ãå«ããããšãã§ããŸã)ã
èæ ®ãã¹ãä»ã®ã¢ã€ãã¢ã¯ã次ã®ãšããã§ãã
ã»MMR : é¢é£æ§ãšå€æ§æ§ã®ãã©ã³ã¹ããšãããã«ãå€ãã®ãã¯ãã«ã¹ãã¢ã¯max-marginal-relevance searchãæäŸããŠããŸã (ããã°æçš¿ãåç
§)ã
ã»Clustering : äžéšã®ã¢ãããŒãã§ã¯ããµã³ããªã³ã°ã«ããåã蟌ã¿ããã¥ã¡ã³ãã®clusteringã䜿çšãããŠããŸããããã¯ãåºç¯å²ã®ãœãŒã¹ã«ãããããã¥ã¡ã³ããçµ±åããå Žåã«åœ¹ç«ã€å¯èœæ§ããããŸãã
