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

如何让聊天机器人响应特定问题时每次重新执行随机函数?

问题原因

你当前的代码在定义bevarages_category_intent和entrees_category_intent字典时,会立即执行get_products_by_category函数,把随机生成的结果拼接成字符串存入responses列表。这个过程只在字典初始化时发生一次,后续用户重复提问时,只会返回预先生成好的固定结果,不会重新调用函数生成新的随机内容。

解决方案

要让函数在用户每次触发对应意图时才执行,需要把响应生成逻辑延迟到意图匹配之后,而不是提前计算好结果存在字典里。以下是两种可行的修改方式:

方式一:用可调用函数存储响应逻辑

修改意图配置,把responses换成存储一个lambda函数,在匹配到意图时再调用该函数生成响应:

beverages_category_intent = {
    "tag": "beverages category",
    "patterns": [
        "what drinks are available",
        "what drinks do you have",
        "i'm thirsty"
    ],
    # 用lambda包裹响应生成逻辑,延迟执行
    "response_func": lambda: "Here are some suggestions: " + ', '.join(get_products_by_category("Beverages"))
}

entrees_category_intent = {
    "tag": "entrees category",
    "patterns": [
        "what are the main dishes",
        "what are some main dishes you recommend",
        "what kind of entrees do you have",
        "i'm hungry"
    ],
    "response_func": lambda: "Here are some suggestions: " + ', '.join(get_products_by_category("Entrees"))
}

在聊天机器人核心逻辑中,匹配到对应意图后调用函数生成实时响应:

# 假设matched_intent是匹配到的意图字典
response = matched_intent["response_func"]()
# 将response返回给用户

方式二:用模板+分类标记延迟生成

如果你的聊天框架不支持存储函数,可以给意图添加分类标记和响应模板,匹配后动态生成结果:

beverages_category_intent = {
    "tag": "beverages category",
    "patterns": [
        "what drinks are available",
        "what drinks do you have",
        "i'm thirsty"
    ],
    "response_template": "Here are some suggestions: {products}",
    "target_category": "Beverages"
}

entrees_category_intent = {
    "tag": "entrees category",
    "patterns": [
        "what are the main dishes",
        "what are some main dishes you recommend",
        "what kind of entrees do you have",
        "i'm hungry"
    ],
    "response_template": "Here are some suggestions: {products}",
    "target_category": "Entrees"
}

匹配到意图后,调用函数生成随机产品并填充模板:

# 假设matched_intent是匹配到的意图字典
category = matched_intent["target_category"]
random_products = get_products_by_category(category)
response = matched_intent["response_template"].format(products=', '.join(random_products))
# 返回response给用户
补充说明

你之前尝试的lambda表达式没生效,大概率是因为没有在响应时调用它——如果只是把lambda放进responses列表但不执行(不加()),它只会是一个函数对象,不会生成实际的响应文本。

内容的提问来源于stack exchange,提问作者Yara Nassar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 04:35:12