1. 概要
この記事では、Difyのチャットフロー機能とOCI ADB Select AIを組み合わせることで、自然言語でのデータベース検索を実現する方法を解説します。非技術者でも以下のような操作が可能になります:
- 「売上上位5件のデータを表示してください」といった自然言語の入力
- 入力内容をAIが自動でSQLに変換
- 結果をMarkdownテーブル形式で返却
OCI ADB Select AIの自然言語処理能力とDifyのワークフロー機能を活用することで、データ分析の敷居を大幅に下げられます。
応用例
- データ可視化連携:結果をPower BIやTableauで可視化
- チャットボット統合:SlackやTeams経由での質問対応
- バッチ処理:定期的なレポート生成
2. ステップバイステップ解説
ステップ1. チャットフローの作成
- Difyダッシュボードで「チャットフロー」を選択
- チャットフローの名前を設定(例:「自然言語検索フロー」)
ステップ2. SQL生成用HTTPリクエスト
- メソッド: POST
-
URL: showsqlのエンドポイント(例:
http://192.168.31.20:9999/selectai/showsql
) -
ボディ:
{ {"query" : "{{#sys.query#}}"} }
ステップ3. SQL抽出用コードブロック
import json
def main(json_body: str) -> dict:
dict_body = json.loads(json_body)
sql_query = dict_body["sql"]
sql_query = sql_query.replace('"', '\\"')
return {"result": sql_query}
ステップ4. SQL実行リクエスト
- メソッド: POST
-
URL: runsqlのエンドポイント(例:
http://192.168.31.20:9999/selectai/runsql
) -
ボディ:
{ {"query" : "{{#1742363069217.result#}}"} }
ステップ5. 結果のMarkdown変換
import json
def main(json_body: str) -> dict:
dict_body = json.loads(json_body)
columns = dict_body['columns']
table_data = dict_body['data']
header = "|{}|".format(" | ".join(columns))
separator = "|{}|".format(" | ".join(["---" for _ in columns]))
rows = []
for row in table_data:
row_str = " | ".join(map(str, row))
rows.append(f"|{row_str}|")
markdown_table = "\n".join([header, separator] + rows)
return {"result": markdown_table}
ステップ6. 最終出力設定
query is:
---
{{#sys.query#}}
---
sql is:
---
{{#1742363069217.result#}}
---
result is:
----
{{#1742363491175.result#}}
---
3. テストケース
テスト1:
テスト2:
テスト3:
テスト4:
4. 注意点
- セキュリティ: APIキーは環境変数で管理推奨
- パフォーマンス: 複雑なクエリは実行時間に注意
- サポート対象: OCI ADB Select AIがサポートするSQL文式に限定
このフローを活用することで、データ分析業務の効率化とチーム間のコミュニケーションコスト削減が期待できます。