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

NeMo-Guardrails中‘user_query’未找到错误的原因与解决方法

问题解答:Action 'user_query' not found错误处理

一、为何需要定义user_query参数

你使用的应该是LangChain Rails这类结构化对话框架,这类框架的核心机制是将用户请求映射到预定义的**action(动作)**上。错误提示说明你的框架配置中,没有把用户的提问关联到对应的处理逻辑——框架默认尝试调用名为user_query的action来处理用户消息,但这个动作并未被定义,所以抛出了找不到的错误。

简单来说,这类框架不是直接让模型生成自由回复,而是要求你明确指定如何处理用户的各类查询,user_query就是框架期望你定义的、用于处理普通用户提问的动作标识。

二、具体定义方法

你需要先编写一个处理用户查询的函数,将其注册为名为user_query的action,再通过框架调用。以下是修改后的完整代码:

import nest_asyncio
from langchain_core.tools import tool
from langchain.agents import AgentExecutor, create_structured_chat_agent
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

# 1. 定义处理用户查询的action函数
@tool
def user_query(query: str) -> str:
    """处理用户的普通查询,生成对应回复"""
    # 这里可直接调用OpenAI模型生成回复,或添加自定义逻辑
    llm = ChatOpenAI(model="gpt-3.5-turbo")
    return llm.invoke(f"用户提问:{query}").content

# 2. 设置prompt和agent
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个助手,负责处理用户的各种查询。"),
    ("user", "{input}"),
    ("agent_scratchpad", "{agent_scratchpad}")
])

llm = ChatOpenAI(model="gpt-3.5-turbo")
agent = create_structured_chat_agent(llm, [user_query], prompt)
agent_executor = AgentExecutor(agent=agent, tools=[user_query], verbose=True)

# 3. 应用异步补丁并执行查询
nest_asyncio.apply()
new_message = agent_executor.invoke({"input": "Hello! What can you do for me?"})
print(new_message)

关键说明

  • 用@tool装饰器标记函数,将其注册为框架可识别的action,函数名user_query必须与框架期望的动作名称一致。
  • 函数内部可以直接调用OpenAI模型生成回复,也可以加入自定义业务逻辑。
  • 最后通过AgentExecutor执行用户查询,替代原来直接调用rails.generate的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:15:08