LLM による意味理解:API ドキュメント
概要
LLM モジュールは REST API と WebSocket インターフェースを提供し、大規模言語モデルとの対話、Function Calling ツール、MCP サービスの統合をサポートします。
REST API
基本情報
- Base URL:
http://localhost:8002 - Content-Type:
application/json - すべての API エンドポイントが CORS に対応
1. ヘルスチェック
GET /health
サーバーの稼働状態を確認します
GET /health
レスポンス:
{
"status": "healthy",
"timestamp": "2024-01-01T12:00:00Z",
"version": "1.0.0"
}
2. 設定情報の取得
GET /config
現在のシステム設定情報を取得します(機密情報はマスキングされます)
GET /config
レスポンス:
{
"server": {
"host": "0.0.0.0",
"port": 8002,
"debug": false
},
"llm": {
"model": {
"name": "doubao-seed-1-6-250615"
},
"parameters": {
"temperature": 0.7,
"top_p": 0.95,
"max_tokens": 4096
}
},
"function_calling": {
"enabled": true
},
"mcp": {
"enabled": true
}
}
3. 非ストリーミング対話
POST /chat
メッセージを送信して対話します(非ストリーミングレスポンス)
POST /chat
Content-Type: application/json
{
"message": "你好,请帮我计算 123 + 456",
"session_id": "default",
"stream": false
}
リクエストパラメータ:
message(string、必須):ユーザーメッセージの内容session_id(string、任意):セッション ID、デフォルトは "default"stream(boolean、任意):ストリーミングレスポンスにするかどうか、デフォルトは false
レスポンス:
{
"success": true,
"message": "你好!我来帮你计算 123 + 456 = 579",
"session_id": "default",
"tool_calls": [
{
"name": "calculator",
"arguments": {"expression": "123 + 456"},
"result": "579"
}
],
"timestamp": "2024-01-01T12:00:00Z"
}
エラーレスポンス:
{
"success": false,
"error": "API密钥无效",
"error_code": "INVALID_API_KEY",
"timestamp": "2024-01-01T12:00:00Z"
}
4. ストリーミング対話
POST /chat
メッセージを送信してストリーミング対話を行います
POST /chat
Content-Type: application/json
{
"message": "请详细解释机器学习的概念",
"session_id": "default",
"stream": true
}
レスポンス(Server-Sent Events):
data: {"type": "content", "text": "机器学习"}
data: {"type": "content", "text": "是人工智能的一个分支"}
data: {"type": "tool_calling", "name": "calculator", "status": "calling"}
data: {"type": "tool_result", "name": "calculator", "result": "42"}
data: {"type": "complete", "session_id": "default"}
5. 対話履歴の取得
GET /conversations/{session_id}
指定したセッションの対話履歴を取得します
GET /conversations/default
レスポンス:
{
"session_id": "default",
"history": [
{
"role": "user",
"content": "你好",
"timestamp": "2024-01-01T12:00:00Z"
},
{
"role": "assistant",
"content": "你好!我是AI助手,很高兴为您服务。",
"timestamp": "2024-01-01T12:00:01Z"
}
],
"total_messages": 2
}
6. 対話履歴の消去
DELETE /conversations/{session_id}
指定したセッションの対話履歴を消去します
DELETE /conversations/default
レスポンス:
{
"success": true,
"message": "会话历史已清空",
"session_id": "default"
}
7. 利用可能なツール一覧の取得
GET /tools
現在のシステムで利用可能なすべてのツールを取得します
GET /tools
レスポンス:
{
"function_calling_tools": [
{
"name": "calculator",
"description": "基本数学计算工具",
"enabled": true,
"parameters": {
"type": "object",
"properties": {
"expression": {
"type": "string",
"description": "要计算的数学表达式"
}
},
"required": ["expression"]
}
},
{
"name": "music_play",
"description": "播放音乐",
"enabled": true,
"parameters": {
"type": "object",
"properties": {
"music_name": {
"type": "string",
"description": "要播放的音乐名称"
}
},
"required": ["music_name"]
}
}
],
"mcp_tools": [
{
"name": "amap_search",
"description": "高德地图搜索",
"server": "amap_maps",
"enabled": false
}
],
"total_tools": 8
}
WebSocket API
リアルタイム対話
WebSocket /ws
リアルタイム対話用の WebSocket 接続を確立します
接続:
const ws = new WebSocket('ws://localhost:8002/ws');
送信メッセージの形式:
{
"message": "你好,请帮我播放音乐",
"session_id": "default"
}
受信メッセージの種類:
1. コンテンツメッセージ
{
"type": "content",
"text": "你好!我来帮你播放音乐。",
"session_id": "default"
}
2. ツール呼び出しの状態
{
"type": "tool_calling",
"name": "music_play",
"status": "calling",
"arguments": {"music_name": "背景音乐"},
"session_id": "default"
}
3. ツール呼び出しの結果
{
"type": "tool_result",
"name": "music_play",
"result": "音乐开始播放",
"success": true,
"session_id": "default"
}
4. メッセージ完了
{
"type": "complete",
"session_id": "default",
"total_tokens": 150,
"timestamp": "2024-01-01T12:00:00Z"
}
5. エラーメッセージ
{
"type": "error",
"error": "工具调用失败",
"error_code": "TOOL_CALL_ERROR",
"session_id": "default"
}
6. システム状態
{
"type": "status",
"status": "connected",
"active_tools": ["calculator", "music_player"],
"session_id": "default"
}
Function Calling ツール
1. 電卓ツール
calculator
基本的な数学計算
パラメータ:
expression(string):数式
呼び出し例:
{
"name": "calculator",
"arguments": {
"expression": "123 + 456 * 2"
}
}
advanced_calculator
高度な数学計算
パラメータ:
operation(string):演算の種類value(number):演算する値base(number、任意):底(対数)
呼び出し例:
{
"name": "advanced_calculator",
"arguments": {
"operation": "sin",
"value": 30
}
}
2. 音楽プレーヤーツール
music_list
音楽リストを取得します
パラメータ:なし
呼び出し例:
{
"name": "music_list",
"arguments": {}
}
music_play
指定した音楽を再生します
パラメータ:
music_name(string):曲名
呼び出し例:
{
"name": "music_play",
"arguments": {
"music_name": "背景音乐"
}
}
music_volume_set
音量を設定します
パラメータ:
volume(integer):音量値(0~100)
呼び出し例:
{
"name": "music_volume_set",
"arguments": {
"volume": 75
}
}
3. ロボットアーム制御ツール
arm_grab_object
物体を把持します
パラメータ:
x(float):X 座標y(float):Y 座標z(float):Z 座標
呼び出し例:
{
"name": "arm_grab_object",
"arguments": {
"x": 100.0,
"y": 50.0,
"z": 20.0
}
}
arm_move_to_position
指定した位置へ移動します
パラメータ:
x(float):X 座標y(float):Y 座標z(float):Z 座標
呼び出し例:
{
"name": "arm_move_to_position",
"arguments": {
"x": 150.0,
"y": 75.0,
"z": 30.0
}
}
4. パン・チルト制御ツール
gimbal_control
パン・チルトの回転を制御します
パラメータ:
pan(float):水平角度(-90~90)tilt(float):垂直角度(-90~90)
呼び出し例:
{
"name": "gimbal_control",
"arguments": {
"pan": 45.0,
"tilt": -30.0
}
}
5. 視覚認識ツール
vlm_analyze_image
画像の内容を解析します
パラメータ:
image_path(string):画像ファイルのパスquery(string、任意):具体的な質問内容
呼び出し例:
{
"name": "vlm_analyze_image",
"arguments": {
"image_path": "/path/to/image.jpg",
"query": "这张图片中有什么物体?"
}
}
静的ファイルサービス
Web インターフェース
GET/
メインページにアクセスします
GET /
戻り値:HTML ページ
静的リソース
GET /static/
静的リソースファイルにアクセスします
GET /static/css/style.css
GET /static/js/app.js
GET /static/images/logo.png
エラー処理
HTTP ステータスコード
- 200:成功
- 400:リクエストパラメータのエラー
- 401:認証されていません(API キーが無効)
- 429:リクエスト頻度の制限
- 500:サーバー内部エラー
- 503:サービス利用不可
エラーレスポンスの形式
{
"success": false,
"error": "错误描述",
"error_code": "ERROR_CODE",
"details": {
"field": "具体错误字段",
"value": "错误值"
},
"timestamp": "2024-01-01T12:00:00Z"
}
主なエラーコード
INVALID_API_KEY:API キーが無効INVALID_REQUEST:リクエスト形式のエラーTOOL_CALL_ERROR:ツール呼び出しの失敗SESSION_NOT_FOUND:セッションが存在しないRATE_LIMIT_EXCEEDED:リクエスト頻度の上限超過INTERNAL_ERROR:サーバー内部エラー
使用例
Python クライアントの例
非ストリーミング対話
import requests
# 发送对话请求
response = requests.post('http://localhost:8002/chat', json={
'message': '帮我计算 100 * 25',
'session_id': 'my_session',
'stream': False
})
result = response.json()
print(result['message'])
ツール一覧の取得
import requests
# 获取可用工具
response = requests.get('http://localhost:8002/tools')
tools = response.json()
for tool in tools['function_calling_tools']:
print(f"工具: {tool['name']} - {tool['description']}")
JavaScript WebSocket の例
// 建立WebSocket连接
const ws = new WebSocket('ws://localhost:8002/ws');
// 连接成功
ws.onopen = function() {
console.log('WebSocket连接已建立');
// 发送消息
ws.send(JSON.stringify({
message: '你好,请播放一首音乐',
session_id: 'web_session'
}));
};
// 接收消息
ws.onmessage = function(event) {
const data = JSON.parse(event.data);
switch(data.type) {
case 'content':
console.log('AI回复:', data.text);
break;
case 'tool_calling':
console.log('调用工具:', data.name);
break;
case 'tool_result':
console.log('工具结果:', data.result);
break;
case 'complete':
console.log('消息完成');
break;
case 'error':
console.error('错误:', data.error);
break;
}
};
// 连接关闭
ws.onclose = function() {
console.log('WebSocket连接已断开');
};
cURL コマンドの例
ヘルスチェック
curl -X GET http://localhost:8002/health
対話の送信
curl -X POST http://localhost:8002/chat \
-H "Content-Type: application/json" \
-d '{
"message": "计算 2^10",
"session_id": "curl_session",
"stream": false
}'
ツール一覧の取得
curl -X GET http://localhost:8002/tools
セッションの消去
curl -X DELETE http://localhost:8002/conversations/curl_session
パフォーマンスに関する考慮事項
リクエスト頻度の制限
- IP ごとに 1 分あたり最大 100 リクエスト
- WebSocket 接続の制限:IP ごとに最大 5 同時接続
応答時間
- 簡単な計算ツール:< 100ms
- 音楽再生の制御:< 200ms
- LLM 対話の応答:1~5 秒(メッセージの複雑さによる)
- ロボットアームの制御:200ms~2 秒(動作の複雑さによる)
データサイズの制限
- 1 リクエストあたりのメッセージ長:最大 10KB
- セッション履歴:最大 20 件のメッセージを保存
- WebSocket メッセージ:最大 1MB
ドキュメント