From 0074e954dd736eb91fd871185f32c5f9d65b9257 Mon Sep 17 00:00:00 2001 From: Tiger Ren Date: Wed, 31 Jul 2024 17:11:29 +0800 Subject: [PATCH] =?UTF-8?q?init=20=E5=8C=97=E6=9E=81=E6=98=9F=E5=BE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ExcelHelper.py | 48 +++++++++++++++ README.md | 4 ++ customer_aqusition_0.json | 19 ++++++ customer_aqusition_1.json | 43 +++++++++++++ customer_aqusition_2.json | 75 +++++++++++++++++++++++ customer_aqusition_3.json | 59 ++++++++++++++++++ output.xlsx | Bin 0 -> 9119 bytes output_副本.xlsx | Bin 0 -> 9119 bytes promptAgent.py | 124 ++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 10 files changed, 373 insertions(+) create mode 100644 ExcelHelper.py create mode 100644 customer_aqusition_0.json create mode 100644 customer_aqusition_1.json create mode 100644 customer_aqusition_2.json create mode 100644 customer_aqusition_3.json create mode 100644 output.xlsx create mode 100644 output_副本.xlsx create mode 100644 promptAgent.py create mode 100644 requirements.txt diff --git a/ExcelHelper.py b/ExcelHelper.py new file mode 100644 index 0000000..1f0d882 --- /dev/null +++ b/ExcelHelper.py @@ -0,0 +1,48 @@ +import openpyxl +from openpyxl.styles import Font + +class ExcelHelper: + def __init__(self, data): + """ + 初始化 ExcelHelper 实例 + :param data: 包含多个数组的列表,每个数组包含字典,每个字典有 'title' 和 'content' 键 + """ + self.data = data + self.workbook = openpyxl.Workbook() + self.sheet = self.workbook.active + + def create_excel(self, filename): + """ + 创建 Excel 文件并保存 + :param filename: 保存的文件名 + """ + start_row = 1 + for array in self.data: + col = 1 + for item in array: + self.sheet.cell(row=start_row, column=col, value=item['title']).font = Font(bold=True) + self.sheet.cell(row=start_row + 1, column=col, value=item['content']) + col += 1 + # 在每个数组之间添加两行空行 + start_row += 3 + + self.workbook.save(filename) + print(f"Excel 文件已保存为 {filename}") + +# # 示例数据 +# data = [ +# [ +# {'title': 'Title 1', 'content': 'Content 1'}, +# {'title': 'Title 2', 'content': 'Content 2'}, +# {'title': 'Title 3', 'content': 'Content 3'} +# ], +# [ +# {'title': 'Title 4', 'content': 'Content 4'}, +# {'title': 'Title 5', 'content': 'Content 5'}, +# {'title': 'Title 6', 'content': 'Content 6'} +# ] +# ] + +# # 创建 ExcelHelper 实例并生成 Excel 文件 +# excel_helper = ExcelHelper(data) +# excel_helper.create_excel('output.xlsx') diff --git a/README.md b/README.md index e8fd9e6..2a6e9b8 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # market_assistant +pip install -r requirements.txt + +可参考customer_aqusition.json定义prompt提问链 +结果输出到output.txt \ No newline at end of file diff --git a/customer_aqusition_0.json b/customer_aqusition_0.json new file mode 100644 index 0000000..cb6ed0b --- /dev/null +++ b/customer_aqusition_0.json @@ -0,0 +1,19 @@ +[ + { + "id": 200, + "topic": "客户选择的标准化", + "title": "客户性质类别", + "prompt": "在客户选择的标准化上,请列出该公司的客户性质、类别,并判断是否一致? 如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 210, + "negative_next": -1 + + }, + { + "id": 210, + "topic": "客户选择的标准化", + "title": "统一部门", + "prompt": "在客户选择的标准化上,该公司是否由同一部门接触客户?如果有,请列出该部门?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": -1, + "negative_next": -1 + } +] \ No newline at end of file diff --git a/customer_aqusition_1.json b/customer_aqusition_1.json new file mode 100644 index 0000000..3405f16 --- /dev/null +++ b/customer_aqusition_1.json @@ -0,0 +1,43 @@ +[ + { + "id": 100, + "topic": "获客流程标准化", + "title": "销售阶段定义", + "prompt": "在获客流程的标准化上面,该公司是否有销售阶段定义?如果有,都有哪些阶段? 如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 110, + "negative_next": 130 + + }, + { + "id": 110, + "topic": "获客流程标准化", + "title": "阶段转化标准", + "prompt": "在获客流程的标准化上面,该公司是否有销售阶段的转化标准?如果有,请详细列出每个阶段的转化标准?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 120, + "negative_next": 130 + }, + { + "id": 120, + "topic": "获客流程标准化", + "title": "CRM每个阶段关键留存信息抽取", + "prompt": "在获客流程的标准化上面,该公司在每个销售阶段是否由CRM做关键留存信息抽取?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 130, + "negative_next": 130 + }, + { + "id": 130, + "topic": "获客流程标准化", + "title": "阶段目标", + "prompt": "在获客流程的标准化上面,该公司在每个销售阶段是否有阶段目标?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 140, + "negative_next": 140 + }, + { + "id": 140, + "topic": "获客流程标准化", + "title": "阶段活动", + "prompt": "在获客流程的标准化上面,该公司在每个销售阶段是否定义了阶段活动?如果有,请列出。如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": -1, + "negative_next": -1 + } +] \ No newline at end of file diff --git a/customer_aqusition_2.json b/customer_aqusition_2.json new file mode 100644 index 0000000..5cc37bb --- /dev/null +++ b/customer_aqusition_2.json @@ -0,0 +1,75 @@ +[ + { + "id": 300, + "topic": "工具模版标准化", + "title": "案例与样板客户", + "prompt": "该公司是否有成功案例和样板客户,以及相关的标准化案例文档?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 310, + "negative_next": 310 + + }, + { + "id": 310, + "topic": "工具模版标准化", + "title": "产品介绍与竞品分析", + "prompt": "在工具流程的标准化上面,该公司是否有自己的产品介绍以及竞品分析,包括但不限于分析竞品的优缺点,制定针对竞品的策略?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 320, + "negative_next": 320 + }, + { + "id": 320, + "topic": "工具模版标准化", + "title": "产品DEMO与优势证明", + "prompt": "在工具流程的标准化上面,该公司是否有产品的相关demo,并在demo中描述产品的优势?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 330, + "negative_next": 330 + }, + { + "id": 330, + "topic": "工具模版标准化", + "title": "各类标准模版材料", + "prompt": "在工具流程的标准化上面,该公司是否有至少一类模版文件,包括但不限于:POC环境要求清单、测试报告模版、招标参数模版、可研报告模板、立项报告模版?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 340, + "negative_next": 340 + }, + { + "id": 340, + "topic": "工具模版标准化", + "title": "模版更新机制", + "prompt": "在工具流程的标准化上面,该公司是否有定期更新模版以适应市场变化的机制?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 400, + "negative_next": 400 + }, + { + "id": 400, + "topic": "培训与指导", + "title": "产品知识与销售技巧", + "prompt": "在培训与指导上面,该公司是否有一些培训材料?这些培训内容里,是否明确讲述了产品优势?是否采用有效的培训方法,比如在销售价值传递方法或者技巧方面,做出应有的指导?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 410, + "negative_next": 410 + }, + { + "id": 500, + "topic": "市场活动与宣传资料", + "title": "标准化的宣传", + "prompt": "在市场活动与宣传资料上面,该公司是否有标准化的宣传材料,以及明确的宣传重点?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 510, + "negative_next": 510 + }, + { + "id": 510, + "topic": "市场活动与宣传资料", + "title": "客户群影响和反馈", + "prompt": "在市场活动与宣传资料上面,该公司是否有收集相关的市场反馈,比如这些活动是否对客户群起到了一定范围的影响,影响的重点是怎样的?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 600, + "negative_next": 600 + }, + { + "id": 600, + "topic": "产品优势总结", + "title": "产品优势传递方法", + "prompt": "在产品优势总结上面,该公司是否有系统化的方法来总结和传递产品优势,比如是否有效利用CRM系统来管理客户信息和销售流程,或者是否有记录和展现销售行动的机制,以确保销售策略的一致性和可追踪性?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": -1, + "negative_next": -1 + } +] \ No newline at end of file diff --git a/customer_aqusition_3.json b/customer_aqusition_3.json new file mode 100644 index 0000000..70876da --- /dev/null +++ b/customer_aqusition_3.json @@ -0,0 +1,59 @@ +[ + { + "id": 800, + "topic": "指标", + "title": "销售周期长度", + "prompt": "该公司销售指标是否定义了销售周期长度?如果有,是多少?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 810, + "negative_next": 810 + + }, + { + "id": 810, + "topic": "指标", + "title": "阶段转换率", + "prompt": "该公司销售指标是否定义了销售阶段转换率?如果有,请列出?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 820, + "negative_next": 820 + }, + { + "id": 820, + "topic": "指标", + "title": "客户触点数量", + "prompt": "该公司销售指标是否定义了客户触点数量?如果有,请列出。如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 830, + "negative_next": 830 + }, + { + "id": 830, + "topic": "指标", + "title": "赢单率", + "prompt": "该公司销售指标是否定义了赢单率?如果有,请列出。如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 840, + "negative_next": 840 + }, + { + "id": 840, + "topic": "指标", + "title": "客户信息管理一致性", + "prompt": "该公司销售指标是否确保客户信息管理一致性?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 850, + "negative_next": 850 + }, + { + "id": 850, + "topic": "指标", + "title": "销售活动一致性", + "prompt": "该公司销售指标是否确保销售活动一致性?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": 860, + "negative_next": 860 + }, + { + "id": 860, + "topic": "指标", + "title": "CRM填写频度和完整性", + "prompt": "该公司销售指标是否确保CRM填写频度和完整性?如果答案是肯定的,请在最后附加一句“正向处理”,如果是否定的或无法确定附加一句“负向处理”", + "affirm_next": -1, + "negative_next": -1 + } +] \ No newline at end of file diff --git a/output.xlsx b/output.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..87f243298fbe8add18e25741b2d79a1bb9d24a24 GIT binary patch literal 9119 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 YEM+;Ex7iE;0O9Q?_?E%t$p3o!e@#Z$8UO$Q literal 0 HcmV?d00001 diff --git a/output_副本.xlsx b/output_副本.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..87f243298fbe8add18e25741b2d79a1bb9d24a24 GIT binary patch literal 9119 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 YEM+;Ex7iE;0O9Q?_?E%t$p3o!e@#Z$8UO$Q literal 0 HcmV?d00001 diff --git a/promptAgent.py b/promptAgent.py new file mode 100644 index 0000000..dcde4ef --- /dev/null +++ b/promptAgent.py @@ -0,0 +1,124 @@ +import json +import requests +from ExcelHelper import ExcelHelper + +def handle_response(data_dict): + message = data_dict.get("message") + if len(message) > 0: + content = message.get("content") + if len(content) > 0: + response_type = content.get("type") + if response_type == "text": + text = content.get("text", "No text provided") + return f"{text}" + + elif response_type == "image": + images = content.get("image", []) + image_urls = ", ".join(image.get("image_url") for image in images) + return f"{image_urls}" + + elif response_type == "code": + return f"{content.get('code')}" + + elif response_type == "execution_output": + return f"{content.get('content')}" + + elif response_type == "system_error": + return f"{content.get('content')}" + + elif response_type == "tool_calls": + return f"{data_dict['tool_calls']}" + + elif response_type == "browser_result": + content = json.loads(content.get("content", "{}")) + return f"Browser Result - Title: {content.get('title')} URL: {content.get('url')}" + +def send_message(assistant_id, access_token, prompt, conversation_id=None, file_list=None, meta_data=None): + url = "https://chatglm.cn/chatglm/assistant-api/v1/stream" + headers = { + "Authorization": f"Bearer {access_token}", + "Content-Type": "application/json" + } + data = { + "assistant_id": assistant_id, + "prompt": prompt, + } + + + if conversation_id: + data["conversation_id"] = conversation_id + if file_list: + data["file_list"] = file_list + if meta_data: + data["meta_data"] = meta_data + + with requests.post(url, json=data, headers=headers) as response: + if response.status_code == 200: + for line in response.iter_lines(): + if line: + decoded_line = line.decode('utf-8') + if decoded_line.startswith('data:'): + data_dict = json.loads(decoded_line[5:]) + output = handle_response(data_dict) + + + else: + return "Request failed", response.status_code + print(output) + return output + +def get_access_token(api_key, api_secret): + url = "https://chatglm.cn/chatglm/assistant-api/v1/get_token" + data = { + "api_key": api_key, + "api_secret": api_secret + } + + response = requests.post(url, json=data) + token_info = response.json() + return token_info['result']['access_token'] + +def process_nodes(process): + if (process == None): + return + item = process[0] + + while (item != None): + prompt = item['prompt'] + print(f'process node {item}') + result = send_message(assistant_id, access_token, prompt) + item['content'] = result + # if String result contains "继续处理" + if "正向处理" in result: + item = next((element for element in process if element['id'] == item["affirm_next"]), None) + else: + item = next((element for element in process if element['id'] == item["negative_next"]), None) + + for item in process: + if item.get('content') is None: + item['content'] = "" + + return process + + +# Here you need to replace the API Key and API Secret with your,I provide a test key and secret here +api_key = '25bda2c39c0f8ca0' +api_secret = 'e0008b9b9727cb8ceea5a132dbe62495' +token = get_access_token(api_key, api_secret) + +assistant_id = "669e203f9752cb52401d2871" +access_token = token + +excelData = [] + +# load customer aqusition process +for index in range(0, 4): + file_path = f'customer_aqusition_{index}.json' + customer_aqusition_process = json.loads(open(file_path, 'r').read()) + customer_aqusition_process = process_nodes(customer_aqusition_process) + excelData.append(customer_aqusition_process) + + +# 创建 ExcelHelper 实例并生成 Excel 文件 +excel_helper = ExcelHelper(excelData) +excel_helper.create_excel('output.xlsx') \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a717bf1 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +openpyxl \ No newline at end of file