æé·ãç¶ãããã«ã¹ã±ã¢ã»æ é€ããžãã¹ã«ãããŠãåäžã®ããã¯ãšã³ãã§ã¯åŠçããããªããªã£ãŠããŸãããAIãã£ãããããã®ãã©ãã£ãã¯ã倧éã®ãŠã§ã¢ã©ãã«ããŒã¿åã蟌ã¿ããããŠæ¥åžžçãªAPIãªã¯ãšã¹ãããã¹ãŠåããªãœãŒã¹ãç«¶åããã·ã¹ãã ã®ã¹ã±ãŒãªã³ã°ãå°é£ã«ãããããã€ã¡ã³ãã«ãªã¹ã¯ããããããŠããŸãããç§ãã¡ã¯ããããAWSäžã§åäœãããåäžã®APIã²ãŒããŠã§ã€ã®èåŸã«ç·šæããããç¬ç«ããŠãããã€å¯èœãªéçŽåãµãŒãã¹ã«åèšèšããŸããã
課é¡
- ãã¹ãŠã®ã¿ã¹ã¯ãåŠçããåäžã®ã³ãŒãããŒã¹ã ããã¯ãŒã¯ãããŒã«ã¯ããŠãŒã¶ãŒç®¡çãAIãã£ãããããã®æšè«ãã¬ã·ãããã«ã¹ã±ã¢ããŒã¿åæãå«ãŸããŠããŸãããããããäžåéã§ã¹ãã€ã¯ãçºçãããšãã©ãããã©ãŒã å šäœãå£åãã倿Žã®ãã³ã«ã·ã¹ãã å šäœãåãããã€ããå¿ èŠããããŸããã
- éåžžã«ç°ãªããªãœãŒã¹ãããã¡ã€ã«ã LLMãæŽ»çšãããã£ãããããã®ãªã¯ãšã¹ãã¯ãCPUãšã¡ã¢ãªã倧éã«æ¶è²»ããããŒã¹ãçã§ãããŠã§ã¢ã©ãã«ããŒã¿ã®åã蟌ã¿ã¯æžã蟌ã¿ãå€ããç¶ç¶çã§ããã³ã¢ã®CRUD APIã¯è»œéã§äžå®ã§ããããã3ã€ãã¹ãŠã1ã€ã®ãµãŒããŒã§ãµã€ãžã³ã°ããããšã¯ãäžéšã®ã¯ãŒã¯ããŒãã«éå°ãªè²»çšãæ¯æããä»ã®ã¯ãŒã¯ããŒãã飢ããããããšãæå³ããŠããŸããã
- ç¬ç«ããã¹ã±ãŒãªã³ã°ãšãããã€ã¡ã³ãã ããŒã ã¯ã³ã¢APIã«åœ±é¿ãäžããããšãªãAIã¯ãŒã¯ããŒããã¹ã±ãŒãªã³ã°ããä»ã®ãã¡ã€ã³ãå±éºã«ãããããšãªã1ã€ã®ãã¡ã€ã³ã«å€æŽãåºè·ããå¿ èŠããããŸããã
åäžã®å®å šãªå ¥å£ç¹ã è€æ°ã®ããã¯ãšã³ããµãŒãã¹ã«ãããããããã¯ã©ã€ã¢ã³ãïŒã¢ãã€ã«ããŠã§ãã管çïŒã¯ãäžè²«ããèªèšŒãããã€ã³ã¿ãŒãã§ãŒã¹ãå¿ èŠãšããŠããŸãããå éšã®ãµãŒãã¹æ§æãå€éšã«æŒããããšã¯èš±ãããŸããã
ç§ãã¡ã®ãœãªã¥ãŒã·ã§ã³
ç§ãã¡ã¯ããã©ãããã©ãŒã ã3ã€ã®ç¹åããNestJSãµãŒãã¹ã«åå²ããAWS Application Load Balancerã®èåŸã«é 眮ããŸãããã¡ã€ã³ãµãŒããŒã¯APIã²ãŒããŠã§ã€å ŒãªãŒã±ã¹ãã¬ãŒã¿ãŒãšããŠæ©èœããŸããã¡ã€ã³ãµãŒããŒã¯èªèšŒãšã³ã¢ãšãªããã¡ã€ã³ã管çããèªèšŒãããRESTãä»ããŠãã£ãããããããã³ãã«ã¹ã±ã¢ãã€ã¯ããµãŒãã¹ã«å°éçãªäœæ¥ãå§è²ããŸããå ±æãããããŒã¿ããã³ã¡ãã»ãŒãžã³ã°å±€ã«ããããµãŒãã¹ã¯ççµåã§ãããªããäžè²«æ§ãä¿ã¡ãŸãã

ã¢ãŒããã¯ãã£
- ã¡ã€ã³ãµãŒã㌠(NestJS) â APIã²ãŒããŠã§ã€å ŒãªãŒã±ã¹ãã¬ãŒã¿ãŒïŒèªèšŒããŠãŒã¶ãŒãç®æšãã¬ã·ããã¹ã±ãžã¥ãŒãªã³ã°ãéç¥ããã¹ãŠã®ã¯ã©ã€ã¢ã³ãã¯åäžã®å ¬éãšã³ããªãŒãã€ã³ããæã¡ãŸãã
- ãã£ããããããã€ã¯ããµãŒãã¹ (NestJS) â LangChain/LangGraphãä»ããAzure OpenAI (GPT-4o) ãæèŒããAIäŒè©±ãµãŒãã¹ã§ãã¬ã·ããç¥èæ€çŽ¢ã®ããã«Elasticsearchãããã¯ãšã³ããšããRAGã䜿çšããŸãã
- ãã«ã¹ã±ã¢ãã€ã¯ããµãŒãã¹ (NestJS) â ãŠã§ã¢ã©ãã«ããã³æåã®ãã«ã¹ã±ã¢ããŒã¿ïŒApple HealthãHealth ConnectïŒãåã蟌ã¿ãéçŽããåææ©èœãæäŸããŸãã
- AWS ECS Fargate ã¯ã3ã€ã®ã³ã³ããåããããµãŒãã¹ãããããç¬èªã®CPU/ã¡ã¢ãªãµã€ãžã³ã°ãšã¹ã±ãŒãªã³ã°ããªã·ãŒã§å®è¡ããŸãã
- Application Load Balancer ã¯HTTPSãçµç«¯ãããã¹ããŒã¹ã§é©åãªãµãŒãã¹ã«ãã©ãã£ãã¯ãã«ãŒãã£ã³ã°ããŸãã
- å ±æããŒã¿å±€ â MongoDB AtlasïŒãã©ã€ããªã¹ãã¢ïŒãRedisïŒãã£ãã·ã¥/ã»ãã·ã§ã³ïŒãElasticsearchïŒæ€çŽ¢ïŒãActiveMQïŒéåæéç¥é ä¿¡ïŒã
äž»ãªæ©èœ
1. ãªãŒã±ã¹ãã¬ãŒã¿ãŒãã¿ãŒã³ã ã¡ã€ã³ãµãŒããŒã¯ã¯ã©ã€ã¢ã³ãã«å ¬éãããå¯äžã®ãµãŒãã¹ã§ãããã¹ãŠã®ãªã¯ãšã¹ããèªèšŒããå éšã§ãµãŒãã¹éåŒã³åºããè¡ããŸããããã«ãããããã¯ãšã³ãã®ããããžãŒã¯ãã©ã€ããŒãã«ä¿ãããã¯ã©ã€ã¢ã³ããšã®é£æºã¯ã·ã³ãã«ã«ãªããŸãã
2. èªèšŒããããµãŒãã¹éåŒã³åºãã ãµãŒãã¹ééä¿¡ã¯ãå ±æHTTPã¯ã©ã€ã¢ã³ããä»ããRESTã§è¡ããããµãŒãã¹ããšã®Bearer APIããŒã§ä¿è·ãããŠããŸãã
// ã¡ã€ã³ãµãŒããŒãAIãªã¯ãšã¹ãããã£ããããããã€ã¯ããµãŒãã¹ã«å§è²ãã const reply = await this.microserviceClient.post( this.chatbotApiKey, // ãµãŒãã¹ããšã®Bearerã㌠`${this.chatbotUrl}/chat`, { user, question, sessionId, attachment }, ); |
3. ã¯ãŒã¯ããŒãããšã®ç¬ç«ããã¹ã±ãŒãªã³ã°ã åãµãŒãã¹ã¯ç¬èªã®ãµã€ãžã³ã°ãæã€åå¥ã®Fargateã¿ã¹ã¯å®çŸ©ã§ããã¡ã¢ãªã倧éã«æ¶è²»ãããã£ããããããµãŒãã¹ã¯ã軜éãªã³ã¢APIãšã¯ç¬ç«ããŠã¹ã±ãŒãªã³ã°ãããããAIãã©ãã£ãã¯ã®ã¹ãã€ã¯ãæ¥åžžçãªãªã¯ãšã¹ããæ¯æžãããããšã¯ãããŸããã
4. çµã¿èŸŒã¿ã®ã¬ãžãªãšã³ã¹ãåããé©åãªãµã€ãžã³ã°ã®AIãµãŒãã¹ã ãã£ããããããµãŒãã¹ã¯è€æ°ã®Azure OpenAIããŒãããŒããŒã·ã§ã³ããã¬ãŒãå¶éããšã©ãŒæã«èªåçã«ãã§ã€ã«ãªãŒããŒããŸããããã«ãããè² è·ãããã£ãŠãAIæ©èœã¯å¿çæ§ãç¶æããŸãã
5. éåæã¡ãã»ãŒãžã³ã°ã«ããéç¥ã ActiveMQã®é å»¶ãã¥ãŒãæéããŒã¹ã®éç¥ããªãã€ã³ããŒããªã¯ãšã¹ãã¹ããªãŒã ããåé¢ãããããéç¥ã®é ä¿¡ãã³ã¢APIãã©ãã£ãã¯ã劚ãããé å»¶ããããããããšã¯ãããŸããã
6. ç¹°ãè¿ãå¯èœã§åé¢ããããããã€ã¡ã³ãã ECRããECSãŸã§ãåãµãŒãã¹ã¯ç¬èªã®Dockerã€ã¡ãŒãžãšããŠåºè·ãããŸãããã«ã¹ãµãŒãã¹ãžã®å€æŽã¯ãåã«ãã«ã¹ãµãŒãã¹ãåãããã€ããã ãã§æžã¿ãŸããããã¯ããã«ã¹ãã§ãã¯æžã¿ã®ããŒãªã³ã°ã¢ããããŒãã«ããè¿ éã§äœãªã¹ã¯ãªãªãªãŒã¹ãå¯èœã«ããŸãã
7. äžè²«æ§ã®ããã¯ã©ã€ã¢ã³ãå¥çŽã ã¢ãã€ã«ïŒReact NativeïŒãšç®¡çããã·ã¥ããŒãã¯ãã¹ãŠãåäžã®ããŒããã©ã³ã·ã³ã°ãããHTTPSãšã³ããªãŒãã€ã³ããšéä¿¡ããŸãããã€ã¯ããµãŒãã¹ãžã®å éšçãªåå²ã¯ããããããã¯èŠããŸããã
çµæ
- 仿¥ã§ã¯ãAIãã£ãããããããã«ã¹ã±ã¢ããŒã¿ãã³ã¢APIã®ã¯ãŒã¯ããŒãã¯åå¥ã«ã¹ã±ãŒãªã³ã°ãããã©ã®ã¿ã¹ã¯ãä»ã®ã¿ã¹ã¯ãå£åãããããšã¯ãããŸããã
- åãµãŒãã¹ã¯ç¬ç«ããŠãããã€ããããªã¹ã¯ã®é«ããã©ãããã©ãŒã å šäœã®ãªãªãŒã¹ããé«éã§éé¢ãããã¢ããããŒãã«å€ããŸãã
- ã³ã³ãã¥ãŒãã¯ãµãŒãã¹ããšã«é©åã«ãµã€ãžã³ã°ãããåäžã®æ±çšãµãŒããŒã«ããéå°ãªããããžã§ãã³ã°ãæé€ããŸãã
- åäžã®å®å šã§ããŒããã©ã³ã·ã³ã°ããããšã³ããªãŒãã€ã³ãã«ãããã¯ã©ã€ã¢ã³ã飿ºã¯ã·ã³ãã«ã«ä¿ãããããã¯ãšã³ãã¯ãã©ã€ããŒããã€ã¢ãžã¥ã©ãŒãªç¶æ ãç¶æããŸãã
æè¡ã¹ã¿ãã¯
NestJS · TypeScript · Node.js 20 · Azure OpenAI (GPT-4o) · LangChain · MongoDB Atlas · Redis · Elasticsearch · ActiveMQ · AWS ECS Fargate · Application Load Balancer · Amazon ECR · Docker
ãã®ä»ã®ããã°
1. AWS ECSã§åç»åŠçã¯ãŒã¯ããŒããã¹ã±ãŒãªã³ã°ããæ¹æ³
2. AWS ECRã䜿çšããŠã³ã³ããã€ã¡ãŒãžã管çã»ãããã€ããæ¹æ³
3. 髿§èœåç»ã¯ãŒã¯ããŒãã«AWS EC2ã䜿çšããæ¹æ³

