2023/3/10 ã« Azure OpenAI Serivce ã§ ChatGPT(gpt-35-turbo) ããã¬ãã¥ãŒã§å©çšå¯èœã«ãªã£ããšçºè¡šãããŸããããã®çºè¡šãšåæã«ãChatGPT ãš Azure Cognitive Search ãçµã¿åãããŠãšã³ã¿ãŒãã©ã€ãºãµãŒããæ§ç¯ããããã®ã¢ãŒããã¯ãã£ããµã³ãã«ã³ãŒããæäŸãããŸããã
ãã®çºè¡šããã³ãµã³ãã«ã³ãŒãã®éèŠãªãã€ã³ãã¯ä»¥äžã§ãã
- ChatGPT(gpt-35-turbo)ã¢ãã«ã§ãã¬ãŒãã³ã°ãããããŒã¿ã«åºã¥ããŠããã¹ããçæããã®ã§ã¯ãªããäŒæ¥å ã«éããããŒã¿ã®ã¿ããçæããæ¹æ³ã®äŸã瀺ããŠããŸã
- ããŒã¯ã³ã®å¶é(4,096)ã®å£ãã§ããã ãåé¿ããããã®ææ³ã玹ä»ããŠããŸã
- ãåŒçšããããã¹ãã«ä»å ããããšã§ä¿¡é Œã§ããå¿çãçæããŸã
ä»åã¯ãã®ãµã³ãã«ã³ãŒããèªåã§çè§£ããããããã«ã«ã¹ã¿ãã€ãºãã€ã€å 容ã解説ããŠãããããšæããŸããä»è©±é¡ã® LangChain ã gpt-index(LlamaIndex)ã䜿çšãããŠããæ¹ã¯ä»çµã¿ããã¶ãã®ã§åé·ãªèª¬æã«ãªãããšæããŸãããäºæ¿ãã ããã
â»ããŒã¯ã³ã®å¶éã«ã€ããŠã¯ã3/15 ã® GPT-4 ã®ç»å Žã§æå€§ 32,768 ããŒã¯ã³ãŸã§äœ¿ããã¢ãã«ãåºãŠããã®ã§å°æ¥çã«ã¯åå²ããå¿ èŠããªããªãããã§ãã
8/24 æ¬èšäºã®ææ°çã以äžã«ãŸãšããŠããŸã
1. ããŒã¿æºå
æäŸãããŠãããµã³ãã«ã³ãŒãã«ä»éããŠãã PDF ãã¡ã€ã«ã¯ãæ¶ç©ºã® Contoso 瀟ã®ç€Ÿå ããã¥ã¡ã³ãã GPT-3 ã«çæããããã®ã§ãè±èªã§ããæ¬èšäºã§ã¯ãæ¥æ¬èªã䜿ã£ãŠå éšã®åããåããããã説æããŸããæ¥æ¬èªã§ç¹å¥ã«èæ ®ãã¹ããã€ã³ããèžãŸãã€ã€ããµã³ãã«ããŒã¿ãæ¥æ¬èªã®ãã®ãçšæããŸãã
ä»åã¯ã以å Azure Cognitive Search ã®ã»ãã³ãã£ãã¯æ€çŽ¢ã®ãã¢ã解説ãããšããšåãéåæä»£ã®æŠå° Wikipedia ã䜿ã£ãŠã¿ãŸããæ¥æ¬ã®æŽå²ã¯çŸç¶ã® ChatGPT ãäžåŸæãšããåéãªã®ã§ãä»åã®ãã¢ã«ã¯æé©ã§ãã
1.1. ããã¹ãã®åå²
éåžž 1 ã€ã®ããã¥ã¡ã³ãã«å«ãŸããããŒã¯ã³æ°ã¯ 1 床ã®ã³ã³ããã¹ãã«æå®ã§ããæå€§ããŒã¯ã³æ°ãããã«è¶ ããŸãããµã³ãã«ã³ãŒãïŒprepdocs.pyïŒã§ã¯ãèªåã§ PDF ã®ããã¹ããè§£æããPDF èªäœãåå²ã㊠Azure Blob Storage ãžã¢ããããŒãããŠã€ã³ããã¯ã¹ãæ§ç¯ããŠããŸããïŒããžãïŒ
ãµã³ãã«ã³ãŒãããã®ãŸãŸäœ¿ã£ãŠãããã®ã§ãããä»å䜿çšããæ¥æ¬èªããã¹ãããŒã¿ã¯ããã£ã³ã¯ã®åå²ã«æ¥æ¬èªããŒã¯ã³ãšããŠã®é æ ®ãå¿ èŠã§ããä»å LangChain ã® RecursiveCharacterTextSplitter ããã³ãfrom_tiktoken_encoder ã䜿çšã㊠OpenAI ã«æé©åãããæ£ç¢ºæ§ã®é«ããã£ã³ã¯åå²ãè¡ããŸãã
- ããã¹ãã®å岿¹æ³
RecursiveCharacterTextSplitter ã¯ãã£ã³ã¯ãååã«å°ãããªããŸã§ãé çªã«åå²ããŸãã - ãã£ã³ã¯ãµã€ãºã®æž¬å®æ¹æ³
tiktoken ã©ã€ãã©ãªã®ããŒã¯ãã€ã¶ãŒã䜿çšããŠããŒã¯ã³æ°ãæ£ç¢ºã«æž¬å®ããŸãã
text_splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
encoding_name='gpt2',
chunk_size=500,
chunk_overlap=50
)
chunk = text_splitter.split_text(data)
2. ãã£ãã UI
ãã£ãã UI ã¯ããã©ã«ãã§è¡šç€ºããã UI ã§ããã£ããããã圢åŒã§è³ªåãéããããšãã§ããŸãã

2.1. å éšã®åŠç
ãã£ãã UI ã®å
éšåŠçã以äžã®å³ã§èª¬æããŸãã

â æ€çŽ¢ã¯ãšãªãŒã®çæ
ãã£ããå±¥æŽãšæåŸã®è³ªåãããšã«ãGPT-3 Completion ãå©çšããŠæé©åãããããŒã¯ãŒãæ€çŽ¢ã¯ãšãªãçæããŸããã¢ãã«ãç¥ããªãå 容ã¯å€éšæ€çŽ¢ãšã³ãžã³ã«åãåãããææ³ããããŸããããã®å¯Ÿè±¡ã Azure Cognitive Search ã«ãããšããããšã§ããããŸãããã®éšåã¯ãã¯ãã«é¡äŒŒæ€çŽ¢ã«ãã£ãŠæ§ç¯ããããšãå¯èœã§ããã粟床ã»äŸ¡æ Œã»ããã©ãŒãã³ã¹ãªã©ã®èгç¹ããæ€èšŒãããããšããã§ãã
以äžã³ãŒãïŒchatreadretrieveread.pyïŒã§ãããLangChain ã®ããã³ãããã³ãã¬ãŒãã®äœ¿ãæ¹ã«äŒŒãŠããŸããâŠãç§ã®æ¹ã§ãã¢çšã«åœ¹å²ãæžãæããŠããŸãã
query_prompt_template = """以äžã¯ããããŸã§ã®äŒè©±ã®å±¥æŽãšãæ¥æ¬ã®æŽå²ã«é¢ãããã¬ããžããŒã¹ãæ€çŽ¢ããŠåçããå¿
èŠãããããŠãŒã¶ãŒããã®æ°ãã質åã§ãã
äŒè©±ãšæ°ãã質åã«åºã¥ããŠãæ€çŽ¢ã¯ãšãªãäœæããŸãã
æ€çŽ¢ã¯ãšãªã«ã¯ãåŒçšå
ã®ãã¡ã€ã«åãææžåïŒinfo.txtãdoc.pdfãªã©ïŒãå«ããªãã§ãã ããã
æ€çŽ¢ããŒã¯ãŒãã«[]ãŸãã¯<<>>å
ã®ããã¹ããå«ããªãã§ãã ããã
Chat History:
{chat_history}
Question:
{question}
Search query:
"""
Azure Cognitive Search ã BM25 ããŒã¹ã®ããŒã¯ãŒãæ€çŽ¢ã«é Œã£ãŠããããšãèãããšãããã®æ€çŽ¢ç²ŸåºŠãçåœç·ã«ãªã£ãŠããã®ã§ã¯ãªãã§ããããã
â¡æ€çŽ¢ã€ã³ããã¯ã¹ããé¢é£ææžãååŸ
â ã§çæããæ€çŽ¢ã¯ãšãªãŒã䜿ã£ãŠãAzure Cognitive Search ãããã£ã³ãã³ã°ãããããã¥ã¡ã³ããååŸããŸããAzure Cognitive Search ã§çŸåšãã¬ãã¥ãŒäžã®ã»ãã³ãã£ãã¯æ€çŽ¢ã®ãã»ãã³ãã£ãã¯ã©ã³ã«ãŒãæ©èœãå©çšããŠæ€çŽ¢ã©ã³ãã³ã°ã®ç²ŸåºŠãåäžãããããšãã§ããŸãã
ããã«ã³ãŒããèŠããšãæ€çŽ¢çµæã®ã»ãã³ãã£ã㯠ãã£ãã·ã§ã³ïŒæœåºçèŠçŽïŒãçæããŠçµæã®ããã¹ãã«å ãããªãã·ã§ã³ããããŸãã
â¢ChatGPT ãå©çšããåçã®çæ
Azure Cognitive Search ã®æ€çŽ¢çµæããã£ããå±¥æŽãå©çšããŠãã³ã³ããã¹ããå 容ã«å¿ããåçãçæããŸããããã§ããã³ããã䜿ã£ãŠåºå žåãåºåããããã«æç€ºããŠããŸããåºå žå㯠Azure Cognitive Search ã®ãã¡ã€ã«åã®ãã£ãŒã«ãã®å€ã䜿çšããŸãã
prompt_prefix = """<|im_start|>system
æ¥æ¬ã®æŽå²ã«é¢ãã質åããµããŒãããæåž«ã¢ã·ã¹ã¿ã³ãã§ããåçã¯ç°¡æœã«ããŠãã ããã
以äžã®åºå
žãªã¹ãã«èšèŒãããŠããäºå®ã®ã¿ãåçããŠãã ããã以äžã®æ
å ±ãååã§ãªãå Žåã¯ããããããªãããšçããŠãã ããã以äžã®åºå
žã䜿çšããªãåçã¯äœæããªãã§ãã ããããŠãŒã¶ãŒã«æç¢ºãªè³ªåãããããšãå©ãã«ãªãå Žåã¯ã質åããŠãã ããã
ååºå
žå
ã«ã¯ãååã®åŸã«ã³ãã³ãšå®éã®æ
å ±ããããåçã§äœ¿çšããåäºå®ã«ã¯å¿
ãåºå
žåãèšèŒããŠãã ããããœãŒã¹ãåç
§ããã«ã¯ãåè§ããã©ã±ããã䜿çšããŸããäŸãã°ã[info1.txt]ã§ããåºå
žãçµã¿åããããååºå
žãå¥ã
ã«èšèŒããããšãäŸãã°ã[info1.txt][info2.pdf] ãªã©ã
{follow_up_questions_prompt}
{injected_prompt}
Sources:
{sources}
<|im_end|>
{chat_history}
"""
åºå
žåã®ãã©ãŒããããããã³ããã§æç€ºããŠããšã¯âŠãåºåãããåºå
žå㯠[åºå
žå] ã®ãã©ãŒãããã§ããã°ããã³ããšã³ãåŽã§è§£éã§ããŸããããã¯ããã°ã©ã ã§æ¹è¯å¯èœã§ãã

2.2. ç»é¢ã®è§£èª¬
Thought process
ååçã®ð¡ãã¿ã³ãã¯ãªãã¯ãããšãããããã®åçã«äœ¿çšãããããã³ããã®äžèº«ã衚瀺ããããšãã§ããŸãã

Supporting content
ååçã®ðãã¿ã³ãã¯ãªãã¯ãããšãããããã®åçã«äœ¿çšããã Azure Cognitive Search ã®æ€çŽ¢çµæãèŠãããšãã§ããŸãã

Citation
åŒçšãããã¡ã€ã«ã®äžèº«ããã¬ãã¥ãŒããç»é¢ã§ããããšã³ã¿ãŒãã©ã€ãºãµãŒãã«ãããŠãã¡ã€ã«ã®å®äœã«ã¢ã¯ã»ã¹ããæ©èœãå®è£ ããå Žåã¯ã»ãã¥ãªãã£ã®èгç¹ããã¢ã¯ã»ã¹å¶åŸ¡ã«ç¹å¥ãªå¯Ÿå¿ãå¿ èŠã§ãããã¢ã¬ãã«ã§ããã°ããã¡ãã§ç޹ä»ããŠããŸãã
2.3.ãã©ããŒã¢ãã質å
ãã©ããŒã¢ãã質åã远å ã㊠ChatGPT ãšã®å¯Ÿè©±ãä¿é²ããããšãã§ããŸãã

å
·äœçãªè§£èª¬ã¯ä»¥äžã®èšäºãã芧ãã ããã
2.4. 泚æäºé
ãã®ãœãŒã¹ã³ãŒãã¯ãµã³ãã«ãªã®ã§ãã¹ãŠã®è³ªåã«å¯ŸããŠå®ç§ã«ã¯åäœããŸãããç§ãããã³ãããæ¥æ¬èªã«èš³ããŠãããšããã®ããããšæããŸããã以äžã®ããã«ããã¥ã¡ã³ãã«ã¯ååšããªã人ç©ã®åçããããããåçããã±ãŒã¹ããããŸããã®ã§ãããã³ãããšã³ãžãã¢ãªã³ã°ããã³ããã°ã©ã ã«ããå¶çŽã匷åããå¿
èŠãããããšæããŸããã

ãŸãããã®ã³ãŒãã ãšéå»ã®ãã£ããå±¥æŽãã€ãªãç¶ãããšçµå±ã¯ ChatGPT ã®ããŒã¯ã³å¶éã«åŒã£ãããã®ã§ããã«å¯ŸåŠããä»çµã¿ãå¿ èŠã§ããAI ã®ã»ãã¥ãªãã£ã®èгç¹ã§ã¯ããã³ããã€ã³ãžã§ã¯ã·ã§ã³ãžã®å¯Ÿçãèããå¿ èŠããããŸãïŒãã£ããæ€çŽ¢ã¯ãšãªã«å€æããŠãããã¥ã¡ã³ããæ€çŽ¢ããŠãã®äžããåçããå Žåã®å¯Ÿå¿ãªã®ã§éãããŠãããšã¯æããŸããïŒ
ããŒã¿ãã©ã€ãã·ãŒ
Azure OpenAI Service ã¯ãã³ã³ãã©ã€ã¢ã³ã¹ããã©ã€ãã·ãŒãããã³ã»ãã¥ãªãã£ãèæ ®ããŠèšèšãããŠããŸãã詳ããããŒã¿ãã©ã€ãã·ãŒã®ããã¥ã¡ã³ãããèªã¿ãã ãããæ©èœãšããŠãã©ã€ããŒããããã¯ãŒã¯ãããŒã«ããŒã¹ã®ã¢ã¯ã»ã¹å¶åŸ¡ïŒRBACïŒããªãŒãžã§ã³ã®å¯çšæ§ã責任ãã AI ã³ã³ãã³ãã®ãã£ã«ã¿ãŒåŠçãæäŸãããŸãã
3. 質åå¿ç UI
質åå¿ç UI ã¯äžåäžçã® FAQ ãè¡ãããã® UI ã§ãã以äžã® 3 ã€ã®æ¹æ³ãå®è£ ãããŠããŸãã
-
Retrive-Then-Read
æãã·ã³ãã«ãªã¢ãããŒãã§ããŠãŒã¶ãŒã®è³ªåã Azure Cognitive Search ã§æ€çŽ¢ããäžäœã®åè£ãååŸããŠãã®å 容ãã³ã³ããã¹ããšããŠãããã³ããã«éä¿¡ããŠåçãçæããŸãã -
Read-Retrive-Read
質åã«å¯ŸããŠã©ã®ãããªæ å ±ãæ¬ ããŠããã®ãã確èªããããã«ã質åãç¹°ãè¿ãè©äŸ¡ãããã¹ãŠã®æ å ±ãæã£ããšããã§ãåçãäœæããããšã詊ã¿ãŸããLangChain ã® Docs ã«ãããšãã®ææ³ã¯ zero-shot-react-description ã«è©²åœããReAct ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãTool ã®descriptionã®ã¿ã«åºã¥ããŠäœ¿çšããããŒã«ã決å®ããŸããã³ãŒãã§ã¯ Tool ã 2 ã€äœ¿çšããŠæ å ±ãæ€çŽ¢ããŠããŸãã -
Read-Decompose-Ask
react-docstore ã¢ãããŒãã䜿çšããŠè³ªåãåå²ããŠSearchãLookupãè¡ãããšã§ã質åã«çãããããŸã§äºå®ãæ¢ããŸããSearchã¯ããã¥ã¡ã³ãæ€çŽ¢ãLookupã§æåŸã«èŠã€ãã£ãããã¥ã¡ã³ãå ã®çšèªãæ€çŽ¢ã§ããããã«ããå¿ èŠããããŸããå€éšã·ã¹ãã ã®LookupãšããŠããšãã°ãå éšã¢ããªã±ãŒã·ã§ã³ã®åŸæ¥å¡ããŒãã«ã顧客ãµããŒã ã¢ããªã±ãŒã·ã§ã³ã®ã€ã³ã·ãã³ã ããŒãã«çãæããããŸãã
3.1. Retrive-Then-Read
ãã£ãã UI ãšä»çµã¿ã¯åãã§ããããã¡ã㯠One-Shot ã§å®è¡ããŠããŸãã
3.2. Read-Retrive-Read
ZeroShotAgent ã«æå®ãã 1 ã€ç®ã® Tool ã® Azure Cognitive Search ã®ã€ã³ããã¯ã¹ã«ã¯ãæºç¯é Œã®ãããã®å°ã«ããã«ãã§ã«é¢ããæ
å ±ã¯ãããŸããã2 ã€ç®ã® Tools ã«æå®ãã CSV Lookup ã«ãã£ãŠãå¥ã®ããŒã¿ãœãŒã¹ïŒä»åã¯æŠå°ããšã®ãããã®å°ã«ããã«ãã§ããŒã¿ã® CSVïŒããæ
å ±ãæ¢ããŠåçããŠããŸãã

3.2.1 å éšã®åŠç(MRKL ã®å®è£ äŸ)
GPT-3 ããªãŒã±ã¹ãã¬ãŒã¿ãŒïŒã³ã³ãããŒã©ãŒïŒãšããŠåäœãããäŸã

å
ã»ã©ã¯åçç¡çšã§ Azure Cognitive Search ãžæ€çŽ¢ãã«è¡ããŸããããMRKL ã¢ãããŒããå®è£
ããŠäºåã«äžããããŒã«ã®äžããããå¿
èŠãªãã®ã ãã䜿ã£ãŠæ
å ±ãã¹ããããã€ã¹ãããã§åéããŠåçããããšãã§ããŸããããã¯ãããš 2 ã€ã®ããŒã¿ãœãŒã¹ãå¿
èŠãªè³ªåãããŠãŸãããåã«ã«ãã§ã ããæããŠãšãããããªè³ªåã«ãããšãAzure Cognitive Search ã«ã¯æ€çŽ¢ãã«è¡ããŸããããŸããããã«ãè¡ãæ¹ãæããŠããããäºçŽããŠãã¿ãããªè³ªåã«ã察å¿ã§ããããã«å€éš API ã瀟å
ã·ã¹ãã ãšé£æºãã§ãããšããããã§ããããã®ã¢ãããŒãããã§ã«ãµã³ãã«ã³ãŒãã«å®è£
ãããŠããŸãã
3.3. Read-Decompose-Ask
æ¥æ¬èªã§åäœãããã®ãäžçªã€ããæ©èœãæ®éã«è³ªåãããš InvalidRequestError: This model's maximum context length is xxx tokens ... ãšã©ãŒãåºãŸãããŸãããªã®ã§ãã³ãŒãã®åæã«å¶éãå ããŠãšããããåãããã«ã¯ããŸãããæ¹åãå¿
èŠã§ãã

質åæã现ããåå²ããŠãçãã¯ãšãªãŒããšã« Azure Cognitive Search ã«æ€çŽ¢ãããããšããäœæ¥ãç¹°ãè¿ããªããæ®µéçã«äºå®ã確èªããŠããéçšãèŠãããšãã§ããŸãããŸããããèŠããšééã£ãŠãŸããâŠãã£ã³ã¯ã®åºåãæ¹ãèããªããšã§ããã
4. æ¥æ¬èªããã¥ã¡ã³ãçšãµã³ãã«ã³ãŒã
å ¬åŒã®ã»ãã®ãµã³ãã«ã³ãŒãã fork ããŠéåæä»£ã®æŠå°çã«æ¹é ãããã®ãã¢ããããŠããŸããåãæ¥ããã¢ã§ããã¬ãã«ã®é©åœã«ã¹ã¿ãã€ãºã§ãã
4.1. ããŒã«ã«éçºç°å¢æ§ç¯æé
äžèšã¬ããžããªã®æé åç §
ãããã«
ChatGPT ã®çãäžãããšåæã«ããšã³ã¿ãŒãã©ã€ãºãã¬ããžããŒã¹ãšããŠã® Azure Cognitive Search ãçãäžããŠãããããšæã£ãŠããŸããä»åŸãã®ãµã³ãã«ããŒã¿ã䜿ã£ãã¯ãŒã¯ã·ã§ãããªã©ãæ€èšããããªãšæã£ãŠããŸãã
3/15 GPT-4 ã®ç»å Žã§æå€§ 32,768 ããŒã¯ã³ãŸã§äœ¿ããã¢ãã«ãåºãŠããã®ã§ä»åŸããã«æ€çŽ¢äœéšãåäžãããã§ãã
3/17 æ°ãã«çºè¡šããã Semantic Kernel(SK) ãšçµ±åããããšã§ãããã«é«åºŠåãããã§ãã
4/1 ç¶ç·šã¯ã³ãã©