Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
Search
吉田真吾
November 13, 2024
Technology
810
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
AWS Lambda 10周年記念生誕祭
https://serverless-newworld.connpass.com/event/320224/
吉田真吾
November 13, 2024
More Decks by 吉田真吾
See All by 吉田真吾
AIに代替されるフリーランス、AIを操りチームを導くリーダー。運命を分ける『AI-DLC』とインテントマネジメント/Intent is All We Need
yoshidashingo
0
62
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development with AI-DLC
yoshidashingo
0
270
早く行きたいならClaude Codeと行け、遠くに行きたいならチームで行け 〜AI駆動開発の講師が教えるAIがリードするチーム開発の実践ノウハウ/Fast w/ Claude Code, Far Together
yoshidashingo
0
43
AI-DLCを活用した高品質・安全なAI駆動開発実践 / AI Driven Development
yoshidashingo
1
700
はじめてのAI-DLC
yoshidashingo
3
1.3k
初手AIで実現する 「AIと一緒に働く」ということ - AIファーストを実現する汎用タスクエージェントのつくりかた / JAWS DAYS 2026
yoshidashingo
0
81
Claude Codeで実践するスペック駆動開発入門 / sdd-with-claude_code
yoshidashingo
4
17k
エンジニアはコミュニティで伸びる!テックコミュニティ代表者トークリレー / TCP2026
yoshidashingo
0
45
達人に学ぶAIコーディング / ai-coding-learned-from-master
yoshidashingo
0
61
Other Decks in Technology
See All in Technology
Forza Horizon 6 のテレメトリ機能で 自動運転に使えそうな学習データを集める話
henjin0
0
150
Flutterをカメラで動かしたかった話
sony
1
130
グローバル基準のSREは、運用現場でどう機能したか:成熟度アセスメントの実践 / SRE NEXT 2026
sorawatanabe
0
140
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
Pavlokで始める電撃駆動開発
sgrsn
0
180
Invisible to AI? Making TYPO3 Sites Quotable by AI Search Systems
wolfgangwagner
0
160
メルカリのグローバルアプリで挑んだ AlloyDB 運用と課題解決の実践記
hatappi
0
240
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
cygames
PRO
0
120
20260807_第6回_関東kaggler会LT_claw系bot xangiと始める、"寂しくない" kaggle
sugupoko
0
200
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
650
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
550
Featured
See All Featured
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
470
Believing is Seeing
oripsolob
1
180
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
340
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
360
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.9k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Designing for humans not robots
tammielis
254
26k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.6k
Typedesign – Prime Four
hannesfritz
42
3.1k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.8k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Transcript
"84-BNCEBͱาΜͩ lαʔόʔϨεzͱࠓޙ ٢ాਅޗ !ZPTIJEBTIJOHP ηΫγϣϯφΠϯ δΣωϥςΟϒΤʔδΣϯπ
吉田真吾 n バックグラウンド 証券システム基盤開発 p基盤システム開発、Oracleチューニング エバンジェリスト‧ソリューションアーキテクト pAWS設計‧構築‧移⾏ pエバンジェリスト‧SA スタートアップCTO p技術経営‧組織開発
pタレントマネジメントSaaS 開発‧運⽤ n 現在のしごと (株) セクションナイン 代表取締役CEO (株) ジェネラティブエージェンツ 取締役COO n 実績等 pAWSウルトラクイズ 初代チャンピオン pAWS Samurai 2014 / 2016 pAWS Serverless Hero p講演、執筆多数
ࠓ͢͜ͱ "84-BNCEBͷੜ ʲͷ͜ͱʳ αʔόʔϨεΞʔΩςΫνϟͷຄڵͱίϛϡχςΟͷ ʲʙ͘Β͍ͷ͜ͱʳ ϫʔΫϑϩʔΦʔέετϨʔγϣϯͦ͜ਅࠎ ʲҎ߱ͷ͜ͱʳ
˞ศٓతʹ࣌ܥྻͷਖ਼֬ੑ͕ඈͼඈͼʹͳΔ෦͕͋Γ·͢
"84-BNCEBͷੜ
·ΔͰΫϥυͰΔϚΫϩݴޠʮ"84-BNCEBʯൃද • SF*OWFOU ʹͯൃද • /PEFKT • Πϕϯτιʔεɿ •
4όέοτ • %ZOBNP%#ςʔϒϧ • ,JOFTJTετϦʔϜ • ϗετɿඇެ։ -JOVYϕʔε • ϝϞϦɿ.#ʙ (# • λΠϜΞτɿʙඵ • Ұ࣌ετϨʔδɿ.# • ϝϞϦʹൺྫͯ͠$16ωοτ ϫʔΫͷׂͯଟ͘ͳΔ https://www.publickey1.jp/blog/14/aws_lambdaaws_reinvent_2014.html
'VODUJPOTBTB4FSWJDFͷ಄ • ಛ • ࣮ߦڥӅṭˍϓϥοτϑΥʔϜཧͰɺඞཁͳͷίʔυͷΈ • ίϯςφϕʔεͰௐୡϦʔυλΠϜΛॖ • ࢄ࣮ߦڥʹΑΔՄ༻ੑͷ֬อ •
࣮ߦ࣌ؒͷΈ՝ۚʹΑΔίετݮ • ΞʔΩςΫνϟʹ͓͚Δ • 4UBUFGVM 4UBUFMFTT • Ӭଓσʔλ شൃੑ • ϞϊϦγοΫ .JDSPTFSWJDFT • όονॲཧ ΠϕϯτυϦϒϯ https://aws.amazon.com/jp/about-aws/events/reinvent-report-2014-pt2/
"84-BNCEB αʔόʔϨεɾϚχϑΣετ ϑΝϯΫγϣϯσϓϩΠ୯Ґ֦ுՄೳ୯ҐͰཧ͢Δ ػثԾαʔόʔίϯςφ͕ϓϩάϥϛϯάϞσϧ͔Βݟ͑ ͍͚ͯͳ͍ σʔλΛӬଓԽ͢ΔετϨʔδଞͷॴʹ֬อ͢Δ
ϦΫΤετ୯Ґʹεέʔϧ͕ཧ͞ΕΔɻϢʔβʔΩϟύγ ςΟͷௐୡෆա͠ͳ͍ ΞΠυϧ࣌ؒʹ՝ۚ͞Ε͍͚ͯͳ͍ʢػαʔόʔίϯςφ ՝ۚʣ ϑΝϯΫγϣϯͲ͜Ͱ࣮ߦͰ͖ΔͷͰɺ҉తʹোੑΛ ࣋ͭ #SJOHZPVSPXODPEFίʔυ͚ͩ࣋ͪࠐΊ͍͍ ϝτϦΫεऩूϩάऔಘઈରతਖ਼ٛͰ͋Δ
"84-BNCEB :&4 • ಠཱͨ͠ϑΝϯΫγϣϯ • 3&45GVM"1*͔ ΠϕϯτυϦϒϯ • #:0$ ίʔυΛ࣋ͪࠐΉ͚ͩ
• ෳࡶͳΞϧΰϦζϜͰཧ • ਫฏεέʔϧ • ಉظඇಉظεέδϡʔϦϯά /0 • αʔόʔ্ͰՔಇ • ϞϊϦγοΫͳUBSϘʔϧʹͳͬ ͍ͯΔ • ϞϊϦγοΫͳσϓϩΠํ๏ • ॏྔڃϑϨʔϜϫʔΫ • ࢄ͞ΕͨγεςϜίʔυ • ୯ௐ࡞ۀʢϩάऔಘͳͲʣ͕ඞ ཁ αʔόʔϨεΞϓϦέʔγϣϯ͔Ͳ͏͔
ίʔϧυελʔτ 2019年3⽉現在 • ⾔語実⾏環境によって違いあり • NodeやGoについては無視できる 場合が⼤半だと⾔える ※並列実⾏してない(ランプアップなし)なのであくまで 参考 1SPWJTJPOFE$PODVSSFODZ
4OBQ4UBSU ͔ͭͬͯ
αʔόʔϨεΞʔΩςΫνϟ ͷຄڵ
ύϥμΠϜγϑτ 8IZ5IF'VUVSF0G4PGUXBSF"OE"QQT*T4FSWFSMFTT CZ,FO'SPNN 71PG#VTJOFTT%FWFMPQNFOUBU*SPOJP • ίϯϐϡʔςΟϯάϦιʔεͷௐୡϦʔυλΠϜͷॖ • ελϯμϩʔϯΞϓϦ͔ΒͷมԽʢݱࡏͷ.JDSPTFSWJDFTʣ • ΫϥυͰॊೈʹίϯϐϡʔςΟϯάϦιʔεΛαʔϏεͱͯ͠ར
༻͢Δ͜ͱ͕Ͱ͖Δ • αʔόʔ͕ཁΒͳ͍ͱ͍͏͜ͱͰͳ͘ɺ։ൃऀαʔόʔʹ͍ͭ ͯʮߟ͑ͳͯ͘Α͘ͳΔʯ http://readwrite.com/2012/10/15/why-the-future-of-software-and-apps-is-serverless/
1BB4ͷීٴ ʙ • ΠϯϑϥΛӅṭͨ͠ιϑτΣΞ࣮ߦج൫ ˠΠϯϑϥ࣮ߦڥͷϝϯςʹඅ͢࡞ۀ ͕ݮΔ • 'BDUPS"QQ ͷਪਐ •
՝ • ϨΨγʔγεςϜͷҠ২ੑ • ύοέʔδϯάϙʔλϏϦςΟͷ࠶ݱੑ ͷ͞
8FC 6*υϦϒϯ ΞϓϦέʔγϣϯ #BDLFOE'PS'SPOUFOEͰαʔόʔϨ ε׆༻ ೝূϩδοΫΛ#BB4Ͱஔ͑ %ZOBNP%#ʹΫϥΠΞϯτ͔Β ΞΫηε͢ΔΑ͏ʹ
େͷϩδοΫΛΫϥΠΞϯτͷ γϯάϧϖʔδΞϓϦέʔγϣϯ ʹ 69ʹؾΛ͚ͭΔ ͯ͠αʔόʔ ଆ"1*(BUFXBZͰଋͶΔ ݕࡧػೳΛ'BB4্ʹ ηΩϡϦςΟͷߟྀͰ՝ۚผ%# ʹผ'BB4ͰΞΫηε͢ΔΑ͏ʹ http://martinfowler.com/articles/serverless.html
αʔόʔϨεγϯάϧϖʔδΞϓϦέʔγϣϯ ಡΈਐΊͳ͕ΒखΛಈ͔͚ͩ͢Ͱ 4FSWFSMFTT 41"͕࡞Ͱ͖Δ 4UFQCZ 4UFQΨΠυ
www.example.com Amazon Route 53 Amazon S3 (Static Website) Google+ profile
Cognito Identity Pools Lambda DynamoDB SPA 41"ʴαʔόʔϨεߏ
αʔόʔαΠυॲཧෆཁ [index.html] イベント ループ Javascript [app.js] [app_spec.js] イベントを トリガする リクエスト
コールバック 関数の起動 入力の取得 マークアップの変更 マークアップのテスト public ├── index.html ├── app.js ├── tests │ ├── SpecHelper.js │ ├── app_spec.js │ ├── index.html │ └── lib │ ├── jasmine-2.3.4 │ │ ├── boot.js │ │ ├── console.js │ │ ├── jasmine-html.js │ │ ├── jasmine.css │ │ ├── jasmine.js │ │ └── jasmine_favicon.png │ └── jquery-2.1.4.js └── vendor.js
'use strict'; var learnjs = {}; learnjs.problemView = function() {
return $('<div class="problem-view">').text('Coming soon!'); } learnjs.showView = function(hash) { var routes = { '#problem-1': learnjs.problemView }; var viewFn = routes[hash]; if (viewFn) { $('.view-container').empty().append(viewFn()); } } ςετۦಈ [tests/app_spec.js] describe('LearnJS', function() { it('can show a problem view', function() { learnjs.showView('#problem-1'); expect($('.view-container .problem-view').length).toEqual(1); }); it('shows the landing page view when there is no hash', function() { learnjs.showView(''); expect($('.view-container .landing-view').length).toEqual(1); }); }); テスト ϧʔτͷଘࡏνΣοΫˠςετɿΤϥʔ ˠϧʔτͷ࣮ˠςετɿਖ਼ৗ [app.js] 実装
αʔόʔαΠυॲཧύʔπͱͯ͠ΈࠐΈ ログイン ID取得 検証 認証情報取得 検証 APIコール ログインOK ID発行
ΠϕϯτυϦϒϯΞϓϦέʔγϣϯ • ΦϯϥΠϯࠂγεςϜ • ૉૣ͍৴ ͱಉ࣌ʹ ΞΫςΟϏςΟه • ඇಉظʹαʔόʔʹૹ৴͍ͯͨ͠෦ ΛεέʔϥϏϦςΟΛؾʹ͠ͳ͍ͯ͘
͍'BB4ʹૹ৴ • ͦͷଞɺΞοϓϩʔυίϯςϯπͷ αϜωΠϧ࡞ͳͲ http://martinfowler.com/articles/serverless.html
"84ʹΑΔαʔόʔϨεΞʔΩςΫ νϟ • αʔόʔϨεΞʔΩςΫνϟʹΑΔಈըγΣ ΞαΠτߏங • ΦϯϥΠϯڭҭಈըαΠτʮ"$MPVE (VSVʯͰ࣮ࡍʹΘΕ͍ͯΔٕज़ίʔυ Λϕʔεʹ%FFQ%JWF •
"84-BNCEB"1*(BUFXBZ4 $MPVE'SPOU &MBTUJD5SBOTDPEFS "VUI'JSFCBTF3FBMUJNF %BUBCBTF
ϋϯζΦϯ༰
None
http://www.slideshare.net/acloudguru/ant-stanley-being-serverless
$PHOJUP "84-BNCEB (PPHMF"QQ &OHJOF 1SFWJFX 8IZ5IF'VUVSF0G4PGUXBSF "OE"QQT*T4FSWFSMFTT ϑϩϯτΤϯυͷओઓԽʹ ͏όοΫΤϯυͷύʔπԽ
"NB[PO4 "1*(BUFXBZ ,JOFTJT'JSFIPTF $MPVE8BUDI&WFOUT &WFOU#SJEHF 4UFQ'VODUJPOT "UIFOB (MVF "VSPSB4FSWFSMFTT7 "QQ'MPX 1SPUPO "QQMJDBUJPO $PNQPTFS 0QFO4FBSDI 4FSWFSMFTT #FESPDL "QQ'BCSJD ##%BUB*OUFSDIBOHF &MBTUJ$BDIF 4FSWFSMFTT "QQ4ZOD "84'BSHBUF 4FSWFSMFTT"QQMJDBUJPO3FQPTJUPSZ lͪΐͬͱzαʔόʔϨε αʔόʔϨε ΠϕϯτϧʔςΟϯάɺϑΣσϨʔ γϣϯɺεςʔτϚγϯͳͲͷਐԽ $%/ΤοδͷαʔόʔϨε 7 8BTN CZ4IJOHP٢ాਅޗ !"844FSWFSMFTT)FSP <ࢀߟࢿྉ> 'JHIUJOHPGGGBVYTFSWFSMFTTCBOEJUTXJUIUIFUSVFEFGJOJUJPOPGTFSWFSMFTT IUUQTXXXHPNPNFOUPDPNCMPHGJHIUJOHPGGGBLFTFSWFSMFTTCBOEJUTXJUIUIFUSVFEFGJOJUJPOPGTFSWFSMFTT Ί͓͖5FDI3FQPSU ʮαʔόʔϨεͷ࣍ͳΜͳΜͩʯ IUUQTOFLPSVSJCPPUIQNJUFNT
4FSWFSMFTT$PNNVOJUZ +1 ΧϯϑΝϨϯε • 4FSWFSMFTTDPOG 5PLZP • 4FSWFSMFTTDPOG 5PLZP •
4FSWFSMFTT%BZT 5PLZP • 4FSWFSMFTT%BZT 5PLZP • 4FSWFSMFTT%BZT 'VLVPLB • 4FSWFSMFTT5PLZP 7JSUVBM • 4FSWFSMFTT5PLZP • 4FSWFSMFTT5PLZP .FFUVQ • 4FSWFSMFTT.FFUVQ5PLZP • 4FSWFSMFTT.FFUVQ0TBLB • 4FSWFSMFTT.FFUVQ4BQQPSP • 4FSWFSMFTT.FFUVQ'VLVPLB • 4FSWFSMFTT.FFUVQ/BHPZB • 4FSWFSMFTT.FFUVQ+BQBO 7JSUVBM
https://techbookfest.org/product/np5LkgiR LfMg3bZ0YMFhi7?productVariantID=hZ0Y sP2zByYzyn2p07T0t3
ιϑτΣΞΞʔΩςΫνϟͱͯ͠ͷಛ n マイクロサービス指向 • ⼩規模で⾃律的なシステム • 1つの⽬的にフィットしている n リアクティブなアーキテクチャ •
リクエストルーティング機能(バインド/トリガ/ファンアウト)∕ランタイム∕状態管理∕ 永続ストレージを「分離」することでコードをメンテナンスしやすい状態に維持し、⽣産性 を向上する n 認証‧認可にもとづくリソースアクセス • サービス間のアクセスは認証サービスから取得した委任トークンを⽤いて認可される (SAML / OpenID Connect) n DRY • 競争⼒を得られない汎⽤機能のアウトソース
ϦΞΫςΟϒͳΞʔΩςΫνϟΛ࣮ݱ͢ΔͨΊͷཁૉ nϦΫΤετϧʔςΟϯάػೳ l8FCɿ8FCϓϩΩγFY'BTU$POUBJOFS lϚΠΫϩόονɿ1VC4VCɺΩϡʔΠϯά lϫʔΫϑϩʔ੍ޚɿΦʔέετϨʔλʔ nঢ়ଶཧ l࣮ߦ࣌ΤϥʔλΠϜΞτ੍ޚϦτϥΠ੍ޚϑΝϯΞτॱং੍ޚ εϩοτϦϯάαʔΩοτϒϨΠΧʔεέʔϦϯάॖୀ αʔϏεσΟεΧόϦʔճ෮ੑϩΪϯά nӬଓετϨʔδ
lΦϒδΣΫτετϨʔδΩʔɾόϦϡʔετΞ3%#.4 nϥϯλΠϜ lϏδωεϩδοΫͷΈ
αʔόʔϨεΞʔΩςΫνϟͷ ύλʔϯผϢʔεέʔε IUUQZPTIJEBTIJOHPIBUFOBCMPHDPNFOUSZTFSWFSMTTVTFDBTFT
Usecases of Serverless Architecture 8FCΞϓϦέʔγϣϯ • 41" • 3&45"1*
ӡ༻ۀ Ϗοάσʔλܥ • ετϦʔϜσʔλॲཧ • &5-ॲཧɺେنΫΤϦॲཧ ϞόΠϧɾ*P5ͷόοΫΤϯυ ΞϓϦέʔγϣϯ࿈ܞͷόοΫΤϯυ • 76* • $IBUCPU
8FCΞϓϦέʔγϣϯ 4FSWFSMFTT 4JOHMF1BHF"QQT
www.example.com Amazon Route 53 Amazon S3 (Static Website) Google+ profile
Cognito Identity Pools Lambda DynamoDB SPA
8FCΞϓϦέʔγϣϯ $47Ξοϓϩʔυʗμϯϩʔυ )3ܥࣄۀձࣾ
upload.example.com Amazon Route 53 Amazon S3 (Static Website) Cognito User
Pools Lambda RDS アップロード画⾯ Amazon S3 イベント発⽕
8FCΞϓϦέʔγϣϯ 3&45"1*
3&45"1* カスタマー S3 CloudFront DynamoDB Lambda function API Gateway Amazon
Cognito 認証‧認可 SPA REST API CodePipeline CodeBuild CodeDeploy 開発者 CloudFormation テンプレート Swagger.yml • API BlueprintによるAPI Docの⾃動最新化 • newmanでAPIの⾃動テスト Functionコード
ӡ༻ όονॲཧ ܦ৽ฉ͞Μͷࣄྫ
ΦϯίʔϧγεςϜ Lambda 障害DB アーカイブ アラート アプリケーション ログの監視対象 API Gateway 輪番のリスト
発呼 コマンド指⽰ コマンド選択 Lambda 履歴登録 コールバック
όονॲཧ upload.example.com Amazon Route 53 Amazon S3 (Static Website) Cognito
User Pools Lambda RDS アップロード 画⾯ Amazon S3 イベント発⽕ • ⼀覧画⾯や詳細画⾯とCSVアップロード∕ダウンロードが 同⼀アプリに載っている • php-fpmやunicornのワーカーの設定チューニングが⼤変 (重たい処理に合わせないといけない)
https://speakerdeck.com/ikait/serverless-architecture-supports-nikkeis-paper-
https://speakerdeck.com/ikait/serverless-architecture-supports-nikkeis-paper-
https://speakerdeck.com/ikait/serverless-architecture-supports-nikkeis-paper-
ΞϓϦέʔγϣϯ࿈ܞ "MFYB4LJMMT4FU
ɾ"NB[PO։ൃऀϙʔλϧΞΧϯτ ɾ"84-BNCEBʢ"84ΞΧϯτʣ ɾBMFYBΞϓϦʢʴ"NB[PODPKQΞΧϯτʣ
Πϯςϯτͷ࡞ 4LJMM#VJMEFS それぞれのインテントが Lambdaの別々のハンドラーに マッピングされる サンプル発話で動詞の 「ゆれ」を吸収する
։ൃޮΑ͍͔ʁ
10X Product Development • 最優先 = Product Market Fit •
10X ソフトウェア開発者は存在しない • 10X 製品開発はできる • ビジネスコード開発に時間を使う • 顧客とのイテレーションを最⼤化する • 依存性の最⼩化:仕様確定待ち、DBA 待ちなどを避ける IUUQXXXTMJEFTIBSFOFU4FSWFSMFTT$POGKPFFNJTPOYQSPEVDUEFWFMPQNFOU
10X Product Development • Commercial Search • 2⼈の開発者 x 4ヶ⽉
• TypeScript 13,307⾏ • 開発者の稼働 95%以上 • Microservices的だが⾃分たちはコアだけ • 構成 • Auth: Firebase • Static Site Hosting: Netlify • 画像管理: Cloudinary • 検索: Algolia • ペインポイント • 製品ごとのラーニングカーブ IUUQXXXTMJEFTIBSFOFU4FSWFSMFTT$POGKPFFNJTPOYQSPEVDUEFWFMPQNFOU
νʔϜ։ൃ͍ͬͯ͠Ͱ͔͢ʁ • ΞʔΩςΫτͱ࣮ͷׂ͑͞Ͱ͖ΕΉ͠Ζఔ࣭ཧ ͍͢͠ 中山桂一さん@キャラウェブ WebもアプリもサーバーサイドはREST API化 してますが「Swagger定義」と「DynamoDB のテーブル定義」さえちゃんとできていれば、 外部ベンダに関数ごとに制作お願いできるん
で管理しやすいですよ (明日の開発カンファレンス より) 現場的コンウェイの法則 (マイクロサービスの実践)
None
ୈষʴষɿࣾจॻʹ͑Δ4MBDLΞϓϦͷ࣮ LLM を組み込んだチャットアプリケーションを写経しながら実装できる「ChatGPT/LangChain によるチャットシステム構築[実践]⼊⾨」を読んだ https://kakakakakku.hatenablog.com/entry/2023/10/16/085525 Ξοϓϩʔυͨ͠υΩϡϝϯτʹ ͍࣭ͭͯʹ͑Δ4MBDLΞϓϦ
4FSWFSMFTT "QQMJDBUJPO-FOT 8FMM"SDIJUFDUFE'SBNFXPSL • "84ͰαʔόʔϨεΞϓϦέʔγϣϯΛ͍͔ʹʮઃ ܭʯʮσϓϩΠʯʮΞʔΩςΫτʯ͢Δ͔ʹϑΥʔΧ εͨ͠ 8FMM"SDIJUFDUFE'SBNFXPSLผࢴ • ίϯϐϡʔςΟϯάσʔλετϦʔϜϢʔ
βʔཧϞχλϦϯάγεςϜཧΤοδ • ઃܭݪଇ • 'VODUJPO୯ҰతͰγϯϓϧʹ࡞Δ • ࢄɾฒྻͰॲཧ͕ՄೳͳΑ͏ʹ࡞Δ • γΣΞʔυφογϯά εςʔτϨε • ϋʔυΣΞͷΈΛҙࣝ͠ͳ͍࡞Γ $16ϑϥάͳͲ • 'VODUJPOͰͳ͘εςʔτϚγϯΛͬͯΞϓϦΛΦʔέετ Ϩʔτ͢Δ • ඇಉظͳΠϕϯττϦΨʔΛ׆༻͢Δ ϙʔϦϯάͱ͔͠ͳ͍ • ϦτϥΠલఏͰ͖ͳಈ࡞͕อূ͞ΕΔ࡞Γ • αʔόʔϨεͷϢʔεέʔε Serverless Application Lens https://d1.awsstatic.com/whitepapers/architecture/AWS-Serverless-Applications-Lens.pdf Serverless Applications Lens AWS Well-Architected Framework November 2017
ӡ༻อकϥΫ͔ʁ ࢦͤ/P0QTʁ
すべてがサーバーレスかつNoOpsになるか? No → 運⽤上の最終責任者はかわらない http://www.slideshare.net/ServerlessConf/charity-hound-serverless-noops-the-tooth-fairy n 対応が必要となる変化 • システムの構築やメンテナンス⽅法の変化 •
障害対応内容の変化 • 組織の技術スキルの変化 • 解決すべき技術課題の変化 • サーバーレス/NoOpsに適した組織⽂化づくり
すべてがサーバーレスかつNoOpsになるか? トレードオフへの対応 IUUQXXXTMJEFTIBSFOFU4FSWFSMFTT$POGDIBSJUZIPVOETFSWFSMFTTOPPQTUIFUPPUIGBJSZ n トレードオフ • 可視性が下がる → 適切な運⽤監視の計画 •
⾃分⾃⾝で問題を修復できない → リスクの把握、追加対策の実施 • 制約が明⽂化されていない可能性 → ⼗分な利⽤可否調査 • 共同利⽤‧アイソレーションの問題 → ⼗分な利⽤可否調査、ヒアリング、第三者認証、 監査レポートなど • ツールの未成熟さ → エコシステムの学習、⽀援、適切なツールチェー ンの構築
0CTFSWBCJMJUZͷୡ n ಛ • 'BB404ʹΞΫηεͰ͖ͳ͍ • 'BB4͕εέʔϥϒϧͳͷͰࢹج൫͕εέʔϧ͠ͳ͍ͱҙຯͳ͍ n ιϦϡʔγϣϯ తʹԠͯ͡
• %BUBEPH • &QTBHPO 5IVOESB "8493BZͳͲ
IUUQTTQFBLFSEFDLDPN@LFOTIQMBUGPSNFOHJOFFSJOHPOTFSWFSMFTT TMJEF 1MBUGPSN&OHJOFFSJOHPO4FSWFSMFTT
ϫʔΫϑϩʔͷΦʔέετ Ϩʔγϣϯͦ͜ਅࠎ
ϫʔΫϑϩʔΦʔέετϨʔγϣϯ • ͯ͢ͷࣄϫʔΫϑϩʔͰ͋Δ • εςʔτϚγϯΛཧ͢ΔΦʔέετϨʔλʔ • ίϯϙʔβϒϧͳ࣮ߦڥ
1990年代 2013 2018 2020 統計的⾔語モデル ニューラル⾔語モデル 事前学習済み⾔語モデル ⼤規模⾔語モデル(LLM) 特定タスク⽀援 n-gram⾔語モデル
統計的⼿法 確率推定 特定のタスク⽤途 タスクに依存しない 機能学習 Word2Vec (NPLM), NLPS 静的な単語の関連性 ニューラル⾔語モデル 特定のNLPタスク⽤途 タスク 解決 能⼒ 転移学習をもちいた NLPによるタスク解決 ELMO, BERT, GPT-1/2 コンテキスト表現 事前学習+ファイン チューニング さまざまなNLPタスク ⽤途 汎⽤的なタスク解決 GPT-3/4, ChatGPT, Claude ⾔語モデルの規模拡⼤ プロンプトによる⽳埋め さまざまな実世界のタスク ⽤途 A Survey of Large Language Models https://arxiv.org/abs/2303.18223
• ΤʔδΣϯτͱɺ環境を認識し、目標を達成するた めに自律的に行動するଘࡏ • ΤʔδΣϯτΒ͠͞ͷ؍ ਓೳͷ֤෦ྖҬΛͦΕΒͷಠࣗͷྺ࢙తจ຺ʹԊͬ ͯղઆ͢ΔͷͰͳ͘ ݱࡏΒΕ͍ͯΔࣄฑΛڞ௨ͷ ΈͷதͰ࠶ߏங͢Δ͜ͱΛࢼΈͨ ˠཧͱ࣮ફ
ॳ൛ ༁ ୈ൛ ༁ ୈ൛ୈ൛ "*ΤʔδΣϯτͱʁ
ͯ͢ͷࣄϫʔΫϑϩʔͰ͋Δ αʔϏεσβΠϯͳ͠Ͱ ϓϩμΫτ࡞ΔΘ͚ͳ͍ΑͶʁ
3F"DU4ZOFSHJ[JOH3FBTPOJOHBOE"DUJOHJO-BOHVBHF .PEFMT • ݕূύλʔϯ B 3FBTPOͳ͠ɺ"DUͳ͠ C 3FBTPOͷΈ D
"DUͷΈ E 3FBTPO͋Γɺ"DU͋Γ 3F"DU • "QQMF3FNPUFͷ΄͔ʹɺ"QQMF 3FNPUF͕ͱͱ૬ޓ࡞༻͢ΔΑ ͏ʹઃܭ͞ΕͨϓϩάϥϜΛ੍ޚͰ ͖ΔσόΠε͋Γ·͔͢ʁ ˠ3F"DUͷΈਖ਼ղ https://arxiv.org/abs/221
あなたは部屋の中央にいます。すばやく周囲を⾒てみるとキャビネット#6、キャビネット#1、コーヒーマシン#1、カウンター#3、ガスコン ロ#1、トースター#1があります。 あなたのタスクは: 胡椒⼊れを引き出しに⼊れてください。 (2) AlfWorld ⾏動 1: 引き出し#1に⾏きます。 観察
1: 引き出し#1は閉まっています。 ⾏動 2: 引き出し#1を開きます。 観察 2: 引き出し#1を開きました。引き出し#1は開いています。中に⾷ 器洗いスポンジ#2とスプーン#1が⼊っています。 ⾏動 3: キッチンシンク#1に⾏きます。 観察 3: キッチンシンク#1の上に⾷器洗いスポンジ#3と、ヘラ#1と、ス プーン#2があります。 ⾏動 4: キッチンシンク#1から胡椒⼊れ#1を⼿に取ります。 観察 4: なにも起きません。 ⾏動 5: キッチンシンク#1から胡椒⼊れ#1を⼿に取ります。 観察 5: なにも起きません。 (2a) Act のみ ⾏動 1: 思考[まず胡椒⼊れを⾒つける必要があります...キャビネット (#1-6)やカウンター(#1-3)や...にあるかもしれません。] ⾏動 2: キャビネット#1に⾏きます。 観察 2: キャビネット#1の上に花瓶#2があります。 (ここでエージェントはキャビネット#1に⾏き、キャビネット#2,#3、そ してカウンター#1,#2に⾏きます。) ⾏動 6: カウンター#3に⾏きます。 観察 6: カウンター#3の上にりんご#1、パン#1,...胡椒⼊れ#1,花瓶#3が あります。 思考 7: カウンター#3から胡椒⼊れ#1を⼿に取ります。 観察 7: カウンター#3から胡椒⼊れ#1が⼿に⼊りました。 ⾏動 8: 思考[胡椒⼊れ#1が⾒つかりました。次に、これを引き出し#1に ⼊れる必要があります。] ⾏動 9: 引き出し#1に⾏きます。 観察 9: 引き出し#1は閉まっています。 ⾏動 10: 引き出し#1を開けます。 観察 10: 引き出し#1を開いています... ⾏動 11: 胡椒⼊れ#1を引き出し#1に⼊れます。 観察 11: 胡椒⼊れ#1を引き出し#1に⼊れました。✔ (2b) ReAct (Reason + Act)
"*ΤʔδΣϯτͷ࣮Ξϓϩʔν શͳ3F"DUΤʔδΣϯτ • ෳࡶͳඪʹ͔ͬͯҎԼͷ ͯ͢Λ--.Ͱ੍ޚ ɾ؍ 0CTFSWF ˠࢥߟ 5IJOL<3FBTPOJOH> ˠߦಈ
"DU ΦʔέετϨʔλʔʴ--. • ͭҎ্ͷΞΫγϣϯΛܾఆతͳ ΦʔέετϨʔλʔͰ੍ޚ • --.ʹΑΔΞΫγϣϯ • ೝɾ؍ • λεΫͷܭը'VODUJPOͷબ • λεΫͷ࣮ߦ • ଟ͘ͷϚϧνΤʔ δΣϯτϑϨʔϜ ϫʔΫ • -BOH(SBQI • "HFOUTGPS #FESPDL • 4UFQ'VODUJPOT #FESPDL
メモリ 実⾏エージェント (GPT-4) (1) タスクと実⾏結果のペアを保存 (2) コンテキスト情報をメモリから読み出す 3. タスクの実⾏結果を送信する タスク作成エージェント
(GPT-4) タスクキュー ユーザー 1. ⽬標やタスクを与える 2. タスクを実⾏させる コンテキスト情報 4 新しいタスクを追加 優先度づけエージェント (GPT-4) コンテキスト情報を メモリから読み出す コンテキスト情報 5. タスク優先度をつける 6. タスクを消す Task-driven Autonomous Agent https://yoheinakajima.com/task-driven-autonomous-agent-utilizing-gpt-4-pinecone-and-langchain-for-diverse-applications/ Baby AGI
A1. 数学の問題を解く 学⽣ アシスタント 専⾨家 アシスタント 専 ⾨ 家 に
聞 く 検索拡張 プロキシ 検索拡張 アシスタント A2. 検索拡張チャット ALFWorld 実⾏マシン A3. 意思決定 アシスタント グラウンディング エージェント 指揮官 A4. マルチエージェントコーディング ライター 護衛 マネージャー A5. 動的グループチャット ⼀⻫配信 会話 チェス盤 A6. 対話型チェス プレイヤー A プレイヤー B AutoGen
-BOH(SBQI
Conditional Edge 実⾏待ち ノード Eメールの 新着チェック Eメール取得 ノード ノード Eメール
クルー Eメール解析 フィルタリング 全スレッド取得 調査実施 下書き作成 crewAI + LangGraph https://github.com/crewAIInc/crewAI-examples/tree/main/CrewAI-LangGraph
None
1. LLMアプリケーション開発の基礎 2. OpenAI APIの基礎 3. プロンプトエンジニアリング 4. LangChainの基礎 5.
LCEL徹底解説 6. RAGアプリ開発実践 7. LangSmith 8. AIエージェントとは? 9. LangGraphでつくるAIエージェント実践入門 10.LangGraphでつくる要件定義生成AIエージェント 11.エージェントデザインパターン 12.LangChain/LangGraphで実装するエージェント デザインパターン 【好評発売中!】