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

如何让STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION代理获取缺失预约工具参数并格式化

解决方案

针对你的需求,以下是基于AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION代理的工具定义实现示例,可同时满足自动追问必填参数和自然语言日期转ISO8601格式的要求:

1. 工具定义与必填参数自动询问实现

核心是在工具的描述和参数定义中明确标注必填项,让代理自动识别缺失的参数并发起追问。

from langchain.tools import StructuredTool
from datetime import datetime

def create_appointment(begin: str, topic: str, notes: str = None):
    """创建用户预约
    参数:
        begin: 预约开始时间,**必须为ISO8601格式**(示例:2024-05-20T14:30:00),若用户输入自然语言日期(如"明天"),请自动转换为对应ISO8601格式
        topic: 预约主题,**必填项**
        notes: 预约备注,可选填写
    """
    # 此处替换为实际创建预约的业务逻辑
    return f"预约创建成功:主题「{topic}」,时间「{begin}」"

# 封装为结构化工具
appointment_tool = StructuredTool.from_function(
    func=create_appointment,
    name="CreateAppointment",
    description="用于创建用户预约,必填参数为begin(ISO8601格式时间)和topic(预约主题),可选参数为notes(预约备注)"
)

初始化代理后,当用户发送「我想预约」时,代理会自动追问缺失的必填参数,示例输出:

请提供预约的开始时间(ISO8601格式)和预约主题。

2. 自然语言日期转ISO8601格式处理

通过在工具参数描述中明确要求LLM转换格式,同时可在工具函数内加入兜底解析逻辑,确保格式合规:

from dateutil import parser
from dateutil.relativedelta import relativedelta

def create_appointment(begin: str, topic: str, notes: str = None):
    """创建用户预约
    参数:
        begin: 预约开始时间,支持自然语言(如"明天下午2点")或ISO8601格式,最终统一转换为ISO8601格式存储
        topic: 预约主题,必填项
        notes: 预约备注,可选填写
    """
    # 兜底解析自然语言日期为ISO8601格式
    try:
        parsed_date = parser.parse(begin, fuzzy=True)
        # 处理相对时间(如"明天""下周")
        if "tomorrow" in begin.lower():
            parsed_date = datetime.now() + relativedelta(days=1)
        elif "next week" in begin.lower():
            parsed_date = datetime.now() + relativedelta(weeks=1)
        begin_iso = parsed_date.isoformat()
    except Exception as e:
        raise ValueError(f"无法解析时间格式,请提供ISO8601格式或清晰的自然语言时间(如'明天下午2点')")
    
    # 此处替换为实际创建预约的业务逻辑
    return f"预约创建成功:主题「{topic}」,时间「{begin_iso}」"

关键实现要点

  • 必填参数明确标注:在工具描述和参数注释中用加粗或直接标注「必填项」,让代理能识别缺失的参数并自动追问。
  • 格式要求前置说明:在参数描述中清晰告知LLM需要输出ISO8601格式,同时提示处理自然语言到ISO格式的转换。
  • 兜底逻辑保障:在工具函数内加入日期解析逻辑,避免LLM转换失败导致的格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 00:55:16