SecondMe API
流式动作判断 (Act)
让 AI 分身进行结构化动作判断,以流式方式返回 JSON 结果
让 AI 分身进行结构化动作判断,以流式方式返回 JSON 结果。
与聊天 API 返回自由文本不同,Act API 约束模型仅根据你的 actionControl 指令输出合法 JSON 对象。适用于情感分析、意图分类或任何结构化决策场景。
POST /api/secondme/act/stream认证
需要 OAuth2 Token。
所需权限
chat.write
请求头
| 头 | 必需 | 说明 |
|---|---|---|
| Authorization | 是 | Bearer Token |
| Content-Type | 是 | application/json |
| X-App-Id | 否 | 应用 ID,默认 general |
请求参数
| 参数 | 类型 | 必需 | 说明 |
|---|---|---|---|
| message | string | 是 | 用户消息内容 |
| actionControl | string | 是 | 动作控制说明(20-8000 字符),定义模型必须输出的 JSON 结构与判断规则 |
| model | string | 否 | LLM 模型,可选值:anthropic/claude-sonnet-4-5(默认)、google_ai_studio/gemini-2.0-flash |
| sessionId | string | 否 | 会话 ID,不提供则自动生成 |
| systemPrompt | string | 否 | 系统提示词,仅在新会话首次有效 |
| maxTokens | integer | 否 | 最大输出 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.empty | actionControl 为空 |
| secondme.act.action_control.too_short | actionControl 过短(最少 20 字符) |
| secondme.act.action_control.too_long | actionControl 过长(最多 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\""
]
}