增加销售日志分析接口
This commit is contained in:
parent
2c663d66d7
commit
df1b5c3278
|
|
@ -1,5 +1,6 @@
|
|||
from flask import Blueprint, request, jsonify, Response
|
||||
from flask import Blueprint, request, Response
|
||||
from app.services.zhipu_service import ZhipuService
|
||||
from app.utils.prompt_repository import PromptRepository # Add this import
|
||||
|
||||
zhipu_controller = Blueprint('zhipu_controller', __name__)
|
||||
zhipu_service = ZhipuService()
|
||||
|
|
@ -48,3 +49,40 @@ def retrive_stream():
|
|||
return response
|
||||
|
||||
|
||||
@zhipu_controller.route('/zhipu/analysis/stream', methods=['POST'])
|
||||
def analysis_stream():
|
||||
data = request.json
|
||||
message = data.get('message', '')
|
||||
knowledge_id = data.get('knowledge_id', '')
|
||||
|
||||
# 获取business info
|
||||
prompt_get_business_info = f"""
|
||||
请根据用户提供的如下信息,查找相关的 '当前详细状态及Close节奏','Sales stage' 信息,并返回给用户:
|
||||
{message}
|
||||
"""
|
||||
business_info = zhipu_service.retrive(prompt_get_business_info, knowledge_id, None)
|
||||
print(f'business_info: {business_info}')
|
||||
|
||||
analysis_rule = PromptRepository().get_prompt('sales_analysis')
|
||||
print(f'analysis_rule: {analysis_rule}')
|
||||
|
||||
# 根据当前详细状态及Close节奏,以及Sales stage,给出分析
|
||||
prompt_analysis = f"""
|
||||
请根据查询到的上述商机信息:
|
||||
{business_info}
|
||||
根据如下各销售阶段的销售阶段任务、销售关键动作、阶段转化标准:
|
||||
{analysis_rule}
|
||||
结合上述商机信息的对应阶段,分析并判断其销售动作是否完成了前一阶段的准出标准,以及是否支持将销售阶段转化到当前阶段
|
||||
1. **销售阶段分析**
|
||||
2. **销售动作日志分析**
|
||||
3. **销售动作与销售阶段的关系**
|
||||
4. **判断结果**
|
||||
5. **销售阶段分析报告**
|
||||
"""
|
||||
|
||||
def event_stream():
|
||||
for chunk in zhipu_service.talk_to_zhipu_sse(prompt_analysis):
|
||||
if chunk:
|
||||
yield chunk
|
||||
|
||||
return Response(event_stream(), content_type='text/event-stream')
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
from zhipuai import ZhipuAI
|
||||
|
||||
|
||||
class ZhipuService:
|
||||
def __init__(self):
|
||||
self.model_name = "glm-4"
|
||||
|
|
@ -88,4 +89,3 @@ class ZhipuService:
|
|||
for chunk in response:
|
||||
print(chunk.choices[0].delta.content)
|
||||
yield chunk.choices[0].delta.content
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,66 @@
|
|||
class PromptRepository:
|
||||
DEFAULT_RETRIEVAL_PROMPT = """从文档
|
||||
\"\"\"
|
||||
{{knowledge}}
|
||||
\"\"\"
|
||||
中找问题
|
||||
\"\"\"
|
||||
{{question}}
|
||||
\"\"\"
|
||||
的答案,找到答案就仅使用文档语句回答问题,找不到答案就用自身知识回答并且告诉用户该信息不是来自文档。
|
||||
不要复述问题,直接开始回答。"""
|
||||
|
||||
DEFAUT_SALES_ANALYSIS_PROMPT = """
|
||||
1. 01-prospecting:
|
||||
- 销售阶段任务: 了解客户信息、与客户进行交流,初步了解客户需求,并确定项目对接人,进入客户供应商名单
|
||||
- 销售关键动作: 1、了解客户组织架构,了解客户现有系统使用情况、竞品使用情况 2、判断匹配度 3、明确关键部门及其关键人 4、明确客户是否有对应预算
|
||||
- 阶段转化标准: 1.客户有需求 2.有明确的项目联系人
|
||||
|
||||
2. 02-evaluation:
|
||||
- 销售阶段任务: 收集客户信息,了解客户内部预算情况、预期的项目落地时间、产品和数量等,判断商机可靠性;组织技术交流,讲解公司解决方案,传递公司价值
|
||||
- 销售关键动作: 1、整理需求确认文档,客户确认 2、在CRM录入组织架构,明确决策链和决策人 3、了解决策链的每个客户动力; 4.发展线人 5、组织技术交流,传递公司及产品价值,引导客户的场景和我们的特性结合 6、组织技术交流,了解预期的项目落地时间、产品和数量等 7.和客户确认是否需要测试 8、对客户提出的测试需求进行评估,确定需求我们优势够,决定是否跟进测试
|
||||
- 阶段转化标准: 1.客户有预算 2.有明确的项目时间 3.有预期的产品和数量
|
||||
|
||||
3. 03-qualification:
|
||||
- 销售阶段任务: 收集、确认项目立项信息,明确产品和数量;组织测试必要性并引导客户做poc测试,验证应用场景和技术适用性、平鼎成功入围
|
||||
- 销售关键动作: 1、和客户确认是否需要测试 2、对客户提出的测试需求进行评估,确定需求我们优势够,决定是否跟进测试 3、引导客户的测试方案制定,引导将我们优势点,加入到测试方案中,如:性能、扩展性、边界 4、在公司内部组织测试资源 5、获取客户内部的测试报告,了解真实的测试结论 6、了解客户对测试结果的态度和对手情况 7、做测试正式汇报,和客户达成一致
|
||||
- 阶段转化标准: 1.项目预算批准、项目已立项 2.有确定产品和数量、或 3.完成场景应用/技术适用性验证、客户确定平鼎入围(完成poc)
|
||||
|
||||
4. 04-bidding/negotiating:
|
||||
- 销售阶段任务: 确认项目是否需要招标,提前影响招投标结果并赢得标书;若不需要招标,则完成商务谈判,确认价格和产品可交付沟通与评审
|
||||
- 销售关键动作: 1.制定关单策略及竞争策略 2.控制立项报告(对对手不利的参数) 3.如果无法控制立项,制定应对策略 4.创造机会与高层沟通汇报 5.沟通交付计划及SOW 6. 确定关键联系人
|
||||
- 阶段转化标准: 1.完成可交付评审; 2.投标通过审批; 3.投标结果确认赢标或完成商务谈判,确定价格和产品
|
||||
|
||||
5. 05-contract review:
|
||||
- 销售阶段任务: 发起合同协议审批申请,确认合同条款
|
||||
- 销售关键动作:
|
||||
- 阶段转化标准: 合同评审通过,完成合同协商审批,确认合同条款
|
||||
|
||||
6. 06-closed won:
|
||||
- 销售阶段任务: 合同归档,项目赢单
|
||||
- 销售关键动作:
|
||||
- 阶段转化标准: 合同归档
|
||||
|
||||
7. 06-closed cancel:
|
||||
- 销售阶段任务: 复盘项目输单原因
|
||||
- 销售关键动作:
|
||||
- 阶段转化标准: 1.客户明确表示取消项目 2.投标确认状态为输单
|
||||
"""
|
||||
|
||||
PROMPTS = {
|
||||
"default_retrieval": DEFAULT_RETRIEVAL_PROMPT,
|
||||
"sales_analysis": DEFAUT_SALES_ANALYSIS_PROMPT,
|
||||
# Add more prompts here as needed
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def get_prompt(cls, prompt_name):
|
||||
return cls.PROMPTS.get(prompt_name, None)
|
||||
|
||||
@classmethod
|
||||
def add_prompt(cls, prompt_name, prompt_content):
|
||||
cls.PROMPTS[prompt_name] = prompt_content
|
||||
|
||||
@classmethod
|
||||
def remove_prompt(cls, prompt_name):
|
||||
cls.PROMPTS.pop(prompt_name, None)
|
||||
Loading…
Reference in New Issue