Skip to content

词汇接口

这是 AI 互联最核心的接口。当用户说「把以上内容整理一下添加到 WordMomo」时,严禁直接执行写入。 你必须先完成调查(只读接口),然后出具一份预执行方案给用户确认,用户回复同意(如「执行」「可以」)后,才能调用任何创建/添加接口。

决策流程总览

判断内容形态(单词/词组 还是 句子)

调查现状:book.list / unit.list(只读,不写入)

出具《预执行方案》发给用户,等待确认  ←—— 关键步骤,不可跳过

用户确认(或按用户意见调整方案后再次确认)

按方案执行:word.import 一键导入(自动找到或创建词库与单元并写入)

向用户汇报执行结果

第一步:判断内容形态

WordMomo 中单词库和句子库是两种不同的学习模式,添加前必须先判断内容形态,放错库会严重影响用户的学习体验。

内容形态特征目标库类型
单词 / 词组没有完整句子结构的词或短语,如 applecheck inlook forward towordlib 单词库
句子有完整主谓结构、通常带句末标点的句子,如 I have a reservation under the name Gao.sentencelib 句子库

判断规则

  • 一个条目以动词原形开头且整体是一个短语(如 check out)→ 词组,放单词库。
  • 一个条目包含主语和谓语、表达完整语义(如 Could I have a wake-up call at 7?)→ 句子,放句子库。
  • 聊天内容同时包含单词和句子时,必须拆分成两批:单词/词组一批放入单词库,句子一批放入句子库,不要混放。此时方案中应包含两个目标位置。
  • 拿不准的条目,优先按句子处理,或在方案中标注出来让用户决定。

第二步:调查现状(只读)

根据内容形态确定 bookType 后,调用 词库接口book.list(带 bookType 参数)查找已有词库;对有希望的候选词库,再调用 单元接口unit.list 查看其单元。

这一步只允许调用查询接口,不允许调用任何创建/添加接口。


第三步:出具预执行方案,等待用户确认

调查完成后,必须先把方案发给用户确认,方案包含:

  1. 内容形态判断结果:整理出了多少个单词/词组、多少个句子。
  2. 目标词库
    • 上下文有明确合适的现有词库 → 直接使用,方案中说明「放入现有词库《XXX》」;
    • 没有合适的词库 → 方案中说明「新建词库《XXX》(句子库/单词库)」,并给出你建议的词库名称。
  3. 目标单元:说明放入哪个现有单元,或新建单元并给出建议名称(如「Unit 1 入住酒店」,序号参考已有单元顺延)。
  4. 内容预览:列出前几条整理好的内容(含译文),让用户快速判断质量。

方案示例:

我整理了一下,计划这样添加到 WordMomo:

  • 内容:6 个句子(含译文)
  • 你的句子库里没有合适的词库,计划新建句子库《酒店情景对话》
  • 在其中新建单元「Unit 1 入住酒店」
  • 预览:I have a reservation under the name Gao. = 我用高这个名字订了房间。……

没问题的话回复「执行」,我就写入;如果想放到其他词库/单元,告诉我即可。

确认规则

  • 用户回复「执行」「可以」「好」等明确同意 → 按方案执行。
  • 用户指出要放入某个已有词库/单元 → 调整方案(必要时重新调用 unit.list 确认目标),简述调整后方案再执行。
  • 用户未确认前,不得调用 book.create / unit.create / word.import / word.add
  • 即使上下文已经聊到了明确合适的词库,也仍需用简短方案确认「放入该库的哪个单元、是否新建单元」,再执行。

第四步:执行与汇报

用户确认后按方案执行。优先使用一键导入接口 word.import:一次调用即可自动完成「找到或创建词库 → 找到或创建单元 → 写入全部内容」,不需要逐个调用 book.create / unit.create / word.add

仅当需要向多个已存在的不同词库分别追加内容时,才使用 word.add 分步调用。

完成后必须向用户汇报:添加了多少条、跳过了多少条重复、最终写入了哪个词库哪些单元,并提醒用户回到 WordMomo 开始学习。


一键导入(推荐)

POST /ai/invoke
method: word.import

一次调用完成整批导入:按词库名称匹配现有词库(同名同类型则直接使用,否则自动创建),再按单元名称匹配或创建单元,最后把内容写入对应单元。

请求体

json
{
  "method": "word.import",
  "data": {
    "bookName": "酒店情景对话",
    "bookType": "sentencelib",
    "units": [
      {
        "unitName": "Unit 1 入住酒店",
        "items": [
          { "word": "I have a reservation under the name Gao.", "translate": "我用高这个名字订了房间。" },
          { "word": "Could I check in now?", "translate": "我现在可以办理入住吗?" }
        ]
      },
      {
        "unitName": "Unit 2 客房服务",
        "items": [
          { "word": "Could I have a wake-up call at 7?", "translate": "能安排早上7点的叫醒服务吗?" }
        ]
      }
    ]
  }
}

data 参数:

字段必填说明
bookName词库名称。已存在同名同类型词库时直接复用,不会重复创建
bookType词库类型:wordlib=单词库、sentencelib=句子库,按第一步的内容形态判断结果填写
units单元数组,至少一个,见下表

units 数组每项:

字段必填说明
unitName单元名称。已存在同名单元时直接复用,内容追加到该单元
items词汇数组,字段与下方 word.additems 完全一致(word/translate 必填,symbol 可选)

请求示例

bash
curl -X POST http://127.0.0.1:27531/ai/invoke \
  -H "Content-Type: application/json; charset=utf-8" \
  -d "{\"method\":\"word.import\",\"data\":{\"bookName\":\"酒店情景对话\",\"bookType\":\"sentencelib\",\"units\":[{\"unitName\":\"Unit 1 入住酒店\",\"items\":[{\"word\":\"Could I check in now?\",\"translate\":\"我现在可以办理入住吗?\"}]}]}}"

响应示例

json
{
  "success": true,
  "data": {
    "bookId": "c3d9e4b1a2f3",
    "bookName": "酒店情景对话",
    "bookCreated": true,
    "totalAdded": 3,
    "totalSkipped": 0,
    "units": [
      { "unitId": "u5f6e7d8c9b0a", "unitName": "Unit 1 入住酒店", "unitCreated": true, "added": 2, "skipped": 0 },
      { "unitId": "u1b2c3d4e5f6", "unitName": "Unit 2 客房服务", "unitCreated": true, "added": 1, "skipped": 0 }
    ]
  }
}

响应字段

字段说明
bookId目标词库 ID
bookName目标词库名称
bookCreated本次是否新建了词库
totalAdded全部单元合计新增条数
totalSkipped全部单元合计因重复跳过的条数
units每个单元的执行明细:unitIdunitNameunitCreatedaddedskipped

添加项目(单步追加)

POST /ai/invoke
method: word.add

向指定词库的指定单元批量添加词汇(单词/词组或句子)。目标库是单词库还是句子库由 bookId 对应的词库类型决定,接口本身不需要你区分。

请求体

json
{
  "method": "word.add",
  "data": {
    "bookId": "c3d9e4b1a2f3",
    "unitId": "u5f6e7d8c9b0a",
    "items": [
      { "word": "reservation", "translate": "预订", "symbol": "/ˌrezərˈveɪʃn/" },
      { "word": "check in", "translate": "办理入住" }
    ]
  }
}

data 参数:

字段必填说明
bookId词库 ID,来自 book.listbook.create
unitId单元 ID,来自 unit.listunit.create
items词汇数组,见下表

items 数组每项:

字段必填说明
word内容,单词、词组或句子
translate译文。必须由你补全,使用用户的母语(通常为简体中文),简洁准确
symbol音标。放入单词库的单词建议提供,词组和句子可不提供

请求示例

bash
curl -X POST http://127.0.0.1:27531/ai/invoke \
  -H "Content-Type: application/json; charset=utf-8" \
  -d "{\"method\":\"word.add\",\"data\":{\"bookId\":\"c3d9e4b1a2f3\",\"unitId\":\"u5f6e7d8c9b0a\",\"items\":[{\"word\":\"reservation\",\"translate\":\"预订\",\"symbol\":\"/ˌrezərˈveɪʃn/\"},{\"word\":\"check in\",\"translate\":\"办理入住\"}]}}"

响应示例

json
{
  "success": true,
  "data": {
    "added": 2,
    "skipped": 1
  }
}

响应字段

字段说明
added实际新增的条数
skipped因与库中已有内容重复而跳过的条数

备注

  • 单次建议不超过 100 条,内容较多时分批调用。
  • 单词库有内置查重(按词库设置),重复内容会计入 skipped 而不会重复添加。

行为准则(请遵守)

  • 先方案后执行:任何写入操作前必须先出具预执行方案并获得用户确认。
  • 先判断再放库:单词/词组绝不放入句子库,句子绝不放入单词库。
  • 建库先询问:没有合适词库时,先征得用户同意再创建,不要静默创建。
  • 译文必补全translate 不能为空,由你根据上下文补全。
  • 结果必汇报:每次添加后向用户说明结果(added / skipped / 目标词库与单元)。
  • 不猜 IDbookIdunitId 只能来自接口返回,不要凭空构造。