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
Realtime API 入門
Search
RioFujimon
November 03, 2024
Programming
0
360
Realtime API 入門
Kanagawa.swift #1 で発表した Realtime APIに関する入門スライドです。
RioFujimon
November 03, 2024
Tweet
Share
More Decks by RioFujimon
See All by RioFujimon
Foundation Models を 活用するための Tips
riofujimon
1
310
2025.01.17_Sansan × DMM.swift
riofujimon
3
890
実践 Realtime API 〜入力として音声データを扱う〜
riofujimon
1
95
Let's learn code review
riofujimon
3
1.2k
Other Decks in Programming
See All in Programming
SQL Server 2025 LT
odashinsuke
0
190
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
5.5k
実は歴史的なアップデートだと思う AWS Interconnect - multicloud
maroon1st
0
340
CSC307 Lecture 03
javiergs
PRO
1
480
2年のAppleウォレットパス開発の振り返り
muno92
PRO
0
190
メルカリのリーダビリティチームが取り組む、AI時代のスケーラブルな品質文化
cloverrose
2
490
gunshi
kazupon
1
140
Claude Codeの「Compacting Conversation」を体感50%減! CLAUDE.md + 8 Skills で挑むコンテキスト管理術
kmurahama
1
780
コントリビューターによるDenoのすゝめ / Deno Recommendations by a Contributor
petamoriken
0
180
PC-6001でPSG曲を鳴らすまでを全部NetBSD上の Makefile に押し込んでみた / osc2025hiroshima
tsutsui
0
210
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
830
Denoのセキュリティに関する仕組みの紹介 (toranoana.deno #23)
uki00a
0
250
Featured
See All Featured
The Language of Interfaces
destraynor
162
26k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
99
Raft: Consensus for Rubyists
vanstee
141
7.3k
The SEO identity crisis: Don't let AI make you average
varn
0
55
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
45
What's in a price? How to price your products and services
michaelherold
247
13k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.2k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
ラッコキーワード サービス紹介資料
rakko
1
2.1M
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
160
How to train your dragon (web standard)
notwaldorf
97
6.5k
Transcript
Realtime API 入門 藤門 莉生(Rio Fujimon)
自己紹介 藤門 莉生(Rio Fujimon) - Sansan株式会社 - 23卒(新卒2年目) - Eight
の iOSアプリを開発 - X(旧 Twitter):@RioFujimon - iOS開発で主に興味がある領域 - UIKit, SwiftUI - Bluetooth, NFC, Audio, etc
None
Realtime API 紹介文 開発者はアプリケーションに 高速な音声合成体験 を組み込めるようになった
Realtime API 登場以前の手法 Whisper 音声を テキストに 書き起こす テキスト 解析モデル 目的の
応答を生成
Realtime API 登場以前の問題 Whisper 音声を テキストに 書き起こす テキスト 解析モデル 目的の
応答を生成 プロセス全体で感情やアクセントが失われたり、遅延が発生
Realtime API を利用した場合 Whisper 音声を テキストに 書き起こす テキスト 解析モデル 目的の
応答を生成 Realtime API
実装を見ていく
まずはRealtime API のチュートリアル 🔰
公式のドキュメントは JavaScript の例しか載ってない 😭 https://platform.openai.com/docs/ guides/realtime#overview 自力で読み解いて Swift で書き直す or
AIツールを利用して Swiftで書き直す
💡 要点 ・URLSessionWebSocketDelegate を利用 ・urlSession(_, webSocketTask:, didOpenWithProtocol:) で以下を記述 ・URLSessionWebSocketTask.Messageを作成 ・URLSessionWebSocketTask
の send()で送信 ・receiveMessage() でWebSocketを利用したデータ受信
💡 要点 ・URLSessionWebSocketTask の receive() で受信 ・URLSessionWebSocketTask.Message として取得 ・.string(String) と
.data(Data) で取得可能
None
実行してみる ▶
None
None
None
😵 様々な形式の JSONデータが返却されてよく分からん
🖐 JSONの重要な部分を見てみる
JSONデータを1行取り出してみる 👀 - type: response.text.delta - delta: 【差分のテキスト文】
別なJSONデータを1行取り出してみる 👀 - type: response.text.done - text: 【テキストの完全文】
💡 要点 ・JSON から type を取得 ・type で場合分けを実施 ・response.text.delta の場合、
delta を取得して表示 ・response.text.done の text を取得して表示
None
🗣 会話の内容を変更する
💡 要点 ・type を指定することで Client からのイベントが変更可能 ・type の種類 ・conversation.item.create の場合、会話内容を追加
・response.create の場合、レスポンスの生成 を指示
会話・質問の内容を変えることに成功 🎉
テキストは、無事に扱えるようになった 🎉
音声データはどう取得するの? 🧐
💡 要点 ・modalities に audio を指定
JSONデータを1行取り出してみる 👀 - type: response.audio.delta - delta: 【base64エンコードされた逐次の音声データ】
別なJSONデータを1行取り出してみる 👀 - type: response.audio_transcript.delta - delta: 【トランスクリプトの差分】
別なJSONデータを1行取り出してみる 👀 - type: response.audio_transcript.done - transcript: 【トランスクリプトの完全文】
💡 要点 ・JSON から type を取得 ・type で場合分けを実施 ・response.audio.delta の場合、
delta を表示 ・response.audio_transcript.delta の delta を表示 ・response.audio_transcript.done の transcript を表示
音声データの取得が行えるようになった 🎉
本日話した内容 目的の 応答を生成 Realtime API
残っている内容 目的の 応答を生成 Realtime API AVFoundation(AVAudioEngine, AVAudioSession)で扱う
AVFoundationの 部分をお話する予定 ご参加 お待ちしてます 🙏 connpassのリンクは こちら
【参考】 Realtime API のライブラリも 開発されているみたい https://github.com/m1guelp f/swift-realtime-openai
- https://openai.com/index/introducing-the-realtime-api/ - https://platform.openai.com/docs/guides/realtime?text-generation-quickstart-e xample=stream - https://platform.openai.com/docs/api-reference/realtime-client-events - https://platform.openai.com/docs/api-reference/realtime-server-events -
https://openai.com/brand/ - https://developer.apple.com/documentation/foundation/urlsessionwebsocketd elegate - https://developer.apple.com/documentation/foundation/urlsessionwebsocketta sk - https://github.com/m1guelpf/swift-realtime-openai 参考リンク
ご清聴ありがとうございました!