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
電話に出る Python のログの話
Search
shinnosuke
August 21, 2026
Technology
510
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
電話に出る Python のログの話
PyCon JP 2026 1日目のLTで発表した資料になります。
https://2026.pycon.jp/ja
shinnosuke
August 21, 2026
More Decks by shinnosuke
See All by shinnosuke
「解くべき問題」を見つけたい
shinnosuke_kishida
0
110
広告データの集計基盤で使用するDB
shinnosuke_kishida
0
65
Go製のマイグレーションツールの git-schemalex の紹介と運用方法
shinnosuke_kishida
1
1.3k
TiDB の SQL Parser を使用して CSV ファイルの不備を検知する仕組み
shinnosuke_kishida
0
200
システムと組織の課題克服を目指すリアーキテクチャとユーザ移行
shinnosuke_kishida
2
1.2k
go get で考慮している ファイルシステムの挙動について
shinnosuke_kishida
4
1.5k
「プログラマー脳」を読んで感覚的な部分が言語化された
shinnosuke_kishida
2
1.5k
広告代理店向けSaaSの開発をしている新卒3年目のこれまでのお話
shinnosuke_kishida
0
240
Ebitengineのイベントで発表するのでEbitengineを初めて触ってみた
shinnosuke_kishida
0
3.1k
Other Decks in Technology
See All in Technology
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
130
ペアプロの価値はコードを書くことだけじゃない
codmoninc
PRO
0
130
PfEingのアプローチで働こう
rindrics
0
190
『止めない』を設計する — 制約の中で、事業の根幹を支える判断
hiroyaterui
0
220
AndroidでHDRメディアを「壊さずに」扱う
chigichan24
0
420
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
100
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
1
150
DGX Sparkを2台使って いろいろ動かす話
sonoda_mj
1
140
設計の世代交代を乗り越える、14年続くAndroidアプリの開発戦略
sansantech
PRO
1
150
スクラムで身についていた動き方を、XPで捉え直してみた
codmoninc
PRO
1
300
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
630
AIエージェントの開発・提供におけるセキュリティリスクの論点と対策
flatt_security
2
600
Featured
See All Featured
The Curse of the Amulet
leimatthew05
2
14k
Producing Creativity
orderedlist
PRO
348
41k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
GraphQLとの向き合い方2022年版
quramy
50
15k
Paper Plane (Part 1)
katiecoart
PRO
1
11k
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
We Have a Design System, Now What?
morganepeng
55
8.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Transcript
電話に出る Python のログの話 〜 Webアプリとはなんか違う 〜 2026/08/21 PyCon JP 2026
@広島国際会議場 株式会社IVRy / 岸⽥慎之介
⾃⼰紹介 岸⽥ 慎之介 Software Engineer 2021年: 広告代理店向けの業務⽀援SaaSを開発している会社に 新卒として⼊社、バックエンドの開発に従事 2025年8⽉: IVRyに⼊社し、AI対話周りの機能開発に従事
趣味はボルダリング(オフィスに壁あります) 2
プロダクト 対話型⾳声AIであらゆる電話対応を効率化 「アイブリー」 3
⾳声による認識と、Push(電話番号で分岐を選択)の併⽤が可能 カスタマーが発話して直接認識する形式と、ガイダンスに従い電話番号を押す形式の両⽅で⾃動応答を⾏うことが 可能です。 ⾳声から意図を認識して回答を返すパターン はじめての 予約です #1 AIが⽤件をヒアリング ⾏き⽅を 知りたい
#2 SMSで地図を送信 とにかく ⼈を出して #3 担当者に電話転送 ケース1 ケース2 ケース3 電話番号を押して分岐を選択するパターン IVR ⾳声認識 4
アイブリーのユースケース‧イメージ エンドユーザーから受電をすると、内容に応じて適切に振り分け、⾃動化を実現します。 ケース1 ルールに沿って 対応できる 「⾏き⽅を知りたい」 完全AI対応 ケース2 「遅刻しそうです」 ケース3
「予約したい」 オペレーター (AI) ユーザーの発話 を⾳声認識し、 適切に振り分け • FAQ対応 • SMS送信 要件をAIで 聞いて管理する 初⼿AI対応後 担当者に連絡 • 取次 • フォーム⼊⼒ アフターワークも AIが対応 ⾳声対話AIで • 対応完結できる 予約、購⼊ • 履歴Salesforceへ の⾃動連携 オペレーター 対応 ⼈が対応すべきもの • 複雑な対応 • クレーム • 上記以外 発話認識 ケース4 「とにかく⼈を出して」 SFA/CRM データウェアハウス システム連携 5
6
7
この辺り 8
電話はWebアプリと様相がちがう 明⽇で空いてますか? リクエスト 何名様ですか? 2名で18時から レスポンス 席⽤意できるので確保します Webアプリ (HTTP) 電話
(WebSocket) リクエスト/レスポンス の組が1つ 電話を受電してから終了までが1つのやり取り ⼤半がステートレス ステートフル ラリー毎に状態が変わる 9
1通話を1本として扱う WebSocket 接続時に structlog の bind_contextvars で 通話 ID をセット、以降の全通話ターンで継承
ローカル開発向けにログをファイルに出⼒する仕組みも⽤意 LLMによるデバッグや⾃作ツールなどに利⽤ file_handler = logging.FileHandler("tmp/app.log") file_handler.setFormatter(logging.Formatter("%(message)s")) logging.getLogger().addHandler(file_handler) ファイル出⼒の実装 10
別チームで通話ログを参照 通話ログ データ基盤 ダッシュボード ユーザ参照 担当領域 アプリケーションとして正常でも構造を壊すと⼤変な影響がでる 参照されるログは直接 structlog ではなく、クラスのメソッド経由で出⼒
logging.getLogger 経由のログなので structlog と ⼆重管理(課題) 11
ルールを整備 ログ周りの実装は、structlog を使う⽅針 logging.getLogger を AI/⼈間 が使う可能性は ゼロ ではない [tool.ruff]
lint.flake8-tidy-imports.banned-api."logging.getLogger".msg = "structlog.stdlib.get_logger() を使用してください (正当な用途は # noqa: TID251 で明示) " pyproject.toml に Ruff の設定を追加 12
通話の中⾝を出さず分析 各通話ターンの⽂字起こしを⾒て分析できない(個⼈情報) 通話ターンの状態を定義し 「何を喋ったか」 ではなく 「どの状態を通ったか」 を⾒る 初期状態 聞き取り中 確認中
完了 状態を Enum で定義し、遷移を ”決定性有限オートマトン” として表現 13
まとめ • Webアプリと電話アプリではログの取り扱いが違う • structlog などを使って通話遷移を追えるように • 参照されるログは変えない • 「何を喋ったか」ではなく「どの状態を通ったか」を⾒る
より詳しい話を聞きたい⽅はお声がけを! 14