维多乐布/技术文档 接口 v1
开发者平台 / 领域模型 / 文档

MODEL & API DOCUMENTATION

维多乐布亲子成长大模型

面向成年家长与幼教工作者的课程编制与领域模型服务。本文介绍从课程目标、课时活动到自然语言调整的完整流程,以及对应 API 的接入方法。

接口版本 v1文档更新 2026 年 10 月 11 日文本 · 非流式
公共模型标识vidolebu-parenting-1
认证方式Authorization: Bearer
接口前缀/v1

当前实现以豆包基础模型 API 为生成引擎,在服务端加入领域任务、年龄范围与输出边界。公共标识是本服务的调用别名,不表示本公司持有独立训练的模型权重。本文中的请求与响应样例用于解释接口,均不是实际运行记录、模型测评结果或效果承诺。

从一个课程项目开始

在课程工作台创建大纲、逐课时完善活动,用 AI 助手提出修改并在预览后应用。独立的情境对话用于补充讨论。开发者可通过控制台接入课程与对话 API。

01 / GET STARTED

快速开始

接入前需要一个已部署、配置好上游模型且使用 HTTPS 的服务地址,以及控制台创建的有效密钥。下方域名为占位符,请替换为实际部署地址。

  1. 创建服务密钥

    登录开发者控制台,为当前应用创建 API Key。将首次展示的完整值保存到服务端密钥管理或私有环境变量中。

  2. 配置服务地址

    将 VIDOLEBU_BASE_URL 设为 https://YOUR_SERVICE_DOMAIN/v1,将 VIDOLEBU_API_KEY 设为已创建密钥。不要使用上游火山方舟密钥替代本平台密钥。

  3. 创建课程并完善课时

    提交主题、目标和组织条件,取得课程与课时编号后生成活动。需要调整时向课程助手提交具体要求,预览变化,再明确应用;课程 API 参考见课程 API 与结构。

创建首个课程cURL · 服务端
curl --request POST "${VIDOLEBU_BASE_URL}/courses" \
  --header "Authorization: Bearer ${VIDOLEBU_API_KEY}" \
  --header "Content-Type: application/json" \
  --data '{
    "title": "轮流与等待:家庭活动",
    "topic": "共同游戏中的轮流与表达",
    "goal": "提供表达选择和交接材料的活动机会",
    "age_group": "5-6",
    "audience": "parent",
    "lesson_count": 4,
    "session_minutes": 15,
    "materials": "积木和彩纸,由成人带领"
  }'

密钥由环境变量读取;示例不包含真实凭证。调用示例未执行,不代表当前部署已可访问。

02 / MODEL CARD

领域模型卡

模型卡描述当前服务实现,而非尚未完成的训练计划。将公共标识用于请求路由,将模型名称用于面向用户的说明。

服务名称维多乐布亲子成长大模型
公共标识vidolebu-parenting-1
运营主体上海维多乐布智能科技有限公司
生成引擎服务端配置的豆包模型 API,默认通过火山方舟境内接口接入;具体上游模型版本由运营配置决定。
领域适配方式服务端任务提示词、使用者场景、年龄参数、证据表述要求,以及输入和输出规则过滤。
已实现输入 / 输出对话:文本消息 → 文本回复;课程:目标与条件 → 结构化课程草稿与活动方案。不接收图像、音频、文件附件或工具调用。
目标使用者年满 18 周岁的家长、其他监护人与幼教工作者;开发者对同一服务范围内的应用进行服务端集成。
内容范围3—12 岁儿童的家庭情境、成人带领的互动与叙事素材;幼教场景主要面向 3—6 岁,并可按现有年龄参数组织其他适龄任务。
当前能力限度没有联网文献检索、RAG、个体诊断或标准化量表评分;生成内容可能遗漏信息或出错。
领域训练进度资料准备与任务编制不等于完成微调。当前实现不宣称已完成 SFT / LoRA 或拥有独立领域权重。
质量与评估本版本未发布可复现的领域基准、人工抽检达标结果或模型安全评估通过结论。

如何理解“领域模型”

领域范围体现在任务分类、上下文组织和回答规范:把可观察行为与推测分开,将互动建议放回具体情境,对引用和效果描述保持审慎。这些约束会参与每次模型请求,但不构成正确性保证。应用仍需由使用者审阅输出。

03 / TASK TAXONOMY

任务与年龄参数

task 指定当前任务,age_group 提供年龄背景,audience 区分家庭和幼教场景。切换参数不会建立儿童档案,也不会产生发展水平判定。

任务建议输入信息期望内容结构
insight
情绪与行为观察
发生了什么、场景和频次、成人已作出的回应、需要厘清的问题。已知观察、可能及替代解释、情境化建议、适用条件与不确定性。
interaction
亲子互动策略
可用时间和材料、家庭场景、互动目标、参与限制。所需条件、可执行步骤、沟通表达、观察过程与调整办法。
story
叙事素材构建
主题、篇幅、故事背景和需要避开的情节。虚构故事正文、开放式共读问题、家长讲述提示。
允许年龄值3-45-67-910-12

家庭与幼教场景

audience: parent 侧重家庭中的成人与孩子互动;audience: educator 侧重幼教工作者带领的小组活动、材料准备、参与组织和过程观察。接口仍面向成人,不改变儿童独立使用的边界。幼教用户需要补充参与人数、场地与材料条件,不提交幼儿名单或个体档案。

输入信息的组织

将年龄放在参数中,将具体情境放在消息中。用“孩子”“家长”等称谓替代身份信息。陈述实际发生的行为,避免直接把“叛逆”“不正常”等标签当作已证实事实。

{
  "task": "interaction",
  "age_group": "5-6",
  "messages": [{
    "role": "user",
    "content": "我们有15分钟和几块积木。想练习轮流等待,请提供一个家长可以带领的游戏,以及孩子不愿参与时的调整方式。"
  }]
}

任务片段;发送时还需包含 model。上述“期望内容结构”是领域提示原则,接口不保证固定段落或结构化 JSON 输出。

COURSE PLATFORM / OVERVIEW

课程项目

课程平台把一个成人带领的活动目标组织为连续课时:先生成结构化大纲,再为选定课时生成活动方案,最后由家长或幼教工作者审阅、编辑和安排实施。课程保存为账户中的草稿项目,可持续修改。

组织单位课程 → 3—8 个课时
单次安排10—45 分钟
项目状态draft
课程构成用途编制建议
主题与目标界定连续活动围绕什么展开,以及成人希望提供哪些参与机会。用“尝试轮流”“表达选择”等过程性目标,避免保证儿童达到特定发展分数。
课时大纲为连续活动安排各课时标题、目标和重点。由熟悉场景的成人检查衔接与难度,再逐课时完善。
活动步骤说明材料、时间安排和执行方式。检查场地、材料安全及参与人数,删改不适合当前条件的步骤。
观察线索提示成人注意参与、沟通和调整过程。作为定性观察提示,不是儿童能力评分或诊断量表。
练习与反思连接课时之间的尝试,整理下一次需要调整的内容。记录活动设计是否适合,而不是给儿童贴上成功或失败的标签。

生成大纲和课时都实际调用上游模型。大纲通过结构校验后保存;无法解析或字段不符合约定时返回错误,不以固定模板冒充生成结果。draft 表示待成人选用的草稿,不表示已经经过课程效果验证、获得教学资质或适合所有儿童。

COURSE PLATFORM / DESIGN GUIDE

课程编制工作流

以实际参与条件组织课程,比先追求复杂的大纲更有助于形成可执行安排。家庭与幼教场景共用项目结构,但活动组织和观察方式需要分别考虑。

设计环节家庭 · parent幼教 · educator
目标围绕一个日常情境,例如共同收拾、轮流或睡前共读。围绕成人可组织的小组活动,明确参与方式与交流机会。
课时安排保持短而可重复,适应家庭节奏和孩子是否愿意参与。安排引入、示范、分组尝试和收尾,考虑人数与场地转换。
材料列出家中实际已有物品,避免依赖复杂采购或制作。说明材料数量、共享方式、等待安排和成人协助条件。
活动观察关注互动是否可持续、成人表达是否清楚、是否需要缩短或调整。关注参与机会、等待和材料流转,以及不同参与方式的支持。
延伸与反思选择一个可在日常生活再次尝试的简单步骤。整理可与家庭沟通的活动提示,避免把家庭练习变成儿童考核。
  1. 明确目标与条件

    填写主题、目标、使用者场景、年龄、课时数量、时长和材料。目标应能指导活动设计,不要求模型推断儿童的发展水平。

  2. 生成并审阅大纲

    检查课时之间的重点是否重复、顺序是否合适,以及活动难度与场景是否匹配。课程保存后仍是草稿。

  3. 逐课时生成活动

    选择一个课时生成详细活动。检查说明是否完整、材料是否可用、时间安排是否合理,并补充成人实际需要的协助方式。

  4. 编辑与实施准备

    修改标题、目标、步骤、观察线索或反思问题。若修改课程目标或材料,已生成课时不会自动重写,需要自行调整或再次生成。

  5. 根据活动过程调整

    把反思用于优化课程安排。是否继续、缩短或更换活动,由负责带领的成人依据实际情况决定。

示例:轮流与等待

家庭目标可以是“共同搭建时尝试表达下一步选择”;幼教目标可以是“小组共同使用材料时练习表达与交接”。两者可使用相同主题,但成人组织方式、材料数量和观察线索应分别设计。

COURSE PLATFORM / AI ASSISTANT

在课程中用自然语言调整

课程 AI 助手围绕当前项目工作:理解已保存的课程与选定课时,回答设计问题,或提出具体字段修改。生成建议不会立即改写课程;只有用户查看变更并明确应用后,修改才保存到项目。

  1. 选定课程或课时

    选择“当前课时”处理活动细节,或选择“课程”处理整体目标、材料与课时大纲。手动编辑中尚未保存的内容必须先保存,助手只读取服务端已保存版本。

  2. 提出具体要求

    说明想保留什么、改变什么,以及家庭或幼教场景的实际条件。对活动的建议应保持既有课时时长。

  3. 查看实际变更

    助手说明建议并展示逐字段的修改前后内容。没有修改需求时只返回说明,不产生待应用提案。

  4. 应用或放弃提案

    确认内容后应用,或放弃此次提案。有待处理提案时,先处理它再继续发送要求,避免把不同修改混在一起。

  5. 继续编辑保存后的课程

    应用成功的回执包含最新课程,编辑区据此更新。之后可以手动调整,或基于最新保存内容再提出新要求。

场景 / 范围可以提出的具体要求需要预览的内容
家庭 · 当前课时“保留当前总时长,改成家长和孩子共同参与;把步骤写清楚,保留已有材料。”活动步骤、各段分钟数、家长协助方式与总时长。
幼教 · 当前课时“改成四人小组共享材料,补充材料交接方式和等待时的替代参与方式。”活动组织、具体说明与适应调整。
家庭 · 课程大纲“把课程目标写成可观察的互动过程,减少大纲中的重复表述。”课程目标,以及相关课时的标题、目标和重点。
幼教 · 当前课时“把观察点改为成人可记录的参与过程,删除对幼儿能力的评分表述。”观察提示与反思问题是否属于过程观察。

修改范围

“当前课时”可提出该课时允许编辑的八个内容字段变更;活动分钟数之和仍必须等于课程设置。“课程”可调整课程标题、目标和材料,并调整已有课时的大纲标题、目标与重点,不会批量重写所有活动。

助手不能更改年龄、课时时长、课时数量、课时编号、顺序或项目状态,也不能删除课程。若需要这些变动,应按课程功能当前支持的方式组织新项目,而不是用提示词要求绕过字段约定。

基于保存版本处理冲突

提案对应生成时的已保存课程。若随后手动编辑课程、重新生成课时或发生其他项目变化,应用旧提案会返回 409 COURSE_CHANGED,不会覆盖较新的内容。取得最新课程后,放弃旧提案并重新提出要求。

助手接口

公共路径用途模型调用
GET /v1/courses/{id}/assist恢复当前课程待处理提案,返回 {"proposals": [...]},最多 30 条。否
POST /v1/courses/{id}/assist获取上下文回答或待应用修改提案。是
POST /v1/courses/{id}/assist/{proposalid}/apply明确应用已有提案,保存课程。否
POST /v1/courses/{id}/assist/{proposalid}/discard将已有提案标记为放弃。否

网站端点将 /v1 替换为 /api,使用网站 Cookie;公共端点使用 Bearer 密钥。提案属于当前账户与课程。

向当前课时提出要求请求示例
{
  "message": "把课时目标改成可观察的活动过程,并把反思问题整理为两条。",
  "scope": "lesson",
  "lesson_id": "<当前课时编号>",
  "history": [
    {"role": "user", "content": "这次活动由一名家长带领。"},
    {"role": "assistant", "content": "可以围绕共同选择和回应组织活动。"}
  ]
}
字段规则
message必填,1—2000 字符的非空文本。
scope必填,lesson 或 course。
lesson_idlesson 范围必填,必须属于当前课程;course 范围省略。
history可选,最多 6 条。每条只含 role(user / assistant)与 content(1—2000 字符的非空文本)。

无需把课程全文作为消息提交。服务器读取当前账户拥有的课程版本,history 仅提供对话背景,不能替代保存课程或获得系统指令权限。

待应用提案响应示意,非实际模型结果
{
  "reply": "建议将目标聚焦为共同选择,并用两条问题回顾活动安排。请查看变更后决定是否应用。",
  "proposal": {
    "id": "example-proposal-id",
    "courseId": "example-course-id",
    "scope": "lesson",
    "lessonId": "example-lesson-id",
    "status": "pending",
    "createdAt": "2026-10-11T08:00:00+00:00",
    "changes": [{
      "target": "lesson",
      "lessonId": "example-lesson-id",
      "field": "objective",
      "label": "课时目标",
      "before": "练习表达与轮流",
      "after": "在共同活动中提供表达选择和回应对方的机会"
    }, {
      "target": "lesson",
      "lessonId": "example-lesson-id",
      "field": "reflectionPrompts",
      "label": "反思问题",
      "before": ["活动是否顺利?"],
      "after": ["哪些说明有助于参与?", "下一次需要调整哪些安排?"]
    }]
  }
}

before 与 after 保留字段原有类型:文本为字符串,反思或观察点为字符串数组,活动为完整活动数组。课程字段变更的 target 为 course、lessonId 为 null。只回答问题而没有字段变化时返回 {"reply": "...", "proposal": null}。

明确应用或放弃

curl --request POST \
  "${VIDOLEBU_BASE_URL}/courses/${COURSE_ID}/assist/${PROPOSAL_ID}/apply" \
  --header "Authorization: Bearer ${VIDOLEBU_API_KEY}" \
  --header "Content-Type: application/json" \
  --data '{}'

# 放弃提案时,将最后的 /apply 改为 /discard。

应用成功返回 {"course": {...}, "proposal": {"id": "...", "status": "applied"}};放弃返回 {"proposal": {"id": "...", "status": "discarded"}}。重复应用同一已应用提案返回当前课程与已应用状态,不覆盖后来人工修改;重复放弃已放弃提案仍成功。已应用提案不能通过放弃操作回退,已放弃提案也不能再应用,这两种情况返回 409 PROPOSAL_NOT_PENDING。放弃是状态变更,不是删除提案记录。

刷新后恢复待处理提案

打开课程时,工作台通过 GET 助手接口读取当前课程最新的待处理提案,恢复真实的修改前后内容;返回对象保留提案字段类型,并可包含该提案的 reply。刷新不会丢失服务端已保存的提案,但不会恢复仅存在于页面内存中的完整助手对话。

存在待处理提案时,先应用或放弃再发新要求;有多个历史待处理提案时,处理当前提案后继续处理下一个。旧提案若与课程版本冲突,放弃后基于最新课程重新提出要求。

失败与留存

不符合约定的模型提案返回 422 ASSISTANT_INVALID_RESPONSE,课程保持原状,不使用预设修改作为替代。请求文本的类型、长度或 HTML 内容不符合要求时返回 400 INVALID_ASSISTANT_FIELD;输入安全拦截仍可能返回 CONTENT_BLOCKED 或 PERSONAL_DATA_BLOCKED。助手生成与课程大纲、课时生成和独立对话共用账号的模型频率与并发限制;读取、应用、放弃不会调用模型。

浏览器中按课程显示的助手对话保留在当前页面内存,可作为 history 提交;不会自动成为独立聊天会话。修改提案的回复与变更内容保存在服务端,课程或账户删除时随之删除。每账户最多保留 30 条待处理提案,不自动删除;达到上限返回 409 PROPOSAL_LIMIT,先处理已有提案再提出新修改。公共 /v1/ 助手请求也进入有效密钥请求元数据统计。

COURSE PLATFORM / REST REFERENCE

课程 API 与结构

公共课程 API 使用 /v1/courses 和 Bearer 密钥;网站课程功能使用 /api/courses 和账户 Cookie。两者操作当前账户的同一组课程,不能读取或修改其他账户项目。

公共路径用途响应 / 模型调用
GET /v1/courses列出当前账户的课程元数据与 generatedLessonCount。{"courses": [...]} / 否
POST /v1/courses生成课程大纲并保存项目。201 {"course": {...}} / 是
GET /v1/courses/{id}获取课程与全部课时。{"course": {...}} / 否
PATCH /v1/courses/{id}编辑标题、目标或材料。{"course": {...}} / 否
DELETE /v1/courses/{id}删除课程及所属课时。{"ok": true} / 否
POST /v1/courses/{id}/lessons/{lessonid}/generate为指定课时生成活动方案。{"course": {...}, "lesson": {...}} / 是
PATCH /v1/courses/{id}/lessons/{lessonid}编辑课时内容。{"course": {...}, "lesson": {...}} / 否

网站端点具有相同路径后缀,将 /v1 替换为 /api。Cookie 管理端点仍要求网站登录及同源请求,不使用 Bearer 认证。

创建课程

POST/v1/courses真实模型大纲生成
{
  "title": "轮流与等待:家庭互动活动",
  "topic": "在共同游戏中表达选择与尝试轮流",
  "goal": "提供表达想法、听取回应和交接材料的活动机会",
  "audience": "parent",
  "age_group": "5-6",
  "lesson_count": 4,
  "session_minutes": 15,
  "materials": "积木、两张不同颜色的纸;由一名成人带领"
}
字段类型说明
titlestring课程名称,1—100 字符。
topicstring课程围绕的主题,1—300 字符。
goalstring期望成人组织的活动机会或课程目标,1—1000 字符。
audiencestringparent 或 educator。课程创建必须显式指定;对话接口可缺省为 parent。
age_groupstring3-4、5-6、7-9、10-12。
lesson_countinteger3—8 个课时。
session_minutesinteger每课时安排 10—45 分钟。
materialsstring可用材料和组织条件,最多 2000 字符,可为空字符串但不能省略字段;不填写参与儿童的身份信息。

课程与课时对象

创建请求的八个字段均必须提交;每账户最多保存 50 门课程。请求使用 age_group 等下划线字段,返回的课程对象使用 ageGroup 等驼峰字段。以下展示完整字段形态,课时仅列一个结构片段;示例不是实际生成结果。

{
  "id": "example-course-id",
  "title": "轮流与等待:家庭互动活动",
  "topic": "共同游戏与轮流",
  "goal": "提供表达与交接材料的活动机会",
  "audience": "parent",
  "ageGroup": "5-6",
  "lessonCount": 4,
  "sessionMinutes": 15,
  "materials": "积木、彩纸",
  "status": "draft",
  "createdAt": "2026-10-11T08:00:00+00:00",
  "updatedAt": "2026-10-11T08:00:00+00:00",
  "lessons": [{
    "id": "example-lesson-id",
    "order": 1,
    "title": "共同决定第一步",
    "objective": "为成人带领的共同选择提供步骤",
    "focus": "表达选择与回应",
    "activities": [{
      "title": "选择一种搭建方式",
      "minutes": 5,
      "instructions": "【结构示意】成人提出两个可行选择,邀请参与者表达想法。"
    }, {
      "title": "共同尝试",
      "minutes": 5,
      "instructions": "【结构示意】按照选定方式尝试,成人留出回应时间。"
    }, {
      "title": "收尾与交流",
      "minutes": 5,
      "instructions": "【结构示意】共同整理材料,用简短问题回顾过程。"
    }],
    "homePractice": "【结构示意】在下一次共同活动中再次尝试表达选择。",
    "reflectionPrompts": ["哪些表达有助于活动继续?"],
    "observationPoints": ["注意成人是否留出回应的时间。"],
    "adaptations": "【结构示意】可用图示或指认表达选择。",
    "generatedAt": "2026-10-11T08:05:00+00:00"
  }]
}

generatedAt: null 表示尚未完成课时活动生成;时间戳表示生成完成时间,不能当作人工审核时间。generatedLessonCount 表示已生成活动的课时数量,不是完成教学或效果达标的数量。

编辑课程与课时

课程 PATCH 只接受 title、goal、materials。课时 PATCH 接受 title、objective、focus、activities、homePractice、reflectionPrompts、observationPoints、adaptations;提交需要更改的字段,其余内容保留。列表类字段作为整体替换,不是逐条追加。

{
  "objective": "围绕当前材料组织一个简短的轮流活动",
  "observationPoints": [
    "活动说明是否足够清楚?",
    "是否需要减少等待或改变材料交接方式?"
  ]
}

编辑标题、目标或材料不会自动重新生成课时。生成接口应由明确的用户操作触发;查看、列表与编辑不调用模型。大纲或活动未通过结构校验时返回 422 COURSE_INVALID_RESPONSE,不保存模板替代结果。涉及模型的课程请求与网站 / API 对话共用账号的并发与频率限制。再次生成成功时会覆盖该课时的活动内容及生成时间,包括此前手动修改的内容;生成失败时保留原内容。

编辑字段约束

字段课时编辑规则
title1—100 字符。
objective / focus各 1—1000 字符。
activities1—8 项,每项只包含 title(1—100 字符)、minutes(1—45 的整数)、instructions(1—2000 字符);所有项的分钟数之和必须等于课程的 sessionMinutes。
homePractice / adaptations各最多 2000 字符,人工编辑时可设为空字符串。
reflectionPrompts / observationPoints各 0—6 条字符串,每条 1—500 字符;人工编辑可提交空数组。
generatedAt / 编号与排序服务端管理,不能通过 PATCH 改写。

每次 PATCH 至少提交一个允许字段。课程标题、目标和材料采用创建时相同的长度规则。模型生成的课时必须具有全部八个内容字段,文本非空、反思与观察各 1—6 条;人工编辑允许上述特定字段留空。结构校验确认的是字段和时长约定,不是活动效果或年龄适宜性的验证。

课程错误码

HTTP / code说明与处理
400 INVALID_COURSE_FIELD检查必填字段、允许编辑字段、长度、枚举与活动时长之和。
404 COURSE_NOT_FOUND
404 LESSON_NOT_FOUND
编号不存在或不属于当前账户;从当前课程详情获取正确编号。
409 COURSE_LIMIT达到每账户 50 门课程上限;删除不再使用的项目后创建。
409 CHAT_IN_PROGRESS同账户另一个模型任务尚未结束,等待后再提交。
422 COURSE_INVALID_RESPONSE上游输出未通过课程结构校验,当前生成结果不保存;调整目标或条件后由用户决定是否重新生成。

课程接口同时可能返回既有的认证、内容过滤、限流与上游模型错误,参见错误处理。

课程调用示例

curl --request POST "${VIDOLEBU_BASE_URL}/courses" \
  --header "Authorization: Bearer ${VIDOLEBU_API_KEY}" \
  --header "Content-Type: application/json" \
  --data '{
    "title": "小组轮流活动",
    "topic": "共享材料与表达选择",
    "goal": "为参与者提供交流和轮流使用材料的机会",
    "audience": "educator",
    "age_group": "5-6",
    "lesson_count": 4,
    "session_minutes": 20,
    "materials": "共享积木;四人小组;成人现场带领"
  }'

# 保存返回的 course.id 与目标 lessons[].id 后,获取当前项目:
curl "${VIDOLEBU_BASE_URL}/courses/${COURSE_ID}" \
  --header "Authorization: Bearer ${VIDOLEBU_API_KEY}"

# 为选定课时生成活动;不要重复提交未结束的生成请求:
curl --request POST \
  "${VIDOLEBU_BASE_URL}/courses/${COURSE_ID}/lessons/${LESSON_ID}/generate" \
  --header "Authorization: Bearer ${VIDOLEBU_API_KEY}" \
  --header "Content-Type: application/json" \
  --data '{}'

04 / AUTHENTICATION

认证与密钥管理

公共 API 使用 Bearer 密钥认证,与网站账户的 Cookie 登录分开。每个密钥关联创建它的账户;同一账户下的密钥共享模型生成限流。

Authorization: Bearer <YOUR_API_KEY>
生命周期当前行为集成建议
创建在登录后的控制台创建;每账户最多 5 个有效密钥。按应用或环境命名,分开开发与生产用途。
展示完整密钥仅创建成功时返回一次;后续列表显示识别信息。首次保存到私有密钥存储;遗失后撤销并新建。
保存服务端保存密钥摘要,不保存可恢复的完整密钥。不要把密钥提交到仓库、日志或对话内容。
撤销已撤销密钥不能用于新的有效认证;已被上游接受的请求可能仍完成。疑似泄露时立即撤销,再更新应用配置。
轮换当前版本使用手动创建与撤销,不承诺自动轮换或自动到期。先创建新密钥,更新服务端配置,再撤销旧密钥。

控制台管理端点

方法与路径用途认证
GET /api/api-keys密钥列表与请求元数据统计网站登录 Cookie
POST /api/api-keys创建密钥网站登录 Cookie 与同源请求要求
DELETE /api/api-keys/{id}撤销指定密钥网站登录 Cookie 与同源请求要求

创建请求提交 {"name": "应用名称"},名称最长 60 字符;成功时 HTTP 201 返回 {"key": {...}, "secret": "..."}。secret 是首次展示的完整值;key 是管理元数据,包含 id、name、prefix、createdAt、lastUsedAt、revokedAt。列表返回 keys 数组与 usage 请求统计,不返回 secret。统计字段为 requests、successfulRequests 和 failedRequests。撤销使用管理编号 id,不把完整密钥放入 URL。

这些是控制台内部端点,不能用 Bearer 密钥调用。业务应用应调用 /v1/ 接口,不需要模拟网站登录。API 不提供跨域浏览器接入;把模型请求放在自有服务端,避免将密钥放入网页脚本或移动应用客户端。

05 / API REFERENCE

对话生成

POST/v1/chat/completionsBearer 认证

创建一次非流式文本生成。接口不保存 API 对话历史;如需连续对话,由调用方在 messages 中提交必要上下文。

完整请求示例application/json
{
  "model": "vidolebu-parenting-1",
  "messages": [
    {"role": "system", "content": "请面向成年家长或幼教工作者,用简洁中文回答。"},
    {"role": "user", "content": "5岁孩子结束游戏时不愿收拾。请给出可观察线索和两步回应建议。"}
  ],
  "task": "insight",
  "age_group": "5-6",
  "audience": "parent",
  "max_tokens": 1200,
  "stream": false
}

消息对象

字段类型规则
rolestringsystem、user、assistant 三选一。
contentstring1—4000 字符,不能为空白;不支持数组、多模态内容或附件。
其他字段—不允许。每条消息必须恰好具有 role 和 content。

调用方的 system 消息作为补充任务背景处理,进入上游时降为 user 上下文。服务端领域与安全提示始终先于调用方消息;调用方不能用自己的消息覆盖服务规则。

响应结构示例200 · 示例值,非真实模型输出
{
  "id": "chatcmpl-example",
  "object": "chat.completion",
  "created": 1791676800,
  "model": "vidolebu-parenting-1",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "【格式示意】先观察孩子是在舍不得结束游戏,还是不知道从哪里开始收拾,再根据具体情境安排简短回应。"
    },
    "finish_reason": "stop"
  }],
  "usage": {"prompt_tokens": 320, "completion_tokens": 95, "total_tokens": 415},
  "ai_generated": true
}
响应字段说明
id本次响应标识;不是可用于恢复 API 会话的历史记录编号。
created响应时间的 Unix 秒值。
choices[0].message.content生成文本。当前返回单个候选,不支持 n 参数。
finish_reason采用上游返回的有效结束原因;缺少有效值时可能为 null。收到 length 时应将内容视为可能截断。
usage可选。只有上游返回完整、有效且总数一致的 token 统计时出现;缺省时不要据字符数伪造统计。
ai_generated固定为 true,表示 AI 生成内容;应用展示时应保持用户可识别的生成内容提示。

06 / MODEL DISCOVERY

模型列表

GET/v1/modelsBearer 认证

返回当前公开的服务模型标识。此端点不生成文本,不计入聊天次数窗口,但记录在有效密钥的 API 请求统计中。

curl "${VIDOLEBU_BASE_URL}/models" \
  --header "Authorization: Bearer ${VIDOLEBU_API_KEY}"
{
  "object": "list",
  "data": [{
    "id": "vidolebu-parenting-1",
    "object": "model",
    "owned_by": "vidolebu",
    "created": 1791676800
  }]
}

owned_by 标识提供该接口服务的一方,不是上游权重所有权声明。created 对应公共 API 契约引入日期,不表示豆包模型的训练或发布日期。模型列表可用也不意味着上游模型配置完整;未完成配置的生成请求会返回 MODEL_NOT_CONFIGURED。

07 / PARAMETERS

参数与限制

参数类型 / 必需默认值范围与行为
modelstring / 是无必须为 vidolebu-parenting-1。
messagesarray / 是无1—12 条;每条 1—4000 字符;总文本不超过 16000 字符。
taskstring / 否insightinsight、interaction 或 story。
audiencestring / 否parentparent(家庭)或 educator(幼教工作者)。
age_groupstring / 否5-63-4、5-6、7-9 或 10-12。
max_tokensinteger / 否1800128—1800;传入 JSON 整数。此值是生成 token 上限,不是汉字数。
streamboolean / 否false只接受 false;true 或其他值返回 400。

传输与资源限制

限制当前实现
HTTP 请求体后端 /v1/ JSON 最大 131072 字节(128 KiB);反向代理可设置更低上限。字节上限与文本字符上限分别检查。
请求编码Content-Type: application/json,提供 Content-Length;不接收 Transfer-Encoding 分块请求。
账号生成频率每 60 秒最多 12 次、每 86400 秒最多 120 次;网站聊天、API 对话、课程大纲与课时生成与课程助手按账户共享。
并发同一账户同一时刻只处理一个模型请求;服务端最多 8 个上游模型调用。繁忙时拒绝,不承诺排队。
限流状态单进程内存中的滑动窗口,重启后重置;不是持久额度、计费规则或多实例统一配额。
未列出参数temperature、top_p、tools、tool_calls、response_format、n 等当前不支持。

只有通过参数、内容和配置检查并进入生成阶段的请求才进入聊天限流窗口;进入后即使上游失败,也可能已经消耗窗口次数。另有按客户端来源的请求频率保护,不能通过新增密钥绕过账号限制。

08 / CODE EXAMPLES

调用示例

以下代码仅使用明确支持的字段。JSON 响应兼容常见对话接口的基本结构,当前接口不是所有 OpenAI 参数或工具功能的完整实现。

Python 标准库

单次调用与错误读取Python 3 · 服务端
import json
import os
from urllib.error import HTTPError, URLError
from urllib.request import Request, urlopen

base_url = os.environ["VIDOLEBU_BASE_URL"].rstrip("/")
api_key = os.environ["VIDOLEBU_API_KEY"]
payload = {
    "model": "vidolebu-parenting-1",
    "task": "story",
    "age_group": "5-6",
    "max_tokens": 1200,
    "stream": False,
    "messages": [{
        "role": "user",
        "content": "写一则关于等待的短故事,供家长讲述,附两个开放式共读问题。"
    }]
}
request = Request(
    base_url + "/chat/completions",
    data=json.dumps(payload, ensure_ascii=False).encode("utf-8"),
    headers={
        "Authorization": "Bearer " + api_key,
        "Content-Type": "application/json"
    },
    method="POST"
)
try:
    with urlopen(request, timeout=120) as response:
        result = json.load(response)
    text = result["choices"][0]["message"]["content"]
    finish_reason = result["choices"][0].get("finish_reason")
    usage = result.get("usage")  # 可能缺省,不补造 token 数
    # 由应用在合适位置展示 text,并保留 AI 生成内容提示。
except HTTPError as error:
    try:
        detail = json.loads(error.read()).get("error", {})
        code = detail.get("code", "HTTP_ERROR")
    except (ValueError, UnicodeDecodeError):
        code = "HTTP_ERROR"  # 代理错误不一定返回 JSON
    raise RuntimeError(f"模型请求失败:HTTP {error.code} / {code}") from None
except URLError:
    raise RuntimeError("网络连接失败,请检查服务地址与连接状态。") from None

连续对话请求

将上一轮需要保留的用户问题和模型回答放回消息数组,然后追加新问题。客户端自行维护历史;不要把无关会话、原始敏感记录或全部文档作为背景重复发送。

"messages": [
  {"role": "user", "content": "结束积木游戏时,孩子总想再玩一会儿。"},
  {"role": "assistant", "content": "【示意】可以先明确后续安排,再提供一个具体的收尾选择。"},
  {"role": "user", "content": "如果提前提醒之后仍不愿意结束,下一步可以怎么回应?"}
]

上下文格式示意;实际集成应使用本应用收到的真实上一轮回复。请求超时后不要立即无限重试,服务端可能仍在处理原请求。

09 / ERRORS

错误处理

公共 API 的错误响应采用以下结构。反向代理、连接中断等情况可能没有该 JSON 响应;客户端应同时处理 HTTP 状态与 JSON 解析失败。

{
  "error": {
    "message": "请选择 vidolebu-parenting-1 模型标识。",
    "type": "invalid_request_error",
    "code": "MODEL_NOT_SUPPORTED",
    "param": null
  }
}
HTTPcode处理方式
400UNSUPPORTED_PARAMETER
MODEL_NOT_SUPPORTED
STREAM_NOT_SUPPORTED
删去不支持的字段、修正模型标识、设置非流式请求。
400INVALID_MESSAGES
MESSAGES_TOO_LONG
INVALID_CHAT_OPTIONS
INVALID_MAX_TOKENS
依据参数表修正类型、枚举或长度后再发送。
400INVALID_JSON
INVALID_REQUEST
提交合法 JSON 对象,检查请求长度和传输编码。
401INVALID_API_KEY检查 Bearer 格式及密钥是否撤销。不要将密钥写入报错日志。
403INVALID_HOST使用正式配置的服务域名,检查反向代理传递的 Host。
404 / 405NOT_FOUND
METHOD_NOT_ALLOWED
检查路径和请求方法;本版本只提供本文列出的公共端点。
409CHAT_IN_PROGRESS等待该账户中的其他模型请求结束,再提交下一请求。
413 / 415REQUEST_TOO_LARGE
INVALID_CONTENT_TYPE
缩小 JSON 请求体、提供正确 Content-Type。空请求体也会被拒绝。
422CONTENT_BLOCKED
PERSONAL_DATA_BLOCKED
MODEL_OUTPUT_BLOCKED
重新组织合适的任务,删除身份信息;不要尝试规避过滤或自动原样重发。
429RATE_LIMITED降低频率、串行组织同账户任务,并采用有上限的退避等待。
503MODEL_NOT_CONFIGURED运营方尚未完成上游配置;客户端反复重试不能解决。
503MODEL_BUSY
SERVICE_BUSY
减少并发,稍后进行有限重试。
502 / 504MODEL_UPSTREAM_ERROR
MODEL_INVALID_RESPONSE
MODEL_TIMEOUT
处理为生成失败;设置有限重试和用户可理解的失败状态。
500INTERNAL_ERROR保留不含密钥或任务正文的故障信息,联系运营方。

type 分为 authentication_error、rate_limit_error、server_error 和 invalid_request_error;param 当前为 null。不承诺提供 Retry-After 或请求幂等去重,重试可能产生新的上游请求。

10 / APPLICATION PATTERNS

上下文与工作流

情境分析:先保留事实,再补充假设

将发生时间、可观察行为和成人回应组织为短文本,让模型区分已有事实与可能解释。需要进一步沟通时,接续一个具体问题,而不是每轮要求完整报告。模型提供的解释是待观察的假设,不是针对儿童的评估结论。

互动安排:用执行条件约束建议

明确可用时间、材料和参与方式。例如“只有十分钟、没有打印材料、由一名家长参与”比笼统要求“提高自我调节能力”更有助于形成可执行的方案。输出后由家长根据实际状态决定尝试、调整或停止。

故事工作流:素材生成与家长选用分开

指定主题、年龄和篇幅,生成之后由成年用户审阅故事、调整情节并选用共读问题。虚构人物的行为不能用于推断儿童性格,故事也不构成治疗或行为改善的证据。

应用端建议

  • 将消息保留在 12 条和 16000 字符以内;长会话可由调用方整理为简短背景,注明其为概括而非原文。
  • 按账户串行提交生成,明确显示等待、失败和完成状态,避免重复点击触发并发。
  • 将模型回复作为文本处理;不要直接将其作为可信 HTML、可执行代码或系统指令。
  • 收到截断回复时,提示内容可能未完成;不要自动把半段文字当作完整建议。
  • 应用若需要固定字段,自行设计人工审阅流程;当前对话接口没有 JSON Schema 强制输出或工具调用能力;课程接口按单独定义的结构校验和保存。

11 / EVIDENCE & REFERENCES

证据与研究资料

当前回答由基础模型与领域提示生成,没有实时文献检索、引用匹配或逐条来源核验。应用不应把所有回答标成“有研究验证”,也不应自动将下列文献挂在无关输出之后。

引用的使用原则

  • 区分研究原文、机构工作论文、活动指南和模型生成建议。
  • 引用具体结论时核对作者、年份、研究人群、任务和局限;相关性不等于因果关系。
  • 模型不能确认书目信息时,应说明无法确认,不能补造 DOI、样本量或效果数据。
  • 向模型提供资料片段时,说明来源和摘录范围;针对片段的解释不能代表完整论文结论。
01

National Scientific Council on the Developing Child · 2004

Young Children Develop in an Environment of Relationships

Working Paper No. 1 · 机构工作论文

关注儿童发起信号与成人回应之间的往返互动,强调关系和具体发展情境。可用于理解回应性互动概念,不是本平台的效果评估。

02

Center on the Developing Child at Harvard University · 2014

Enhancing and Practicing Executive Function Skills with Children from Infancy to Adolescence

活动指南 · 年龄与活动组织参考

按年龄提供活动示例,讨论工作记忆、抑制控制和认知灵活性的练习机会。活动参考不能直接转化为对个体发展结果的承诺。

03

Stuckelman, Z. D., Strouse, G. A., & Troseth, G. L. · 2022

Value added: Digital modeling of dialogic questioning promotes positive parenting during shared reading

Journal of Family Psychology, 36(6), 1010–1020 · DOI: 10.1037/fam0000932 · 2021 年在线发表

73 组美国 3—4 岁儿童家庭参与的两周随机研究,考察数字绘本对话提问示范与共读互动。研究中的工具、样本和观察期与本服务不同,不能据此宣称本服务已经验证有效。

公开来源作为独立延伸阅读列示,不表示机构合作、内容授权、模型训练来源或对本服务的认证。

12 / ARCHITECTURE

服务架构

网页与公共 API 共用领域任务规则和上游生成调用;账户、认证及留存由本服务处理。API 客户端不直接接触服务端配置的上游密钥。

01应用服务端Bearer Key + 文本任务
02领域服务认证 · 参数 · 内容 · 限流
03上游模型 API领域提示 + 当前上下文
04响应处理规则检查 · 文本 · 元数据
  1. 校验服务域名和 API Key,确认账户及密钥状态。
  2. 检查任务参数、消息角色、长度及规则过滤条件。
  3. 获取账号请求锁,检查生成配置和聊天滑动窗口。
  4. 将服务端领域提示、任务与年龄参数、调用方上下文发送给上游。
  5. 检查返回文本,转交有效的结束原因及可选 token 统计。
  6. 记录有效密钥请求的路径、时间、状态与错误码;对话 API 不保存正文,课程 API 将生成内容保存到课程项目。

当前是 Python 标准库服务与 SQLite 的单实例实现。无分布式限流、任务队列、检索服务或异步作业接口。多实例、高并发及统一配额需求应在另行设计后接入,不能直接据当前接口推断已经支持。

13 / SERVICE SCOPE

使用范围

服务输出面向成年家长、监护人和幼教工作者。允许年龄参数描述儿童的发展背景,不表示儿童可以独立注册或直接使用本服务。

场景服务处理原则
日常情境与互动解释可能的情境因素,提供可由成年用户审阅和尝试的建议。
医疗、心理与其他专业判断不形成疾病判断、人格标签、治疗方案或专业诊断结论;必要时建议联系适当的专业支持。
持续儿童陪聊不以本服务构建直接面向儿童的持续拟人陪伴。
紧急危险不继续提供伤害实施信息,提示联系当地急救或专业求助。
身份与敏感信息不要求儿童姓名、学校、住址、证件、联系方式或详细健康记录;规则可能拦截可识别信息。
不适宜内容对违规或危险任务进行拒绝或过滤;不输出色情、儿童性剥削、违法操作、仇恨或自伤实施指导。

当前安全措施包括有限的输入 / 输出规则与模型提示约束,不是完整风险覆盖证明。开发者应保留内容审阅和反馈渠道,不把过滤存在等同于完成安全评估或消除全部风险。

14 / DATA HANDLING

数据处理

输入上下文需要发送至配置的上游模型接口才能生成回答。“本服务不存储 API 正文”不能理解为“内容从未离开调用方”或“上游一定不留存”。

数据类别本服务当前处理开发者需要知道
网页会话关联账户保存用户消息与模型回复,可通过网站删除会话或注销账户。网页对话与课程项目是不同的数据路径。
API 对话输入与输出正文/v1/chat/completions 用于当前生成,不写入本地会话库;课程 API 另按课程项目保存。需要连续对话时由调用方提交上下文;自有应用的留存由开发者安排。
课程 AI 修改提案关联账户和课程保存助手回复、逐字段变更及提案状态;应用后将变更写入课程。不同于不保存正文的独立对话 API;放弃提案只更新状态,删除课程或账户才级联删除提案。
课程项目与课时家庭和幼教课程都关联账户保存,包括生成大纲、活动正文、后续编辑与项目元数据。/api/courses 与 /v1/courses 使用同一账户项目库;删除课程会删除所属课时。
API 请求元数据有效密钥校验后记录路径、方法、时间、HTTP 状态及错误码;包括模型列表请求与失败请求。统计不是计费账单,不包含网站聊天,也不是生成成功次数。
API 密钥保存摘要、名称、显示前缀、创建 / 最近使用 / 撤销时间。完整值只在创建时返回一次;不能通过密钥列表恢复。
上游处理任务提示及必要消息经配置的上游接口进行推理。上游留存、日志和训练使用规则以实际供应商配置与协议为准,不能从本地实现推出。
限流状态保存在当前服务进程内存。没有持久日额度;重启或不同实例的状态不共享。

保留与删除

当前本地实现未提供自动到期清理策略。网页会话可由用户主动删除;注销账户会删除账户关联的会话、课程及课时、课程修改提案、密钥与 API 请求元数据。已提交举报按网站说明处理。删除行为针对本服务数据,不是对供应商数据、调用方日志或其他存储的删除保证。

请求统计的含义

控制台的成功 / 失败次数来自有效密钥请求的 HTTP 结果,含 GET /v1/models。它不等于 token 消耗、聊天额度剩余、计费金额或效果质量。上游 token 统计仅在生成响应中按可用性返回。

15 / RELEASE INFORMATION

版本与服务状态

v1 · 初始接口契约

本版本提供非流式对话、结构化课程草稿、课时生成与预览后应用的课程 AI 修改、公共模型列表、控制台 API Key 管理及请求元数据记录。OpenAPI 描述用于机器可读字段参考;本文解释领域任务与接入语义。

兼容性与变化

/v1 表示当前接口契约;公共模型别名不固定上游模型权重或永久保证输出行为一致。当前未发布长期兼容承诺、固定弃用周期或 SLA。集成应忽略未来增加的非必要响应字段,对必需字段缺失或格式异常进行失败处理,并留意发布说明后再采用新增参数。

备案信息

本项目处于材料准备阶段,尚未取得本服务备案编号。第三方基础模型的备案信息与本项目服务状态分别列示,不能把基础模型编号作为本项目获批证明。

火山方舟官方公示的文本基础模型为“云雀”,编号 Beijing-YunQue-20230821。该编号属于第三方基础模型;当前实际接入版本和合作资料仍以运营配置与供应商证明为准。查看火山方舟官方公示 ↗

机器可读描述采用 OpenAPI 3.1.0,当前契约文档版本 1.2.0,包含公共接口与控制台密钥管理端点。

上海维多乐布智能科技有限公司技术文档 · 2026.10.11