工程4(改訂):外部連携I/Fの確定(接続なしでOK)
目的
nlq-dev が「SQL/Cypher文字列を作らず params を渡す」前提で、外部I/F(リクエスト/レスポンスの形)を固定する。
dev-portal / DeciKG が存在しなくても、Stubで開発を進められる状態にする。
4-A) Dev-Portal 側(SqlExecutor)—接続なし版
方針
- nlq-dev → Dev-Portal に渡すのは SQLではなく
sql_params - ただし dev-portal未接続の間は Stub が
tabular_resultを返す - 後から実dev-portalに差し替えても nlq-dev の上位(router/UI)が変わらない形にする
追加/変更ファイル(nlq-dev側)
services/dev_portal_client.pyhealth() -> HealthResultexecute_sql_params(sql_params, max_rows, dry_run) -> TabularResult
services/dev_portal_client_stub.py(または同ファイル内で mode 切替)- 固定のダミー結果を返す
schemas/dev_portal.pyTabularResult,HealthResult,Problem(最低限)
DoD(接続なし)
DEVPORTAL_MODE=dummy|httpを導入dummyのとき:health()が常に “OK” を返す(HTTP不要)execute_sql_params()が 決め打ちの表を返す(例:売上の月次集計サンプル)
httpのとき(将来):- 実dev-portalへ接続して同じ型で返る
✅ これで「I/F固定」と「開発を止めない」を同時に満たします。
4-B) DeciKG 側(CypherExecutor)—接続なし版
方針
- nlq-dev → DeciKG に渡すのは Cypherではなく
decikg_params - DeciKG未接続の間は Stub が graph_result を返す
- 後から Aura に差し替えても nlq-dev の上位が変わらない形
追加/変更ファイル(nlq-dev側)
services/decikg_client.pyhealth() -> HealthResultquery(decikg_params) -> GraphResultconcept_lookup(text) -> Candidates(必要なら)
services/decikg_client_stub.pyschemas/graph_result.py(GraphResultの型)schemas/decikg.py(params/candidates型)
DoD(接続なし)
DECIGK_MODE=dummy|httpdummyのとき:health()がOKを返すquery()が 固定のnode/edge/evidence を返す(例:KPI低下→材料費増→仕入単価上昇)
httpのとき(将来):- Aura/DeciKG APIへ接続して同じ型で返る
工程5(改訂):Executeレスポンス拡張(接続なしでOK)
目的
SQLだけ前提をやめ、SQL結果・Graph結果・統合結果を同じレスポンスで返せるようにする。
接続がなくても「Stub結果でUI/分析を作り込める」ようにする。
方針(互換維持)
- 既存の
ExecuteResponse.columns/rows/sqlは残す - 追加:
execution_kind(sql|graph|hybrid|stub 等)route(SQL_ONLY/CYPHER_ONLY/CYPHER_THEN_SQL 等)graph(GraphResult)merged(MergeResult:統合要約)narration(説明文)
DoD(接続なし)
DEVPORTAL_MODE=dummyの場合:SQL結果が返る(従来互換)DECIGK_MODE=dummyの場合:graph結果が返る(columns/rowsは空でもOK)hybridの場合:mergedに統合要約が入る(固定テンプレでもOK)
工程6(改訂):履歴と成果物の拡張(接続なしでOK)
目的
あとから改善できるように、route/params/外部結果/失敗を追跡可能にする。
接続がなくても「Stub呼び出しとして記録」できる。
変更点(最小)
- historyに必ず保存:
routesql_params,decikg_paramsexecution_kindproviders: devportal(dummy/http), decikg(dummy/http)timings_ms(dummyでも計測)error_summary(失敗時)
DoD(接続なし)
/nlq/historyで route と execution_kind が追える- “なぜDeciKGになったか” の説明をメモとして残せる
- dummyでも「候補一覧」「選択理由」を保存(固定文でもOK)
工程7(改訂):ドキュメント更新(接続なしでOK)
目的
オフショア/フロントが迷わない “固定文書” を揃える。
接続がなくても、**I/Fと切替方法(dummy→http)**が明確なら前に進める。
追加するべき文書(特に重要)
docs/NLQ_API_CONTRACT.md- ExecuteResponse v0.2(sql/graph/merged/narration)を固定
docs/dev-portal-integration.mdDEVPORTAL_MODE、/sql/execute_paramsのYAML参照先
docs/decikg-integration.mdDECIGK_MODE、decikg_params/graph_resultの例
- README
- ローカル起動(dummyモード)でUI/analysisまで動く手順
DoD(接続なし)
- 「nlq-devはSQL/Cypher文字列を作らない」が明文化
- 「会社差分(Mermaid/辞書等)をどこで更新するか」が明確
- dummyモードの起動だけで、分析画面まで動く
まとめ:接続なし開発にするための“決定事項”の核
- 外部I/Fは 先にYAML/Schemaで固定
- 実体がなくても
*_MODE=dummyで 同じ型の結果を返す - nlq-dev の上位(routers/UI/analysis/history)は 外部の有無で分岐しない
- 後から
dummy -> httpに切り替えるだけで疎通に進める
必要なら、この改訂版をそのまま 「工程4〜7 決定事項(v0.2)」のMarkdownに整形して、docs配下に置く前提の文章(コピペ用)まで一気に作ります。
コメントを残す