| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 |
- 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)
|