You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bixby中为Yes/No绑定多Intent及代码处理与参数传递

这个问题其实戳中了对话式AI里很常见的「上下文关联」痛点——毕竟Yes/No本身是完全无歧义的回答,必须绑定之前的提问语境才能生效。我来给你一步步拆解清楚怎么实现:

核心思路:用会话上下文追踪待确认的Intent

用户的Yes/No回答完全依赖你之前发起的提问,所以关键是:在你向用户抛出确认问题(比如“是否想了解波士顿的天气?”)时,把当前「待触发的Intent」和相关参数(比如波士顿)保存到会话状态中,等用户回复时再匹配关联。

具体实现步骤

1. 先做好会话状态的存储

你需要一个会话存储(可以是内存对象、数据库、Redis缓存等),用来记录每个用户的对话状态,核心字段包括:

  • pending_intent:当前等待用户确认的Intent(比如WeatherIntent或NewsIntent)
  • pending_params:和待确认Intent绑定的参数(比如天气的城市、新闻的分类)

举个简单的内存存储示例:

# 模拟会话存储,key是用户ID,value是会话状态
session_store = {}

# 初始化用户会话状态的辅助函数
def init_session(user_id):
    if user_id not in session_store:
        session_store[user_id] = {
            "pending_intent": None,
            "pending_params": {}
        }

2. 发起确认提问时,更新会话状态

当你向用户发起确认请求时,同步更新会话状态,把待确认的Intent和参数存进去:

# 当你问用户「是否想了解波士顿的天气?」时
def ask_weather_confirmation(user_id):
    init_session(user_id)
    # 更新会话状态:标记待确认的是WeatherIntent,参数是波士顿
    session_store[user_id]["pending_intent"] = "WeatherIntent"
    session_store[user_id]["pending_params"] = {"city": "波士顿"}
    return "是否想了解波士顿的天气?"

# 当你问用户「是否想了解体育新闻?」时
def ask_news_confirmation(user_id):
    init_session(user_id)
    session_store[user_id]["pending_intent"] = "NewsIntent"
    session_store[user_id]["pending_params"] = {"category": "体育"}
    return "是否想了解体育新闻?"

3. 处理用户的Yes/No回复

当用户回复Yes/No时,先读取会话状态里的pending_intent,以此判断Yes对应哪个Intent,同时传递预存的参数:

def handle_user_reply(user_id, reply):
    init_session(user_id)
    current_state = session_store[user_id]
    pending_intent = current_state["pending_intent"]
    pending_params = current_state["pending_params"]

    # 处理Yes的情况
    if reply.lower() in ["yes", "是"]:
        if not pending_intent:
            return "抱歉,我不太清楚你指的是什么,可以先告诉我你想了解什么吗?"
        
        # 根据待确认Intent分发处理逻辑
        if pending_intent == "WeatherIntent":
            result = handle_weather(pending_params)
        elif pending_intent == "NewsIntent":
            result = handle_news(pending_params)
        else:
            result = "抱歉,我暂时无法处理这个请求"
        
        # 处理完后清空待确认状态,避免后续混淆
        clear_pending_state(user_id)
        return result
    
    # 处理No的情况
    elif reply.lower() in ["no", "否"]:
        clear_pending_state(user_id)
        return "好的,那你想了解其他内容吗?比如天气或者新闻?"
    
    # 非Yes/No回复,按正常Intent识别流程处理
    else:
        return handle_normal_intent(reply)

# 辅助函数:清空待确认状态
def clear_pending_state(user_id):
    session_store[user_id]["pending_intent"] = None
    session_store[user_id]["pending_params"] = {}

# WeatherIntent的具体处理函数(接收参数)
def handle_weather(params):
    city = params.get("city")
    return f"好的,{city}当前气温22℃,晴转多云,适合外出。"

# NewsIntent的具体处理函数(接收参数)
def handle_news(params):
    category = params.get("category")
    return f"这是最新的{category}新闻:XX队以3-1击败对手,夺得本赛季总冠军!"

4. 关键注意事项

  • 会话状态要持久化:如果是多用户场景,不能只用内存存储,要存在数据库或缓存里,避免服务重启后丢失状态
  • 及时清空待确认状态:处理完Yes/No后一定要重置pending_intent和pending_params,否则下一次用户的Yes会匹配到旧的Intent
  • 处理冲突场景:如果用户在待确认状态下发起新的请求(比如还没回答天气的Yes/No,就问新闻),可以选择覆盖旧的待确认状态,或者提示用户先完成当前的确认

内容的提问来源于stack exchange,提问作者Rahul Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:08:32