diff --git a/analyze_acv.py b/analyze_acv.py index 75c21e6..dd2bb33 100644 --- a/analyze_acv.py +++ b/analyze_acv.py @@ -13,7 +13,8 @@ def strip_character(column_name, characters: List[str]): def refine_content(df): strip_character_list = [' ', '\n', ':', ':','其他'] for col in df.columns: - df[col] = df[col].apply(lambda x: "其他" if strip_character(x, strip_character_list) == "" else strip_character(x, strip_character_list)) + df[col] = df[col].apply(lambda x: "其他" if isinstance(x, str) and strip_character(x, strip_character_list) == "" + else (strip_character(x, strip_character_list) if isinstance(x, str) else x)) return df def calc_acv_mean(df, acv_name, group_by_column): @@ -28,6 +29,12 @@ def calc_acv_sum(df, acv_name, group_by_column): df_grouped_sum[acv_name] = df_grouped_sum[acv_name].apply(lambda x: '{:,}'.format(x)) return df_grouped_sum +def calc_acv_sum_and_count(df, acv_name, group_by_column): + df_grouped_sum = df.groupby(group_by_column)[acv_name].sum().astype(int).reset_index() + df_grouped_count = df.groupby(group_by_column)[acv_name].count().reset_index() + df_grouped_sum_count = pd.merge(df_grouped_sum, df_grouped_count, on=group_by_column, how='outer') + return df_grouped_sum_count + def save_to_excel(dataframes, sheet_names, output_file): with pd.ExcelWriter(output_file, engine='openpyxl') as writer: for df, sheet_name in zip(dataframes, sheet_names): @@ -42,7 +49,7 @@ dataframes = [] sheet_names = [] # ACV by 客户分类 -df_win_grouped_by_industry_sum = calc_acv_sum(df_win, acv_name, '客户分类') +df_win_grouped_by_industry_sum = calc_acv_sum_and_count(df_win, acv_name, '客户分类') dataframes.append(refine_content(df_win_grouped_by_industry_sum)) sheet_names.append("ACV by 行业") @@ -51,7 +58,7 @@ df_win_grouped_by_industry_mean = calc_acv_mean(df_win, acv_name, '客户分类' dataframes.append(refine_content(df_win_grouped_by_industry_mean)) sheet_names.append("平均ACV by 行业") -df_win_grouped_by_sub_industry_sum = calc_acv_sum(df_win, acv_name, '客户行业') +df_win_grouped_by_sub_industry_sum = calc_acv_sum_and_count(df_win, acv_name, '客户行业') dataframes.append(refine_content(df_win_grouped_by_sub_industry_sum)) sheet_names.append("ACV by 子行业") @@ -59,13 +66,13 @@ df_win_grouped_by_sub_industry_mean = calc_acv_mean(df_win, acv_name, '客户行 dataframes.append(refine_content(df_win_grouped_by_sub_industry_mean)) sheet_names.append("平均ACV by 子行业") -# 读取Excel文件 +# ���取Excel文件 df = pd.read_excel('./data_src/pingcap_pipeline.xlsx') # 按照"客户分类"列分组,并计算ACV列的和 acv_name = '预估 ACV' -df_pipeline_grouped_by_industry_sum = calc_acv_sum(df, acv_name, '负责人所属行业') +df_pipeline_grouped_by_industry_sum = calc_acv_sum_and_count(df, acv_name, '负责人所属行业') dataframes.append(refine_content(df_pipeline_grouped_by_industry_sum)) sheet_names.append("预估ACV by 行业") @@ -73,7 +80,7 @@ df_pipeline_grouped_by_industry_mean = calc_acv_mean(df, acv_name, '负责人所 dataframes.append(refine_content(df_pipeline_grouped_by_industry_mean)) sheet_names.append("平均预估ACV by 行业") -df_pipeline_grouped_by_sub_industry_sum = calc_acv_sum(df, acv_name, '客户行业') +df_pipeline_grouped_by_sub_industry_sum = calc_acv_sum_and_count(df, acv_name, '客户行业') dataframes.append(refine_content(df_pipeline_grouped_by_sub_industry_sum)) sheet_names.append("预估ACV by 子行业") @@ -82,7 +89,7 @@ dataframes.append(refine_content(df_pipeline_grouped_by_sub_industry_mean)) sheet_names.append("平均预估ACV by 子行业") # 保存所有数据帧到一个Excel文件中 -output_file = './output/acv_analysis.xlsx' +output_file = './output/acv_analysis_v2(with count).xlsx' save_to_excel(dataframes, sheet_names, output_file) print(f"Analysis results have been saved to {output_file}") \ No newline at end of file diff --git a/analyze_acv_dist.py b/analyze_acv_dist.py index 1d37ce1..2a934fd 100644 --- a/analyze_acv_dist.py +++ b/analyze_acv_dist.py @@ -26,6 +26,22 @@ def get_acv_distribution(df, acv_name, industry_col_name): industry_acv_distribution.loc['Total'] = industry_acv_distribution.sum() return industry_acv_distribution +def get_acv_distribution_sum(df, acv_name, industry_col_name): + # Define the bins for ACV intervals + bins = [0, 1e6, 5e6, float('inf')] + labels = ['<100万', '100万-500万', '>500万'] + + # Create a new column 'ACV Interval' based on the bins + df['ACV Interval'] = pd.cut(df[acv_name], bins=bins, labels=labels, right=False) + + # Group by industry and ACV interval, then sum the ACV values + industry_acv_sum = df.groupby([industry_col_name, 'ACV Interval'])[acv_name].sum().unstack(fill_value=0) + + # Add a 'Total' row + industry_acv_sum.loc['Total'] = industry_acv_sum.sum() + + return industry_acv_sum + # 新增函数:将结果保存到Excel def save_to_excel(dfs, sheet_names, output_file): with pd.ExcelWriter(output_file, engine='openpyxl') as writer: @@ -42,9 +58,13 @@ won_sub_industry_dist = get_acv_distribution(df, 'ACV', '客户行业') pipeline_industry_dist = get_acv_distribution(df_pipeline, '预估 ACV', '负责人所属行业') pipeline_sub_industry_dist = get_acv_distribution(df_pipeline, '预估 ACV', '客户行业') +pipeline_sub_industry_dist_sum = get_acv_distribution_sum(df_pipeline, '预估 ACV', '客户行业') +pipeline_sub_industry_dist_sum.to_excel('./output/pipeline_sub_industry_dist_sum.xlsx') + + # 保存结果到Excel dfs = [won_industry_dist, won_sub_industry_dist, pipeline_industry_dist, pipeline_sub_industry_dist] sheet_names = ['成单-行业分布', '成单-子行业分布', 'Pipeline-行业分布', 'Pipeline-子行业分布'] -save_to_excel(dfs, sheet_names, './output/acv_distribution.xlsx') +# save_to_excel(dfs, sheet_names, './output/acv_distribution.xlsx') print("ACV distribution analysis completed. Results saved in './output/acv_distribution.xlsx'") \ No newline at end of file diff --git a/combine_acv_data.py b/combine_acv_data.py new file mode 100644 index 0000000..aec3a24 --- /dev/null +++ b/combine_acv_data.py @@ -0,0 +1,44 @@ +import pandas as pd + +# Read data from specific Excel sheets +excel_file = './output/acv_analysis_v2(with count).xlsx' # Replace with the actual path to your Excel file +df_pipeline = pd.read_excel(excel_file, sheet_name='预估ACV by 子行业') # Replace 'Pipeline' with the actual sheet name +df_won = pd.read_excel(excel_file, sheet_name='ACV by 子行业') # Replace 'Won' with the actual sheet name + + + +# Merge the two dataframes on '客户行业' +df_combined = pd.merge(df_pipeline, df_won, on='客户行业', how='outer', suffixes=('_pipeline', '_won')) + +# Rename columns for clarity +df_combined = df_combined.rename(columns={ + 'ACV Sum': 'ACVSUM', + 'ACV Count': 'ACVCNT', + '预估 ACV Sum': '预估ACVSUM', + '预估 ACV Count': '预估ACVCNT', +}) + +# Fill NaN values with 0 for numerical columns +df_combined['ACVSUM'] = df_combined['ACVSUM'].fillna(0) +df_combined['ACVCNT'] = df_combined['ACVCNT'].fillna(0) +df_combined['预估ACVSUM'] = df_combined['预估ACVSUM'].fillna(0) +df_combined['预估ACVCNT'] = df_combined['预估ACVCNT'].fillna(0) + +# Convert numerical columns to integers +df_combined['ACVSUM'] = df_combined['ACVSUM'].astype(int) +df_combined['ACVCNT'] = df_combined['ACVCNT'].astype(int) +df_combined['预估ACVSUM'] = df_combined['预估ACVSUM'].astype(int) +df_combined['预估ACVCNT'] = df_combined['预估ACVCNT'].astype(int) + + +# Reorder columns +df_combined = df_combined[['客户行业', 'ACVSUM', 'ACVCNT', '预估ACVSUM', '预估ACVCNT']] + +# Sort by '预估ACV' in descending order +df_combined = df_combined.sort_values('预估ACVSUM', ascending=False) + +# Reset index +df_combined = df_combined.reset_index(drop=True) + +print(df_combined) +df_combined.to_excel('./output/acv_analysis_combined.xlsx', index=False) diff --git a/criteria_reflection.py b/criteria_reflection.py deleted file mode 100644 index a405785..0000000 --- a/criteria_reflection.py +++ /dev/null @@ -1,243 +0,0 @@ -# This Python file uses the following encoding: utf-8 - -""" -File: criteria_reflection.py -Description: 以专业咨询机构的赢单路径为参考,结合公司实际统计数据进行反思,提出改进版本的赢单路径 - -Author: [Your Name] -Date: [Current Date] -""" -from AgentProxy import AgentProxy -import pandas as pd - -professional_won_path = [ - { - "销售阶段名称": "01-prospecting", - "客户采购行为": "", - "销售阶段任务": "了解客户信息、与客户进行交流,初步了解客户需求,并确定项目对接人,进入客户供应商名单", - "关键获取信息": "1.联系人姓名\n2.部门\n3.职务\n4.手机\n5.预估整体项目节点数\n6.CRM情况\n7.是否是独立预算", - "销售关键动作": "1、了解客户组织架构,了解客户现有系统使用情况、竞品使用情况\n2、判断匹配度\n3、明确关键部门及其关键人\n4、明确客户是否有对应预算", - "售前关键动作": "", - "客户支持行为": "1. 交流中客户较为开放,能告知需求,计划较为清晰;\n2. 愿意进一步需求沟通;\n3. 交流有多人甚至有多部门参与讨论;", - "阶段转化标准": "1.客户有需求\n2.有明确的项目联系人" - }, - { - "销售阶段名称": "02-evaluation", - "客户采购行为": "", - "销售阶段任务": "收集客户信息,了解客户内部预算情况、预期的项目落地时间、产品和数量等,判断商机可靠性;组织技术交流,讲解公司解决方案,传递公司价值", - "关键获取信息": "1、整理需求确认文档,客户确认\n2.在CRM录入组织架构,明确决策链和决策人\n3.预算是否完成申批\n4.是否进PCC\n5.PCC是否已申批:6.PcC状态\n7.测试类型\n8.测试项(用例)", - "销售关键动作": "1、整理需求确认文档,客户确认\n2、在CRM录入组织架构,明确决策链和决策人\n3、了解决策链的每个客户动力;\n4.发展线人\n5、组织技术交流,传递公司及产品价值,引导客户的场景和我们的特性结合\n6、组织技术交流,了解预期的项目落地时间、产品和数量等\n7.和客户确认是否需要测试\n8、对客户提出的测试需求进行评估,确定需求我们优势够,决定是否跟进测试", - "售前关键动作": "", - "客户支持行为": "1.愿意透露决策链信息,预算信息,友商信息,时间信息。\n2. 能介绍高title的人\n3. 客户有对我们产品的测试计划;", - "阶段转化标准": "1.客户有预算\n2.有明确的项目时间\n3.有预期的产品和数量" - }, - { - "销售阶段名称": "03-qualification", - "客户采购行为": "", - "销售阶段任务": "收集、确认项目立项信息,明确产品和数量;\n组织测试必要性并引导客户做poc测试,验证应用场景和技术适用性、平鼎成功入围", - "关键获取信息": "1.立项批复\n2.立项时间\n3.立项金额\n(立项报告的内容)\n4.招标方式", - "销售关键动作": "1、和客户确认是否需要测试\n2、对客户提出的测试需求进行评估,确定需求我们优势够,决定是否跟进测试\n3、引导客户的测试方案制定,引导将我们优势点,加入到测试方案中,如:性能、扩展性、边界\n4、在公司内部组织测试资源\n5、获取客户内部的测试报告,了解真实的测试结论\n6、了解客户对测试结果的态度和对手情况\n7、做测试正式汇报,和客户达成一致", - "售前关键动作": "", - "客户支持行为": "1.支持对我方有利的测试方案\n2. 提供内部真实的测试报告\n3.决策链人员认同测试效果,客户愿意引荐更高层领导汇报\n4.双方沟通项目计划且达成一致\n5.主动邀请提供招标参数或汇报材料", - "阶段转化标准": "1.项目预算批准、项目已立项\n2.有确定产品和数量、或\n3.完成场景应用/技术适用性验证、客户确定平鼎入围(完成poc)" - }, - { - "销售阶段名称": "04-bidding/negotiating", - "客户采购行为": "", - "销售阶段任务": "确认项目是否需要招标,提前影响招投标结果并赢得标书;若不需要招标,则完成商务谈判,确认价格和产品可交付沟通与评审", - "关键获取信息": "1.是否投标\n2.发标时间\n3.投标时间\n4.竞争对手\n5.对手产配置\n6.对手投标金额", - "销售关键动作": "1.制定关单策略及竞争策略\n2.控制立项报告(对对手不利的参数)\n3.如果无法控制立项,制定应对策略\n4.创造机会与高层沟通汇报\n5.沟通交付计划及SOW\n6. 确定关键联系人", - "售前关键动作": "", - "客户支持行为": "1.反馈客户内部的进展和计划\n2. 客户内部立项成功\n3.采纳我们提交的标参数(或有利于我方)\n3. 对黑马和灰犀牛的处理,愿意提供应对处理", - "阶段转化标准": "1.完成可交付评审;\n2.投标通过审批;\n3.投标结果确认赢标或完成商务谈判,确定价格和产品" - }, - { - "销售阶段名称": "05-contract review", - "客户采购行为": "", - "销售阶段任务": "发起合同协议审批申请,确认合同条款", - "关键获取信息": "无", - "销售关键动作": "", - "售前关键动作": "", - "客户支持行为": "", - "阶段转化标准": "合同评审通过,完成合同协商审批,确认合同条款" - }, - { - "销售阶段名称": "06-closed won", - "客户采购行为": "", - "销售阶段任务": "合同归档,项目赢单", - "关键获取信息": "无", - "销售关键动作": "", - "售前关键动作": "", - "客户支持行为": "", - "阶段转化标准": "合同归档" - }, - { - "销售阶段名称": "06-closed cancel", - "客户采购行为": "确认项目取消原因", - "销售阶段任务": "复盘项目输单原因", - "关键获取信息": "取消原因", - "销售关键动作": "", - "售前关键动作": "", - "客户支持行为": "", - "阶段转化标准": "1.客户明确表示取消项目\n2.投标确认状态为输单" - } -] - -actual_won_path = [ - { - "销售阶段名称": "01-prospecting", - "客户采购行为": "", - "销售阶段任务": "", - "关键获取信息": "1.联系人姓名\n2.部门\n3.职务\n4.手机\n5.预估整体项目节点数\n6.CRM情况\n7.是否是独立预算", - "销售关键动作": "", - "售前关键动作": "", - "客户支持行为": "1. 交流中客户较为开放,能告知需求,计划较为清晰;\n2. 愿意进一步需求沟通;\n3. 交流有多人甚至有多部门参与讨论;", - "阶段转化标准": "" - }, - { - "销售阶段名称": "02-evaluation", - "客户采购行为": "", - "销售阶段任务": "完成需求确认与收集\n完成技术评估与测试\n完成商务评估与商机确认\n完成市场调研与竞争分析", - "关键获取信息": "1.预算是否完成申批\n2.是否进PCC\n3.PCC是否已申批\n4.PCC状态\n5.测试类型\n6.测试项(用例)", - "销售关键动作": "**客户接触与需求识别**\n**商务调研与合同准备**\n**项目支持与优化**\n**内部协调与支持**", - "售前关键动作": "", - "客户支持行为": "1. **客户需求的深入理解与确认**:\n- 积极主动地与客户沟通,深入理解客户的需求、预算和业务目标。确保和明确预算。\n- 客户愿意参与并进行多次沟通,以确认需求的具体细节,并帮助解决方案能够准确匹配需求。\n\n2. **产品或服务的匹配度评估**:\n- 协助组织产品演示或服务方案说明会,充分展示我们产品的特点,包括技术能力、功能特性和性能指标。\n- 需要进行必要的技术评估和测试,以证明产品或服务的有效性和可靠性。\n\n3. **客户的积极认知与接受度**:\n- 客户对我们的解决方案表现出浓厚兴趣,并对其潜在价值有清晰认识。", - "阶段转化标准": "" - }, - { - "销售阶段名称": "03-qualification", - "客户采购行为": "", - "销售阶段任务": "完成需求确认与收集\n完成技术评估与测试\n完成商务评估与商机确认\n完成项目立项与合同准备", - "关键获取信息": "1.立项批复\n2.立项时间\n3.立项金额\n(立项报告的内容)\n4.招标方式", - "销售关键动作": "**客户关系管理**\n**项目支持与优化**\n**内部协调与支持**\n**商务谈判与合同准备**", - "售前关键动作": "", - "客户支持行为": "1. 支持对我方有利的测试方案\n2. 提供内部真实的测试报告\n3.决策链人员认同测试效果,客户愿意引荐更高层领导汇报\n4.双方沟通项目计划且达成一致\n5.主动邀请提供招标参数或汇报材料", - "阶段转化标准": "1. **需求与方案的匹配度**:确认客户的需求是否与公司的产品或服务有力匹配,包括技术能力、产品特性、服务范围等。\n\n2. **技术评估与测试**:评估完成技术验证或试用阶段,包括技术风险、兼容问题、服务水平等,并有足够的保障措施。\n\n3. **商务条款与定价**:初步确定商务条款和定价策略,以及客户对公司的信任程度。\n\n4. **内部准备就绪**:确保公司内部对于承接项目的服务能力已经就绪,包括技术支持、交付能力、服务团队、人力资源等。\n\n5. **客户意愿与定位**:明确在客户采购决策链中的竞争优势定位,包括定价策略、合同条款、竞争优势等。\n\n6. **合规性与法律审查**:确保所有商务活动符合相关法律法规,合同草案已经过法律审核,没有潜在的法律风险。" - }, - { - "销售阶段名称": "04-bidding/negotiating", - "客户采购行为": "", - "销售阶段任务": "完成需求确认与收集\n完成技术评估与测试\n完成项目立项与合同准备\n完成商务谈判与竞争分析", - "关键获取信息": "1.是否投标\n2.发标时间\n3.投标时间\n4.竞争对手\n5.对手产配置\n6.对手投标金额", - "销售关键动作": "**客户关系管理**\n**合同审查与订单处理**\n**客户接触与需求识别**\n**商务谈判与合同准备**", - "售前关键动作": "", - "客户支持行为": "1.反馈客户内部的进展和计划\n2. 客户内部立项成功\n3.采纳我们提交的招标参数(或有利于我方)\n3. 对黑马和灰犀牛的处理,愿意提供应对处理", - "阶段转化标准": "1. **客户需求与解决方案的匹配度确认**:\n- 确保所提供的解决方案完全符合客户的需求和预期。\n- 与客户共同验证解决方案的有效性和可行性。\n\n2. **中标主张的确定与沟通**:\n- 明确并强化产品或服务的独特卖点(USP)和价值主张。\n- 确认客户对产品或服务的认可度和采购意愿维持在较高水平。" - }, - { - "销售阶段名称": "05-contract review", - "客户采购行为": "", - "销售阶段任务": "", - "关键获取信息": "无", - "销售关键动作": "", - "售前关键动作": "", - "客户支持行为": "", - "阶段转化标准": "" - }, - { - "销售阶段名称": "06-closed won", - "客户采购行为": "", - "销售阶段任务": "完成需求确认与收集\n完成合同签订与归档", - "关键获取信息": "无", - "销售关键动作": "", - "售前关键动作": "", - "客户支持行为": "", - "阶段转化标准": "" - }, - { - "销售阶段名称": "06-cancel", - "客户采购行为": "", - "销售阶段任务": "", - "关键获取信息": "取消原因", - "销售关键动作": "", - "售前关键动作": "", - "客户支持行为": "", - "阶段转化标准": "" - } -] - -api_key = 'c6bbe7f48063a2c1' -api_secret = '5f8e7d3a97465cc099bf19bd1b70c266' -assistant_id = "66bb09a84673b57506fe7bbd" -agent = AgentProxy(assistant_id, api_key, api_secret) - -reflection_path = [] # 记录反思后的赢单路径 - -# Iterate over professional_won_path and get index in the loop -for index, pro_stage in enumerate(professional_won_path): - print(f"Index: {index}") - custom_stage = actual_won_path[index] - - # 反思销售阶段任务 - prompt_reflection_task = f""" - 任务: - 以专业咨询机构提出的销售阶段任务为参考和蓝本,结合客户自行总结的销售任务,提出改进版本的销售阶段任务,注意尽可能以专业机构的版本为主,语言、风格也按照专业机构的版本。 - 若客户自行总结的销售阶段任务为空或没有内容,则直接使用专业咨询机构提出的销售阶段任务。 - 输入: - 专业咨询机构提出的销售阶段任务: - {pro_stage['销售阶段任务']} - 客户自行总结的销售任务 - {custom_stage['销售阶段任务']} - 输出: - 反思后的销售阶段任务,以及反思后的销售阶段任务与专业咨询机构提出的销售阶段任务的差异,以及该改进的方法、依据、逻辑等 - """ - print(f"prompt_reflection_task: {prompt_reflection_task}") - reflection_task = agent.send_message(prompt_reflection_task) - print(f"反思后的销售阶段任务: {reflection_task}") - - reflection_stage = pro_stage.copy() - reflection_stage['销售阶段任务'] = reflection_task - - # 反思销售关键动作 - prompt_reflection_action = f""" - 任务: - 以专业咨询机构提出的销售关键动作为参考和蓝本,结合客户自行总结的销售关键动作,提出改进版本的销售关键动作,注意尽可能以专业机构的版本为主,语言、风格也比照专业机构的版本。 - 若结合客户自行总结的销售关键动作为空或没有内容,则直接使用专业咨询机构提出的销售关键动作。 - 输入: - 专业咨询机构提出的销售关键动作: - {pro_stage['销售关键动作']} - 通过客户自行总结得到的销售关键动作: - {custom_stage['销售关键动作']} - 输出: - 反思后的销售关键动作,以及反思后的销售关键动作与专业咨询机构提出的销售关键动作的差异,以及该改进的方法、依据、逻辑等 - """ - print(f"prompt_reflection_action: {prompt_reflection_action}") - reflection_action = agent.send_message(prompt_reflection_action) - print(f"反思后的销售关键动作: {reflection_action}") - reflection_stage['销售关键动作'] = reflection_action - - # 反思阶段转化标准 - prompt_reflection_standard = f""" - 任务: - 以专业咨询机构提出的阶段转化标准为参考和蓝本,结合客户自行总结的阶段转化标准,提出改进版本的阶段转化标准,注意尽可能以专业机构的版本为主,语言、风格也比照专业机构的版本。 - 若通过客户自行总结得到的阶段转化标准为空或没有内容,则直接使用专业咨询机构提出的阶段转化标准。 - - 输入: - 专业咨询机构提出的阶段转化标准: - {pro_stage['阶段转化标准']} - 通过客户自行总结得到的阶段转化标准: - {custom_stage['阶段转化标准']} - 输出: - 反思后的阶段转化标准,以及反思后的阶段转化标准与专业咨询机构提出的阶段转化标准的差异,以及该改进的方法、依据、逻辑等 - """ - print(f"prompt_reflection_standard: {prompt_reflection_standard}") - reflection_standard = agent.send_message(prompt_reflection_standard) - print(f"反思后的阶段转化标准: {reflection_standard}") - reflection_stage['阶段转化标准'] = reflection_standard - - reflection_path.append(reflection_stage) - -# Write reflection_path to Excel -df = pd.DataFrame(reflection_path) - -# Reorder columns to match the original structure -column_order = [ - "销售阶段名称", "客户采购行为", "销售阶段任务", "关键获取信息", - "销售关键动作", "售前关键动作", "客户支持行为", "阶段转化标准" -] -df = df.reindex(columns=column_order) - -# Write to Excel -excel_file_path = 'reflection_path_results.xlsx' -df.to_excel(excel_file_path, index=False) -print(f"Reflection path results have been written to {excel_file_path}") diff --git a/cursor b/cursor new file mode 100644 index 0000000..ca3eca0 --- /dev/null +++ b/cursor @@ -0,0 +1,44 @@ +Stage: Bidding+Negotiation +完成需求确认与收集: 1.43% +完成技术评估与测试: 2.86% +完成商务谈判与合同准备: 0.00% +完成内部审批与预算确认: 0.00% +完成项目立项与采购流程: 1.43% +完成关系建立与维护: 0.00% +完成市场调研与竞争分析: 2.86% +完成产品推广与市场活动: 0.00% +完成技术支持与售后服务: 0.00% +完成续约与增购谈判: 0.00% +Stage: Qualification +完成需求确认与收集: 1.69% +完成技术评估与测试: 1.69% +完成商务谈判与合同准备: 1.69% +完成内部审批与预算确认: 1.69% +完成项目立项与采购流程: 0.00% +完成关系建立与维护: 0.00% +完成市场调研与竞争分析: 1.69% +完成产品推广与市场活动: 0.00% +完成技术支持与售后服务: 0.00% +完成续约与增购谈判: 0.00% +Stage: Closed Won +完成需求确认与收集: 0.00% +完成技术评估与测试: 0.00% +完成商务谈判与合同准备: 3.85% +完成内部审批与预算确认: 0.00% +完成项目立项与采购流程: 0.00% +完成关系建立与维护: 3.85% +完成市场调研与竞争分析: 0.00% +完成产品推广与市场活动: 0.00% +完成技术支持与售后服务: 0.00% +完成续约与增购谈判: 3.85% +Stage: Evaluation +完成需求确认与收集: 2.22% +完成技术评估与测试: 4.44% +完成商务谈判与合同准备: 0.00% +完成内部审批与预算确认: 0.00% +完成项目立项与采购流程: 2.22% +完成关系建立与维护: 0.00% +完成市场调研与竞争分析: 4.44% +完成产品推广与市场活动: 0.00% +完成技术支持与售后服务: 0.00% +完成续约与增购谈判: 0.00% \ No newline at end of file diff --git a/data_doc/销售策略制定框架模板(V3.0)-赢单路径- Manual.xlsx b/data_doc/销售策略制定框架模板(V3.0)-赢单路径- Manual.xlsx index 7aa8e11..70e8899 100644 Binary files a/data_doc/销售策略制定框架模板(V3.0)-赢单路径- Manual.xlsx and b/data_doc/销售策略制定框架模板(V3.0)-赢单路径- Manual.xlsx differ diff --git a/data_doc/销售策略制定框架模板(V3.0)-赢单路径-AI.xlsx b/data_doc/销售策略制定框架模板(V3.0)-赢单路径-AI.xlsx index 0a662f0..6f2b478 100644 Binary files a/data_doc/销售策略制定框架模板(V3.0)-赢单路径-AI.xlsx and b/data_doc/销售策略制定框架模板(V3.0)-赢单路径-AI.xlsx differ diff --git a/data_output/关键销售动作.txt b/data_output/关键销售动作.txt new file mode 100644 index 0000000..b533bf9 --- /dev/null +++ b/data_output/关键销售动作.txt @@ -0,0 +1,29 @@ + 客户接触与需求识别 + 产品演示与方案提供 + 商务谈判与合同准备 + 项目支持与优化 + 市场分析与策略调整 + 合同审查与订单处理 + 客户关系维护 + 后续跟进与机会挖掘 + 内部协调与支持 + 技术支持与交流 + 市场情况调研 + 预算与立项推动 + 项目跟踪与推进 + 客户体验优化 + 技术交流与产品推广 + 需求分析与适配 + 项目监控和更新 + 技术支持与配合 + 方案制定 + 项目进展与计划沟通 + 需求讨论与时间规划 + 商机更新与管理 + 招标准备与投标 + 技术支持与服务兜底 + 需求讨论与方案交流 + 需求与技术讨论 + 方案推进 + 需求讨论与材料提供 + 策略制定与执行 \ No newline at end of file diff --git a/data_output/关键销售动作byStage.txt b/data_output/关键销售动作byStage.txt new file mode 100644 index 0000000..7baf605 --- /dev/null +++ b/data_output/关键销售动作byStage.txt @@ -0,0 +1,65 @@ + +Stage: PoC Won/Bidding+Negotiation + 客户接触与需求识别: 130.00% + 产品演示与方案提供: 61.43% + 商务谈判与合同准备: 162.86% + 项目支持与优化: 125.71% + 市场分析与策略调整: 62.86% + 合同审查与订单处理: 37.14% + 客户关系维护: 50.00% + 后续跟进与机会挖掘: 28.57% + 内部协调与支持: 111.43% + 技术支持与交流: 2.86% + 市场情况调研: 4.29% + 预算与立项推动: 7.14% + 项目跟踪与推进: 4.29% + 客户体验优化: 2.86% + 技术交流与产品推广: 1.43% + 需求分析与适配: 2.86% + 项目监控和更新: 2.86% + 技术支持与配合: 7.14% + 方案制定: 1.43% +Stage: Qualification + 客户关系维护: 47.46% + 项目支持与优化: 144.07% + 客户接触与需求识别: 154.24% + 内部协调与支持: 83.05% + 方案制定: 1.69% + 商务谈判与合同准备: 113.56% + 合同审查与订单处理: 6.78% + 市场分析与策略调整: 57.63% + 产品演示与方案提供: 72.88% + 后续跟进与机会挖掘: 25.42% + 项目进展与计划沟通: 3.39% + None: 37.29% + 需求讨论与时间规划: 6.78% + 商机更新与管理: 1.69% +Stage: Closed Won + 客户关系维护: 92.31% + 合同审查与订单处理: 115.38% + 客户接触与需求识别: 107.69% + 商务谈判与合同准备: 130.77% + 内部协调与支持: 123.08% + 项目支持与优化: 123.08% + 市场分析与策略调整: 53.85% + 后续跟进与机会挖掘: 42.31% + 产品演示与方案提供: 42.31% + 招标准备与投标: 11.54% + 技术支持与服务兜底: 7.69% +Stage: Evaluation + 客户接触与需求识别: 188.89% + 产品演示与方案提供: 80.00% + 商务谈判与合同准备: 51.11% + 项目支持与优化: 91.11% + 内部协调与支持: 73.33% + 合同审查与订单处理: 2.22% + 后续跟进与机会挖掘: 20.00% + 市场分析与策略调整: 80.00% + 客户关系维护: 44.44% + 需求讨论与方案交流: 4.44% + 需求与技术讨论: 8.89% + 方案推进: 4.44% + None: 40.00% + 需求讨论与材料提供: 8.89% + 预算与立项推动: 2.22% + 策略制定与执行: 8.89% \ No newline at end of file diff --git a/data_output/行动结果分类.txt b/data_output/行动结果分类.txt new file mode 100644 index 0000000..6665747 --- /dev/null +++ b/data_output/行动结果分类.txt @@ -0,0 +1,10 @@ +完成需求确认与收集 +完成技术评估与测试 +完成商务谈判与合同准备 +完成内部审批与预算确认 +完成项目立项与采购流程 +完成关系建立与维护 +完成市场调研与竞争分析 +完成产品推广与市场活动 +完成技术支持与售后服务 +完成续约与增购谈判 \ No newline at end of file diff --git a/data_output/行动结果分类byStage.txt b/data_output/行动结果分类byStage.txt new file mode 100644 index 0000000..ceed3b1 --- /dev/null +++ b/data_output/行动结果分类byStage.txt @@ -0,0 +1,44 @@ +Stage: PoC Won/Bidding+Negotiation + 完成需求确认与收集: 1.43% + 完成技术评估与测试: 2.86% + 完成商务谈判与合同准备: 0.00% + 完成内部审批与预算确认: 0.00% + 完成项目立项与采购流程: 1.43% + 完成关系建立与维护: 0.00% + 完成市场调研与竞争分析: 2.86% + 完成产品推广与市场活动: 0.00% + 完成技术支持与售后服务: 0.00% + 完成续约与增购谈判: 0.00% +Stage: Qualification + 完成需求确认与收集: 1.69% + 完成技术评估与测试: 1.69% + 完成商务谈判与合同准备: 1.69% + 完成内部审批与预算确认: 1.69% + 完成项目立项与采购流程: 0.00% + 完成关系建立与维护: 0.00% + 完成市场调研与竞争分析: 1.69% + 完成产品推广与市场活动: 0.00% + 完成技术支持与售后服务: 0.00% + 完成续约与增购谈判: 0.00% +Stage: Closed Won + 完成需求确认与收集: 0.00% + 完成技术评估与测试: 0.00% + 完成商务谈判与合同准备: 3.85% + 完成内部审批与预算确认: 0.00% + 完成项目立项与采购流程: 0.00% + 完成关系建立与维护: 3.85% + 完成市场调研与竞争分析: 0.00% + 完成产品推广与市场活动: 0.00% + 完成技术支持与售后服务: 0.00% + 完成续约与增购谈判: 3.85% +Stage: Evaluation + 完成需求确认与收集: 2.22% + 完成技术评估与测试: 4.44% + 完成商务谈判与合同准备: 0.00% + 完成内部审批与预算确认: 0.00% + 完成项目立项与采购流程: 2.22% + 完成关系建立与维护: 0.00% + 完成市场调研与竞争分析: 4.44% + 完成产品推广与市场活动: 0.00% + 完成技术支持与售后服务: 0.00% + 完成续约与增购谈判: 0.00% \ No newline at end of file diff --git a/llm_action_result_analysis.py b/llm_action_result_analysis.py new file mode 100644 index 0000000..10b0ab2 --- /dev/null +++ b/llm_action_result_analysis.py @@ -0,0 +1,137 @@ +import pandas as pd +from typing import List +from openpyxl import Workbook +from AgentProxy import AgentProxy + +api_key = 'c6bbe7f48063a2c1' +api_secret = '5f8e7d3a97465cc099bf19bd1b70c266' +assistant_id = "66bb09a84673b57506fe7bbd" +agent = AgentProxy(assistant_id, api_key, api_secret) + + + +# Stage: Evaluation +# 客户接触与需求识别: 188.89% +# 项目支持与优化: 91.11% +# 产品演示与方案提供: 80.00% +# 市场分析与策略调整: 80.00% + + +# Stage: Qualification +# 客户接触与需求识别: 154.24% +# 项目支持与优化: 144.07% +# 商务谈判与合同准备: 113.56% +# 内部协调与支持: 83.05% + +# Stage: Bidding+Negotiation +# 商务谈判与合同准备: 162.86% +# 客户接触与需求识别: 130.00% +# 项目支持与优化: 125.71% +# 内部协调与支持: 111.43% + + +# Stage: Closed Won +# 商务谈判与合同准备: 130.77% +# 内部协调与支持: 123.08% +# 项目支持与优化: 123.08% +# 合同审查与订单处理: 115.38% +most_frequent_actions = { + "Evaluation": [ + "客户接触与需求识别", + "项目支持与优化", + "产品演示与方案提供", + "市场分析与策略调整" + ], + "Qualification": [ + "客户接触与需求识别", + "项目支持与优化", + "商务谈判与合同准备", + "内部协调与支持" + ], + "Bidding+Negotiation": [ + "商务谈判与合同准备", + "客户接触与需求识别", + "项目支持与优化", + "内部协调与支持" + ], + "Closed Won": [ + "商务谈判与合同准备", + "内部协调与支持", + "项目支持与优化", + "合同审查与订单处理" + ] +} + + +# Stage: Evaluation +# 完成技术评估与测试: 4.44% +# 完成市场调研与竞争分析: 4.44% +# 完成需求确认与收集: 2.22% +# 完成项目立项与采购流程: 2.22% +# Stage: Qualification +# 完成需求确认与收集: 1.69% +# 完成技术评估与测试: 1.69% +# 完成商务谈判与合同准备: 1.69% +# 完成内部审批与预算确认: 1.69% +# Stage: Bidding+Negotiation +# 完成技术评估与测试: 2.86% +# 完成市场调研与竞争分析: 2.86% +# 完成需求确认与收集: 1.43% +# 完成项目立项与采购流程: 1.43% +# Stage: Closed Won +# 完成商务谈判与合同准备: 3.85% +# 完成关系建立与维护: 3.85% +# 完成续约与增购谈判: 3.85% +# 完成需求确认与收集: 0.00% + +top_action_results = { + "Evaluation": [ + "完成技术评估与测试", + "完成市场调研与竞争分析", + "完成需求确认与收集", + "完成项目立项与采购流程" + ], + "Qualification": [ + "完成需求确认与收集", + "完成技术评估与测试", + "完成商务谈判与合同准备", + "完成内部审批与预算确认" + ], + "Bidding+Negotiation": [ + "完成需求确认与收集", + "完成技术评估与测试", + "完成项目立项与采购流程", + "完成市场调研与竞争分析" + ], + "Closed Won": [ + "完成商务谈判与合同准备", + "完成关系建立与维护", + "完成续约与增购谈判", + "完成需求确认与收集" + ], +} + +stages = ["Evaluation", "Qualification", "Bidding+Negotiation", "Closed Won"] + +for stage in stages: + print(f"Stage: {stage}") + prompt = f""" + 任务: + 你作为一个资深的销售领域专家,下面的输入数据给出了销售阶段,该销售阶段最频繁的销售行动,该销售阶段最top的行动结果, + 分析: + 1. 销售的行动和结果是否匹配和相关 + 2. 销售的行动和结果是否正相关,是否存在gap + 3. 销售的行动和结果是否和当前的销售阶段相匹配 + + 输入: + 销售阶段:{stage} + 最频繁的销售行动:{most_frequent_actions[stage]} + 最top的行动结果:{top_action_results[stage]} + + 输出: + 按照上述分析要点给出的分析结果和分析报告 + + """ + print(agent.send_message(prompt)) + + diff --git a/llm_analyze_acv_dist.py b/llm_analyze_acv_dist.py new file mode 100644 index 0000000..83cc5cd --- /dev/null +++ b/llm_analyze_acv_dist.py @@ -0,0 +1,38 @@ +import pandas as pd +from typing import List +from openpyxl import Workbook +from AgentProxy import AgentProxy + +api_key = 'c6bbe7f48063a2c1' +api_secret = '5f8e7d3a97465cc099bf19bd1b70c266' +assistant_id = "66bb09a84673b57506fe7bbd" +agent = AgentProxy(assistant_id, api_key, api_secret) + +prompt = f""" + 任务: + 请根据以下未成单商机预估ACV分布数据,按照分析要点,进行数据分析和解读,并给出分析报告 + + 要点: + 1. 以销售专家的视角,分析上述数据,并给出洞见 + 2. 分析是否有可能完成销售目标,并给出原因和分析过程,如果有可以提升改进的点,也请给出 + 3. 分析上述构成是否存在潜在问题,如有,请给出原因和改进措施 + 4. 分析上述数据是否可以作为销售策略的参考,并给出原因和分析过程 + + 请注意,销售每个单子所要付出的effort是基本相同的 + + 输入: + ACV金额分布: + 客户行业 <100万 100万-500万 >500万 + Total 435,563,056.58 421,007,400.89 178,094,693.04 + + ACV单子数量分布: + 客户行业 <100万 100万-500万 >500万 + Total 1311 249 22 + + 销售目标人均任务ACV 500-600万 + + 输出: + 按照上述要点,给出分析报告 +""" + +print(agent.send_message(prompt)) \ No newline at end of file diff --git a/llm_combine_acv_data_analysis.py b/llm_combine_acv_data_analysis.py new file mode 100644 index 0000000..253a2cd --- /dev/null +++ b/llm_combine_acv_data_analysis.py @@ -0,0 +1,164 @@ +from AgentProxy import AgentProxy + + +api_key = 'c6bbe7f48063a2c1' +api_secret = '5f8e7d3a97465cc099bf19bd1b70c266' +assistant_id = "66bb09a84673b57506fe7bbd" +agent = AgentProxy(assistant_id, api_key, api_secret) + +text_won = """ +客户行业 ACVSUM 占比 ACVCNT 占比 +银行 175888600 50.62% 105 24.53% +证券基金 24932854 7.18% 47 10.98% +公共事业 12798197 3.68% 29 6.78% +保险 39237141 11.29% 29 6.78% +能源电力 3905334 1.12% 9 2.10% +物流/交通 10177672 2.93% 23 5.37% +制造/汽车 15018443 4.32% 27 6.31% +运营商 19638038 5.65% 26 6.07% +零售 14976953 4.31% 36 8.41% +互联网+ 16770817 4.83% 68 15.89% +其他 3853000 1.11% 8 1.87% +互金 8386816 2.41% 16 3.74% +ISV 46400 0.01% 2 0.47% +国央企 0 0.00% 0 0.00% +媒体/文娱 1019133 0.29% 2 0.47% +石油 0 0.00% 0 0.00% +国企 0 0.00% 0 0.00% +资产管理 0 0.00% 0 0.00% +政府 0 0.00% 0 0.00% +服务 0 0.00% 0 0.00% +医疗 0 0.00% 0 0.00% +云服务 0 0.00% 0 0.00% +央企招商局 0 0.00% 0 0.00% +农业 0 0.00% 0 0.00% +金融租赁 0 0.00% 0 0.00% +教育 0 0.00% 0 0.00% +融资担保 0 0.00% 0 0.00% +高科技 0 0.00% 0 0.00% +公共卫生 0 0.00% 0 0.00% +农林牧渔 0 0.00% 0 0.00% +教育/科研 792000 0.23% 1 0.23% +物流/交通/出行 0 0.00% 0 0.00% +电信/网络/云服务商 0 0.00% 0 0.00% +媒体/视频/文娱 0 0.00% 0 0.00% +社交/门户/在线服务 0 0.00% 0 0.00% +消费金融公司 0 0.00% 0 0.00% +游戏 0 0.00% 0 0.00% +零售/电商/消费品 0 0.00% 0 0.00% +Total 347441398 1 428 1 +""" + +text_pipeline = """ + Pipeline +客户行业 预估ACVSUM 占比 预估ACVCNT 占比 +银行 435192472 42.09% 403 25.39% +证券基金 96413873 9.33% 209 13.17% +公共事业 76163399 7.37% 154 9.70% +保险 73039728 7.06% 77 4.85% +能源电力 65098557 6.30% 91 5.73% +物流/交通 54499388 5.27% 95 5.99% +制造/汽车 45458488 4.40% 104 6.55% +运营商 41493666 4.01% 81 5.10% +零售 35260799 3.41% 93 5.86% +互联网+ 33295017 3.22% 112 7.06% +其他 25413146 2.46% 64 4.03% +互金 24768317 2.40% 46 2.90% +ISV 8490800 0.82% 10 0.63% +国央企 4866700 0.47% 7 0.44% +媒体/文娱 3066800 0.30% 11 0.69% +石油 2540000 0.25% 4 0.25% +国企 2402000 0.23% 4 0.25% +资产管理 1000000 0.10% 1 0.06% +政府 990000 0.10% 2 0.13% +服务 980000 0.09% 2 0.13% +医疗 700000 0.07% 2 0.13% +云服务 610000 0.06% 5 0.32% +央企招商局 500000 0.05% 1 0.06% +农业 450000 0.04% 2 0.13% +金融租赁 300000 0.03% 1 0.06% +教育 300000 0.03% 1 0.06% +融资担保 200000 0.02% 1 0.06% +高科技 153891 0.01% 1 0.06% +公共卫生 150000 0.01% 1 0.06% +农林牧渔 100000 0.01% 1 0.06% +教育/科研 0 0.00% 0 0.00% +物流/交通/出行 0 0.00% 0 0.00% +电信/网络/云服务商 0 0.00% 0 0.00% +媒体/视频/文娱 0 0.00% 0 0.00% +社交/门户/在线服务 0 0.00% 0 0.00% +消费金融公司 0 0.00% 1 0.06% +游戏 0 0.00% 0 0.00% +零售/电商/消费品 0 0.00% 0 0.00% +Total 1033897041 1 1587 1 +""" + +# You can also store this string in a variable if needed +# df_text = df_str +prompt_won = f""" + 任务: + 请根据以下输入的数据,按照以下要点以及背景知识,进行数据分析和解读,并给出分析结果。 + 背景知识: + 行业贡献:可以理解为ACV和预估ACV的金额大小,金额越大,则通常该行业的市场潜力和对公司的销售贡献越大。 + 行业effort:可以理解为订单的数量,订单数量越多,则通常该行业的销售努力程度越大。此处一个潜在假定是,每个订单的所要付出的effort是接近的,无论其金额大小。 + + 要点: + 1. 根据单子的金额数据,分析行业贡献。 + 2. 根据单子的数量数据,分析行业effort。 + 3. 分析行业贡献和行业effort的关系,是否存在正相关关系,是否存在付出了较大effort的行业,贡献却很小,以及付出了较小effort的行业,贡献却很大。 + 4. 分析行业平均单子金额,分析平均单子金额较大的行业 + 5. 依据你作为一个销售领域专家的身份,给出上述要点没有覆盖到的洞见 + 输入: + 已成单数据: + {text_won} + + 输出: + 按照上述要点,给出分析结果。 +""" + + +print(agent.send_message(prompt_won)) + +prompt_pipeline = f""" + 任务: + 请根据以下输入的数据,按照以下要点以及背景知识,进行数据分析和解读,并给出分析结果。 + 背景知识: + 行业贡献:可以理解为ACV和预估ACV的金额大小,金额越大,则通常该行业的市场潜力和对公司的销售贡献越大。 + 行业effort:可以理解为订单的数量,订单数量越多,则通常该行业的销售努力程度越大。此处一个潜在假定是,每个订单的所要付出的effort是接近的,无论其金额大小。 + 要点: + 1. 根据单子的金额数据,分析行业贡献。 + 2. 根据单子的数量数据,分析行业effort。 + 3. 分析行业贡献和行业effort的关系,是否存在正相关关系,是否存在付出了较大effort的行业,贡献却很小,以及付出了较小effort的行业,贡献却很大。 + 4. 分析行业平均单子金额,分析平均单子金额较大的行业 + 5. 依据你作为一个销售领域专家的身份,给出上述要点没有覆盖到的洞见 + 输入: + 未成单商机数据 + {text_pipeline} + 输出: + 按照上述要点,给出分析结果。 +""" + +print(agent.send_message(prompt_pipeline)) + +prompt_won_pipeline_comparison = f""" + 任务: + 请根据以下输入的数据,按照以下要点以及背景知识,进行数据分析和解读,并给出分析结果。 + 背景知识: + 行业贡献:可以理解为ACV和预估ACV的金额大小,金额越大,则通常该行业的市场潜力和对公司的销售贡献越大。 + 行业effort:可以理解为订单的数量,订单数量越多,则通常该行业的销售努力程度越大。此处一个潜在假定是,每个订单的所要付出的effort是接近的,无论其金额大小。 + 要点: + 1. 分析已成单数据和未成单商机数据对比的不同之处 + 2. 分析已成单数据和未成单商机数据的趋势变化(ACV产出的预计变化) + 3. 分析已成单数据和未成单商机数据的effort变化(跟进单子数量的趋势变化) + 4. 分析已成单数据和未成单商机数据的平均单子大小的变化(行业比行业,看行业跟进单子大小趋势变化) + 输入: + 已成单数据: + {text_won} + 未成单商机数据: + {text_pipeline} + 输出: + 按照上述要点,给出分析结果。 +""" + +print(agent.send_message(prompt_won_pipeline_comparison)) + diff --git a/llm_criteria_reflection.py b/llm_criteria_reflection.py new file mode 100644 index 0000000..8f91817 --- /dev/null +++ b/llm_criteria_reflection.py @@ -0,0 +1,126 @@ +# This Python file uses the following encoding: utf-8 + +""" +File: criteria_reflection.py +Description: 以专业咨询机构的赢单路径为参考,结合公司实际统计数据进行反思,提出改进版本的赢单路径 + +Author: [Your Name] +Date: [Current Date] +""" +from AgentProxy import AgentProxy +import pandas as pd + +df_custom = pd.read_excel('./data_doc/销售策略制定框架模板(V3.0)-赢单路径-AI.xlsx') +df_pro = pd.read_excel('./data_doc/销售策略制定框架模板(V3.0)-赢单路径- Manual.xlsx') + + + +api_key = 'c6bbe7f48063a2c1' +api_secret = '5f8e7d3a97465cc099bf19bd1b70c266' +assistant_id = "66bb09a84673b57506fe7bbd" +agent = AgentProxy(assistant_id, api_key, api_secret) + +reflection_path = [] # 记录反思后的赢单路径 + +# # Iterate over professional_won_path and get index in the loop +for index, pro_stage in df_pro.iterrows(): + # Get the corresponding row from df_custom + custom_stage = df_custom.iloc[index] if index < len(df_custom) else pd.Series() + reflection_stage = pro_stage.copy() + print(f"Index: {index}") + # print(f"---pro_stage---") + # print(f"销售阶段名称: {pro_stage['销售阶段名称']}") + # print(f"销售阶段任务: {pro_stage['销售阶段任务']}") + # print(f"销售关键动作: {pro_stage['销售关键动作']}") + # print(f"阶段转化标准: {pro_stage['阶段转化标准']}") + + + # print(f"---custom_stage---") + # print(f"销售阶段名称: {custom_stage['销售阶段名称']}") + # print(f"销售阶段任务: {custom_stage['销售阶段任务']}") + # print(f"销售关键动作: {custom_stage['销售关键动作']}") + # print(f"阶段转化标准: {custom_stage['阶段转化标准']}") + + + # 反思销售阶段任务 + prompt_reflection_task = f""" + 任务: + 根据当前的销售阶段 {pro_stage['销售阶段名称']} + 以专业咨询机构提出的销售阶段任务为参考和蓝本,结合客户自行总结的销售任务,提出改进版本的销售阶段任务,注意尽可能以专业机构的版本为主,语言、风格也按照专业机构的版本。 + 若客户自行总结的销售阶段任务为空或没有内容,则直接使用专业咨询机构提出的销售阶段任务。 + 输入: + 当前的销售阶段 + {pro_stage['销售阶段名称']} + 专业咨询机构提出的销售阶段任务: + {pro_stage['销售阶段任务']} + 客户自行总结的销售任务 + {custom_stage['销售阶段任务']} + 输出: + 反思后的销售阶段任务,以及反思后的销售阶段任务与专业咨询机构提出的销售阶段任务的差异,以及该改进的方法、依据、逻辑等 + """ + print(f"prompt_reflection_task: {prompt_reflection_task}") + reflection_task = agent.send_message(prompt_reflection_task) + print(f"反思后的销售阶段任务: {reflection_task}") + + + reflection_stage['销售阶段任务'] = reflection_task + + # 反思销售关键动作 + prompt_reflection_action = f""" + 任务: + 根据当前的销售阶段 {pro_stage['销售阶段名称']} + 以专业咨询机构提出的销售关键动作为参考和蓝本,结合客户自行总结的销售关键动作,提出改进版本的销售关键动作,注意尽可能以专业机构的版本为主,语言、风格也比照专业机构的版本。 + 若结合客户自行总结的销售关键动作为空或没有内容,则直接使用专业咨询机构提出的销售关键动作。 + 输入: + 当前的销售阶段 + {pro_stage['销售阶段名称']} + 专业咨询机构提出的销售关键动作: + {pro_stage['销售关键动作']} + 通过客户自行总结得到的销售关键动作: + {custom_stage['销售关键动作']} + 输出: + 反思后的销售关键动作,以及反思后的销售关键动作与专业咨询机构提出的销售关键动作的差异,以及该改进的方法、依据、逻辑等 + """ + print(f"prompt_reflection_action: {prompt_reflection_action}") + reflection_action = agent.send_message(prompt_reflection_action) + print(f"反思后的销售关键动作: {reflection_action}") + reflection_stage['销售关键动作'] = reflection_action + + # 反思阶段转化标准 + prompt_reflection_standard = f""" + 任务: + 根据当前的销售阶段 {pro_stage['销售阶段名称']} + 以专业咨询机构提出的阶段转化标准为参考和蓝本,结合客户自行总结的阶段转化标准,提出改进版本的阶段转化标准,注意尽可能以专业机构的版本为主,语言、风格也比照专业机构的版本。 + 若通过客户自行总结得到的阶段转化标准为空或没有内容,则直接使用专业咨询机构提出的阶段转化标准。 + + 输入: + 当前的销售阶段 + {pro_stage['销售阶段名称']} + 专业咨询机构提出的阶段转化标准: + {pro_stage['阶段转化标准']} + 通过客户自行总结得到的阶段转化标准: + {custom_stage['阶段转化标准']} + 输出: + 反思后的阶段转化标准,以及反思后的阶段转化标准与专业咨询机构提出的阶段转化标准的差异,以及该改进的方法、依据、逻辑等 + """ + print(f"prompt_reflection_standard: {prompt_reflection_standard}") + reflection_standard = agent.send_message(prompt_reflection_standard) + print(f"反思后的阶段转化标准: {reflection_standard}") + reflection_stage['阶段转化标准'] = reflection_standard + + reflection_path.append(reflection_stage) + +# Write reflection_path to Excel +df = pd.DataFrame(reflection_path) + +# Reorder columns to match the original structure +column_order = [ + "销售阶段名称", "客户采购行为", "销售阶段任务", "关键获取信息", + "销售关键动作", "售前关键动作", "客户支持行为", "阶段转化标准" +] +df = df.reindex(columns=column_order) + +# Write to Excel +excel_file_path = 'reflection_path_results_v2.xlsx' +df.to_excel(excel_file_path, index=False) +print(f"Reflection path results have been written to {excel_file_path}") diff --git a/output/acv_analysis_combined.xlsx b/output/acv_analysis_combined.xlsx new file mode 100644 index 0000000..4f98560 Binary files /dev/null and b/output/acv_analysis_combined.xlsx differ diff --git a/output/acv_analysis_v2(with count).xlsx b/output/acv_analysis_v2(with count).xlsx new file mode 100644 index 0000000..26dea88 Binary files /dev/null and b/output/acv_analysis_v2(with count).xlsx differ diff --git a/output/pipeline_sub_industry_dist_sum.xlsx b/output/pipeline_sub_industry_dist_sum.xlsx new file mode 100644 index 0000000..b282be0 Binary files /dev/null and b/output/pipeline_sub_industry_dist_sum.xlsx differ diff --git a/random_pick_crm_mandatory.py b/random_pick_crm_mandatory.py new file mode 100644 index 0000000..880d158 --- /dev/null +++ b/random_pick_crm_mandatory.py @@ -0,0 +1,24 @@ +from linguistic_checker import LinguisticChecker +import pandas as pd + +api_key = '25bda2c39c0f8ca0' +api_secret = 'e0008b9b9727cb8ceea5a132dbe62495' +assistant_id = "66bb09a84673b57506fe7bbd" + +checker = LinguisticChecker(api_key, api_secret, assistant_id) + +df = pd.read_excel('./data_src/pingcap_pipeline.xlsx') + +# Iterate over the DataFrame +for index, row in df.iterrows(): + try: + # Assuming 'CRM Field' and 'User Input' are column names in the Excel file + # Adjust these names if they're different in your actual file + crm_field = row['CRM Field'] + user_input = row['User Input'] + + # Check the input using the LinguisticChecker + result = checker.check_input(crm_field, user_input) + except Exception as e: + print(f"Error processing row {index}: {str(e)}") + result = None diff --git a/reflection_path_results_v2.xlsx b/reflection_path_results_v2.xlsx new file mode 100644 index 0000000..d130619 Binary files /dev/null and b/reflection_path_results_v2.xlsx differ