Gemini 1.5 ã®ãã³ã°ã³ã³ããã¹ããæŽ»ãã㊠AI ãè²ãŠãã¢ãããŒã ã RAG ã®éçã軜ããã«çªç Žããããã«
ã¯ããã«
ãã®èšäºã§ã¯ãGemini 1.5 ã®ãã³ã°ã³ã³ããã¹ããæŽ»ãã㊠LLM ãçšãã AI ã·ã¹ãã ãæ®µéçã«è²ãŠãã¢ãããŒãã説æããŸããåŸåã§ã¯ãRAG ã·ã¹ãã ã®å°å ¥ããŒãã«ãäžããããã«ãã®ã¢ãããŒããé©çšããã€ã¡ãŒãžããµã³ãã«ã³ãŒããšããããŠç޹ä»ããŸãã
ããã§ã¯ãŸããåæç¥èãšãªãã°ã©ãŠã³ãã£ã³ã°ã RAG ã®ä»çµã¿ã説æããŸãã
ã°ã©ãŠã³ãã£ã³ã°ãš RAG ã®éãã«ã€ããŠ
LLM ã®æ¥å掻çšã«åããŠå匷ããŠãããšãããªããè³ã«ããã®ããã°ã©ãŠã³ãã£ã³ã°ãããRAGããšããããŒã¯ãŒãã§ããã°ã©ãŠã³ãã£ã³ã°ã¯ãLLM ã®åºç€ã¢ãã«èªèº«ãä¿æããŠããªãïŒåŠç¿ããŠããªãïŒè¿œå ã®åèæ å ±ãããã³ããã«åã蟌ãäºã§ãåèæ å ±ã«åºã¥ããåçãçæããããã¯ããã¯ã§ããæ¬¡ã®å³ã®ãããªããã³ãããæ³åãããšããããããã§ãããã

ããã³ããã«åèæ
å ±ãåã蟌ãäŸ
ââããïŒãã㯠RAG ãšã¯éãã®ïŒããšæã£ãããªãã®ããã«ããããã説æããŠãããŸãããã
ãã®å³ã§ã¯ãã©ã®ãããªè³ªåã«å¯ŸããŠãåãåèæ å ±ãå©çšããŠåçããããšãæ³å®ãããŠããŸãããã®ããã«ãç¹å®ã®æ å ±ã«åºã¥ããŠåçãçæããããšã¯ããããŸã§ãã°ã©ãŠã³ãã£ã³ã°ã§ãããRAG ã§ã¯ãããŸãããèšãæããã°ãäžããããåèæ å ±ãšç¡é¢ä¿ãªè³ªåã¯ãåçã®ç¯çå€ãšããããšã«ãªããŸãã
äžæ¹ãããåºãç¯å²ã®è³ªåã«çããããããã«ãã質åã®å 容ã«å¿ããŠãå¿ èŠãªåèæ å ±ãæ¢ãåºããŠçšæããããšããã¢ãããŒããèããããŸãããã®å Žåã¯ã質åãããã³ããã«å ¥åããåã«ããŸããã質åã®åçã®åèã«ãªããããªæ å ±ãæ€çŽ¢ããŠæ¢ãåºãããšããã¹ããããå¿ èŠã«ãªããŸãããããŠãåŸãããæ å ±ãããã»ã©ã®å³ã®ããã«ã質åãšã»ããã§ããã³ããã«åã蟌ãã§ãåçãçæããŸãããã®ããã«ããæ€çŽ¢ããšãã°ã©ãŠã³ãã£ã³ã°ããçµã¿åãããä»çµã¿ ã RAGïŒRetrieval-Augmented GenerationïŒãšåŒã°ããŸãã

ã°ã©ãŠã³ãã£ã³ã°ãæ€çŽ¢ãRAG ã®é¢ä¿
ãããã£ãŠãRAG ã·ã¹ãã ãå®çŸããã«ã¯ã次ã®åŠçãè¡ãä»çµã¿ãå¿ èŠã«ãªããŸãã
- å©çšè
ã質åãå
¥åãã
ãâ - 質åã®åçã«å¿
èŠãªæ
å ±ãæ€çŽ¢ãã
ãâ - æ€çŽ¢ã§åŸãããæ å ±ãšè³ªåã LLM ã«å ¥åããŠåçãçæãã
ãã®éãã質åã®åçã«å¿ èŠãªæ å ±ãæ€çŽ¢ããããšããéšåã¯ãLLM ãšã¯å¥ã«ç¬ç«ããã·ã¹ãã ãšããŠçšæããããšã«ãªããŸãããã®ãããç¬èªã®æè¡ã䜿ã£ãæ°ããæ€çŽ¢ã·ã¹ãã ãæ§ç¯ããäºã§ããèªåã ãã® RAG ã·ã¹ãã ãäœã£ãŠæŠã«å ¥ãããšãããšã³ãžãã¢ãªãã§ã¯ã®é«åºŠãªè¶£å³ã楜ããããšãå¯èœã§ãã
RAG ã·ã¹ãã æ§ç¯ã®é£ãã
ãRAG ã·ã¹ãã ã®æ§ç¯ãè¶£å³ãšããŠæ¥œããïŒãªã«ããïŒããšæã£ãæ¹ã¯ãã€ã³ã¿ãŒãããæ€çŽ¢ã®æŽå²ã«æãã銳ããŠãã ãããââ ã«ããŽãªãŒããšã«äººåã§ç·šçºãããªã³ã¯éãæäŸãããã£ã¬ã¯ããªãµãŒãã¹ããã¯ããŸããããŒã¯ãŒãã«ãããããææžãæ¢ãåºãããŒã¯ãŒãæ€çŽ¢ããããŠããããããææžã®äžããããéèŠãªæ å ±ãéžæããã©ã³ãã³ã°ã·ã¹ãã ã®å°å ¥ãããã«ã¯ãæ€çŽ¢æã®ãæå³ããçè§£ããŠé©åãªæ å ±ãéžã³åºãã»ãã³ãã£ãã¯æ€çŽ¢ãšããŸããŸæè¡ãéçºãããŠããŸããããŸãã倧éã®æ å ±ãé«éã«æ€çŽ¢ããããã®ã€ã³ããã¯ã¹æè¡ã忣åŠçæè¡ãªã©ããæ€çŽ¢ã·ã¹ãã ãã®æ§ç¯ã¯ãæ å ±åŠçæè¡ã®ç·åæ Œéæãšãèšããäžçã§ããåçšã®æ€çŽ¢ã·ã¹ãã ã«ã¯åã°ããšããèªåãªãã®å·¥å€«ã§æ°ããæ€çŽ¢ã·ã¹ãã ãäœãããšã¯ããšã³ãžãã¢ãšããŠååã«ææŠãããã®ããããŒããšèšããã§ãããã
ãã ããã€ã³ã¿ãŒãããæ€çŽ¢ãš RAG ã®ããã®æ€çŽ¢ã·ã¹ãã ã¯ãç®çãç°ãªãç¹ã«æ³šæããŠãã ãããRAG ã·ã¹ãã ãæ§ç¯ããéã¯ããã®ã·ã¹ãã ã®å©çšç®çïŒãŠãŒã¹ã±ãŒã¹ïŒã«ãã£ãŠãæ€çŽ¢å¯Ÿè±¡ã®ããŒã¿ãå€ãããŸããå€ãã®å Žåãæ€çŽ¢å¯Ÿè±¡ãšããããŒã¿ãåéã»ä¿åããããŒã¿ããŒã¹ãæ§ç¯ãããšããããäœæ¥ãã¯ããŸããŸãã

ã€ã³ã¿ãŒãããæ€çŽ¢ãš RAG ã«ãããæ€çŽ¢ã®éã
ãããŠãã質åã®åçã«åœ¹ç«ã€æ å ±ããæ¢ãåºãããšã RAG ã«ãããæ€çŽ¢ã®åœ¹å²ã§ãã®ã§ãæ³å®ããã質åã«å¿ããŠã©ã®ãããªæ å ±ãã©ã®ãããªåœ¢æ ã§ä¿åããããªã©ã工倫ããã¥ãŒãã³ã°ã®ãã€ã³ãã¯ãããããããŸããæè¿ããè³ã«ããããã¯ãã«æ€çŽ¢ãã¯ãRAG ã®æ€çŽ¢ã·ã¹ãã ã§ãçšããããæ€çŽ¢æè¡ã®1ã€ã§ããââ ãã®ããã«ãæ€çŽ¢ã·ã¹ãã æ§ç¯ã®é£ããããRAG ã·ã¹ãã æ§ç¯ã®é£ããã«çŽçµããããšã«ãªããŸãã
èŠåŽãããããªãå Žåã®ã¢ãããŒã
åœç¶ãªããããããã俺ïŒç§ã¯ãããªèŠåŽã¯ããããªããã ãæ¥åã«åœ¹ç«ã€ RAG ã·ã¹ãã ãæã£åãæ©ãå°å ¥ãããã ããªãã âŠããšããæ¹ãããã§ãããããã®ãããªéã¯ãRAG ã«å¯Ÿå¿ããæ€çŽ¢ã·ã¹ãã ã®ãããŒãžããµãŒãã¹ãå©çšãããšããéžæããããŸããæ¬¡ã®èšäºã§ã¯ãRAG çšã®ãã£ã³ã¯ååŸãå®è¡ããäŸã玹ä»ããŠããã®ã§ãåèã«ãªãã§ãããã
ãã ããæ€çŽ¢ã·ã¹ãã ãã®ãã®ã¯ãããŒãžããµãŒãã¹ã§çšæã§ããŠããããã«èç©ããæ å ±ãéããä»äºã¯æ®ããŸããæ¥åçšéãèããå Žåã瀟å ã®åæã«ã¡ãã°ã£ãæ å ±ãã©ããã£ãŠéããŠæ€çŽ¢ã·ã¹ãã ã«è²¯ããŠããã°ããã®ã§ããããïŒãããããææžåãããŠããªããæ åœè ã ããç¥ã£ãŠãããæé»ç¥ãã¯ã©ãããã°ããã®ã§ããããïŒãââ æ©ã¿ã¯ã€ããªãããã§ãã
ãã®ãããªæã«åèãšãªãã®ãããHuman workãâãAI AssistedãâãAI Automationããšãã 3 段éã§ AI ãè²ãŠãçºæ³ã§ãã
Many-shot learning ã®äŸã§èãã AI ã®è²ãŠæ¹
ããã§ã¯ãäžæŠ RAG ã·ã¹ãã ãé¢ããŠãMany-shot learning ãäŸã«ãAI ã®è²ãŠæ¹ãã説æããŸãã
Few-shot learning ãšã¯ïŒ
Many-shot learning ã説æããæºåãšããŠããŸãã¯ãFew-shot learning ã埩ç¿ããŠãããŸãããã
ãããŸã§æ¶ç©ºã®äŸã§ãããEC ãµã€ãã®ååã¬ãã¥ãŒã³ã¡ã³ããããžãã£ãïŒãã¬ãã£ãã«åé¡ããæ¥åãèããŸããããžãã£ããªã³ã¡ã³ããç®ã«ã€ããšããã«è¡šç€ºããŠå®£äŒå¹æãé«ãããšãã£ãç®çãæ³å®ããäœæ¥ã§ããçŸç¶ã¯å°ä»»ã®æ åœè ã人åã§åé¡ãè¡ã£ãŠããŸããããã®æ åœè ã¯ãLLM ãæŽ»çšããŠèªååããããšãèããŠããããã§ããæ¬¡ã®å³ã®ããã«ãããã³ããã«ã¬ãã¥ãŒã³ã¡ã³ããå ¥åããŠåé¡ãäŸé Œãããšãåé¡çµæãšãã®çç±ãè¿ã£ãŠãããšæåŸ ããŠããŸãããâŠ

çæ³ã® AI Automation ã®äžç
æ®å¿µãªããæåŸ éãã«ã¯ãããªãããã§ããå³ã®äŸã®ã¬ãã¥ãŒã³ã¡ã³ãã¯ãããã»ã©ã®ç®çãèãããšæ åœè çã«ã¯ããžãã£ãã«åé¡ããã¹ãã§ãããå®éã«ã¯ãããžãã£ããšãã¬ãã£ããªèŠçŽ ãæ··ãã£ãŠããŸãããšãããŸã§å®¢èгçãªçµæãè¿ããŸãã

ãæé»ç¥ããçè§£ããªã AI
ããã¯ãæ åœè ç¬èªã®å€æåºæºãããªãã¡ããæé»ç¥ãã LLM ãçè§£ããªãããšã«èµ·å ããŸãããããã°ã©ã ã¯æã£ãéãã«ã¯åããªããæžããéãã«åãããšãããœãããŠã§ã¢ãšã³ãžãã¢æ¥çã®æ ŒèšããããŸãããAI ã®äžçãå€ãããããŸãããLLM ã«ã¯ãæ åœè ã®æ°æã¡ãèªã¿åããšã¹ããŒèœåã¯ãããŸããã®ã§ãäœããã®æ¹æ³ã§æé»ç¥ãäŒããå¿ èŠããããŸãã
ãã®ãããªæã«çšãããã¯ããã¯ã®1ã€ã Few-shot learning ã§ãããå ¥åå 容ããšãæåŸ ããåºåå 容ãã®å ·äœäŸãããã€ãçšæããŠããã³ããã«åã蟌ãã§ãããšãLLM ã¯ãããã®äŸãåèã«ããŠãæ åœè ãæåŸ ããå€æåºæºã顿šããŸããããã»ã©ã®äŸã§ããã°ã次ã®å³ã®ãããªå ·äœäŸãäžãããšããããã§ãã

Few-shot learning ã«ãã察å¿äŸ
Few-shot learning ãã Many-shot learning ãž
ãã ãããã®æ åœè ãæ±ãèšå€§ãªéãšçš®é¡ã®ã¬ãã¥ãŒã³ã¡ã³ããèãããšããã®äŸã ãã§ã¯ãããããã¿ãŒã³ã«å¯Ÿå¿ããããšã¯é£ãããªããŸããæ åœè ã®æé»ç¥ãåæ ãããããå€ãã®äŸã远å ããŠããå¿ èŠããããŸãã
幞ããªããšã«ãGemini 1.5 Pro / Flash ã¯ãã³ã°ã³ã³ããã¹ãã«å¯Ÿå¿ããŠãããããããã2Mãããã³ã1M ããŒã¯ã³ãšããèšå€§ãªéã®ããã¹ããããã³ããã«å ¥åã§ããã®ã§ããããããã¿ãŒã³ã«å¯Ÿå¿ããããã®èšå€§ãªäŸãè©°ã蟌ãããšãå¯èœã§ãããã®ããã«ãå ·äœäŸã®æ°ãã©ãã©ãå¢ããããšã§ãããå€ãã®ãã¿ãŒã³ã«å¯Ÿå¿ãããã¢ãããŒãã Many-shot learning ã§ãã
ç¹ã«ãå ·äœäŸãšããŠå ¥åããå 容ïŒããã»ã©ã®å³ã® [examples] 以éã«çžåœããéšåïŒã¯åºå®çãªå 容ãªã®ã§ãGemini API ã® Context caching ãå©çšããŠãã£ãã·ã¥ã«ä¿åããŠãããšããäœ¿ãæ¹ãå¯èœã§ãã
AI Assisted ãçµç±ãã AI Automation ã®å®çŸ
ãšã¯èšãâŠãMany-shot learning ã®å Žåã§ããRAG ã·ã¹ãã æ§ç¯ãšåæ§ã«ãããŒã¿åéã®ããã»ã¹ã¯æ®ããŸããããã»ã©ã®ã¬ãã¥ãŒã³ã¡ã³ãã®å顿¥åã§ããã°ãçŸç¶è¡ã£ãŠããæ¥ã ã®åé¡äœæ¥ã®çµæããã°ã«èšé²ããŠãMany-shot learning ã®äŸã«è¿œå ããŠããæ¹æ³ãèããããŸãããããããã®å Žåã§ãããã©ãã ãã®äŸã远å ããã°ååãªã®ãïŒããã©ã®ãããªäŸããã广çãªã®ãïŒããšèšã£ãæ€èšŒãå¿ èŠã§ããããŒã¿åéãšçµææ€èšŒã®é·ãæ¥ã ãéãããªãéããAI ã®æ©æµã¯åããããªãã®ã§ããããïŒ
ããã«ã¯ããçæ³ã® AI Automation ãå®çŸããªããšåœ¹ã«ç«ããªãããšããæã蟌ã¿ã®èœãšã穎ããããŸãã
ãã®äŸã§ããã°ã次ã®å³ã®ã¹ãããã§æŽ»çšãé²ããæ¹æ³ããããŸãã

AI Assisted ãçµç±ãã AI Automation ã®å®çŸ
æ åœè ã®å€¢ã¯ããã¹ãŠã AI ã«ãŸãããå®å šèªååãã§ããããã®åã®ã¹ããããšããŠããAI ã®åºåãåèã«äººéãå€å®ããããšããäœ¿ãæ¹ãèããããŸããMany-shot learning ã«äœ¿çšããããŒã¿ãäžååãªæ®µéã§ã¯ãAI ã®å€å®ã¯å¿ ãããæ£ãããšã¯éããŸãããããã§ãããAI ã®å€å®ãèŠãŠãééã£ãŠããã°ä¿®æ£ããããšããäœæ¥ã«çœ®ãæããã°ãã¬ãã¥ãŒã³ã¡ã³ããèªã¿èŸŒãã§èªåã§å€æããæ¢åã®äœæ¥ããã¯ãäœæ¥è² è·ã¯è»œæžãããã§ãããã
ãŸããAI ã®å€å®ã誀ã£ãŠããå Žåã¯ãæ åœè ãèããæ£ããå€å®çµæãæ°ããããŒã¿ãšããŠè¿œå ããããšã§ãAI ã®å€å®ãæ¹åããããšãã§ããŸããããã¯æ åœè ã®ãæé»ç¥ããããŒã¿åããŠã圢åŒç¥ãã«å€æããããã»ã¹ã«ä»ãªããŸãããäžã®å³ã§ã¯ããã®ã¹ãããããAI AssistedããšæžããŠããŸããã人éããã®ãã£ãŒãããã¯ã§ AI ãæ¹åãããšããåŽé¢ãèãããšãAI-Human Collaborationããšèšã£ãŠãããã§ãããã
ãŸãããã®æ®µéã®ä»çµã¿ãå®çŸããã®ã¯ãæè¡çã«ãããã»ã©é£ãããã®ã§ã¯ãããŸãããæ°ããããŒã¿ã远å ãããšèšã£ãŠããã·ã¹ãã çã«ã¯ããã³ããã«å ¥åããããã¹ãã倿Žããã ãã§ãã®ã§ãç°¡åãªä»çµã¿ã§èªååãå¯èœã§ããããæ°ã®ããæ åœè ã§ããã°ãããŸããŸãªããŒã¿ã远å ããŠãçµæãã©ãå€åããããèªäž»çã«æ€èšŒããããšãã§ããã§ãããã
ããã£ãŠã¿ãªããšããããªããã®ãçæ AI ãã¯ãããšããå 端æè¡ã®äžçã§ãããããããã°ããŸãããã¯ãããšããæã蟌ã¿ã§è€éãªã·ã¹ãã ãèšèšã»æ§ç¯ããåã«ããŸãã¯ããããããªã¢ã€ãã¢ãææ©ã詊ããç°¡åãªä»çµã¿ãèŠã€ãåºãããšãæåã®éµãšèšããŸãããã®ç¹ã«ãããŠãGemini 1.5 Pro / Flash ã®ãã³ã°ã³ã³ããã¹ã察å¿ã¯ããããããªäœ¿ãæãããããã§ãã
ãããŠãè¯è³ªãªããŒã¿ãååã«éãŸã£ãŠããã¹ãŠã AI ã«ä»»ãããããAI AutomationãïŒãããã¯ãããã«è¿ã段éïŒã«å°éããæ®µéã§ãã·ã¹ãã å šäœã®èšèšãèŠçŽããŠãããé«åºŠãªãã¥ãŒãã³ã°ãžãšé²ããšããã§ãããã
RAG ã·ã¹ãã ã®éççªç Žã«åããŠ
ãããŸã§ã«èª¬æããææ³ã¯ãRAG ã·ã¹ãã ã®æ§ç¯ã§èŠåŽããŠããã±ãŒã¹ã§ãåèã«ãªãããç¥ããŸãããã質åå 容ã«å¿ããé©åãªæ å ±ãæ€çŽ¢ããããšã§ãå¹ åºã質åã«å¯Ÿå¿ããããšãã RAG ã®ç®çã§ãããšã¯èšãããããã質åã«å®ç§ã«åçãããçæ³ã® AI Automationããã¯ããããæ±ããŠãããšããŸããããŸããããŸãã¯ã質åã®çš®é¡ãéå®ããŠãããã«å¿ èŠãªããŒã¿ãåéãããšããããå§ãããšããã§ãããã
ããã«ã質åã®çš®é¡ãéå®çã§ããã°ãããŒã¿ãæ€çŽ¢ããã·ã¹ãã ãããããçšæããªããŠããéããããŒã¿ããã¹ãŠããã³ããã«å ¥åãããšãã倧èãªã¢ãããŒããå¯èœã§ããããã¯ãåè¿°ã®ããããããªã¢ã€ãã¢ãææ©ã詊ããç°¡åãªä»çµã¿ãã«ããããŸããRAG ã·ã¹ãã æ§ç¯ã®é£æã§ããããŒã¿æ€çŽ¢ã·ã¹ãã ãæã€ããšãªããããŒã¿åéãæé»ç¥ã®ããŒã¿åãé²ããããšãå¯èœã«ãªããŸããããšãã°ã質åã®åçãééã£ãŠããã°ããäœãééã£ãŠããã®ãããæåŸ ããåçã¯äœã ã£ãã®ãããšãããã£ãŒãããã¯ãããã£ãŠããã®æ å ±ãããã«ããã³ããã«è¿œå ãããšãã£ãæ¹æ³ãèããããã§ãããã
è¯è³ªãªããŒã¿ãååã«éãŸã£ã段éã§ãããã³ããã«å ¥åããããŒã¿ãæŽçãããã質åããšã«å¿ èŠãªæ å ±ã ããåãåºãæ€çŽ¢ã·ã¹ãã ãšã®é£æºããããããŠæ€èšããã°ããæ€çŽ¢ç²ŸåºŠãæªãã®ããããŒã¿ãè¶³ããªãã®ãããããšããããŒã¿ã®è³ªããããªãã®ãããšãã RAG ã·ã¹ãã ã®ãã¥ãŒãã³ã°ã«äŒŽãèŠåŽã軜æžããããšãã§ããã§ãããã
ãµã³ãã«ã³ãŒãã§çè§£ãæ·±ãã
ããããã¯ããRAG ã®éççªç Žãã«åããåè¿°ã®ã¢ãããŒããé©çšããã€ã¡ãŒãžãå ·äœåããããã«ãå ¬éããŒã¿ãå©çšããŠãããã³ã°ã³ã³ããã¹ãã«ããŒã¿ãè©°ã蟌ãã¢ãããŒãããå®éã«è¡ããµã³ãã«ã³ãŒãã玹ä»ããŸãã
äºåæºå
Vertex AI Workbench ã®ããŒãããã¯ã§ãµã³ãã«ã³ãŒããå®è¡ããŠãããŸããæ°ãããããžã§ã¯ããäœæããããCloud Shell ã®ã³ãã³ã端æ«ãéããŠãVertex AI Workbench ã䜿çšããã®ã«å¿ èŠãª API ãæå¹åããŸãããŸããè±èªã®å ¬éããŒã¿ãäºåã«æ¥æ¬èªã«ç¿»èš³ããŠå©çšããã®ã§ã翻蚳ã«äœ¿çšãã Translation API ãæå¹åããŠãããŸãã
gcloud services enable \
aiplatform.googleapis.com \
notebooks.googleapis.com \
translate.googleapis.com
ãŸããæ¬¡ã®ã³ãã³ããå®è¡ã㊠Vertex AI Service Agent ãäœæããŸããããã¯ãContext caching ã®å©çšã«å¿ èŠã«ãªããŸãã
PROJECT_ID=$(gcloud config list --format 'value(core.project)')
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/$PROJECT_ID/locations/us-central1/endpoints \
-d ""
ãããŠã次ã®ã³ãã³ãã§ Workbench ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã
INSTANCE=long-context-poc
PROJECT_ID=$(gcloud config list --format 'value(core.project)')
gcloud workbench instances create $INSTANCE \
--project=$PROJECT_ID \
--location=us-central1-a \
--machine-type=e2-standard-2
ã¯ã©ãŠãã³ã³ãœãŒã«ã®ããã²ãŒã·ã§ã³ã¡ãã¥ãŒãããVertex AIãâãã¯ãŒã¯ãã³ãããéžæãããšãäœæããã€ã³ã¹ã¿ã³ã¹ long-context-poc ããããŸããã€ã³ã¹ã¿ã³ã¹ã®èµ·åãå®äºããã®ãåŸ ã£ãŠããJUPYTERLAB ãéãããã¯ãªãã¯ãããããPython 3(ipykernel)ãã®æ°èŠããŒãããã¯ãäœæããŸãã
ãã®åŸã¯ãããŒãããã¯ã®ã»ã«ã§ã³ãŒããå®è¡ããŠãããŸãã
ãµã³ãã«ããŒã¿ã®çšæ
ããã§ã¯ãHugging Face ã§å ¬éãããŠãããã¬ã·ãããŒã¿ããçšããŠãæçã®ã¬ã·ãã«é¢ãã質åã«çãã AI ãšãŒãžã§ã³ããäœæããŸããå ¬éããŒã¿ãååŸããã®ã«å¿ èŠãªããã±ãŒãžããããã³ãTranslation API ã䜿çšããããã®ããã±ãŒãžãã€ã³ã¹ããŒã«ããŸããContext caching 㯠Preview æ©èœã®ãããgoogle-cloud-aiplatform ããã±ãŒãžãææ°çã«ã¢ããã°ã¬ãŒãããå¿ èŠããããŸãã
!pip install --upgrade \
git+https://github.com/huggingface/transformers.git datasets \
google-cloud-translate google-cloud-aiplatform
ERROR: pip's dependency resolver does not currently take into... ãšãããšã©ãŒã¡ãã»ãŒãžãåºãããšããããŸãããããã¯ç¡èŠããŠãåé¡ãããŸãããã€ã³ã¹ããŒã«ããããã±ãŒãžãæå¹ã«ããããã«ã次ã®ã³ãã³ãã§ããŒãããã¯ã®ã«ãŒãã«ãåèµ·åããŸãã
import IPython
app = IPython.Application.instance()
_ = app.kernel.do_shutdown(True)
åèµ·åã確èªãããããã¢ããã衚瀺ãããã®ã§ã[Ok] ãã¯ãªãã¯ããŸãã
ç¶ããŠãå¿
èŠãªã¢ãžã¥ãŒã«ãã€ã³ããŒãããŠãVertex AI ã®ã¯ã©ã€ã¢ã³ã SDK ãåæåããŸããä»å㯠Context caching ã®æ©èœã䜿çšããã®ã§ãpreview çã® SDK ãã€ã³ããŒãããŠã䜿çšãããªãŒãžã§ã³ã¯ us-central1 ãæå®ããŸãã
import datetime, hashlib, vertexai
from tqdm.notebook import tqdm
from datasets import load_dataset
from google.cloud import translate_v2
from vertexai.preview.generative_models import GenerativeModel, Part
from vertexai.preview import generative_models, caching
vertexai.init(location='us-central1')
ããã¹ããæ¥æ¬èªã«ç¿»èš³ãã颿° translate() ãå®çŸ©ããŠãåäœã確èªããŸãã
def translate(text, target='ja'):
translate_client = translate_v2.Client()
translation = translate_client.translate(text, target_language=target)
return translation['translatedText']
print(translate('hello!'))
[å®è¡çµæ]
ããã«ã¡ã¯ïŒ
ã¬ã·ãããŒã¿ãããŠã³ããŒãããŠãæ¥æ¬èªã«ç¿»èš³ããããŒã¿ã»ãããäœæããŸããããã§ã¯ããµã³ãã«ãšããŠå é ã® 2,000 ä»¶ã®ããŒã¿ãå©çšããŸãã
def load_recipe(recipe, num):
result = []
recipe_list = list(zip(recipe['train']['title'],
recipe['train']['directions']))[:num]
for c, item in enumerate(tqdm(recipe_list)):
title, directions = item
h = hashlib.shake_128(title.encode()).hexdigest(4)
title, directions = translate(title), translate(directions)
result.append(f'[{h}] {title}: {directions}')
return result
recipe = load_dataset('Shengtao/recipe')
recipe_data = load_recipe(recipe, 2000)
1ã€ã®ããŒã¿ã¯ã[8æ¡ã®ID] æçå: 調çæé ãšãã圢åŒã®1è¡ã®ããã¹ãã§ããå
é ã®ããŒã¿ã衚瀺ãããšã次ã®ããã«ãªã£ãŠããŸãã
print(recipe_data[0])
[å®è¡çµæ]
[ea31dd9b] ã·ã³ãã«ãªãã«ãããšããŒãº: 倧ããã®éã«è»œãå¡©ãå
¥ããæ°Žã沞隰ãããŸãã
ãšã«ããŒãã«ãããæ²žéš°ãããæ¹¯ã§ãæã
ããæ··ããªãããäžãŸã§ç«ãéã£ãŠæ¯ãããã®
ããç¶æ
ã«ãªããŸã§ 8 åéè¹ã§ãŸããæ°ŽãåããŸããéã«ãã¿ãŒãå
¥ããäžç«ã§æº¶ãããŸãã
å°éºŠç²ãå¡©ããããããå ããŠæ»ããã«ãªããŸã§ 5 åéã»ã©ããæ··ããŸãããã¿ãŒãšå°éºŠç²
ã®æ··åç©ã«çä¹³ããã£ãããšæ³šããæ»ããã§æ³¡ç«ã€ãŸã§ 5 åéã»ã©ããæ··ãç¶ããŸããçä¹³
ã®æ··åç©ã«ãã§ããŒããŒãºãå ããããŒãºã溶ãããŸã§ 2 ïœ 4 åéããæ··ããŸãããã«ãã
ãããŒãºãœãŒã¹ã«æ··ã蟌ã¿ããœãŒã¹ã«çµ¡ããŸãã
ããã§ã¯ãå®è¡çµæãèŠãããããããã«æãè¿ããŠè¡šç€ºããŠããŸãããå®éã«ã¯1è¡ã«ç¹ãã£ãããã¹ãããŒã¿ã§ãã
ID ãã察å¿ããã¬ã·ããååŸãã颿° get_recipe() ãçšæããŠãããŸãã
def get_recipe(id):
for line in recipe_data:
if line.startswith(f'[{id}]'):
return line
Context caching ã®å©çš
çšæããã¬ã·ãããŒã¿ããã£ãã·ã¥ã«ä¿åããŸããã¯ããã«ãããŒã¯ã³æ°ã確èªããŠãããŸãããã
model = GenerativeModel('gemini-1.5-pro-001')
model.count_tokens(recipe_data)
[å®è¡çµæ]
total_tokens: 376867
total_billable_characters: 595687
çŽ37äžããŒã¯ã³ã§ããããšãããããŸããããã¯ãContext caching ãå©çšããŠã³ã¹ããæããããšãã§ããŸããæ¬¡ã®ã³ãã³ãã§ããã®ããŒã¿ããã£ãã·ã¥ã«ä¿åããŠããããå©çšããã¢ãã«ãååŸããŸããããã§ã¯ãåºç€ã¢ãã«ãšã㊠Gemini 1.5 Pro ã䜿çšããŸãã
prompt_cached = ['[Recipes]'] + recipe_data
cached_content = caching.CachedContent.create(
model_name='gemini-1.5-pro-001',
contents=prompt_cached,
ttl=datetime.timedelta(minutes=60)
)
model_cached = GenerativeModel.from_cached_content(cached_content=cached_content)
ç¶ããŠãã¢ãã«ã«ããã³ãããå
¥åããŠå¿çãåŸãæ±çšçãªé¢æ° generate() ãå®çŸ©ããŸãã
def generate(model, prompt, temperature=0.1, top_p=0.4, show=True):
responses = model.generate_content(
prompt,
generation_config={
'max_output_tokens': 8192,
'temperature': temperature,
'top_p': top_p
},
safety_settings={
generative_models.HarmCategory.HARM_CATEGORY_HATE_SPEECH: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
generative_models.HarmCategory.HARM_CATEGORY_HARASSMENT: generative_models.HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
},
stream=True,
)
result = ''
for response in responses:
try:
if show:
print(response.text, end='')
result += response.text
except:
break
return result
ã¬ã·ã QA ãšãŒãžã§ã³ãã®äœæ
ãã£ãã·ã¥ã«ä¿åããã¬ã·ãããŒã¿ã«åºã¥ããŠãã¬ã·ãã«é¢ãã QA ãè¡ããšãŒãžã§ã³ããäœæããŸãããšèšã£ãŠããåçã«å¿ èŠãªããŒã¿ã¯ãã£ãã·ã¥ã«ä¿åãããŠããã®ã§ããããåç §ããŠåçããããã«ããã³ããã§æç€ºãããã ãã§ãã
å ·äœçã«ã¯ã次ã®ãããªããã³ããã®ãã³ãã¬ãŒãã䜿çšããŸãããã£ãã·ã¥ã«ä¿åããã¬ã·ãã®ããã¹ãããŒã¿ãå é ã«ãã£ãŠããã®åŸã«ãã®ãã³ãã¬ãŒãã®å 容ã远èšãããã®ãå®éã«äœ¿çšãããããã³ããã«ãªããŸãã
prompt_template = '''\
{}
[Additional instructions]
{}
-----
You are a data analyst specialized in cooking recipes.
The texts in [Recipes] is a list of recipes for various dishes.
The format of [Recipes] is one recipe per one line where each line consist of "[<ID>] <dish name>: <recipe description>".
[Task]
A. Write an answer to the [Question] that cites individual sources from [Recipes] as comprehensively as possible.
B. Show a list of "[ID] <dish name>" part in the source [Recipe] for each citation used in the output of Task A.
[Condition]
A. Each source is independent and might repeat or contradict content from other sources.
A. The response should be directly supported by the given sources and cited appropriately with a [ID] notation.
A. The response should be as simple as possible. Avoid adding any information that's not explicitly asked.
A. If no relevant source, the entire output is only "æ
å ±ããããŸããã"
A. If you can't create an answer satisfying all conditions, the entire output is only "æ¡ä»¶ãæºããåçã¯ã§ããŸããã"
A. The answer contains 10 citations at most.
A. You must also follow the [Additional instructions].
[Format instraction]
A. In plain text, no markdowns. Show the answer in Japanese.
A. A dish name in the answer is based on the <dish name> part in the source [Recipes].
B. The list of "[ID] <dish name>" part is a literal copy from the source [Recipes].
B. Avoid adding "[ID] <dish name>" that's not explicitly contained in the answer.
[Example1]
<Question>
å°éºŠç²ã䜿ã£ãèæçã®ä»£è¡šäŸãïŒã€æããŠã
<Answer>
å°éºŠç²ã䜿ã£ãèæçã®ä»£è¡šäŸã¯ãããã³ãã«ã¡ã¶ã³[7815c351]ãããŒãããŒã[a9735973]ã§ãã
- [7815c351] ããã³ãã«ã¡ã¶ã³
- [a9735973] ããŒãããŒã
[Example2]
<Question>
ããããã䜿ã£ãçãæçãæããŠã
<Answer>
æ
å ±ããããŸããã
[Question]
{}
'''
æåã® {} ã®éšåã«ã¯ããã£ãã·ã¥ã«ã¯ãªãæ°ããã¬ã·ãã远å ã§èšèŒããæ³å®ã§ãããŸãã [Additional instructions] ã®éšåã«ã¯ããŠãŒã¶ãŒããã®ãã£ãŒãããã¯ã§åŸããã远å ã®æç€ºãå
¥ããŸãããããã®ããŒã¿ã«åºã¥ããŠåçãçæããäžã§ãåç
§ããã¬ã·ãïŒIDãšæçåïŒã®ãªã¹ããä»äžããããã«æç€ºããŠããŸãã
ãŠãŒã¶ãŒããã®è³ªåããã³ãã¬ãŒãã«åã蟌ãã§ãåçãçæãã颿° answer_with_citations() ãæ¬¡ã®ããã«å®çŸ©ããŸãã
def answer_with_citations(question, new_recipes='', instructions='None'):
prompt = prompt_template.format(new_recipes, instructions, question)
response = generate(model_cached, prompt)
return response
ããã§ã¯ãç°¡åãªè³ªåã§åäœç¢ºèªãè¡ããŸãããã
question = '''\
æ¡ã䜿ã£ãçããã¶ãŒããïŒã€æããŠã
'''
answer = answer_with_citations(question)
[å®è¡çµæ]
æ¡ã䜿ã£ãçããã¶ãŒãã¯ãããŒãã³ãã©ãŒãã³ãã±ãŒãI[55a9c25f]ã§ãã
- [55a9c25f] ããŒãã³ãã©ãŒãã³ãã±ãŒãI
æ¡ã䜿ã£ããã¶ãŒãããã¬ã·ãã® ID ãšå ±ã«åŸãããŸãããã©ã®ãããªæçãªã®ãå ·äœçã«èããŠã¿ãŸãããã
question = '''\
[55a9c25f] ããŒãã³ãã©ãŒãã³ãã±ãŒãI ã¯ã©ã®ãããªæçã詳ãã説æããŠã
'''
answer = answer_with_citations(question)
[å®è¡çµæ]
ããŒãã³ãã©ãŒãã³ãã±ãŒãI [55a9c25f]ã¯ããªãŒãã³ã190âã«äºç±ãã9 x 13ã€ã³ãã®ãã³ã®
åºã«æ¡ãæ·ãè©°ãã也ç¥ããã±ãŒãããã¯ã¹ã§èŠãããã¿ãŒã现ããåã£ãŠã±ãŒãããã¯ã¹ã®äžã«
眮ããã·ãã¢ã³ãæ¯ããããŠ190âã§45åéçŒããæçã§ãã
- [55a9c25f] ããŒãã³ãã©ãŒãã³ãã±ãŒãI
å®éã®ã¬ã·ãã衚瀺ããŠãåçããã£ãŠããã確èªããŸãã
print(get_recipe('55a9c25f'))
[å®è¡çµæ]
[55a9c25f] ããŒãã³ãã©ãŒãã³ãã±ãŒãI: ãªãŒãã³ã 375 床 F (190 床 C) ã«äºç±ããŸãã
9 x 13 ã€ã³ãã®ãã³ã®åºã«æ¡ã空ããŸãã也ç¥ããã±ãŒãããã¯ã¹ã§èŠãããã£ãããšæŒããŸãã
ãã¿ãŒã现ããåããã±ãŒãããã¯ã¹ã®äžã«çœ®ããŸããäžããã·ãã¢ã³ãæ¯ããããŸãã
375 床 F (190 床 C) ã§ 45 åéçŒããŸãã
åé¡ãªãããã§ãïŒ
æ°ããã¬ã·ãã远å ããäŸ
æ¢åã®ã¬ã·ãã«ã¯ãªããããªè³ªåãããŠã¿ãŸãããã
question = '''\
æé®®äººåã䜿ã£ããã¶ãŒããïŒã€æããŠã
'''
answer = answer_with_citations(question)
[å®è¡çµæ]
æ
å ±ããããŸããã
äžããããã¬ã·ãã ãã«åºã¥ããŠåçããããã«æç€ºããŠããã®ã§ãããã¯æåŸ
éãã®çµæãšèšããŸããã§ãããæé®®äººåã䜿ã£ããŠããŒã¯ãªãã¶ãŒãã®ã¬ã·ãã远å ããã®ã¯æªãããšã§ã¯ãããŸããããã®ãããªå Žåã¯ã颿° answer_with_citations() ã® new_recipes ãªãã·ã§ã³ã§æ°ããã¬ã·ãã®æ
å ±ã远å ã§ããŸãã
new_recipes = '''\
[0b6d8e5a] æé®®äººåãšèèã®ããªã³: éã«çä¹³ãçã¯ãªãŒã ãç ç³ãå»ãã æé®®äººåãå
¥ãã\
匱ç«ã§å ç±ããŸããæ²žéš°çŽåã§ç«ãæ¢ãã10åã»ã©èžãããŠæé®®äººåã®é¢šå³ãç§»ããŸããè¶ããã§\
æé®®äººåãåãé€ããæº¶ãåµãšèèãå ããŠæ··ãåãããŸããèç±å®¹åšã«æµãå
¥ãã160âã«äºç±\
ãããªãŒãã³ã§30åæ¹¯ç
çŒãããŸããç²ç±ãåãããå·èµåº«ã§å·ããåºããŸããã奜ã¿ã§ãã€ãã\
ã¯ãªãŒã ããã«ãŒããæ·»ããŠãå¬ãäžãããã ããã
'''
question = '''\
æé®®äººåã䜿ã£ããã¶ãŒããïŒã€æããŠã
'''
answer = answer_with_citations(question, new_recipes=new_recipes)
[å®è¡çµæ]
æé®®äººåã䜿ã£ããã¶ãŒãã¯ãæé®®äººåãšèèã®ããªã³[0b6d8e5a]ã§ãã
- [0b6d8e5a] æé®®äººåãšèèã®ããªã³
ä»åã¯ã远å ã®ã¬ã·ããåç §ããŠãæé®®äººåã䜿ã£ããã¶ãŒãã®æ å ±ãåŸãããŸãããæ¬¡ã®ããã«ãè€æ°ã®ã¬ã·ããç°¡åã«è¿œå ããŠãããŸãã
new_recipes = '''\
[0b6d8e5a] æé®®äººåãšèèã®ããªã³: éã«çä¹³ãçã¯ãªãŒã ãç ç³ãå»ãã æé®®äººåãå
¥ãã\
匱ç«ã§å ç±ããŸããæ²žéš°çŽåã§ç«ãæ¢ãã10åã»ã©èžãããŠæé®®äººåã®é¢šå³ãç§»ããŸããè¶ããã§\
æé®®äººåãåãé€ããæº¶ãåµãšèèãå ããŠæ··ãåãããŸããèç±å®¹åšã«æµãå
¥ãã160âã«äºç±\
ãããªãŒãã³ã§30åæ¹¯ç
çŒãããŸããç²ç±ãåãããå·èµåº«ã§å·ããåºããŸããã奜ã¿ã§ãã€ãã\
ã¯ãªãŒã ããã«ãŒããæ·»ããŠãå¬ãäžãããã ããã
[7f041a32] 倧è±ããŒãã®åæã: 倧è±ããŒããããŠã«ã«å
¥ããã²ãã²ãã®æ°Žã«æµžããŠæ»ããŸãã\
æ»ã£ããæ°Žæ°ããã£ããçµããŸããå¥ã®ããŠã«ã«é€æ²¹ãé
ãçå§ããã³ãã¯ãæ··ãåããã倧è±ããŒã\
ãæŒ¬ã蟌ã¿ãŸãã30åã»ã©çœ®ããŸããå¥ã®ããŠã«ã«çæ ç²ãšå°éºŠç²ãæ··ãåãããŸããæŒ¬ã蟌ãã \
倧è±ããŒãã«è¡£ããŸã¶ããŸãã170âã®æ²¹ã§æããŸãããã€ãè²ã«ãªã£ããæ²¹ããåãåºãã\
æ²¹ãåããŸããã奜ã¿ã§ã¬ã¢ã³ãæ·»ããŠããã ããŸãã'''
question = '''\
èã䜿çšããªãåæãã®ã¬ã·ãã¯ãããŸããïŒèã®ä»£ããã®é£æã¯äœã§ããïŒ
'''
answer = answer_with_citations(question, new_recipes=new_recipes)
[å®è¡çµæ]
èã䜿çšããªãåæãã®ã¬ã·ãã¯ã倧è±ããŒãã®åæã[7f041a32]ã§ããèã®ä»£ããã®é£æã¯
倧è±ããŒãã§ãã
- [7f041a32] 倧è±ããŒãã®åæã
誀ã£ãåçããŠãŒã¶ãŒãã£ãŒãããã¯ã§ä¿®æ£ããäŸ
次ã¯ã誀ã£ãåçãåŸãããäŸãæ¢ããŠã¿ãŸããããã¯ã©ãã§ããããã
question = '''\
ãã¡ãã䜿ã£ããã¶ãŒãã®ä»£è¡šäŸã3ã€æããŠã
'''
answer = answer_with_citations(question)
[å®è¡çµæ]
ãã¡ãã䜿ã£ããã¶ãŒãã®ä»£è¡šäŸã¯ãã€ããŽã®ã·ã§ãŒãã±ãŒã[9be2a5ba]ã
ã€ããŽãã¬ããã§ã«ãµã©ã[efffa9b9]ãã€ããŽãã¬ããã§ã«ãµã©ã[0fa80cf8]ã§ãã
- [9be2a5ba] ã€ããŽã®ã·ã§ãŒãã±ãŒã
- [efffa9b9] ã€ããŽãã¬ããã§ã«ãµã©ã
- [0fa80cf8] ãžã¥ãã£ã®ã¹ããããªãŒãã¬ããã§ã«ãµã©ã
åçæã®äžã«ãã€ããŽãã¬ããã§ã«ãµã©ããã2ã€ãããŸãããåŒçšãèŠããš2çš®é¡ã®ç°ãªãã¬ã·ãã«å¯Ÿå¿ããããã§ããã§ãããããã¯ãµã©ãã§ãã£ãŠããã¶ãŒãã§ã¯ãªããããªæ°ãããŸãã詳ããèããŠã¿ãŸãããã
question = '''\
ã€ããŽãã¬ããã§ã«ãµã©ã[efffa9b9]ã¯ãµã©ããªã®ã«ãã¶ãŒããªã®ã§ããïŒãã®çç±ã¯ïŒ
'''
answer = answer_with_citations(question)
[å®è¡çµæ]
ã€ããŽãã¬ããã§ã«ãµã©ã[efffa9b9]ã¯ãç ãããã¬ããã§ã«ãç ç³ãšæº¶ãããã¿ãŒã§åºãã
åå°ã®äžã«ãã¯ãªãŒã ããŒãºãšãã€ãããããã³ã°ãæ··ããå±€ããã®äžã«ã€ããŽã®å±€ãéããŠ
äœããŸãããã¶ãŒãã®ãããªçãææã䜿ãããŠããããããµã©ãã§ãããªãããã¶ãŒããšããŠ
åé¡ãããŸãã
- [efffa9b9] ã€ããŽãã¬ããã§ã«ãµã©ã
ããã¯ç§ã®çè§£ãééã£ãŠããŸãããã€ããŽãã¬ããã§ã«ãµã©ãã¯ããã¶ãŒãã®ä»²éã§ãã£ãŠããããã§ããã¡ãã£ãšæããã®ã§ãå®éšãšããŠããããŠäž»èгçãªå€æãå ¥ã質åãããŠã¿ãŸãã
question = '''\
ã¹ãã€ã·ãŒãªæçãïŒã€æããŠã
'''
answer = answer_with_citations(question)
[å®è¡çµæ]
ã¹ãã€ã·ãŒãªæçã®äŸãšããŠã¯ãæ²çžé¢šããã¿ã€[9af388d1]ããããŸãã
- [9af388d1] æ²çžé¢šããã¿ã€
ãããŸã§å人çãªæèŠã§ãããããã®æçã¯ã¹ãã€ã·ãŒãšã¯èšããªããã¹ãã€ã·ãŒãªæçãšããŠåçããŠæ¬²ãããªãããšãããã£ãŒãããã¯ãè¿ãããšã«ããŸããå
·äœçã«ã¯ã颿° answer_with_citations() ã® instructions ãªãã·ã§ã³ã«æ¡ä»¶ã远å ããŸããããã¯ãããã³ãããã³ãã¬ãŒãã® [Additional instructions] ããŒãã«è¿œå ãããŸãã
instructions = '''\
[9af388d1] æ²çžé¢šããã¿ã€ ã¯ã¹ãã€ã·ãŒãªæçãšããŠåçããªãã§ãã ããã
'''
question = '''\
ã¹ãã€ã·ãŒãªæçãïŒã€æããŠã
'''
answer = answer_with_citations(question, instructions= instructions)
[å®è¡çµæ]
ã¹ãã€ã·ãŒãªæçã®äŸãšããŠã¯ããã£ãããµã©[a2d5275c]ããããŸãã
- [a2d5275c] ãã£ãããµã©
ãã£ãŒãããã¯ãåæ ããŠãåçãå€åããããšãããããŸãããã®ã»ãã«ããã£ãŒãããã¯ãããæã¯ã次ã®ããã«å ããŠããããšãã§ããŸãã
instructions = '''\
[9af388d1] æ²çžé¢šããã¿ã€ ã¯ã¹ãã€ã·ãŒãªæçãšããŠåçããªãã§ãã ããã
[9af388d1] æ²çžé¢šããã¿ã€ ã¯æãæ¥ã«ããããã®æçãšããŠåçããŠãã ããã
'''
question = '''\
æãæ¥ã«ããããã®æçãããã€ãèŠç¹ã£ãŠãã ããã
'''
answer = answer_with_citations(question, instructions=instructions)
[å®è¡çµæ]
æãæ¥ã«ããããã®æçã¯ãæ²çžé¢šããã¿ã€[9af388d1]ãã¿ã³ã¹ã¬ã¿ã¹ã©ãã[645dfb76]ã
èªå®¶è£œã¬ã¢ããŒã[30c15764]ã§ãã
- [9af388d1] æ²çžé¢šããã¿ã€
- [645dfb76] ã¿ã³ã¹ã¬ã¿ã¹ã©ãã
- [30c15764] èªå®¶è£œã¬ã¢ããŒã
ãããã®äŸãããGemini 1.5 Pro / Flash ã®ãã³ã°ã³ã³ããã¹ããæŽ»çšããŠãããã³ããã«ããŸããŸãªæ å ±ã远å ããäœ¿ãæ¹ã®ã€ã¡ãŒãžãã€ããããšæããŸããããã»ã©ã®ããã³ããã®ãã³ãã¬ãŒãã¯ãããŸã§äžäŸã§ãã®ã§ãããããã®ãŠãŒã¹ã±ãŒã¹ã«ãããŠãå®éã®å©çšåœ¢æ ã«ãã£ãå å®¹ãæ€èšãããšããã§ãããã
æ€èšŒãçµãã£ãããæ¬¡ã®ã³ãã³ãã§ãããžã§ã¯ãã§äœ¿çšããŠãã Context cache ã®å 容ããŸãšããŠåé€ããããšãã§ããŸãã
for cached_content in caching.CachedContent.list():
cached_content.delete()
ãŸãšã
ãã®èšäºã§ã¯ãGemini 1.5 ã®ãã³ã°ã³ã³ããã¹ããæŽ»ãã㊠LLM ãçšãã AI ã·ã¹ãã ãæ®µéçã«è²ãŠãã¢ãããŒãã説æããŸããã
AI ãæŽ»çšããéã¯ãçšéã«å¿ããŠé©åãªããŒã¿ãéããããšã倧åã§ãããšã¯èšããLLM ãšçµã¿åãããå©çšã§ã¯ãããããã©ã®ãããªããŒã¿ãé©åãªã®ããšããç¹ã§åžžã«è©Šè¡é¯èª€ãå¿ èŠã§ããå®éã®ãŠãŒã¹ã±ãŒã¹ã«è¿ãå 容ã®ãã¹ããã§ããç°å¢ãææ©ãçšæããããšããããŠãAI ã«ããæ©æµãåããªããé©åãªããŒã¿ãå¹ççã«åéã§ãããAI Assistedãã®ã¹ããããçæéã§å®çŸããããš ââ ãããã®ç¹ã§ããã³ã°ã³ã³ããã¹ãã®æŽ»çšãã€ã³ããããããããããã§ããRAG ã·ã¹ãã ã®æ§ç¯ã«æéãããã£ãŠèŠåŽããŠããéã¯ããã³ã°ã³ã³ããã¹ããæŽ»çšããã¢ãããŒãããã²æ€èšããŠãã ããã
æåŸã«ãã£ãããªã®ã§ãä»åäœæããã¬ã·ã QA ãšãŒãžã§ã³ãã«ä»å€ã®ãã£ããŒãææ¡ããŠããããŸãããã
question = '''\
æãå€ã®ãã£ããŒã«ããããã®ã¡ã€ã³æçãšã¢ã«ã³ãŒã«é£²æãã»ããã§ææ¡ããŠã
çç±ãããããŠæããŠãã ããã
'''
answer = answer_with_citations(question)
[å®è¡çµæ]
æãå€ã®ãã£ããŒã«ããããã®ã¡ã€ã³æçãšã¢ã«ã³ãŒã«é£²æã®ã»ããã¯ãããã³ãã£ããŒã©[c1e9fe5c]
ãšã¢ããŒã[ca34d0e3]ã§ããããã³ãã£ããŒã©ã¯ãé¶èãã·ã§ãŠã¬ãéé€ãªã©ã§ç
®èŸŒãã æçãªã®ã§ã
飿¬²ã®ãªãæã§ãé£ã¹ãããã§ãããããŸãããã³ã²ã³èãã»ãããèãªã©ã®éèãå
¥ã£ãŠããã®ã§
æ 逿ºç¹ã§ã[c1e9fe5c]ãã¢ããŒãã¯ãã©ã é
ã«ã©ã€ã ããã³ããå ããã«ã¯ãã«ãªã®ã§ãæãå€ã«
ãŽã£ããã®çœãããªé£²ã¿ç©ã§ã[ca34d0e3]ã
- [c1e9fe5c] ããã³ãã£ããŒã©
- [ca34d0e3] ã¢ããŒã
ãªãã»ã©ïŒ
Discussion