Agent Flow 実行API
概要: ノードとエッジで構成されたワークフローを実行し、結果を Server-Sent Events (SSE) でストリーミング返却するAPIです。Web UI で保存したフロー(Agent Workflow Preset API で取得) の
agent_nodes/edgesをそのまま投入することで、UI で組んだフローを API 経由で実行できます。
POST /v1/api/agentflow
リクエストでエージェントの Node 構成を受け取り、その順序で処理を実行します。
POST /v1/api/agentflow
Headers
api-key: string(required) - rokadoc APIキー
Request Body (multipart/form-data)
必須パラメータ
encoded_flow: string(required) - 後述の リクエストペイロード を JSON 化し、UTF-8 → base64 エンコードした文字列
オプショナルパラメータ
chatlog_id: string(optional) - 既存チャットログを継続する場合、過去のレスポンスで返却されたchatlog_idを指定。指定しない場合は新規スレッドが作成されるspace_id: string(optional) - スペース機能を利用する場合はスペースIDを指定upload_file: file(optional) - マルチモーダルノードに画像入力として渡したい場合に指定
リクエストペイロード
encoded_flow にエンコードする JSON は次の構造です:
{
"message": "rokadocの主な機能を教えて",
"highlight_display": false,
"agent_nodes": [ ... ],
"edges": [ ... ]
}
message: string - ユーザーの質問・入力テキストhighlight_display: boolean - 最終応答にハイライト要素情報を含めるか(デフォルト: false)agent_nodes: array - エージェントノードの配列(Preset API のレスポンスと同形式)edges: array - ノード間の接続定義(Preset API のレスポンスと同形式)
agent_nodes と edges の中身は、Web UI のフローエディターで作成・保存したプリセットの構造をそのまま使うのが最も確実です。Preset API の GET レスポンスを取得 → 必要なフィールド抽出 → message と組み合わせて base64 エンコード、というフローを推奨します。
Request Example
- Python
- curl
import base64
import json
import os
import requests
api_key = os.getenv("ROKADOC_API_KEY")
preset_id = os.getenv("PRESET_ID")
# 1. プリセットを取得
preset_url = f"https://api.rokadoc.ntt.com/v1/api/agent-workflow-presets/{preset_id}"
preset = requests.get(preset_url, headers={"api-key": api_key}).json()
# 2. agentflow 用ペイロードを組み立てて base64 エンコード
payload = {
"message": "rokadocの主な機能 を教えて",
"highlight_display": False,
"agent_nodes": preset["agent_nodes"],
"edges": preset["edges"],
}
encoded_flow = base64.b64encode(
json.dumps(payload, ensure_ascii=False).encode("utf-8")
).decode("ascii")
# 3. agentflow を SSE で受信
flow_url = "https://api.rokadoc.ntt.com/v1/api/agentflow"
with requests.post(
flow_url,
headers={"api-key": api_key},
data={"encoded_flow": encoded_flow},
stream=True,
) as response:
for raw_line in response.iter_lines(decode_unicode=True):
if not raw_line or not raw_line.startswith("data:"):
continue
body = raw_line[5:].strip()
if body == "[DONE]":
break
event = json.loads(body)
print(event["type"], event)
# 1. preset を取得
PRESET=$(curl -s "https://api.rokadoc.ntt.com/v1/api/agent-workflow-presets/${PRESET_ID}" \
-H "api-key: ${ROKADOC_API_KEY}")
# 2. agentflow 用ペイロードを base64 化(python でJSON組み立て例)
ENCODED_FLOW=$(python3 -c "
import json, base64, sys
preset = json.loads('''${PRESET}''')
payload = {
'message': 'rokadocの主な機能を教えて',
'highlight_display': False,
'agent_nodes': preset['agent_nodes'],
'edges': preset['edges'],
}
print(base64.b64encode(json.dumps(payload, ensure_ascii=False).encode()).decode())
")
# 3. SSE 受信(curl -N でバッファリング無効化)
curl -N -X 'POST' \
"https://api.rokadoc.ntt.com/v1/api/agentflow" \
-H "api-key: ${ROKADOC_API_KEY}" \
-F "encoded_flow=${ENCODED_FLOW}"
レスポンス
Content-Type: text/event-stream で SSE イベントが順次返却されます。各イベントは data: <JSON>\n\n の形式で、最後に data: [DONE]\n\n で終了します。