|
|
@@ -1,5 +1,6 @@
|
|
|
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():
|
|
|
@@ -10,7 +11,7 @@ def get_sale_amt_default_config():
|
|
|
"入参说明": {
|
|
|
"backend_url": "后端API地址",
|
|
|
"token": "认证令牌",
|
|
|
- "funtion_name": "函数名称; get_sale_amt_by_month:按月汇总销售额; get_sale_amt_by_day:按天汇总销售额; get_sale_amt_by_produce:产品销售额; get_sale_amt_by_cus:客户销售额;get_sale_amt_by_saler:业务员销售额;get_sale_amt_by_cus_produce:客户产品销售额;get_hot_produce_not_buy:客户未购买过的热销产品;get_first_buy_list:客户指定时间范围内第一次下单的产品",
|
|
|
+ "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",
|
|
|
@@ -52,3 +53,247 @@ def get_sale_amt_func(
|
|
|
|
|
|
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)
|