from langchain.tools import tool from .base_tool import call_csharp_api, get_tool_prompt from typing import Optional def get_sale_amt_default_config(): """get_sale_amt 工具的默认配置""" return { "get_sale_amt": { "基础描述": "获取指定时间范围的销售金额,按月汇总", "入参说明": { "backend_url": "后端API地址", "token": "认证令牌", "funtion_name": "函数名称; get_sale_amt_by_month:按月汇总销售额; get_sale_amt_by_day:按天汇总销售额; get_sale_amt_by_cus_produce:客户产品销售额;get_hot_produce_not_buy:客户未购买过的热销产品;get_first_buy_list:客户指定时间范围内第一次下单的产品", "cusname": "客户名称,只有get_hot_produce_not_buy和get_first_buy_list需要", "firstdate": "开始日期,格式YYYY-MM-DD", "lastdate": "结束日期,格式YYYY-MM-DD 23:59:59", }, "返回值说明": { "格式": "一个包含销售金额的字符串", "字段含义": "sale_month:月份, amt:销售金额,sale_day:日期,produce_name:产品名称,cus_name:客户,saler_name:业务员,mtrlcode:产品编码,taskdate:订单日期,taskcode:订单号,saleqty:销售数量,unit:单位", }, "输出格式要求": [ "重复信息要总结归纳,精简显示", ], "使用示例": "用户输入:'查看2023年1月1日至2023年12月31日的销售金额' -> 获取2023年1月至12月的销售金额;'2024年前5热销产品是哪些?' -> 获取2024年产品销售额;'2025年前10销售额最高的客户是?' -> 获取2025年客户销售额';'客户A还没买过的热销型号有哪些?'->get_hot_produce_not_buy(没有指定时间范围默认近半年);'客户A最近半个月买了哪些产品是首购?'->get_first_buy_list(没有指定时间范围默认近半个月)", } } tool_description = get_tool_prompt("get_sale_amt", get_sale_amt_default_config()) def get_sale_amt_func( backend_url: str, token: str, funtion_name: str, firstdate: str, lastdate: str, cusname: str = "", ) -> str: """实际的函数实现""" print(f"正在获取销售金额{funtion_name},时间范围:{firstdate} 至 {lastdate}") return call_csharp_api( backend_url, token, "sale_data_ai", funtion_name, {"arg_firstdate": firstdate, "arg_lastdate": lastdate, "arg_cusname": cusname}, ) get_sale_amt_func.__doc__ = tool_description get_sale_amt = tool(get_sale_amt_func) # 查询指定客户指定时间范围销售数量最多的产品 def get_saleqty_max_by_cust_config(): """get_saleqty_max_by_cust 工具的默认配置""" return { "get_saleqty_max_by_cust": { "基础描述": "查询指定客户指定时间范围销售数量最多的产品", "入参说明": { "backend_url": "后端API地址", "token": "认证令牌", "cusname": "客户名称", "firstdate": "开始日期,格式YYYY-MM-DD", "lastdate": "结束日期,格式YYYY-MM-DD 23:59:59", }, "返回值说明": { "格式": "一个包含销售数量最多的产品的字符串", "字段含义": "mtrlname:产品名称,noallocqty:销售数量,unit:单位,storagename:仓库名称", }, "输出格式要求": [ "重复信息要总结归纳,精简显示", ], "使用示例": "用户输入:'恒林椅业拿最多是什么型号'", } } tool_description_saleqty_max_by_cust = get_tool_prompt( "get_saleqty_max_by_cust", get_saleqty_max_by_cust_config() ) def get_saleqty_max_by_cust_func( backend_url: str, token: str, cusname: str, firstdate: Optional[str] = None, lastdate: Optional[str] = None, ) -> str: """实际的函数实现""" print(f"正在获取客户{cusname}销售数量最多的产品") return call_csharp_api( backend_url, token, "sale_data_ai", "get_saleqty_max_by_cust", {"arg_cusname": cusname, "arg_firstdate": firstdate, "arg_lastdate": lastdate}, ) get_saleqty_max_by_cust_func.__doc__ = tool_description_saleqty_max_by_cust get_saleqty_max_by_cust = tool(get_saleqty_max_by_cust_func) # 业务员销售排行统计表 def get_saler_ranking_config(): """get_saler_ranking 工具的默认配置""" return { "get_saler_ranking": { "基础描述": "业务员销售排行统计表", "入参说明": { "backend_url": "后端API地址", "token": "认证令牌", "beginmonth": "开始月份,格式YYYYMM", "endmonth": "结束月份,格式YYYYMM", }, "返回值说明": {"格式": "一个包含业务员销售额排名的字符串"}, "输出格式要求": [ "# 业务员销售排行统计表", "##国内", "(输出国内业务员销售额echarts饼图,如果图表功能可用)", "| 业务员 | 销售额 | 占比 |", "| :--- | :--- | :--- |", "| inSaleRankingList.outrep | inSaleRankingList.saleamt | inSaleRankingList.percent |", "", "##国外", "(输出国外业务员销售额echarts饼图,如果图表功能可用)", "| 业务员 | 销售额 | 占比 |", "| :--- | :--- | :--- |", "| outSaleRankingList.outrep | outSaleRankingList.saleamt | outSaleRankingList.percent |", ], "使用示例": [ "2024年业务员销售排名", "帮我看看2024年业务员谁卖得最好", "需要2024年全年的销售数据,按业务员排名", "统计2024年业务员销售业绩", ], } } tool_description_get_saler_ranking = get_tool_prompt( "get_saler_ranking", get_saler_ranking_config() ) def get_saler_ranking_func( backend_url: str, token: str, beginmonth: int, endmonth: int, ) -> str: """实际的函数实现""" print(f"正在获取业务员{beginmonth}至{endmonth}的销售排行") return call_csharp_api( backend_url, token, "AiSaleToolHelper", "GetSaleRankingData", {"beginmonth": beginmonth, "endmonth": endmonth, "rankType": 1}, ) get_saler_ranking_func.__doc__ = tool_description_get_saler_ranking get_saler_ranking = tool(get_saler_ranking_func) # 客户销售排名统计表 def get_cust_ranking_config(): """get_cust_ranking 工具的默认配置""" return { "get_cust_ranking": { "基础描述": "客户销售排名统计表", "入参说明": { "backend_url": "后端API地址", "token": "认证令牌", "beginmonth": "开始月份,格式YYYYMM", "endmonth": "结束月份,格式YYYYMM", }, "返回值说明": {"格式": "一个包含客户销售额排名的字符串"}, "输出格式要求": [ "# 客户销售排名统计表", "##国内", "(输出国内客户销售额echarts饼图,如果图表功能可用)", "| 客户 | 销售额 | 占比 |", "| :--- | :--- | :--- |", "| inSaleRankingList.cusname | inSaleRankingList.saleamt | inSaleRankingList.percent |", "##国外", "(输出国外客户销售额echarts饼图,如果图表功能可用)", "| 客户 | 销售额 | 占比 |", "| :--- | :--- | :--- |", "| outSaleRankingList.cusname | outSaleRankingList.saleamt | outSaleRankingList.percent |", ], "使用示例": [ "2024年我们的主要客户是哪些?", "帮我查一下2024年哪些客户买得最多", "2024客户销售业绩排名", "需要2024年全年的客户销售数据", ], } } tool_description_get_cust_ranking = get_tool_prompt( "get_cust_ranking", get_cust_ranking_config() ) def get_cust_ranking_func( backend_url: str, token: str, beginmonth: int, endmonth: int, ) -> str: """实际的函数实现""" print(f"正在获取客户{beginmonth}至{endmonth}的销售排行") return call_csharp_api( backend_url, token, "AiSaleToolHelper", "GetSaleRankingData", {"beginmonth": beginmonth, "endmonth": endmonth, "rankType": 2}, ) get_cust_ranking_func.__doc__ = tool_description_get_cust_ranking get_cust_ranking = tool(get_cust_ranking_func) # 产品型号销售统计表 def get_mtrl_ranking_config(): """get_mtrl_ranking 工具的默认配置""" return { "get_mtrl_ranking": { "基础描述": "产品型号销售统计表", "入参说明": { "backend_url": "后端API地址", "token": "认证令牌", "beginmonth": "开始月份,格式YYYYMM", "endmonth": "结束月份,格式YYYYMM", }, "返回值说明": {"格式": "一个包含产品型号销售额排名的字符串"}, "输出格式要求": [ "# 产品型号销售排名统计表", "##国内", "(输出国内产品型号销售额echarts饼图,如果图表功能可用)", "| 产品型号 | 销量 | 销售额 | 金额占比 |", "| :--- | :--- | :--- |", "| inSaleRankingList.model | inSaleRankingList.saleqty | inSaleRankingList.saleamt | inSaleRankingList.percent |", "##国外", "(输出国外产品型号销售额echarts饼图,如果图表功能可用)", "| 产品型号 | 销量 | 销售额 | 金额占比 |", "| :--- | :--- | :--- |", "| outSaleRankingList.model | outSaleRankingList.saleqty | outSaleRankingList.saleamt | outSaleRankingList.percent |", ], "使用示例": [ "查2024年产品型号销售排名", "2024年第一季度哪些产品型号卖得最好?", "2024年销售旺季(7-9月)产品型号排名", "2024年前十大畅销产品型号排名", "今年哪些产品卖得好?国内外市场分开看", ], } } tool_description_get_mtrl_ranking = get_tool_prompt( "get_mtrl_ranking", get_mtrl_ranking_config() ) def get_mtrl_ranking_func( backend_url: str, token: str, beginmonth: int, endmonth: int, ) -> str: """实际的函数实现""" print(f"正在获取产品型号{beginmonth}至{endmonth}的销售排行") return call_csharp_api( backend_url, token, "AiSaleToolHelper", "GetSaleRankingData", {"beginmonth": beginmonth, "endmonth": endmonth, "rankType": 4}, ) get_mtrl_ranking_func.__doc__ = tool_description_get_mtrl_ranking get_mtrl_ranking = tool(get_mtrl_ranking_func)