すべてのプロダクト
Search
ドキュメントセンター

Intelligent Media Services:LLM 標準インターフェイス

最終更新日:Jun 23, 2026

標準プロトコルを使用して、カスタム大規模言語モデル (LLM) をリアルタイムワークフローに接続します。

自社開発 LLM の標準インターフェイス (OpenAI 仕様)

LLM インターフェイスが OpenAI 標準に準拠している場合、OpenAI 設定を使用してカスタム LLM サービスをワークフローに統合できます。ストリーミングリクエストのみをサポートします。

  1. LLM ノードでは、[自社開発アクセス (OpenAI 仕様)] を選択し、次のパラメーターを設定します。

名前

タイプ

必須

説明

値の例

ModelId

String

はい

モデル名。 OpenAI の 'model' フィールドに対応します。

abc

API-KEY

String

はい

認証用の API キー。 OpenAI の 'api_key' フィールドに対応します。

AUJH-pfnTNMPBm6iWXcJAcWsrscb5KYaLitQhHBLKrI

ターゲットモデルの HTTPS アドレス

String

はい

ターゲットサービスの URL。 OpenAI の 'base_url' フィールドに対応します。

説明

OpenAI 仕様に準拠するため、Alibaba Cloud は base_url に自動的に /chat/completions を追加します。パスがこの形式と一致することを確認してください。

http://www.abc.com

  1. 実行時、ワークフローは OpenAI 形式でデータを組み立て、設定されたモデルエンドポイントに POST リクエストを送信します。

名前

タイプ

必須

説明

値の例

messages

Array

はい

会話履歴。最大 20 件まで保持します。配列内の前方のエントリは古いメッセージを表します。

説明

システムは、ユーザーの現在の入力を会話履歴と自動的に結合し、LLM に送信します。

[{'role': 'user', 'content': 'What is the weather like today?'},{'role': 'assistant', 'content': 'The weather is sunny today.'},{'role': 'user', 'content': 'What about the weather tomorrow?'}]

model

String

はい

モデル名。

abc

stream

Boolean

はい

レスポンスをストリーミングするかどうか。ストリーミングのみをサポートします。

True

extendData

Object

はい

追加情報。

{'instanceId':'68e00b6640e*****3e943332fee7','channelId':'123','sentenceId':'3','userData':'{"aaaa":"bbbb"}'}

  • instanceId

String

はい

インスタンス ID。

68e00b6640e*****3e943332fee7

  • channelId

String

はい

チャネル ID。

123

  • sentenceId

Int

はい

Q&A ペア ID。

説明

同じユーザーの質問に対して、エージェントのレスポンスは同じ ID を使用します。

3

  • callerNumber

String

いいえ

電話通話での発信者番号。

13800000001

  • calleeNumber

String

いいえ

電話通話での着信者番号。

13800000002

  • userData

String

いいえ

インスタンス起動時に UserData フィールドで渡されたビジネスデータ。

{"aaaa":"bbbb"}

カスタム LLM (OpenAI 仕様) サーバー

Python

import json
import time
from loguru import logger
from flask import Flask, request, jsonify, Response

app = Flask(__name__)

API_KEY = "YOURAPIKEY"

@app.route('/v1/chat/completions', methods=['POST'])
def chat_completion():
    # API キーを確認
    auth_header = request.headers.get('Authorization')
    if not auth_header or auth_header.split()[1] != API_KEY:
        return jsonify({"error": "Unauthorized"}), 401

    data = request.json
    logger.info(f"data is {data}")
    task_id = request.args.get('task_id')
    room_id = request.args.get('room_id')
    for header, value in request.headers.items():
        logger.info(f"{header}: {value}")

    # クエリパラメータを出力
    logger.info("\nQuery Parameters:")
    for key, value in request.args.items():
        logger.info(f"{key}: {value}")

    logger.info(f"task_id: {task_id}, room_id: {room_id}")
    stream = data.get('stream', False)

    if stream:
        return Response(generate_stream_response(data), content_type='text/event-stream')
    else:
        return jsonify(generate_response(data))

def generate_response(data):
    response = "This is a mock AI assistant response. In a real application, call a real AI model here."

    return {
        "id": "chatcmpl-123",
        "object": "chat.completion",
        "created": int(time.time()),
        "model": data['model'],
        "choices": [{
            "index": 0,
            "message": {
                "role": "assistant",
                "content": response
            },
            "finish_reason": "stop"
        }],
        "usage": {
            "prompt_tokens": sum(len(m['content']) for m in data['messages']),
            "completion_tokens": len(response),
            "total_tokens": sum(len(m['content']) for m in data['messages']) + len(response)
        }
    }

def generate_stream_response(data):
    response = "This is a mock AI assistant streaming response. In a real application, call a real AI model here."
    words = list(response)
    for i, word in enumerate(words):
        chunk = {
            "id": "chatcmpl-123",
            "object": "chat.completion.chunk",
            "created": int(time.time()),
            "model": data['model'],
            "choices": [{
                "index": 0,
                "delta": {
                    "content": word, 
                    "tool_calls": [  
                        {
                            "id": "call_abc123",  
                            "type": "function",
                            "function": {
                                "name": "hangup", 
                                "arguments": "{}"  
                            }
                        }
                    ]
                },
                "finish_reason": None if i < len(words) - 1 else "stop"
            }]
        }
        logger.info(chunk)
        yield f"data: {json.dumps(chunk)}\n\n"
        time.sleep(0.1)  # 処理時間をシミュレート

    yield "data: [DONE]\n\n"

if __name__ == '__main__':
    logger.info(f"Server is running with API_KEY: {API_KEY}")
    app.run(port=8083, debug=True)