はじめに
この記事では、ノーコード/ローコードでLLMアプリを開発できるツール「Dify」を使ってGeminiモデルを呼び出し、音声データの文字起こしを自動化する手順を紹介します。
Geminiのセットアップ
まずは、DifyでGeminiを利用するために必要なAPIキーの取得と設定を行います。
Google AI StudioでGemini APIキーを作成する
Google AI Studioにアクセスし、「Google AI Studioにログイン」をクリックします。
「APIキーを作成」をクリック後、新規もしくは既存のプロジェクトを選択してAPIキーを作成します。
生成が完了したら「コピー」をクリックすると、APIキーがクリップボードにコピーされます。
以上でGemini APIキーの取得は完了です。
DifyでGemini APIキーを設定する
Difyにアクセスします。
「設定」→「モデルプロバイダー」へと進み、Geminiの「セットアップ」をクリックします。
先ほどコピーしたAPIキーを入力して「保存」をクリックします。
音声データの文字起こし
次に、実際に音声データの文字起こしを実行するためのフローを作成します。
チャットフローの作成
トップ画面に戻り、「最初から作成」をクリックします。
「チャットフロー」を選択し、アプリの名前を入力したら「作成する」をクリックします。
開始ノードの設定
作成したチャットフローが表示されたら「開始」ノードを選択し、入力フィールドの「+」をクリックします。
開始ノードはユーザーの入力やアップロードされたファイルを受け取る役割を持っています。
入力フィールドで追加する情報の形式を設定して保存します。
- フィールドタイプ:単一ファイル
- 変数名:audio
- ラベル名:音声
- ファイルタイプ:音声
これにより、ユーザーがアップロードした音声ファイルがaudio
変数で取得できるようになります。
LLMノードの設定
続いて「LLM」ノードで使用するモデルとプロンプトを設定します。
今回は記事執筆時点で最新モデルのGemini 2.0 Flash Thinkingを使用します。
コンテキスト:開始{x}audio
SYSTEMプロンプト:
受け取った内容を文字起こししてください。
適切な句読点や段落分けを行なってください。
文字起こしの内容のみ出力してください。
(コンテキスト)
ビジョン:開始{x}audio
機能設定
続いて、画面上部の「機能」を開いて「会話の開始」を有効にします。
「会話の開始」では、チャットを開始したタイミングで表示するメッセージやボタンを設定できます。
これで音声をアップロードして文字起こしを行う基本フローが完成しました。
動作確認
画面右上の「プレビュー」からテスト用のチャット画面を開き、任意の音声ファイルをアップロードします。
アップロードが完了したら「文字起こしする」ボタンをクリックして実行します。
以下はサンプル用の会議音声を文字起こしした例です。
まとめ
今回は、DifyとGeminiを組み合わせた音声文字起こしのフローを構築する手順をご紹介しました。
DifyはNotionなどの外部サービスとも連携できるので、さらに機能を拡張していくことも可能です。
今回作成したフローのDSLファイルは以下になります。
最後までお読みいただき、ありがとうございました。
app:
description: ''
icon: 🤖
icon_background: '#FFEAD5'
mode: advanced-chat
name: Gemini 文字起こし
use_icon_as_answer_icon: false
kind: app
version: 0.1.5
workflow:
conversation_variables: []
environment_variables: []
features:
file_upload:
allowed_file_extensions: []
allowed_file_types:
- audio
allowed_file_upload_methods:
- remote_url
- local_file
enabled: true
fileUploadConfig:
audio_file_size_limit: 50
batch_count_limit: 5
file_size_limit: 15
image_file_size_limit: 10
video_file_size_limit: 100
workflow_file_upload_limit: 10
image:
enabled: false
number_limits: 3
transfer_methods:
- local_file
- remote_url
number_limits: 1
opening_statement: 音声ファイルをアップロード後、クリックしてください。
retriever_resource:
enabled: false
sensitive_word_avoidance:
enabled: false
speech_to_text:
enabled: false
suggested_questions:
- 文字起こしする
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
graph:
edges:
- data:
sourceType: start
targetType: llm
id: 1735569214372-llm
source: '1735569214372'
sourceHandle: source
target: llm
targetHandle: target
type: custom
- data:
sourceType: llm
targetType: answer
id: llm-answer
source: llm
sourceHandle: source
target: answer
targetHandle: target
type: custom
nodes:
- data:
desc: ''
selected: false
title: 開始
type: start
variables:
- allowed_file_extensions: []
allowed_file_types:
- audio
allowed_file_upload_methods:
- local_file
- remote_url
label: audio
max_length: 48
options: []
required: true
type: file
variable: audio
height: 90
id: '1735569214372'
position:
x: 77.60494773742568
y: 282
positionAbsolute:
x: 77.60494773742568
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 244
- data:
context:
enabled: true
variable_selector:
- '1735569214372'
- audio
desc: ''
model:
completion_params:
temperature: 0.7
mode: chat
name: gemini-2.0-flash-thinking-exp-1219
provider: google
prompt_template:
- id: b4249447-b2e5-4276-b643-6e2361638ed7
role: system
text: '受け取った内容を文字起こししてください。
適切な句読点や段落分けを行なってください。
文字起こしの内容のみ出力してください。
{{#context#}}'
selected: false
title: LLM
type: llm
variables: []
vision:
configs:
detail: high
variable_selector:
- '1735569214372'
- audio
enabled: true
height: 98
id: llm
position:
x: 378.6101940965748
y: 282
positionAbsolute:
x: 378.6101940965748
y: 282
selected: true
sourcePosition: right
targetPosition: left
type: custom
width: 244
- data:
answer: '{{#llm.text#}}'
desc: ''
selected: false
title: 回答
type: answer
variables: []
height: 103
id: answer
position:
x: 680
y: 282
positionAbsolute:
x: 680
y: 282
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 244
viewport:
x: 22.102506637340753
y: -20.30268868260356
zoom: 1.0213516550087547