salebill_tools.py 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. from typing import Optional
  2. from langchain.tools import tool
  3. from .base_tool import call_csharp_api, get_tool_prompt
  4. def get_saletask_detail_config():
  5. """get_saletask_detail 工具的默认配置"""
  6. return {
  7. "get_saletask_detail": {
  8. "基础描述": "获取指定销售订单的进度",
  9. "入参说明": {
  10. "backend_url": "后端API地址",
  11. "token": "认证令牌",
  12. "cusname": "客户名称 或 客户编码, 支持模糊查询",
  13. "taskcode": "销售订单编码, 支持模糊查询",
  14. "firstdate": "开始日期,格式YYYY-MM-DD,如果不指定,传None",
  15. "lastdate": "结束日期,格式YYYY-MM-DD 23:59:59,如果不指定,传None",
  16. },
  17. "返回值说明": {
  18. "格式": "返回多行字符串,每行代表一个销售订单,字段以逗号分隔。每行包含:taskcode(销售订单号)、cusname(客户名称)、taskdate(销售订单日期)、flag_str(单据状态)、mx(JSON字符串,包含物料明细列表)",
  19. "mx字段结构": "mx字段是一个JSON字符串列表,每个元素包含:mtrlcode(物料代码)、mtrlname(物料名称)、mtrlmode(规格型号)、unit(单位)、saleqty(销售数量)、consignedqty(发货数量)",
  20. },
  21. "输出格式要求": [
  22. "1. 将返回的多行数据按行拆分为独立的销售订单",
  23. "2. 为每个销售订单按以下格式输出:",
  24. " a) 表头信息(以文字描述输出):",
  25. " 销售订单:[taskcode] | 状态:[flag_str]",
  26. " 客户:[cusname] | 下单日期:[taskdate]",
  27. " b) 明细表格(以Markdown表格输出)",
  28. "3. 不同销售订单之间要有多个空行分隔",
  29. "4. 如果工具返回警告或错误,要直接输出错误信息,不进行格式化",
  30. ],
  31. "使用示例": "用户输入:'查询客户A的订单进度' -> (只说订单,默认是销售订单)系统调用此工具获取客户A的销售订单进度,如果没有明确日期范围,传None -> 返回结果后,按上述格式要求格式化输出",
  32. }
  33. }
  34. tool_description = get_tool_prompt("get_saletask_detail", get_saletask_detail_config())
  35. def get_saletask_detail_func(
  36. backend_url: str,
  37. token: str,
  38. cusname: str,
  39. taskcode: str,
  40. firstdate: Optional[str] = None,
  41. lastdate: Optional[str] = None,
  42. ) -> str:
  43. """实际的函数实现"""
  44. print(f"正在获取客户{cusname}的销售订单{taskcode}的进度")
  45. # 构建参数字典,只包含非 None 的参数
  46. params = {
  47. "arg_cusname": cusname,
  48. "arg_taskcode": taskcode,
  49. }
  50. if firstdate is not None:
  51. params["arg_firstdate"] = firstdate
  52. if lastdate is not None:
  53. params["arg_lastdate"] = lastdate
  54. return call_csharp_api(
  55. backend_url,
  56. token,
  57. "sale_bill_data_ai",
  58. "get_saletask_detail",
  59. params,
  60. )
  61. get_saletask_detail_func.__doc__ = tool_description
  62. get_saletask_detail = tool(get_saletask_detail_func)