用户对微信机器人说"帮我告诉张三明天开会",AI模型能听懂意思,但 Eyun 的 sendText 接口要的是结构化参数 {wId, toUser, content}。自然语言和接口参数之间隔着一道"翻译",这道翻译怎么做,直接决定了机器人能处理多复杂的话。本文不讲AI怎么理解语义,专讲中间那层"转换层"——自然语言怎么变成接口能用的参数。按转换方式不同,分3种模式,每种对应不同复杂度的用户表达。

模式1:模板填充模式——固定槽位填值

转换方式:AI从自然语言里提取关键实体 → 填进预设模板的槽位 → 输出结构化参数。

示例:用户说"帮我告诉张三明天下午3点开会" → AI提取 {recipient:张三, time:明天下午3点, event:开会} → 套模板"请{recipient}于{time}参加{event}" → content拼成"请张三于明天下午3点参加开会" → toUser查映射表得张三的wxid → 调 Eyun 的 sendText 发送。按照 Eyun 开发文档的规范,sendText 需要 wId、toUser、content 三个必填参数。

大白话:用户说一句自然话 → AI抽出"谁、什么时候、什么事" → 套进模板拼成标准消息 → 发给对的人。模板填值不依赖AI的自由生成,只依赖AI的实体识别能力,稳定性最高。

模式2:字段提取模式——AI直接抠字段

转换方式:AI做实体识别 → 直接映射到接口参数 → 不需要模板,AI生成的文本就是 content。

示例:用户说"给张三发一段产品介绍" → AI提取 {toUser:张三的wxid, intent:产品介绍} → AI调产品库生成产品介绍文本 → content=AI生成的文本 → sendText 发送。Eyun API的 sendText 是字段提取模式的执行端,接口规范见 Eyun 开发文档

大白话:AI从用户的话里直接抠出接口需要的字段——"发给谁"变 toUser、"发什么"由AI自己生成变 content。和模板填充的区别是:模板填充的 content 是拼出来的,字段提取的 content 是AI写出来的。

模式3:语义映射模式——AI规划多接口调用

转换方式:自然语言的语义不一定一对一映射到单个接口 → AI判断需要多个接口协同 → 输出接口调用计划 [{api:sendText, params:{...}}, {api:sendImage, params:{...}}] → 逐个执行。

示例:用户说"给张三发新品资料" → AI规划:先 sendText 发文字介绍 → 再 sendImage 发产品图 → 最后 sendFile 发详细手册 → 3个接口按序调用。Eyun 的 sendText/sendImage/sendFile 都可被AI规划调用,形成完整的接口调用链。

大白话:用户一句话可能对应多个接口调用——AI不光提取参数,还决定"调几个接口、什么顺序"。这是3种模式里最灵活的,但调用顺序要AI自己排,错了就乱套。

三种转换模式对比

转换模式

转换方式

复杂度

适用表达

AI角色

Eyun接口

大白话

模板填充

提实体→填槽位→拼content

"通知X于Y做Z"

实体识别

sendText

抽槽位套模板

字段提取

识别实体→直接映射字段

"给X发一段YY"

实体识别+内容生成

sendText

抠字段AI写内容

语义映射

理解意图→规划调用序列

"给X发完整资料"

意图理解+接口编排

sendText+sendImage+sendFile

AI排接口调用顺序

转换层框架代码

def convert(natural_text, wId, user_map):
    """自然语言 → Eyun接口参数,3种模式统一转换器"""
    intent = ai_classify(natural_text)          # AI判断走哪种模式

    if intent == "template":                    # 模式1:模板填充
        slots = ai_extract_entities(natural_text)        # {recipient,time,event}
        content = TPL_NOTIFY.format(**slots)              # 套模板拼content
        toUser = user_map[slots["recipient"]]             # 查wxid映射
        return [{"api": "sendText", "params": {"wId": wId, "toUser": toUser, "content": content}}]

    if intent == "field":                       # 模式2:字段提取
        fields = ai_extract_fields(natural_text)         # {toUser,intent}
        content = ai_generate(fields["intent"])          # AI生成content
        return [{"api": "sendText", "params": {"wId": wId, "toUser": fields["toUser"], "content": content}}]

    if intent == "semantic":                    # 模式3:语义映射
        return ai_plan_calls(natural_text, wId, user_map)  # [{api,params},...] 多接口

选型建议

3种模式按"转换复杂度递增"排列:模板填充最简单(固定槽位填值)、字段提取中等(AI自由生成内容)、语义映射最复杂(AI规划多接口调用)。选型看用户表达的特征——结构化指令用模板填充("通知X于Y做Z"这类槽位固定的),内容生成用字段提取("给X发一段YY"这类要AI写内容的),复杂需求用语义映射("给X发完整资料"这类一句话对应多接口的)。3种模式的输出最终都落到 Eyun 接口的参数上——转换层做的是"语言到参数"的翻译,翻译质量决定机器人能听懂多复杂的话。落地时建议先从模板填充上线验证流程,再逐步引入字段提取和语义映射,接口参数规范见 Eyun 开发文档

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐