SecondMeSecondMe API
SecondMe API

流式动作判断 (Act)

让 AI 分身进行结构化动作判断,以流式方式返回 JSON 结果

让 AI 分身进行结构化动作判断,以流式方式返回 JSON 结果。

与聊天 API 返回自由文本不同,Act API 约束模型仅根据你的 actionControl 指令输出合法 JSON 对象。适用于情感分析、意图分类或任何结构化决策场景。

POST /api/secondme/act/stream

认证

需要 OAuth2 Token。

所需权限

chat.write

请求头

必需说明
AuthorizationBearer Token
Content-Typeapplication/json
X-App-Id应用 ID,默认 general

请求参数

参数类型必需说明
messagestring用户消息内容
actionControlstring动作控制说明(20-8000 字符),定义模型必须输出的 JSON 结构与判断规则
modelstringLLM 模型,可选值:anthropic/claude-sonnet-4-5(默认)、google_ai_studio/gemini-2.0-flash
sessionIdstring会话 ID,不提供则自动生成
systemPromptstring系统提示词,仅在新会话首次有效
maxTokensinteger最大输出 token 数,范围 1-16000,默认 2000

actionControl 要求

actionControl 字段必须:

  • 长度在 20 到 8000 字符 之间
  • 包含 JSON 结构示例(带花括号,如 {"is_liked": boolean}
  • 包含 判断规则 和信息不足时的 兜底规则

actionControl 示例:

仅输出合法 JSON 对象,不要解释。
输出结构:{"is_liked": boolean}。
当用户明确表达喜欢或支持时 is_liked=true,否则 is_liked=false。

请求示例

curl -X POST "https://api.mindverse.com/gate/lab/api/secondme/act/stream" \
  -H "Authorization: Bearer lba_at_your_access_token" \
  -H "Content-Type: application/json" \
  -d '{
    "message": "我非常喜欢这个产品,太棒了!",
    "actionControl": "仅输出合法 JSON 对象,不要解释。\n输出结构:{\"is_liked\": boolean}。\n当用户明确表达喜欢或支持时 is_liked=true,否则 is_liked=false。"
  }'

响应

响应类型为 text/event-stream (Server-Sent Events)。

新会话首条消息:

event: session
data: {"sessionId": "labs_sess_a1b2c3d4e5f6"}

动作结果流(JSON 输出):

data: {"choices": [{"delta": {"content": "{\"is_liked\":"}}]}

data: {"choices": [{"delta": {"content": " true}"}}]}

data: [DONE]

错误事件(流式过程中出错时):

event: error
data: {"code": 500, "message": "服务内部错误"}

处理流式响应示例 (Python)

import json
import requests

response = requests.post(
    "https://api.mindverse.com/gate/lab/api/secondme/act/stream",
    headers={
        "Authorization": "Bearer lba_at_xxx",
        "Content-Type": "application/json"
    },
    json={
        "message": "我非常喜欢这个产品!",
        "actionControl": "仅输出合法 JSON 对象。\n"
                         "输出结构:{\"is_liked\": boolean}。\n"
                         "用户表达喜欢时 is_liked=true,否则 false。"
    },
    stream=True
)

session_id = None
result_parts = []
current_event = None

for line in response.iter_lines():
    if line:
        line = line.decode('utf-8')
        if line.startswith('event: '):
            current_event = line[7:]
            continue
        if line.startswith('data: '):
            data = line[6:]
            if data == '[DONE]':
                break
            parsed = json.loads(data)
            if current_event == 'session':
                session_id = parsed.get("sessionId")
            elif current_event == 'error':
                print(f"Error: {parsed}")
                break
            else:
                content = parsed["choices"][0]["delta"].get("content", "")
                result_parts.append(content)
            current_event = None

result = json.loads("".join(result_parts))
print(result)  # {"is_liked": true}

错误码

错误码说明
auth.scope.missing缺少 chat.write 权限
secondme.act.action_control.emptyactionControl 为空
secondme.act.action_control.too_shortactionControl 过短(最少 20 字符)
secondme.act.action_control.too_longactionControl 过长(最多 8000 字符)
secondme.act.action_control.invalid_format缺少 JSON 结构示例

校验错误响应

actionControl 校验失败时,响应会包含额外的诊断字段:

{
  "code": 400,
  "message": "actionControl 存在常见格式问题,请按 issues 和 suggestions 修正后重试",
  "subCode": "secondme.act.action_control.invalid_format",
  "constraints": {
    "minLength": 20,
    "maxLength": 8000,
    "requiredElements": [
      "输出格式约束(仅输出 JSON)",
      "JSON 字段结构示例(包含花括号)",
      "判定规则",
      "兜底规则"
    ],
    "currentLength": 15
  },
  "issues": [
    {
      "code": "missing_json_structure",
      "message": "未检测到 JSON 花括号结构示例(如 {\"is_liked\": boolean})"
    }
  ],
  "suggestions": [
    "请明确写出 JSON 结构,例如:{\"is_liked\": boolean}",
    "请明确兜底规则,例如:信息不足时返回 {\"is_liked\": false}",
    "请使用 JSON 布尔 true/false,不要使用 \"True\"/\"False\""
  ]
}