「会議が終わるたびに Mac が重い。作業機を重くせず、無料でどうにかならない?」。手元の Whisper で文字起こしをしていた筆者は、AI コーディングエージェントにそう頼んだ。人間の会議はもうお開きなのに、Mac だけがまだ会議の続きをしていた。
行き着いた先は、Whisper の部分だけを Groq の API に送る形だ。34分・6人の会議の実測で、処理は 469秒から 95秒になった。
ただ、これは AI の第一案ではない。第一案は「優先度を下げる」で、外に出す案には慎重な注意書きが付いていた。1 回目の問い返しで結論が入れ替わり、残りの 3 回で、外に出す基準と作りが決まった。落とし穴は AI が調べれば見つかる。どこを掘るかを決めたのは、こちらの素朴な問いだった。
1. 「重いのは本当にそっち?」と測らせたら、第一案が入れ替わった
AI の第一案は、文字起こしを taskpolicy -b で低い優先度に回すことだった。見立ては「数行の変更で大きく減るはず」。Groq に出す案は二番手に控えていた。
筆者が返したのは、技術というより勘に近い一言だ。「Whisper のほうが pyannote(話者分離)より重いよね?」
AI は 5.5分の録音で実測した。Whisper は 23.3秒、pyannote は 12.1秒。しかも Whisper は相手と自分の 2 トラック分走る。Whisper の CPU 時間は 8.2秒しかなく、働いていたのは主に GPU だった。taskpolicy -b はプロセスをバックグラウンドの優先度に落とすもので、GPU の取り合いにはあまり効かない。AI はそう見立て直し、自分の第一案を取り下げた。
数行で効くはずの案は、計測 1 回で控えに回った。案を比べる前に、前提を測らせる。
2. 「普段のあれも外に出してない?」と聞いたら、ブーメランが返ってきた
Groq に出すと決め、セキュリティを担保する方法を聞くと、AI は対策を丁寧に並べた。保存しない設定、明示的に有効にしたときだけ送る、送り先の固定。どれももっともだ。並んだ対策を眺めるうちに、筆者は物差しのほうが気になった。
「普段 Meet の Gemini 議事録を使っているけど、あれも外部サーバーを通してるのでは? 外部を通すのがどれほど問題か分かってない」
AI は認め、問題は「外に出すか」ではなく「どこに・どういう約束で出すか」だと整理し直した。筆者はもう一歩踏み込んだ。「それで言ったら、Claude Code で議事録を起こした時点で外に送ってない?」
AI の答えは「その一線は、もう越えています」。文字起こしの全文を AI に読ませて議事録にしている以上、会議の中身はとっくに外に出ている(筆者は Claude Code を Max プラン、月額 $100〜で使っている)。Groq で新しく増えるのは、声そのものと、信頼する会社 1 社だけだ。外に出すか迷っていた本人が、毎回せっせと外に出していた。
勢いのまま聞いた。「Anthropic は学習に使わない設定にしている。Groq でも同じ設定にすればいいのでは?」。AI が規約を当たると、Groq は利用規約の 4.2 条で、入出力を学習に使うことが契約上禁止されていた。探しに行くつもりの設定は、実際は最初から既定で済んでいた。不正利用の調査などで最大 30日残りうるログは、Data Controls の Zero Data Retention で止められる。
対策がどこまで要るかは、自分がもう受け入れている運用と比べて初めて分かる。既定はローカルのままにし、客先との会議を外に出すかは、Claude Code で議事録を作るときと同じ基準で決めればよい、というところに落ち着いた。
3. 「実装前に潰しておいて」と頼んだら、会議が動画になった
AI は規約の 3.6 条も拾っていた。Beta のサービスには DPA(データ処理契約)が適用されない。筆者は「beta / preview 扱いのところは調べて。ほかに実装の障害になりそうなところも事前に潰しておきたい」と返した。whisper-large-v3-turbo は Groq のモデル一覧で Production の扱いだった。
実測のために 5.5分の録音を API へ送ってみると、無音の区間に、誰も言っていない一言が入っていた。「ご視聴ありがとうございました」。この録音だけで 4 回。会議が、動画の締めの挨拶で終わっていく。
幻聴なら確率で落とせばいい、のはずだった。no_speech_prob は公式 docs で 1 に近いほど無音を示す値だ。本家の openai/whisper は、これが 0.6 を超え、かつ平均対数確率が -1.0 を下回る区間を無音として飛ばす。ところが Groq の応答では、どのセグメントでも 0 だった。閾値をどこに置いても、0 は落ちない。実装の前に分かったので、最初から話している区間だけを送る形で作れた。
ほかに試して分かったことも並べておく。
| 調べたこと | 分かったこと | 実装への反映 |
|---|---|---|
| 1ファイル 25MB の上限(無料プラン) | 実測では 5.5分の音声が Opus 32kbps で 1.07MB、FLAC で 8.52MB。精度は落ちない(違いは聞き取りにくい箇所の揺れ程度) | Opus で送る |
| 無音の区間 | 締めの挨拶が出る。no_speech_prob はどのセグメントでも 0 | 話している区間だけ送る(5.5分 → 78秒) |
| 音声の秒数の上限 | 応答ヘッダーでは分からず、筆者のコンソールの Limits ページで 1時間 7,200秒・1日 28,800秒 | 無音を切るのは上限対策も兼ねる |
それでも、実装してから出たものもある。Python の urllib の既定の User-Agent が、Groq の前段の Cloudflare に 403 で弾かれていた。失敗するとローカルに戻る作りなので、結果は何食わぬ顔で出てくる。単体テストは全部通っていたのに、最初の通しでは 2 トラックとも Groq に届かず、手元の Mac が黙って代わりに働いていた。
4. 「本物の会議で比べたい」と渡したら、語順が少し崩れていた
AI は「実際の会議での精度は、実装後に確かめても構わない」としていた。テストの録音は雑談と無音ばかりで比較に向かず、失敗してもローカルに戻るからだ。理屈は通っている。それでも実装後、筆者は 34分・6人の会議の音声と、ローカルで作った書き起こしを渡して実測で比べさせた。
| 指標 | ローカル(mlx-whisper) | Groq |
|---|---|---|
| 処理時間(話者分離込み) | 469秒 | 95秒 |
| ローカル版との一致度(相手/自分) | — | 0.94/0.90 |
| 自分の発話時間の合計 | 528秒 | 651秒 |
| 3回以上続く繰り返し | 11 | 5 |
| 幻聴の定型文 | 0 | 0 |
モデルはどちらも whisper-large-v3-turbo。一致度は正解とではなく、ローカル版との比較になる。
本物の会議は、雑談の録音より正直だった。Groq が返す単語の開始時刻はときどき前に戻り、時刻で並べ替えると「本当ところはに」のように語順が崩れる。言いたいことは伝わるが、議事録には載せられない。返ってきた順に並べるよう直した。自分の発話時間が 2 割長く出た原因は未確認で、発話時間を過去の集計と並べるならローカルのままにする。
自分の AI に返す問い
| AI が出してきたもの | 返した問い | 型 |
|---|---|---|
| 「優先度を下げれば数行で効く」 | 重いのは本当にそっち? | 前提を測らせる |
| 外部送信の対策の一覧 | 普段の議事録も外に出しているのでは? | 基準を自分の普段の運用に揃える |
| Beta の条項への注意 | 障害は実装前に潰しておいて | 実装前に洗い出させ、試せるものは試させる |
| 「精度は実装後でも構わない」 | 本物の会議で比べたい | 本物のデータで比べさせる |
どれも技術の知識は要らない問いだ。なのに、どれも結論か実装を変えた。AI は聞かれたことを誠実に調べる。自分の運用に照らして何を聞くかは、人の側にある。
まとめ
Whisper を Groq に送ると、34分の会議の処理は約 5 倍速くなり、ローカル版と 0.9 台で一致した。そこに着くまでに効いたのは、AI の第一案への 4 つの問い返しだった。前提を測らせる、普段の運用と比べる、実装前に障害を出させる、本物のデータで比べる。会議のあとに Mac だけが会議を続ける時間は、8 分弱から 2 分弱になった。エージェントとの進め方を一緒に組み立てたい場合は、AI開発支援で相談を受け付けている。



