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
30
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 エブリー
【登壇資料】Android 関連リポジトリ向け共通ハーネスについて
everypr
0
32
【登壇資料】デリッシュAIを インタラクティブでストリーミング応答の AIアシスタントに作り替えるまで
everypr
0
13
【登壇資料】QuickSight から L ke b a ase へ BI 基盤移行の設計判断と実測値
everypr
0
33
【登壇資料】iOS開発に「動作確認」という概念を作った
everypr
1
100
【登壇資料】Claude全社導入で加速したAI活用とこれからの展望.pdf
everypr
0
120
【登壇資料】翻訳辞書にも型がほしい:ypecriptで考えるi18n
everypr
0
76
エンジニア職向け会社紹介資料
everypr
0
15k
【登壇資料】データ基盤をTreasureData + Databricksから Databricksへ統一する話
everypr
0
730
【登壇資料】Goにジェネリックメソッドが入るとどうなるか
everypr
0
170
Featured
See All Featured
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.7k
A designer walks into a library…
pauljervisheath
211
25k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.6k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
530
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.7k
Being A Developer After 40
akosma
91
590k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.8k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Deep Space Network (abreviated)
tonyrice
0
350
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
250
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
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