æ¬èšäºã¯æ¥æ¬ãªã©ã¯ã«ãéå¶ããäžèšMeetupã§çºè¡šäºå®ã®å 容ã«ãªããŸããçºè¡šãŸã§ã«ä»åŸãå 容ã¯äºåãªã倿Žãããå¯èœæ§ãããããšãããããããäºæ¿ãã ãããäžèšã»ãã·ã§ã³ã§ã¯ãæ¬èšäºã®å 容以å€ã«ãã¢ã³ã¹ãã¬ãŒã·ã§ã³ã宿œããäºå®ã§ãã
â»ã»ãããŒå®æœæžã®åç»ã«é¢ããŠã¯ä»¥äžããåç §ãã ããã
ã¯ããã«
2022幎æ®ããChatGPTã®ç»å Žä»¥éãããããäŒæ¥ãDXã®åšãæ¹ãåããã¯ãããå€§èŠæš¡èšèªã¢ãã«ã®ä»çµã¿ãã©ã®ããã«æ¥åã«åãå ¥ããããæ€èšãããŠãããšæããŸãã
ãã®æ€èšã®äžã€ãšããŠããGPT(LLM)ãåŠç¿ããŠããªãäŒæ¥å ã®ããŒã¿ãææ°ã®ããŒã¿ãæå¹æŽ»çšãã¹ãã ãšããç¹ã¯éåžžã«å€§ããªè«ç¹ãªã®ã§ã¯ãªãã§ããããã
ãåãã®éããLLMãšã¯ã€ã³ã¿ãŒãããäžã«ååšããããã¥ã¡ã³ãããŒã¿ãã¯ããŒãªã³ã°ã«ãã倧éã«åéãããããåŠç¿ããŒã¿ãšããŠæ©æ¢°åŠç¿ã«ãããã¢ãã«ã§ãã
åŸã£ãŠãè³æ¥µåœããåã®è©±ã§ãããLLMã¯åŠç¿ããããŒã¿ã«å ¥ã£ãŠããªãã£ãæ å ±ã«å¯Ÿããæšè«ã¯ã§ããŸãããæšæ¥çºå£²ãããã°ããã®æ°è£œåã®åžå Žã§ã®åå¿ããã€ã³ã¿ãŒãããã«å ¬éãããŠããªã瀟å ããã¥ã¡ã³ãã«é¢ããæ å ±ãçããããšã¯LLMãããã€ããæäŸããããã©ã«ãã®LLM(ãã¡ãŠã³ããŒã·ã§ã³ã¢ãã«)ã§ã¯ã§ããªãã®ã§ãã
LLMã¯æ·±å±€åŠç¿ã®ç£ç©ã§ããããã®æ·±å±€åŠç¿ã«ã€ããŠç¥èŠã®ããæ¹ã¯ãã¡ã€ã³ãã¥ãŒãã³ã°ãšåŒã°ããææ³ãããããšããåãã ãšæããŸãããã¡ã€ã³ãã¥ãŒãã³ã°ãšã¯å ¬éãããŠããåŠç¿æžã®ã¢ãã«ã«ãç¬èªã®ããŒã¿ã远å ã§åŠç¿ãããæ°ããªç¥èãèããã¢ãã«ãäœãåºãæè¡ãLLM以å€ã§ã深局åŠç¿ã®äžçã§ã¯äŒå®¶ã®å®åã®ããã«åºãç¥ãæž¡ã£ãŠããéåžžã«äžè¬çãªãã©ã¯ãã£ã¹ã§ãã
ãããã£ãŠããã¡ãŠã³ããŒã·ã§ã³ã¢ãã«ãåŠç¿ããŠããªãããŒã¿ã«ã€ããŠãçããŠã»ããå Žåã¯ãã®ãã¡ã€ã³ãã¥ãŒãã³ã°ãããã°ãããšããããšã«ãªããŸïœãããå®åã¬ãã«ã§ãã¡ã€ã³ãã¥ãŒãã³ã°ãå®è£ ããæ¹ã§ããã°ãããäžã€ã®çåãå¿ ãçãŸããã¯ããOpenAI瀟ã«éãããçŸåšäžçäžã®LLMãããã€ããæäŸããŠããã¢ãã«ã¯ã€ã³ã¿ãŒãããããåŸããã倧éã®ããã¹ãããŒã¿ãåŠç¿ããæ°ååã®ãã©ã¡ãŒã¿ãæã€è¶ 巚倧æšè«ã¢ãã«ãããããã¡ã€ã³ãã¥ãŒãã³ã°ãå®ç³ææ³ãšèšã£ãŠããèªåãäœã£ãç¬èªããŒã¿ã§ãæãããŠããã®è¶ 巚倧ã¢ãã«ãæã€æšè«ã®æ¹åæ§ãé©åã«å€ããããšãã§ããã®ãïŒãšã
ãã®åãã«å¯ŸããçããšããŠã¯ããçµå±ãæ©æ¢°åŠç¿ã¯ãã£ãŠã¿ãªããšããããªãããšãªããããŒã¿ãäœãåŠç¿ããããšããèšå€§ãªæéãèŠããäœæ¥ãªãã«ãäºåã«äœã確èªããææ³ãšãããã®ã¯æ®å¿µãªãããããŸããã
ãããŠãã¡ã€ã³ãã¥ãŒãã³ã°ãå¹ããŠãããã©ããã確èªããäœæ¥ã¯ãäŸãããªããç å Žã«ç éãæã蟌ã¿ãå床ãã®ç éãååããããšè©Šã¿ããããªãã®ã§ããä»ã®æ·±å±€åŠç¿ã§ã¯ããç¥ããããã®âã¡ãã£ãšå€ãã£ãâLLMãšåŒãã§ããæšè«ã¢ãã«ã«ãããŠããã®äœæ¥ãåžžã«å¹æçãã©ããã¯çåãæ®ããŸãã
ãããªäžããã¯ããã¡ã€ãã¥ãŒãã³ã°ä»¥å€ã®æ°ã ã®ææ³ã暡玢ãããŠãããæ¬èšäºã§ã¯ãã®äžã§ãããã¯ãã«ã¹ãã¢ã䜿ããLLMãåŠç¿ããŠããªã瀟å ããŒã¿ãªã©ãåŠç察象ã«ããããšãã§ããå®è£ ãµã³ãã«ãã玹ä»ããŸãã
â»ãã¡ã€ã³ãã¥ãŒãã³ã°ã«ã€ããŠãèå³ããæ¹ã¯ãã¡ã
ChatGPTãç¥ããªãã§ããã質åãããŠã¿ã
ChatGPT(æ¬èšäºã®å ŽåGPT3.5)ãåŠç¿ããŠããããŒã¿ã¯2021幎9æãŸã§ã®ããŒã¿ã§ããLangChainã¯2022幎10æã«ãªãªãŒã¹ãããOSSã§ãã®ã§ChatGPTã«è³ªåããŠã¿ãŠãåœç¶ä»¥äžã®ããã«ã銎æã¿ã®ã¡ãã£ãšã€ããªãåçã
Wikipedia LangChain
ãã£ãšããããããäŸã¯ãã¡ãã
ä»åã¯ããã®ç¶æ ãããã¯ãã«ããŒã¿ããŒã¹ãšã®é£æºã«ãããLangChainã«é¢ããç¥èã远å ããŠã¿ãŸãã
ChatGPT(LLM)ãç¥ããªãç¥èããã¯ãã«ã¹ãã¢ã§è£å®(RAGæ§æ)
ãã¡ã€ã³ãã¥ãŒãã³ã°ãšã®éã
ãã¡ã€ã³ãã¥ãŒãã³ã°ã§ã¯ãLLMãæã£ãŠããªãç¥èããLLMã«è¿œå ã§åŠç¿ãããLLMèªäœãè³¢ããããšããã¢ãããŒãã§ãããããã«å¯Ÿãããã¯ãã«ã¹ãã¢äœµçšã®æ§æã§ã¯ãLLMãç¥ããªãæ å ±ããã¯ãã«ã¹ãã¢ã«ãã蟌ãã§ãããŠãLLMåäœã§ã¯ãªãããã¯ãã«ã¹ãã¢ãšã®åããæã§æçµçãªåçãäœããããã«ããŸãã
ããŸãå°éçšèªã¯äœ¿ããããªãã®ã§ããããã¯RAG(Retrieval-Augmented Generation)ãšåŒã°ããæ§æãšããŠéåžžã«æåã§ãLLMãæã£ãŠããªãç¥èãLLMå€éšã®æ å ±ãœãŒã¹ã§è£ãããšãç®çãšãããã®ã§ãã
ã远å ã®ç¥èããšã¯ã©ã®ãããªããŒã¿ãªã®ã
ãšãªããšããã®ã远å ã®ç¥èããšã¯äžäœã©ããããã®ãªã®ãïŒãšãããšãããéèŠã«ãªã£ãŠããŸããçŸåšããã¯ãã«ããŒã¿ããŒã¹ã«ãã蟌ãããã¥ã¡ã³ãããŒã¿ãšããŠäž»ã ã£ããã®ã¯ä»¥äžã®3ã€ã§ãã
-
äŒæ¥å ã®ããŒã¿
äŒæ¥ãæã€ç€Ÿå ããã¥ã¡ã³ããã瀟å¡ãæ¥ã äœæããŠããããã¥ã¡ã³ãããŒã¿ãšãããã®ã¯ã€ã³ã¿ãŒãããã«å ¬éãããŠããªããã®ãå€ã ãããšæããŸããåœç¶ãªãããLLMãããã€ããŒãæäŸããŠããããã©ã«ãã®LLMã¯ãããäŒæ¥å ããŒã¿ãåŠç¿ããŠããŸããã®ã§æšè«ã§ããªããšããããšã«ãªããã远å ã®ç¥èãã®ææååè£ãšãªããŸãã -
å°éæ§ã®é«ãããŒã¿
åºæ¬çã«Transformerã¿ã€ãã®LLMã¯ãã¡ã€ã³ãã¥ãŒãã³ã°ãRAGãæ§æããªããŠãããªãã¹ãLLMåäœã§æšè«ãã§ããããšãç®çãšããŠäœãããŠããŸããã§ãããç¹ã«å°éæ§ã®é«ãããŒã¿(äŸãã°ãå»çãæ³åŸãéèãªã©ãªã©)ã«ã€ããŠèšããšãçŸåšäžè¬çã«æäŸãããŠããLLMã®æšè«ç²ŸåºŠã¯ãã®åéã®å°éå®¶ãæºè¶³ããã¬ãã«ã«ã¯è³ã£ãŠããŸããããã¡ãã¯æµ·å€ãåœå ã®æ§ã ãªå£äœãäŒæ¥ãæ¥çç¹ååã®LLMãéçºããåžå ŽååããããŸããããŸã ãŸã å€ãã®äŒæ¥ããã®ãããªåãçµã¿ãè¡ããç¶æ³ã§ã¯ãªããç°¡åã«å°éæ§ã®é«ãããŒã¿ãçæAIã®å¯Ÿè±¡ã«ã§ããæ§æã¯éèŠãé«ããšãã£ãŠããç¶æ³ã ãšæããŸãã -
ã€ã³ã¿ãŒãããã«å ¬éãããŠéããªãææ°ããŒã¿
LLMã¯ããã€ã³ã¿ãŒãããããäžå®æéãã蟌ãŸããæ å ±ã䜿ã£ãŠåŠç¿åŠçãè¡ã£ãçµæäœããããã®ã§ãããã€ã³ã¿ãŒãããã«å ¬éãããŠéããªãææ°ããŒã¿ã¯åŠç¿ããŠããªãå¯èœæ§ããããŸããææ°ã®æ å ±ãŸã§ãã«ããŒããŠã¿ã€ã ãªãŒã«ç²ŸåºŠé«ãæšè«ãã§ããããšãæ±ããããã·ã¹ãã ãå€ã ãããŸãã
RAGã®æ§æãšåŠçãããŒ
ãã®ãããªããŒã¿ã«ã察å¿ã§ããããã«ããããã«ãRAGæ§æã®äžã€ãšããŠãLLMãšãã¯ãã«ããŒã¿ããŒã¹ã®åããæããããŸãããã®åããæã®åŠçãããŒãšããŠã¯ä»¥äžã®å³ã®ãããªæãã§ãåååæ§ã«LangChainãšåŒãã§ãããã¬ãŒã ã¯ãŒã¯ãLLMãšãã¯ãã«ã¹ãã¢ã飿ºããã圢ã§promptããæšè«ããŸãã
ã€ãŸããLLMãç¥ããªãæ å ±ãå ¥åãããéããã¯ãã«ã¹ãã¢ã«ããã®ãã³ããããã£ãŠããã®ãã³ããããŒã¹ã«æçµçãªæç« ãLLMãçæãããšããæµãã§ãããã®æ§æã§ã¯ããã¡ã€ãã¥ãŒãã³ã°ã®ããã«LLMã®ååŠç¿ã¯å¿ é ã§ã¯ãããŸãããåŸã£ãŠãåŠç¿çšããŒã¿ãäœãå¿ èŠã¯ãªãã®ã§ããããã®ä»£ããã«ããã¯ãã«ã¹ãã¢ãæ§ç¯ããéçšãããšããå·¥æ°ãçºçããŸãã
RAGã®å®è£ ãµã³ãã«
ãã®æ§æã®äž»åœ¹ã¯ååã®èšäºã§ãã玹ä»ããLangChainã§ããéåžžã«åºã䜿ãããããè³é調éãããŸããã£ãŠããã©ã€ãã©ãªãªã®ã§ãã°ããã¯å®å¿ããŠå©çšã§ãããã§ãããšããããšã§ãäžèšãããŒã®äž»ã ã£ãç»å Žäººç©ãšããŠã¯ä»¥äž3ã€ãšãªããŸãã
- LLM
- LangChain(ãšPythonå®è¡ç°å¢)
- Vector Store
ãããŠä»åããOracle Cloudããµãã ãã«äœ¿ã£ãŠãããããšæããŸãã(ãšã¯èšããã³ãŒããæ§æèªäœã¯OSSã§æ§æãããšããšå šãåãã§ãã)
- LLM -> OpenAI瀟ã®GPT
- LangChain(ãšPythonå®è¡ç°å¢) -> Oracle Cloudã®Data Science Service
- Vector Store -> Elasticsearch on OCI IaaS(marketplace)
ã€ãŸãæ§æãšããŠã¯äžå³ã®ããã«ãªããŸãã
â»ã¡ãªã¿ã«ãLangChainããµããŒãããLLMããã¯ãã«ããŒã¿ããŒã¹ã®äžèЧã¯äžèšããåç §ã§ããŸãã
LLM(å€§èŠæš¡èšèªã¢ãã«)
LLMã¯æ°å€ã§ã¯ãªããèªç¶èšèªãšããèšèãå ¥åãæšè«ãããšããå°ãå€ãã£ãã¢ãã«ã§ãããšã¯èšãæ©æ¢°åŠç¿ã§äœãããã¢ãã«ã§ããããåŠç¿ããŒã¿ãçšæããŠãçµ±èšåŠçã«ãããŠã¢ãã«ã宿ããããšããæ·±å±€åŠç¿ã®äœæ¥ã¯ãã®ä»ã®æ©æ¢°åŠç¿ãšäœãå€ãããŸããã
äžå³ã¯LLMãããã€ããŒãæäŸããŠããã¯ã©ãŠããµãŒãã¹ã®å©çšã€ã¡ãŒãžãèšèŒããŠããŸãããã以å€ã«ãªãŒãã³ãœãŒã¹ã®LLMãªã©ããŒã«ã«ã«ããŠã³ããŒãããŠå©çšãããã¿ãŒã³ããããŸãã
ä»ã®æ©æ¢°åŠç¿ãšå€§ããéãç¹ã¯ãLLMã®å ŽåããŠãŒã¶ãŒã¯åŠç¿åŠçã¯ãããOpenAIãªã©ãæ¢ã«åŠç¿ãããã¢ãã«ãå©çšããã±ãŒã¹ãå€ããšããç¹ã§ãããã®çç±ã¯LLMã®åŠç¿ããŒã¿ã®æ§è³ªã«èµ·å ããŸãã
LLM以å€ã®ã¢ãã«ã¯èªç€Ÿã§åŠç¿ããŒã¿ãçšæããŠåŠç¿åŠçããè¡ãèªç€Ÿã§ã¢ãã«ãéçºããªããã°ãããªãã±ãŒã¹ãå€ããããŸããããã¯ããã®åŠç¿ããŒã¿ããã®äŒæ¥åºæã®ããŒã¿ã ããã§ãã
ããã«å¯ŸããŠLLMã¯ã©ãã§ãããããäžè¿°ããéããLLMã¯äžè¬çãªèšèãåŠç¿ããŒã¿ãšãªãã¢ãã«ã§ããèšèã«ãããäŒæ¥åºæã®èšèããšãããã®ã¯åºæ¬çã«ã¯ãããŸãããæ¥æ¬èªã¯ã©ãã®äŒæ¥ã§ãã©ãã®åœã§ãåãæ¥æ¬èªã§ãã
ãŸãèšèãåŠç¿ããŒã¿ãšããå Žåããã®ããŒã¿ã®å ¥æã«å°ãããšã¯ãªãã§ããããã€ã³ã¿ãŒãããã«èšå€§ãªããã¥ã¡ã³ãããŒã¿ãååšãã誰ã§ãå ¥æã§ããããã§ãããã
ãšãªãã°ããã®ããŒã¿ã䜿ã£ãŠãåªããLLMãæäŸããããšããLLMãããã€ããŒã沢山åºçŸããŠãäœãäžæè°ã¯ãªãããŠãŒã¶ãŒã¯ããããããã€ããæäŸãããµãŒãã¹ãå©çšããããšã§ãåŠç¿åŠçãè¡ãå¿ èŠããªããšããããšã«ãªããŸãã
ããããçç±ããçŸåšãã®åžå Žã«ã¯æ²¢å±±ã®LLMãããã€ããŒãååšããå·šé¡ã®æè³ãããŒãæäŒããäžå€§ããŒã±ããã圢æããã€ã€ãããšããç¶æ³ã§ããã®æå 端ã«ããã®ããŸãã«OpenAI瀟ãšããããšã«ãªããŸãã
ãã¡ãããLLMããŒãããéçºãããšããäŒæ¥ã沢山ååšããŸããç¹ã«æè¿ã§ã¯æ¥æ¬èªã®ç²ŸåºŠãé«ãããããšã«ãã©ãŒã«ã¹ããã¢ãã«ã ã£ãããæ³åŸé¢ä¿ãªã©å°éçãªåéã«ãã©ãŒã«ã¹ããã¢ãã«ãéçºããŠå ¬éããŠããäŒæ¥ãç ç©¶æ©é¢ã¯ãããŸãããã®ä»ãã»ãã¥ãªãã£ã®èгç¹ããLLMãèªç€ŸéçºããäŒæ¥ããããŸãã
ãã ãLLMã®ã¢ãã«éçºã¯å€§èŠæš¡ãªåŠç¿ç°å¢ãå¿ èŠãªããè«å€§ãªã³ã¹ããèŠããç¹ããææ°ã®åŠç¿ææ³(ç¹ã«åæ£åŠç¿ãåŠç¿ãã©ã¡ãŒã¿æ°ãæžããææ³)ã«ã€ããŠã¯æ°ã ã®ãã¬ãŒã ã¯ãŒã¯ãããããããã«pros/consããããšããç¶æ³ã§äžè¬çã«ã¯æè¡çãªé£æåºŠãéåžžã«é«ããšèšãããŠããŸããã§ãã®ã§ãå€ãã®ãŠãŒã¶ãŒã¯æ¢ã«åŠç¿æžã®ã¢ãã«ã䜿ã£ããããã®ã¢ãã«ãããŒã¹ãšããŠãã¡ã€ã³ãã¥ãŒãã³ã°ãããšããéžæããšãåŸåã«ãããŸãã
LangChain
çŸåšãLLMåšèŸºã«ã¯æ§ã ãªãã¬ãŒã ã¯ãŒã¯ã®ã©ã€ãã©ãªãååšããŸããæåãªãšããã ãšä»¥äžã®ãããªãã®ã§ãã
- LangChain
- LlamaIndex
- Sementic Kernel
ã©ã®ããŒã«ãLLMãšããã®ä»ã®ãµãŒãã¹ãšã®é£æºãäž»ãªç®çãšãããã¬ãŒã ã¯ãŒã¯ã«ãªã£ãŠãããLLMããã®é£æºå ã®ãµãŒãã¹ã«å¿ããŠãæ§ã ãªåŠçãæœè±¡åºŠã®é«ã颿°ã§ã·ã³ãã«ã«ã³ãŒãã£ã³ã°ã§ããéåžžã«å€æ©èœãªã©ã€ãã©ãªãšãªã£ãŠããŸãããããã®ãã¬ãŒã ã¯ãŒã¯ã®äžçªã®èèã§ããLangChainã®äž»ã ã£ã飿ºãµãŒãã¹ãèŠãŠã¿ããšä»¥äžã®ãããªãã®ã«ãªããŸãã
飿ºæ§é ãšããŠã¯éåžžã«ã·ã³ãã«ã§ãLLMãšã飿ºãµãŒãã¹ãšã®éã«LangChainãäœçœ®ãã飿ºã®åžä»€å¡ãšãªããŸããLangChainã¯LLMãã飿ºãµãŒãã¹ãšã®æ¥ç¶ãä¿æããŠãããåŠçãããå 容ã«å¿ããŠãããã³ãããLLMã«é£æºããããLLMããåŸãããæ å ±ãããã®ä»ã®ãµãŒãã¹ã«é£æºããã(ãã®éãè¡ããŸãã)ãšãããŒã¿ãããŒãšããŠã¯LLMãšé£æºãµãŒãã¹ã®éãè¡ã£ããæ¥ããããããšã«ãªããŸãããã®ãããªåŠçãåãµãŒãã¹ã®APIã䜿ã£ãŠãŒãããŒã¹ã§éçºãããšçžåœãªã³ãŒãéã«ãªããŸãããLangChainã¯ãããæœè±¡åããæ°è¡ã®ã³ãŒãã§å®çŸã§ãããããªã©ã€ãã©ãªã«ãªã£ãŠããŸãã
ååã®èšäº(äžèšãªã³ã¯)ã§ã¯ãªã¬ãŒã·ã§ãã«DBãšã®é£æºãåãäžããŸããããä»åã¯ãã¯ãã«DBã§ãã
ãã¯ãã«ããŒã¿ããŒã¹
RDBãšã®éã
ãã¯ãã«ããŒã¿ããŒã¹ã¯åŒç§°ã«ãããŒã¿ããŒã¹ããä»ããŠããŸãã®ã§ããã¡ãããããŒã¿ã貯ããæ€çŽ¢ããŠå¿ èŠãªããŒã¿ãåãåºãããšãç®çãšããŠããŸãããã ãäžè¬çãªããŒã¿ããŒã¹(ããããRDBãªã©)ãšã¯ç°ãªã貯ãããããŒã¿ããã¯ãã«ããŒã¿ãšãªããããã«ä»éããŠæ§ã ãªéãããããŸãã
ãããŠãã®ãã¯ãã«ããŒã¿ããŒã¹ã¯ãLLMãšã¯éåžžã«çžæ§ãããã§ããLLMã§ã¯æç« ã¯ãã¯ãã«ã«å€æããŠåŠçããããã§ããæç« ãåèªã¯ããã¹ãããŒã¿ã®ç¶æ ã§ã¯çµ±èšé¢æ°ã«å ¥åããããšãã§ããªããããå¿ ãéçããŒã¿ã«å€æããå¿ èŠããããããããã¯ãã«ããŒã¿ãšããããšã«ãªããŸãã
æç« ãæ°å€ããŒã¿ã«å€æããåŠçïŒEmbedding(åã蟌ã¿)
æç« ãã©ããã£ãŠãã¯ãã«ã«å€æããã®ãïŒããã¯EmbeddingãšåŒã°ããåŠçãè¡ãããšã§å€æãå¯èœã«ãªããŸãããã®EmbeddingèªäœãLLMã®æ©èœã§è¡ããŸãããEmbeddingã®åŠçã ãã察象ãšããLLMãªã©ãäžã®äžã«ã¯æ²¢å±±ãããŸãã
äžå³ã®ããã«ãEmbeddingã®åŠçã«ãã£ãŠæç« ããã¯ãã«(ãããŠãã«èšããšæ°å€ããŒã¿)ã«å€æãããã®ã§èšç®ãã(æ§ã ãªé¢æ°ã«å ¥åãã)ããšãã§ããããã«ãªããŸãã
â»GPTã®Embeddingã«ã€ããŠãã詳ããç¥ãããæ¹ã¯ãã¡ã
â»Embeddingã«äœ¿ãã¢ãã«ã¯OpenAIã ãã§ã¯ãããŸããããã®ä»ã®LLMãããã€ããŒããªãŒãã³ãœãŒã¹ã®LLMãååã«äœ¿ããŸãã
ããã§ã®æ¬è³ªã¯ããã®ãã¯ãã«ã®å€ãã©ã®ããã«æ±ºãŸãã®ãïŒã©ãã£ãããžãã¯ã§ãã¯ãã«ã«å€æãããã®ãïŒãšããããšã ãšæããŸããããã«é¢é£ããããŒã¯ãŒããæå³ç©ºéãšãããã®ã§ãã
æå³ç©ºé
æç« (ãåèª)ããã¯ãã«åããããšã«ãããæç« ãèšç®ããããšãã§ããããã«ãªãã®ã¯äžè¿°ããéãã§ããã§ãããããå°ãå³å¯ã«ãããšããæç« (ãåèª)ãã§ã¯ãªãããæç« (ãåèª)ã®æå³ããèšç®ã§ããããã«ãªããŸããä»®ã«ããã®æå³ç©ºéãäºæ¬¡å ã ãšããå Žåãäžå³ã®ãããªã€ã¡ãŒãžã§ããæå³ã®è¿ãåèªã¯è¿ããã¯ãã«ãæã¡ãŸãã
ãã®ãã¯ãã«åãããããšã§åèªåå£«ã®æå³ã®è¿ããèšç®ããããåèªã®æå³èªäœãèšç®ããããšãã§ããããã«ãªããŸããåèªã®æå³ãèšç®ããäŸãšããŠäžèšã¯ããŸãã«ãæåã§ãã
ããã¯åçŽãªååæŒç®ã®äŸã§ãããLLMã®æšè«åŠçããã¯ãã«ã¹ãã¢ã§ã®ã»ãã³ãã£ãã¯æ€çŽ¢ãé¡äŒŒæ€çŽ¢ã§ãèŠé ã¯åãã§ãããããã¯çµ±èšåŠçã®ãããªãã£ãšé«åºŠãªæŒç®åŠçãè¡ããŸãã
ããã¯ãã«åãã§ã¯ãªããåã蟌ã¿ããšåŒã¶çç±
Embedã®åŠçã¯ãåã蟌ã¿ãããåã蟌ã¿ãã¯ãã«ãããåã蟌ã¿è¡šçŸããªããŠèšããæ¹ãããŸããåããŠèãããæ¹ã¯ãã®ãåã蟌ãããšãã衚çŸãã€ã¡ãŒãžãèŸãã®ã§ã¯ãªãã§ããããã
äžè¿°ã®äºæ¬¡å ã®æå³ç©ºéã¯ãååèªã®å±æ§ã®ãããªãã®ãããŒã¹ã«è¿ãããã¯ãã«ã«ãªãããã«çè ãé©åœã«çµµãæžãããã®ã§ãããã®äžã®ãäŸãã°ããå¯å£«å±±ããšããåèªã¯ãå±±ããšããæå³åããæã¡ãŸããããä»ã®å±±ãšè¿ãããã¯ãã«ã®çµµã«ããŸãããã§ããããå¯å£«å±±ãäœçœ®ããåœã¯æ¥æ¬ããšããæå³åãã«ãããŠã¯ãæ¥æ¬ããšããåèªã®ãã¯ãã«ã®ã»ãã«æãè¿ããªããšãããªãã¯ãããããŠããå¯å£«å±±ã¯æ¥æ¬ã§æšé«ãäžçªé«ãããšããæå³åãã«ãããŠã¯ãäžçªããšããåèªã®ãã¯ãã«ãšäžçªè¿ããªããã°ãããªãã¯ãã§ãããã®ããã«åèªã¯æèã®äžã§æ§ã ãªæå³ããã¡ãŸãã®ã§ãå®éã¯äŸç€ºãããããªäºæ¬¡å ã§ã¯ãšãŠã衚ãããšãã§ãããçŸåšåžå Žã«åºåã£ãŠããLLMã®Embedã¢ãã«ã¯ã ããã753次å ïœ2048次å ãšãã髿¬¡å ã®ãã¯ãã«ãçæãããã®ãäž»æµã§ãã
ã€ãŸããåèªãæç« ãEmbedãããšãäžå³ã®ããã«ããããã¯LLMãäºååŠç¿ãã髿¬¡å ã®æå³ç©ºéã«åã蟌ãŸãããããªã€ã¡ãŒãžãçè§£ããããã®ã§ã¯ãªãããªãšæããŸãã
ãã®ããã«ããŠãæç« ããŒã¿ã倿ãããã¯ãã«ã倧éã«ãã¯ãã«ããŒã¿ããŒã¹ã«ãã蟌ãã§æ€çŽ¢ãã§ããããã«ããŸãã
RDBã§ã¯è²¯ã蟌ãã ããŒã¿ãæ€çŽ¢ããããã«ã¯ãšãªãå®è¡ããŸããããã¯ãã«ããŒã¿ããŒã¹ã®æ€çŽ¢åŠçãšã¯ã¯ãã»ãã³ãã£ãã¯æ€çŽ¢ãšããããšã«ãªããŸããã»ãã³ãã£ã¯ã¹ãšã¯æ¥æ¬èªã§ãæå³è«ããæããã»ãã³ãã£ãã¯æ€çŽ¢ãšã¯RDBã®ãããªåã«æ€çŽ¢ããŒã¯ãŒãã®äžèŽã«ããæ€çŽ¢ã§ã¯ãªãããã®ããŒã¯ãŒããæã€æå³ãèæ ®ããæ€çŽ¢ãè¡ããšããããšã§ããããã¯æå°±y接ããããã«æç« ããŒã¿ããã¯ãã«ããŒã¿ã«å€æ(æå³ç©ºéã«ãããã³ã°ãã)ããšã«ããå®çŸããæ©æ§ã§ãã
ãã¯ãã«ããŒã¿ããŒã¹ã®ã»ãã³ãã£ãã¯æ€çŽ¢ãé¡äŒŒåºŠæ€çŽ¢
äŸãã°ãå ã»ã©ã®äºæ¬¡å ã®æå³ç©ºéãæã£ããã¯ãã«ããŒã¿ããŒã¹ã«ãæ±äº¬ããšããããŒã¯ã³ã§æ€çŽ¢ããå ŽåãèããŠã¿ãŸãã
RDBã§ã¯nameåã®ãæ±äº¬ããšããæåãäžèŽããè¡ãæ€çŽ¢ããã®çµæãåŸãããããšãããããŸããããã¯åçŽã«ãæ±äº¬ããšããããŒã¯ãŒããéšåäžèŽããŠãããã©ããã ãã§æ€çŽ¢ãããŠãããšããç¶æ³ã§ãã
ããã«å¯ŸããŠãã¯ãã«ããŒã¿ããŒã¹ã§ã¯äžè¿°ããããã«ãæ±äº¬ããšããåèªãæã€æå³ãèæ ®ããã¯ãšãªçµæãåŸãããã€ã¡ãŒãžã§ãããæ±äº¬ããšããåèªã¯æ¥æ¬ã®éŠéœã§ãããéœåžã§ãããé«å±€ãã«ãç«ã¡äžŠã¶ãšãªã¢ããšããæ§ã ãªæå³åãããããŸãããããæå³åãã®è¿ãåèªããã¯ãã«ããŒã¿ããŒã¹ã«ä¿åãããŠããå Žåãã»ãã³ãã£ãã¯æ€çŽ¢ã«ãã£ãŠããããè¿ãåèªã®æ€çŽ¢ãå¯èœã«ãªããŸãã
ãã¯ãã«ããŒã¿ããŒã¹ã§ã¯ã©ã®ããã«ãã¯ãã«ã®é¡äŒŒåºŠãèšç®ããŠããã®ã
Embeddingã®åŠçã§ã¯äŒŒãæå³ããã€åèªã¯è¿ããå€ã®ãã¯ãã«å€ãå²ãåœãŠãããŸãããããã£ãŠãã»ãã³ãã£ãã¯æ€çŽ¢ãããããšã«ãã£ãŠããã®ãã¯ãã«å€ãã©ããããè¿ãå€ãªã®ããèšç®ããæå³åãã®äŒŒãåèªãæ€çŽ¢ããããšãã§ããããã«ãªããŸãã
ãã®éããã¯ãã«å€ãè¿ããšã¯å ·äœçã«ã©ãããç¶æ³ãæå³ããã®ãïŒãšããç¹ãéèŠã§ããç§éã¯é«æ ¡ã®ä»£æ°ã»å¹ŸäœåŠã®ææ¥ã§ãã¯ãã«ãšã¯ãåãããšã倧ããããæã€éçããŒã¿ãšç¿ã£ãã¯ãã§ãããŸãå®éã«ã¯ãéçããŒã¿ããšããåèªã¯äœ¿ã£ãŠããªãã£ããšããŠãããã¯ãã«ãšã¯åããšå€§ããããšåŠç¿ããã¯ãã
ãšããããšã¯ããã¯ãã«ã®ãåãããšã倧ããããèšç®ãããããã°ãã¯ãã«ã®é¡äŒŒåºŠã枬ãããšããããšã«ãªããã²ããŠã¯æå³ã®è¿ãåèªãæ€çŽ¢ããŠãããšããããšã«ãªãããã§ãã
ãã®åããšå€§ããã®èšç®ã«äœ¿ãããèšç®ææ³ã以äžã®ãããªãã®ã§ãã
- ãã¯ãã«ã®ãåãã
- ã³ãµã€ã³é¡äŒŒåºŠããããç©
- ãã¯ãã«ã®ã倧ããã
- ãŠãŒã¯ãªããè·é¢
åŒç§°ããé£è§£ãªèšç®ãããŠããå°è±¡ãåããŸãããéåžžã«ã·ã³ãã«ãªæŒç®åŠçã§ãã
ãã£ãããããšããã£ãŠããããšã¯
- ã³ãµã€ã³é¡äŒŒåºŠããããç©
- ãã¯ãã«ã®å è§ã«é¢ä¿ããèšç®ãããŠãã
- å è§ãå°ããã»ã©äŒŒããããªãåãããšãªããè¿ãããã¯ãã«ãšãªã
- ãã¯ãã«(è¡å)ã®å ç©ãããŒã¹ã«èšç®
- ãŠãŒã¯ãªããè·é¢
- ãã¯ãã«ã瀺ã2ç¹éã®çŽç·è·é¢ã枬ãèšç®ãããŠãã
- è·é¢ãè¿ãã»ã©äŒŒããããªã倧ããããšãªããè¿ãããã¯ãã«ãšãªã
- ãã¿ãŽã©ã¹ã®å®çããèšç®
ãšããæãã§ããè¡åæŒç®ããã¿ãŽã©ã¹ã®å®çãç§éãäžé«çã®æã«å匷ããå 容ã§ãããããããªã·ã³ãã«ãªèšç®ã§æçµçã«é«åºŠãªåŠçãã§ããã®ã¯ãŸãã«ãã®åå·¥çšã§EmbeddingãããŠãããããšããããšã«ãªããŸãã
ãã¯ãã«ããŒã¿ããŒã¹ã§è¡ããããã¯ãã«æŒç®ã®å¹çå
ãã ããã·ã³ãã«ãªæŒç®åŠçãšã¯èšããã¯ãšãªã®åºŠã«ãã¯ãã«ããŒã¿ããŒã¹å ã®å šãŠã®ãã¯ãã«ãšã®è¡åæŒç®ãããã®ã¯éåžžã«éå¹çã§ããRDBã«äŸãããšã¯ãšãªãå®è¡ããéã«å šè¡šææ»ãå®è¡ãããŠããŸãã€ã¡ãŒãžã§ããRDBã§ã¯ãããªããªãããã«ããããã«ããŒãã£ã·ã§ãã³ã°ãã玢åŒãäœããŸãããããã¯ãã«ããŒã¿ããŒã¹ã§ã䌌ããããªããšãããŠããŸããããã¯ãèšå€§ãªæ°ã®ãã¯ãã«ããŒã¿ããå€ã®è¿ããéå£ã«åé¡ããŠãã°ã«ãŒãåäœã§åŠçããããšã«ããæŒç®åŠçãå¹çåãããšãããã®ã§ãã
ãã®åé¡åŠçã«ã¯å€å žæ©æ¢°åŠç¿ã§ã銎æã¿ã®æè¿åæ³ã䜿ãããŠãã±ãŒã¹ãå€ãã§ããkè¿åæ³(KNN)ãè¿äŒŒæè¿åæ³(ANN)ãªã©ã§ãããã®ããã倧æµã®ãã¯ãã«ããŒã¿ããŒã¹ã§ã¯ãããã®ã¢ã«ãŽãªãºã ãå®è£ ãããŠãããããã©ã°ã€ã³ãªã©ã§è¿œå ã§ããããã«ãªã£ãŠããŸãã
ãã¯ãã«ããŒã¿ããŒã¹ãšããŠã®Elasticsearch
äžã®äžã«ã¯æ²¢å±±ã®ãã¯ãã«ã¹ãã¢ããããç¹ã«ææ°ã®ãã®ã¯å€§å€èå³ããããããŸãã
ã§ãããçè ãæ®æ®µå¯Ÿé¢ãã顧客ã¯ã©ã¡ãããšãããšãElasticsearchã®ãããªå€åã§å®çžŸã®ããæè¡ã奜ãåŸåãããããããã®é¡§å®¢ãéçšããŠããElasticsearchã®äžã«ã¯æ¢ã«å€§éã®ããã¥ã¡ã³ãããã¯ãã«åãããã蟌ãŸããŠããå ŽåããããŸãããã®ãããä»åã¯ãã¯ãã«ã¹ãã¢ãšããŠElasticsearchã䜿ã£ãŠã¿ãããšæããŸãã
Oracle Cloudã§ã¯Marketplaceã«Elasticsearchãããããã¿ã³ã¯ãªãã¯æ°åã§Elasticsearchã®åæ£åŠçç°å¢ãæ§ç¯ã§ããŸãã®ã§æ¯éã詊ããã ãããæ¬èšäºã§ããã®ç°å¢ã䜿ã£ãŠããŸãã
CurrikiStudio - ElasticSearch
以äžãLLMãLangChainããã¯ãã«ã¹ãã¢ãšãã3ã€ã®ç»å Žäººç©ã®ç޹ä»ãçµãã£ããšããã§å®éã®ãµã³ãã«ã³ãŒãã玹ä»ããŸãã
å ã¿ã«ãçŸåšåžå Žã«åºåã£ãŠãããã¯ãã«ããŒã¿ããŒã¹ã«ã¯OSSããæåã®ãã®ãŸã§ããããæ°åãè¶ ãã補åãååšããŸãããããã®çãç«ã¡ã¯æ§ã ã§ãPineconeãChromaã®ããã«ãããšããšãã¯ãã«ããŒã¿ããŒã¹ãšããŠå©çšããããã«éçºããããã®ã«ã€ããŠã¯ç¹ã«æµ·å€ã®ããã°ã ãšããã¯ãã«ãã€ãã£ãããªãã¯ãã«ããŒã¿ããŒã¹ãšåŒã°ããããšãå€ãããã§ãããã¡ãã®ç¹åŸŽãšããŠã¯ãšã«ããæ€çŽ¢åŠçãæ©ããšãããšããã売ãã«ãªã£ãŠããããã§ãã
ããã«å¯ŸããŠãããšããšRDBãšããŠäœ¿ãããŠããããŒã¿ããŒã¹ã«ãã¯ãã«ããŒã¿ãä¿æãæ€çŽ¢ã§ããããã«ãã補åã ãšãOracleã®Oracle DatabaseãMicrosoftã®SQL ServerãIBM DB2ãPostgreSQLã®ãã¯ãã«æ¡åŒµããŒã« pgvectorãªã©ãæåã§ãããããã¯ããšããšã¯RDBã§ãããããžãã¹ã¢ããªã±ãŒã·ã§ã³ãã䜿ãããŠããã±ãŒã¹ãå€ããšããæ§è³ªäžãããããã®ããžãã¹ããŒã¿ãä¿æããŠããç¶æ ã§éçšãããŠããã±ãŒã¹ãå€ãã§ããããããã«ãã¯ãã«ããŒã¿(æç« ããŒã¿)ã远å ããããžãã¹ããŒã¿ãšæç« ããŒã¿ãåäžã®ããŒã¿ããŒã¹ã«çºããŠä¿æãã¯ãšãªã§ããããšã倧ããªç¹åŸŽã«ãªããšæããŸãã
ãã®ä»ãããšã¯å šææ€çŽ¢ãšã³ãžã³ã§ãããšãã補åã«ElasticsearchãOpenSearchããããŸãããããã®è£œåã¯ããã¹ãããŒã¿ãæ±ãã¢ããªã±ãŒã·ã§ã³ã§å©çšãããŠãããšããããšããããããã¹ãããŒã¿ããã¯ãã«ã§æ±ããããã«ãªã£ãå©ç¹ã¯éåžžã«å€§ããã®ã§ã¯ãªãã§ããããã
ãã®ããã«ããã¯ãã«ããŒã¿ããŒã¹ã«ã¯æ§ã ãªçš®é¡ããããŸããããã®è£œåã®ç¹æ§ãèŠæ¥µããŠè£œåéžå®ãããããšãéèŠããšæããŸãã
ã³ãŒãæŠèŠ
ãŸããã¯ãã«ããŒã¿ããŒã¹ã«å ¥ããããŒã¿ãçšæããŸããæ¬èšäºã§å©çšããããŒãžã§ã³ã®GPTã¯LangChainã«ã€ããŠã®ç¥èãæã£ãŠããŸããã®ã§ãããè£å®ããããã«LangChainã«ã€ããŠã®ããã¥ã¡ã³ããäœã£ãŠã¿ãããšæããŸããå®éã®çŸå Žã§ã¯PDFãã¯ãŒããšãã£ãããã¥ã¡ã³ãããããŒã¿ãèªã¿èŸŒããããªåŠçãå€ããšæããŸãã®ã§ããã«åãããŠPDFã§ä»¥äžã®ãããªç°¡åãªããã¥ã¡ã³ããã€ããsample.pdfãšãããã¡ã€ã«åã§ä¿åããŸããã
以éããã®ããã¥ã¡ã³ããããããã¹ãããŒã¿ã®æœåºãããã¹ãããŒã¿ã®EmbeddingåŠçããã¯ãã«ã¹ãã¢ãžã®ããŒã¿ããŒããè¡ããå®éã«ããã³ãããå ¥åããéã«ãLLMãšé£æºããæšè«ãã§ãããã確èªããããšæããŸãã
ãŸãã¯OpenAIã®APIããŒãå ¥åããŸãã
!pip install langchain
!pip install openai
次ã«ãLangChainã®PDFããŒããŒã䜿ã£ãŠPDFãã¡ã€ã«ããããã¹ãããŒã¿ãæœåºããŸãã
import os
import getpass
os.environ["OPENAI_API_KEY"] = getpass.getpass("OpenAI API Key:")
documentsã確èªãããšãäœèšãªæ¹è¡ã³ãŒããå ¥ã£ãŠããŸã£ãŠããŸãããPDFããããã¹ãããŒã¿ãæœåºãããŠããããšãåãããŸãã
from langchain.document_loaders import PyPDFLoader
loader = PyPDFLoader("/home/datascience/Langchain/sample.pdf")
documents = loader.load_and_split()
ããã¹ãããŒã¿ãããŒãã§ããŸãããããŒããããããã¹ãããŒã¿ãã»ãã¬ãŒã¿ã§åºåãæç« åäœã§æ±ããããã«ããŸããOpenAIããã®ä»æ§ã ãªããã¹ãã¹ããªãã¿ãŒããããŸãããä»åã¯LangChainã«å®è£ ãããŠããCharacterTextSplitterã䜿ããŸããæãããããäžçªç°¡åãªããã¹ãã¹ããªãã¿ãŒã§ãã
from langchain.text_splitter import CharacterTextSplitter
text_splitter = CharacterTextSplitter(separator="\n", chunk_size=4000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)
print(docs)
åºåããã¡ãã
[Document(page_content='LangChain ãšã¯ã ChatGPT ãªã©ã®å€§èŠæš¡èšèªã¢ãã«ã®æ©èœãæ¡åŒµã§ããã©ã€ãã©\nãªã§ããèšèªã¢ãã«ã䜿çšããã¢ããªã±ãŒã·ã§ã³ãéçºããéã« LangChain ã䜿\nãããšã§ãããé«åºŠãªæ©èœãå®è£
ããããšãå¯èœã§ãã\näžè¬çãªèšèªã¢ãã«ã§ã¯ãé·æã®ããã³ããã®éä¿¡ããåçããå
å®¹ã«ææ°ã®æ
\nå ±ãå«ããããšãé£ããå ŽåããããŸãã LangChain ãå©çšããã°ããããã®æ©\nèœã远å ããŠã¢ããªãéçºã§ããŸã ã\nLangChain ã¯ãæ©æ¢°åŠç¿ã¹ã¿ãŒãã¢ããã® Robust Intelligence ã«å€åããŠãã\nHarrison Chase ã«ãã£ãŠã 2022 幎10 æã«ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããšã\nãŠç«ã¡äžããããŸããããã®ãããžã§ã¯ãã¯ã GitHubäžã®äœçŸäººãã®å¯çš¿è
ã«ã\nãæ¹è¯ã Twitteräžã®ãã¬ã³ãã®è°è«ããããžã§ã¯ãã® DiscordãµãŒããŒäžã®æŽ»çº\nãªæŽ»åãå€ãã® YouTube ãã¥ãŒããªã¢ã«ããããŠãµã³ãã©ã³ã·ã¹ã³ãšãã³ãã³ã§\nã®ããŒãã¢ããã«ãããããã«äººæ°ãéããŸããã 2023幎4æãLangChain ã¯æ³\n人åãããã³ãããŒã¯ãã 1000äžãã«ã®ã·ãŒãæè³ãçºè¡šãã 1é±éåŸããã³\nãã£ãŒäŒæ¥ã»ã³ã€ã¢ã»ãã£ãã¿ã«ããå°ãªããšã 2åãã«ã®è©äŸ¡é¡ã§ 2000äžãã«\n以äžã®è³éã調éããã', metadata={'source': '/home/datascience/Langchain/sample2.pdf', 'page': 0})]
ããã¹ãããŒã¿ãæœåºã§ããŸããã®ã§ããã®ããã¹ãããã¯ãã«ã«å€æãããã¯ãã«ã¹ãã¢(ä»åã®å ŽåElasticsearch)ã«ããŒãããŸããå ·äœçã«ã¯ããã¹ãããŒã¿ãGPTã®Embeddingã¢ãã«ã«é£æºããŠãã¯ãã«åãããã®ãã¯ãã«ãElasticsearchã«ããŒãããŸãã
åŸã£ãŠããã®åŠçã®ã³ãŒãã§ã¯ãOpenAIã®Embeddingsã®ã¢ãã«ãå®çŸ©ããurlã§æå®ããElasticsearchã«æ¥ç¶åŸãindexãdemoãšããŠãã¯ãã«ããŒã¿ãããŒãããŸãã
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import ElasticVectorSearch
# Embeddingã« OpenAIã®Embeddingã¢ãã«ãå®çŸ©
embeddings = OpenAIEmbeddings()
# ElasticSearchã®ã¢ã¯ã»ã¹ãã€ã³ããšãŠãŒã¶ãŒããã¹ã¯ãŒããå®çŸ©
url = f"http://<user>:<password>@xxx.xxx.xxx.xxx:9200"
# ããã¹ãããŒã¿ããã¯ãã«åããindexãlangchainãšããŠelasticsearchã«ããŒã
db = ElasticVectorSearch.from_documents(
docs, embeddings, elasticsearch_url= url, index_name="langchain"
)
ã¡ãããšElasticseachã«ããŒããããŠãã確èªããŠã¿ãŸããããElasticsearchã«æ¥ç¶ããindexã確èªããŸãã
from elasticsearch import Elasticsearch
indices = Elasticsearch(url).cat.indices(index='*', h='index').splitlines()
for index in indices:
print(index)
以äžã®ããã«ãããã©ã«ãã§äœæãããŠãã.security-7ãšããindex以å€ã«ãå ã»ã©ããŒãããlangchainãšããindexã確èªã§ããŸãã
.security-7
langchain
å®éã«ããŒãããããã¯ãã«ããŒã¿ã以äžã®ã³ãŒãã§ç¢ºèªããŠã¿ãŸãã
print(Elasticsearch(url).search(index="langchain"))
äžèšã®vectorã®é ç®ãå ã»ã©ã®æç« ã®ãã¯ãã«ã«çžåœããŸããGPTã®ããã©ã«ãã®embeddingã¢ãã«ã¯1536次å ãšãªããã«ã³ãã§åºåããããã®æ°å€ã1536å䞊ãã§ãããšããç¶æ³ã«ãªã£ãŠããŸãã
{'took': 6, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 2, 'relation': 'eq'}, 'max_score': 1.0, 'hits': [{'_index': 'demo', '_type': '_doc', '_id': '5337f817-2daf-46fc-8cee-227420b67b1b', '_score': 1.0, '_source':
{'vector': [-0.0147464187139141, 0.01817330850056069, -0.017566183057582382, -0.028089701290861913, 0.014908318894129819, -0.0034353219809854503, -0.015178152838263532, 0.014665469089467514, 0.0065738268096883256, -0.01936057710969099, -0.016257488614798383, 0.012149268398610932, 0.022773974826601876, 0.013768271132090663, -0.002312138607624016,
ã»ã»ã»
äžç¥
ã»ã»ã»
0.0037499468370202024, 0.006994055595685205, -0.012180582640426756, 0.02028748210162566, -0.013347382679390384, -0.030970783955615217, 0.008181089548938522, 0.015161655868430601, -0.003999493557149521, -0.01678033734663821, -0.020746110041611355],
'text': 'LangChain ã¯ãå€§èŠæš¡èšèªã¢ãã« (LLM)ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®äœæãç°¡çŽ åããããã«èšèšã\nãããã¬ãŒã ã¯ãŒã¯ã§ããèšèªã¢ãã«çµ±åãã¬ãŒã ã¯ãŒã¯ãšããŠã® LangChain ã®ãŠãŒã¹ã±ãŒã¹ã¯ãã\nãã¥ã¡ã³ãåæãšèŠçŽããã£ããããããã³ãŒãåæãªã©ãäžè¬çãªèšèªã¢ãã«ã®ãŠãŒã¹ã±ãŒã¹ãšå€§ã\nãéè€ããŸãã', 'metadata': {'source': '/home/datascience/Langchain/sample.pdf', 'page': 0}}}]}}
Elasticsearchã«ãã¯ãã«ããŒã¿ãããŒããããŠããããšã確èªã§ããŸããã®ã§ã次ã¯ãå ¥åãããLLMã®ã¢ãã«ãå®çŸ©ãããã¯ãã«ã¹ãã¢ãšã®é£æºãå®çŸ©ããŸãã
from langchain.chains import VectorDBQAWithSourcesChain
from langchain.chat_models import ChatOpenAI
llm = ChatOpenAI(model_name="gpt-3.5-turbo")
qa =VectorDBQAWithSourcesChain.from_chain_type(llm, chain_type="map_reduce", vectorstore=db)
ãããŠãLangChainã®AgentãšToolsãå®çŸ©ããŸãããã®å®çŸ©ããŸãã«LLMãšãã¯ãã«ã¹ãã¢ã®é£æºã®èŠã«ãªããŸããAgentãšã¯å ¥åããã¹ãã®å 容ã«å¿ããŠã©ã®Toolã䜿ãã°ããããèããŠãããããããã®ãããªãã®ã§ãããããŠãã®Toolã¯ä»åã®å Žåãäžè¿°ã®ã³ãŒãã§å®çŸ©ãããLLM(GPT)ãšãã¯ãã«ã¹ãã¢(elasticsearch)ãšãªããŸãã
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.agents import Tool
tools = [
Tool(
name = "elasticsearch_searcher",
func=qa,
description="Langchainã®èª¬æ"
)
]
agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
次ã«ãLangChainã®PromptTemplateãå®çŸ©ããŸããPromptTempleteã¯ããã°ã©ã ããLLMã«å ¥åããpromptãçæããããã®æ©èœã§ãããã®éãããã³ããã®ãã³ãã¬ãŒããå®çŸ©ããããšã§ãæ¯ååããã©ãŒãããã§åçãåŸãããšãã§ããããã«ãªããŸããäžèšã®ã³ãŒãã§ã¯éåžžã«ã·ã³ãã«ãªãã©ãŒãããã«ããŠããŸããããã®ä»ãfew-shot learningããã£ãããããã®ãããªãã©ãŒãããã§åºåãããããªå®çŸ©ãå¯èœã§ãã
from langchain.chains.qa_with_sources.map_reduce_prompt import QUESTION_PROMPT
from langchain import PromptTemplate
template = """
äžèšã®è³ªåã«æ¥æ¬èªã§çããŠãã ããã
質åïŒ{question}
åçïŒ
"""
prompt = PromptTemplate(
input_variables=["question"],
template=template,
)
ãããŸã§ã§å šãŠã®ããŒããæããŸããã®ã§ãæåŸã«å®éã«è³ªåãããŠã¿ãããšæããŸããäžèšã³ãŒãã«ããã質åæç« ãPromptãšããŠå®çŸ©ãããã©ãŒãããã§Agentã«æž¡ãããAgentãã©ã®toolsã§å®çŸ©ãããLLMãšãã¯ãã«ã¹ãã¢ã䜿åããŠæçµçãªåçãçæãããšããåŠçãå®è¡ãããŸãã
query = "LangChainãšã¯äœã§ããïŒ"
question = prompt.format(question=query)
agent.run(question)
å®è¡çµæã¯ä»¥äžã®ããã«ãªããŸããã
ChatGPTã®ãããªã€ããªãåçã§ã¯ãªããã¡ãããšElasticsearchã®æ€çŽ¢ãšé£æºããLangChainã«é¢ããæç« ãçæãããŠããããšãããããŸãã
ãã®ä»ãæ§ã ãªè³ªåãããŠã¿ãŸãã
query = "LangChainãããžã§ã¯ãã¯ãããã®è³é調éã«æåããŸãããïŒ"
question = prompt.format(question=query)
agent.run(question)
query = "LangChainã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããç«ã¡äžãã人ã¯èª°ã§ããïŒ"
question = prompt.format(question=query)
agent.run(question)
query = "LangChainã®ãªãŒãã³ãœãŒã¹ãããžã§ã¯ããç«ã¡äžããããæ¥ã¯ãã€ã§ããïŒ"
question = prompt.format(question=query)
agent.run(question)
query = "LangChainãæ³äººåãããæ¥ã¯ãã€ã§ããïŒ"
question = prompt.format(question=query)
agent.run(question)
query = "LangChain ã人æ°ã«ãªã£ãçç±ã¯äœã§ããïŒ"
question = prompt.format(question=query)
agent.run(question)
ãããã«
LLMã®ç¥ããªãç¥èã远å ãããšããæå³ã§ã¯ããã¡ã€ã³ãã¥ãŒãã³ã°ããã®ææ³ã®äžã€ã§ããLLMã䜿ã£ãè³¢ãã¢ããªã±ãŒã·ã§ã³ãäœããããšããããšã§ããã°ãã©ã¡ãããšèšãããã¯ãã«ã¹ãã¢ããã¡ã€ã³ãã¥ãŒãã³ã°ããã£ãŠããŸãã°ãããšã¯æããŸããããããŠäž¡è ãæ¯èŒãããšä»¥äžã®ãããªpros/consããããšæããŸãã
ãŸããã¯ãã«ã¹ãã¢ã®æ§æã§ã¯ã¢ãã«ã®ååŠç¿(ãã¡ã€ã³ãã¥ãŒãã³ã°)ãäžèŠã§ãã(ãšããããã¡ã€ã³ãã¥ãŒãã³ã°ãããªããŠãç¥èã远å ã§ãããšãææ³)
ãã€å®è¡ãããããã©ããããã®æéããããããäžæçãªãã¡ã€ã³ãã¥ãŒãã³ã°ãšããåŠçåŠçãããå¿ èŠããªããªããšããããšã¯äžã€ã®ã¡ãªããã ãšæããŸãã
ãããŠãã¡ã€ã³ãã¥ãŒãã³ã°ãããªããšããããšã¯åŠç¿ããŒã¿ãäœãå¿ èŠããªããšããããšã§ããååã®èšäº:ããChatGPTããã¡ã€ã³ãã¥ãŒãã³ã°ããããããã解説ãã§ã玹ä»ããéãããã¡ã€ã³ãã¥ãŒãã³ã°ã§ã¯åŠç¿ããŒã¿ãç¹å®ã®åœ¢åŒã§äœãããå¿ èŠããããŸããç¹ã«ãã¡ã€ã³ãã¬ããžããªãå Žåã®ãã®äœæ¥ã¯å€§å€ãªå·¥æ°ã«ãªãããã®äœæ¥ããªããªããšããã¡ãªããã¯éåžžã«å€§ããã§ãã
ãã¯ãã«ã¹ãã¢ã®å Žåãããã¥ã¡ã³ãããŒã¿ãããŒãããéã¯ããçšåºŠå®åã®ã³ãŒããå®è¡ããŠãããã¥ã¡ã³ããäžžããšããŒã¿ããŒã¹ã«ããŒããããããªææ³ã«ãªããåŠç¿ããŒã¿ãäœããããããªäœæ¥ã«æ¯ã¹ããšæ¯èŒçå·¥æ°ã¯å°ãªãã®ã§ã¯ãªãã§ããããã
ããããªããããã¯ãã«ã¹ãã¢ã®å Žåã¯ãããããã¯ãã«ã¹ãã¢ãæ§ç¯ãéçšããŠãããšããäœæ¥ã³ã¹ããå¿ èŠã«ãªããŸãã
ãŸãããµãŒãã¹å©çšã®ã³ã¹ãé¢ã§ãããšããã¡ã€ã³ãã¥ãŒãã³ã°ã¯ããå°çšã®èª²éãããããŠãã¯ãã«ã¹ãã¢ã®å Žåããã®ã¯ã©ãŠããµãŒãã¹ã®èª²éãå¿ èŠãšãªãããã¡ãã¯ã·ã¹ãã èŠä»¶ã«ãã£ãŠå·®ãåºãç¹ã ãšæããŸãã
èªç¶èšèªåŠçé¢é£ã®ãã®ä»ã®èšäº
























