from typing import Optional from langchain.tools import tool from .base_tool import call_csharp_api, get_tool_prompt def get_saletask_detail_config(): """get_saletask_detail 工具的默认配置""" return { "get_saletask_detail": { "基础描述": "获取指定销售订单的进度", "入参说明": { "backend_url": "后端API地址", "token": "认证令牌", "cusname": "客户名称 或 客户编码, 支持模糊查询", "taskcode": "销售订单编码, 支持模糊查询", "firstdate": "开始日期,格式YYYY-MM-DD,如果不指定,传None", "lastdate": "结束日期,格式YYYY-MM-DD 23:59:59,如果不指定,传None", }, "返回值说明": { "格式": "返回多行字符串,每行代表一个销售订单,字段以逗号分隔。每行包含:taskcode(销售订单号)、cusname(客户名称)、taskdate(销售订单日期)、flag_str(单据状态)、mx(JSON字符串,包含物料明细列表)", "mx字段结构": "mx字段是一个JSON字符串列表,每个元素包含:mtrlcode(物料代码)、mtrlname(物料名称)、mtrlmode(规格型号)、unit(单位)、saleqty(销售数量)、consignedqty(发货数量)", }, "输出格式要求": [ "1. 将返回的多行数据按行拆分为独立的销售订单", "2. 为每个销售订单按以下格式输出:", " a) 表头信息(以文字描述输出):", " 销售订单:[taskcode] | 状态:[flag_str]", " 客户:[cusname] | 下单日期:[taskdate]", " b) 明细表格(以Markdown表格输出)", "3. 不同销售订单之间要有多个空行分隔", "4. 如果工具返回警告或错误,要直接输出错误信息,不进行格式化", ], "使用示例": "用户输入:'查询客户A的订单进度' -> (只说订单,默认是销售订单)系统调用此工具获取客户A的销售订单进度,如果没有明确日期范围,传None -> 返回结果后,按上述格式要求格式化输出", } } tool_description = get_tool_prompt("get_saletask_detail", get_saletask_detail_config()) def get_saletask_detail_func( backend_url: str, token: str, cusname: str, taskcode: str, firstdate: Optional[str] = None, lastdate: Optional[str] = None, ) -> str: """实际的函数实现""" print(f"正在获取客户{cusname}的销售订单{taskcode}的进度") # 构建参数字典,只包含非 None 的参数 params = { "arg_cusname": cusname, "arg_taskcode": taskcode, } if firstdate is not None: params["arg_firstdate"] = firstdate if lastdate is not None: params["arg_lastdate"] = lastdate return call_csharp_api( backend_url, token, "sale_bill_data_ai", "get_saletask_detail", params, ) get_saletask_detail_func.__doc__ = tool_description get_saletask_detail = tool(get_saletask_detail_func)