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

在Rasa Core调用Apixu API遇1003错误,请求协助解析

解决Rasa Core中调用Apixu API时的Parameter q is missing错误

这个错误(错误码1003)的根源非常清晰:你在调用Apixu天气API时,没有传递必填的q参数——这个参数是用来指定要查询天气的城市/地点的。咱们一步步排查解决:

1. 检查action_weather动作代码的参数传递

首先看你的自定义动作代码,确保你正确从Rasa的槽位中获取了地点信息,并且在调用API时把这个值传给q参数。比如正确的代码结构应该是这样的:

from typing import Dict, Text, List, Any
from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from apixu.client import ApixuClient, ApixuException

class ActionWeather(Action):
    def name(self) -> Text:
        return "action_weather"

    def run(self, dispatcher: CollectingDispatcher,
            tracker: Tracker,
            domain: Dict[Text, Any]) -> List[Dict[Text, Any]]:
        
        # 从槽位获取地点信息,这里假设你的槽位名叫location
        location = tracker.get_slot("location")
        
        # 关键:先判断地点是否存在,不存在就提示用户补充
        if not location:
            dispatcher.utter_message(text="麻烦告诉我你想查询哪个地点的天气呀?")
            return []
        
        try:
            # 初始化Apixu客户端
            api_key = "你的Apixu API密钥"
            client = ApixuClient(api_key)
            
            # 调用API时必须传入q参数,值为获取到的location
            current_weather = client.getCurrentWeather(q=location)
            
            # 处理天气数据并回复用户(示例)
            temp_c = current_weather['current']['temp_c']
            dispatcher.utter_message(text=f"{location}当前气温是{temp_c}℃")
            
        except ApixuException as e:
            # 捕获API异常,方便调试
            dispatcher.utter_message(text=f"查询天气时出错了:{str(e)}")
        
        return []

重点要注意:如果location槽位为空,直接调用API就会触发Parameter q is missing错误,所以一定要先做非空判断。

2. 确认Domain文件中的槽位配置

打开你的domain.yml,检查是否正确定义了location槽位,并且设置了正确的映射规则,确保NLU识别到的地点实体能填充到这个槽位里。示例配置:

slots:
  location:
    type: text
    influence_conversation: true
    mappings:
      - type: from_entity
        entity: location
        intent: ask_weather  # 可选:限定只有ask_weather意图才填充这个槽位

3. 验证NLU的实体识别能力

检查你的NLU训练数据(比如nlu.yml),确保包含足够多的带location实体的样本,让模型能正确识别地点:

nlu:
- intent: ask_weather
  examples: |
    - [北京]的天气怎么样
    - [上海]今天气温多少
    - 告诉我[广州]的天气
    - [深圳]明天会下雨吗
    - 杭州的[天气]情况

你可以用rasa test nlu命令测试NLU模型的识别效果,看地点实体是否能被正确标注。

4. 测试槽位填充是否正常

启动rasa shell,和机器人对话,比如输入“北京的天气怎么样”,然后输入/slot命令查看location槽位是否被正确填充。如果槽位是空的,那问题出在NLU识别或者槽位映射上;如果槽位有值但还是报错,就要回到动作代码检查参数传递是否有误。

最后提个常见小坑:别把槽位名称拼错了!比如代码里写的是tracker.get_slot("loc"),但domain里定义的是location,这种低级错误很容易导致参数缺失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:31:07