Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
【登壇資料】AI Agentタイムアウトから Goイテレータを俯瞰する
Search
エブリー
September 29, 2026
16
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【登壇資料】AI Agentタイムアウトから Goイテレータを俯瞰する
2026/09/30 GoBash vol.3
エブリー
September 29, 2026
More Decks by エブリー
See All by エブリー
【登壇資料】iOS開発に「動作確認」という概念を作った
everypr
1
100
【登壇資料】Claude全社導入で加速したAI活用とこれからの展望.pdf
everypr
0
110
【登壇資料】翻訳辞書にも型がほしい:ypecriptで考えるi18n
everypr
0
73
エンジニア職向け会社紹介資料
everypr
0
14k
【登壇資料】データ基盤をTreasureData + Databricksから Databricksへ統一する話
everypr
0
730
【登壇資料】Goにジェネリックメソッドが入るとどうなるか
everypr
0
150
【登壇資料】ドキュメント駆動開発から考える AI 駆動開発
everypr
0
210
【登壇資料】GoとWasmでつくる 軽量ブラウザUI
everypr
0
45
【登壇資料】google/jsonschema-go のこれまでとこれから
everypr
0
1.9k
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
A better future with KSS
kneath
240
18k
Making Projects Easy
brettharned
120
6.8k
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.5k
Designing for Timeless Needs
cassininazir
1
510
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
340
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
3
4.3k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
390
We Have a Design System, Now What?
morganepeng
55
8.3k
Transcript
AI Agentのタイムアウトから Goのイテレータを俯瞰する 2026-09-30
自己紹介 名前 uho-wq 所属 株式会社エブリー デリッシュキッチン開発部 プレミアム機能開発チーム Copyright © 2015
every, Inc. All rights reserved. 2
エブリーが提供しているプロダクト、ソリューション一覧 エブリーではマルチプロダクトを展開し、あらゆる暮らしの最適化に向き合っています 「熱狂を、仕掛ける。世の中 「インフルエンサーと熱狂を共 を、揺さぶる。」 SNS・動画の 創する」SNS・動画のプロフェッ プロフェッショナルチーム ショナルチーム WEB
Copyright © 2015 every, Inc. All rights reserved. 3
アジェンダ 1. デリッシュ AI 2. Goのイテレータ とエージェントループ 3. iter.Seq2[T, error]
4. エラー時の振る舞い Copyright © 2015 every, Inc. All rights reserved. 4
デリッシュ AI Copyright © 2015 every, Inc. All rights reserved.
5
デリッシュ AI google/adk-go を使用してすべて Go で実装 Copyright © 2015 every,
Inc. All rights reserved. 6
背景 run <run_id>: context deadline exceeded Copyright © 2015 every,
Inc. All rights reserved. 7
背景 run <run_id>: context deadline exceeded AI Agentのタイムアウト設定 通常のリクエスト 60秒
平均 3秒 Copyright © 2015 every, Inc. All rights reserved. 8
背景 Client-side Server-side ADK-Go デリッシュ AI tool レシピ検索 A2UI Client
end-user Copyright © 2015 every, Inc. All rights reserved. Agent HTTP + SSE 画像認識 UI生成 9
背景 Client-side Server-side ADK-Go デリッシュ AI tool レシピ検索 A2UI Client
end-user Copyright © 2015 every, Inc. All rights reserved. Agent HTTP + SSE 不正な引数で 無限ループ 画像認識 UI生成 10
背景 Client-side Server-side ADK-Go デリッシュ AI toolは毎回エラーを返していた tool レシピ検索 A2UI
Client Agent HTTP ループが止まらないのはなぜ? + end-user SSE Copyright © 2015 every, Inc. All rights reserved. 不正な引数で 無限ループ 画像認識 UI生成 11
Goのイテレータ とエージェントループ Copyright © 2015 every, Inc. All rights reserved.
12
Goのイテレータ Go 1.23 から、for range に関数を渡せるようになった • func(func() bool) •
func(func(V) bool) • func(func(K, V) bool) Copyright © 2015 every, Inc. All rights reserved. 13
Goのイテレータ yield に値を渡して呼ぶことで、for range のループ本体に値を 1 つずつ渡す // ループ側は break
したらfalseが返る // 0 item-0, 1 item-1, 2 item-2 Copyright © 2015 every, Inc. All rights reserved. 14
adk-go のツール呼び出し Flow は、ADK の中でモデル呼び出しとツール呼び出しを繰り返すエージェントループ ←ツールのエラーはここに入るはず https://github.com/google/adk-go/blob/f4c76700f4013fefe6c1ba01495188ec5775c689/internal/llminternal/base_flow.go#L103-L130 Copyright © 2015
every, Inc. All rights reserved. 15
adk-go のツール呼び出し "error" というキーの map に変換してイベントとして返していた ここに入る → https://github.com/google/adk-go/blob/f4c76700f4013fefe6c1ba01495188ec5775c689/internal/llminternal/base_flow.go#L103-L130 Copyright
© 2015 every, Inc. All rights reserved. 16
adk-go のツール呼び出しのまとめ 間違った引数でツールを呼ぶ バリデーションエラー返却 LLMが不適切な引数(パラメータ)を渡し てツール呼び出しを発行 {"error": ...} 同じ引数で再実行 仕様上ループ継続
→ 60秒まで繰り返す ツール呼び出しの失敗時も、仕様上エー ジェントの処理ループはそのまま継続され る 修正されずに同じツール呼び出しをリトライ イベントとして返される エラーをイベントで返せば、Agent が自己修復できるので理にかなってはいる Copyright © 2015 every, Inc. All rights reserved. 17
iter.Seq2[T, error] Copyright © 2015 every, Inc. All rights reserved.
18
iter.Seq2[T, error] • Goは error を値として扱うため言語仕様上は可能 ◦ iter.Seq2[T, error]にエラーハンドリングの慣習があるのか? •
標準ライブラリ ◦ iter.Seq2[T, error]の公開APIは 0件 ◦ いずれも key-value, index-value形式 Copyright © 2015 every, Inc. All rights reserved. 19
iter.Seq2[T, error] • Goは error を値として扱うため言語仕様上は可能 ◦ iter.Seq2[T, error]にエラーハンドリングの慣習があるのか? •
標準ライブラリ ◦ iter.Seq2[T, error]の公開APIは 0件 ◦ いずれも key-value, index-value形式 Copyright © 2015 every, Inc. All rights reserved. 20
iter.Seq2[T, error] • Goは error を値として扱うため言語仕様上は可能 ◦ iter.Seq2[T, error]にエラーハンドリングの慣習があるのか? •
標準ライブラリ ◦ iter.Seq2[T, error]の公開APIは 0件 ◦ いずれも key-value, index-value形式 Copyright © 2015 every, Inc. All rights reserved. 21
プロポーザル時点では value-error が提案されていた • 通常は key-value, index-value, or value-error のペアを表す、との記載もある
https://github.com/golang/go/issues/61897 Copyright © 2015 every, Inc. All rights reserved. 22
value-error は意図的に明記されていない commit fe36ce6 で意図的に削られたが、明確な理由は見つからなかった 議論 Seq2[K, error] は for
k := range f と 1 変数で書けるのでエラーを捨てやすい (issuecomment-1671924099) go vetで静的解析を入れる or 2引数の yield を使う関数に対して range する際は必ず 2つの変数を受け取ることを 義務付ける (issuecomment-1675109993) .Err() 方式は呼び忘れが起きるので value-error を推す (issuecomment-1673186612) https://github.com/golang/go/commit/fe36ce669c1a452d2b0 Copyright © 2015 every, Inc. All rights reserved. 23
エラー時の振る舞い Copyright © 2015 every, Inc. All rights reserved. 24
golang/pkgsite など非公開ツールでは使用されている API のページネーションや I/O の逐次読み込みで使用されている どれもエラーを yieldしてreturn することでループを打ち切る仕様 Copyright
© 2015 every, Inc. All rights reserved. 25
adk-goではハンドリングが混在している • • • 打ち切る: エラー検出時に以降のイテレーション処理を行わず終了する error を流して続ける : 値(nil)とエラーを呼び出し元へ渡し、後続のイテレーションを続行する
event と error を流して続ける : 発生したイベントデータとエラーを同時に伝播させながら継続する // TODO: check if we should stop iterator on the first error from stream or continue yielding next results. “ストリームで最初のエラーが発生した際に、イテレータを停止すべきか、それとも次の結果の生成を継続すべきかを確認する。 ” https://github.com/google/adk-go/blob/v2.1.0/internal/llminternal/base_flow.go#L805 error を受け取ったあとに次の要素が来るかどうかは、イテレータ次第 Copyright © 2015 every, Inc. All rights reserved. 26
まとめ • タイムアウトの原因はツールの error が、iter.Seq2[T, error] の error ではなくイベントとして届い ていたこと
• iter.Seq2[T, error] に決まった使い方はない。 ◦ error を流すか、そのあとも続けるかはイテレータ次第 • ただしループを止めるかどうかは、呼び出し側が決められる • iter.Seq2[T, error]に出会ったら、 error がどこに流れ、そのあとも継続するかを確かめる テックブログはこちら → Copyright © 2015 every, Inc. All rights reserved. 27
None