money_tools.py 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. from langchain.tools import tool
  2. from .base_tool import call_csharp_api, get_tool_prompt
  3. # 收款查询工具
  4. def get_cusamt_default_config():
  5. """get_cusamt 工具的默认配置"""
  6. return {
  7. "get_cusamt": {
  8. "基础描述": "获取指定时间范围的收款数据,可指定客户、汇总方式,你根据时间跨度决定最佳的汇总方式",
  9. "入参说明": {
  10. "backend_url": "后端API地址",
  11. "token": "认证令牌",
  12. "cusname": "客户名称 或 客户编码, 支持模糊查询,留空即查询所有客户",
  13. "firstdate": "开始日期,格式YYYY-MM-DD",
  14. "lastdate": "结束日期,格式YYYY-MM-DD 23:59:59",
  15. "grouptype": "汇总方式,数值, 0:按天;1:按月;2:按年",
  16. },
  17. "返回值说明": {
  18. "格式": "一个包含客户收款数据的字符串",
  19. "字段含义": "custname:客户名称, viewdate:收款日期, amt:收款金额,currency:币种,kind:收款类型",
  20. },
  21. "输出格式要求": ["以表格输出"],
  22. "使用示例": "用户输入:'查询客户A,2025年的收款情况' -> 系统调用此工具获取客户A在2025年1月至12月的收款数据",
  23. }
  24. }
  25. tool_description = get_tool_prompt("get_cusamt", get_cusamt_default_config())
  26. def get_cusamt_func(
  27. backend_url: str,
  28. token: str,
  29. cusname: str,
  30. firstdate: str,
  31. lastdate: str,
  32. grouptype: str,
  33. ) -> str:
  34. """实际的函数实现"""
  35. print(
  36. f"正在获取客户{cusname}在{firstdate}至{lastdate}的收款数据,汇总方式{grouptype}"
  37. )
  38. return call_csharp_api(
  39. backend_url,
  40. token,
  41. "money_data_ai",
  42. "get_cusamt",
  43. {
  44. "arg_cusname": cusname,
  45. "arg_firstdate": firstdate,
  46. "arg_lastdate": lastdate,
  47. "grouptype": grouptype,
  48. },
  49. )
  50. get_cusamt_func.__doc__ = tool_description
  51. get_cusamt = tool(get_cusamt_func)
  52. # 客户应收帐查询工具(包含明细信息)
  53. def get_bmsttake_with_mx_default_config():
  54. """get_bmsttake_with_mx 工具的默认配置"""
  55. return {
  56. "get_bmsttake_with_mx": {
  57. "基础描述": "获取指定客户的应收帐数据(含明细信息)",
  58. "入参说明": {
  59. "backend_url": "后端API地址",
  60. "token": "认证令牌",
  61. "cusname": "客户名称 或 客户编码, 必填",
  62. },
  63. "返回值说明": {
  64. "格式": "一个包含客户应收帐数据的字符串",
  65. "字段含义": "custname:客户名称, cus_balcamt:应收结余, currency:币种,scname:分部,billcode:单据编号,takedate:发生日期,oriamt:单据金额,msttakeamt:应收金额,takeamt:已收金额,balcamt:应收结余,balcamt:未收金额",
  66. },
  67. "输出格式要求": [
  68. "以表格输出",
  69. "custname,cus_balcamt,currency,scname是汇总信息,不需要在表格中显示",
  70. "其余是明细信息,在表格中显示",
  71. "按custname,currency,scname区分不同表格",
  72. "无需进行任何汇总计算,cus_balcamt就是客户对应币种的应收结余,直接显示即可",
  73. "默认不显示明细信息的表格,除非客户要求详细内容",
  74. ],
  75. "使用示例": "用户输入:'查询客户A的应收帐详细情况 或 详细介绍客户A还有多少单未付款' -> 系统调用此工具获取客户A的应收帐含明细数据",
  76. }
  77. }
  78. tool_description_get_bmsttake_mx = get_tool_prompt(
  79. "get_bmsttake_with_mx", get_bmsttake_with_mx_default_config()
  80. )
  81. def get_bmsttake_with_mx_func(
  82. backend_url: str,
  83. token: str,
  84. cusname: str,
  85. ) -> str:
  86. """实际的函数实现"""
  87. print(f"正在获取客户{cusname}应收帐数据")
  88. return call_csharp_api(
  89. backend_url,
  90. token,
  91. "money_data_ai",
  92. "get_bmsttake_with_mx",
  93. {"arg_cusname": cusname},
  94. )
  95. get_bmsttake_with_mx_func.__doc__ = tool_description_get_bmsttake_mx
  96. get_bmsttake_with_mx = tool(get_bmsttake_with_mx_func)
  97. # 客户应收帐查询工具(快速,不含明细,可不指定客户)
  98. def get_bmsttake_quick_default_config():
  99. """get_bmsttake_quick 工具的默认配置"""
  100. return {
  101. "get_bmsttake_quick": {
  102. "基础描述": "获取应收帐数据(快速,不含明细,可不指定客户)",
  103. "入参说明": {
  104. "backend_url": "后端API地址",
  105. "token": "认证令牌",
  106. "cusname": "客户名称 或 客户编码,如果不指定,则返回所有客户应收帐数据",
  107. },
  108. "返回值说明": {
  109. "格式": "一个包含客户应收帐数据的字符串",
  110. "字段含义": "custname:客户名称, cus_balcamt:应收结余, currency:币种,scname:分部",
  111. },
  112. "输出格式要求": [
  113. "以表格输出",
  114. "custname,cus_balcamt,currency,scname是汇总信息,不需要在表格中显示",
  115. ],
  116. "使用示例": "用户输入:'查询客户A的应收帐情况 或 客户A还有多少款未付 或 查询待收款情况' -> 系统调用此工具获取应收帐数据",
  117. }
  118. }
  119. tool_description_get_bmsttake_quick = get_tool_prompt(
  120. "get_bmsttake_quick", get_bmsttake_quick_default_config()
  121. )
  122. def get_bmsttake_quick_func(
  123. backend_url: str,
  124. token: str,
  125. cusname: str,
  126. ) -> str:
  127. """实际的函数实现"""
  128. print(f"正在获取客户{cusname}应收帐数据")
  129. return call_csharp_api(
  130. backend_url,
  131. token,
  132. "money_data_ai",
  133. "get_bmsttake_quick",
  134. {"arg_cusname": cusname},
  135. )
  136. get_bmsttake_quick_func.__doc__ = tool_description_get_bmsttake_quick
  137. get_bmsttake_quick = tool(get_bmsttake_quick_func)