增加生成日报的功能,以及缺失信息补充后再次生成日报功能
This commit is contained in:
parent
62a5b5396d
commit
e382fcb04e
|
|
@ -1,4 +1,5 @@
|
|||
import logging,json
|
||||
from datetime import datetime
|
||||
from flask import Blueprint, request, Response
|
||||
from app.services.zhipu_service import ZhipuService
|
||||
from app.services.zhipu_alltool_service import ZhipuAlltoolService
|
||||
|
|
@ -70,8 +71,49 @@ def retrive_stream():
|
|||
return Response(event_stream_retrive(), content_type='text/event-stream')
|
||||
|
||||
elif classification_result.get('category')== 'generate_report':
|
||||
#do something
|
||||
pass
|
||||
def event_stream_generate_report():
|
||||
# Here is the hack information
|
||||
# 1. 获取到当前的日期
|
||||
# 2. append 项目信息
|
||||
prompt_project_info = "项目:数字电网项目"
|
||||
prompt_date = datetime.now().strftime("%Y-%m-%d")
|
||||
prompt_report_template = PromptRepository().get_prompt("report_template")
|
||||
prompt_report_title = f"根据日志模版的样式,查询{prompt_project_info} {prompt_date} 销售日志并生成日志报告,注意需要同时提取非项目进展的信息。如果有缺失的要点,请提示用户补充信息\n {prompt_report_template}。输出:1. 日志报告 \n 2. 缺失的要点(如果存在)"
|
||||
generated_report = ""
|
||||
for chunk in zhipu_service.retrive_sse(prompt_report_title + message, knowledge_id, None):
|
||||
if chunk:
|
||||
print(chunk)
|
||||
generated_report += chunk
|
||||
yield chunk
|
||||
|
||||
# # 3. 判断日志是否存在缺失项
|
||||
# for chunk in zhipu_service.check_report_missing_info(generated_report):
|
||||
# if chunk:
|
||||
# yield chunk
|
||||
|
||||
return Response(event_stream_generate_report(), content_type='text/event-stream')
|
||||
elif classification_result.get('category')== 'update_report':
|
||||
# 1. submit report
|
||||
submit_result = zhipu_file_service.submit_file(prefix="销售日志",project_name="数字电网项目", file_content=message)
|
||||
|
||||
#2. 重新生成日报
|
||||
def event_stream_generate_report_updated():
|
||||
# Here is the hack information
|
||||
# 1. 获取到当前的日期
|
||||
# 2. append 项目信息
|
||||
prompt_project_info = "项目:数字电网项目"
|
||||
prompt_date = datetime.now().strftime("%Y-%m-%d")
|
||||
prompt_report_template = PromptRepository().get_prompt("report_template")
|
||||
prompt_report_title = f"根据日志模版的样式,查询{prompt_project_info} {prompt_date} 销售日志并生成日志报告,注意需要同时提取非项目进展的信息。如果有缺失的要点,请提示用户补充信息,如有多个版本,请合并信息\n {prompt_report_template}。输出:1. 日志报告 \n 2. 缺失的要点(如果存在)"
|
||||
generated_report = ""
|
||||
for chunk in zhipu_service.retrive_sse(prompt_report_title + message, knowledge_id, None):
|
||||
if chunk:
|
||||
print(chunk)
|
||||
generated_report += chunk
|
||||
yield chunk
|
||||
return Response(event_stream_generate_report_updated(), content_type='text/event-stream')
|
||||
else:
|
||||
return "输入意图判断不明,请明确意图"
|
||||
|
||||
|
||||
|
||||
|
|
@ -133,9 +175,8 @@ def alltool_classify_non_stream():
|
|||
print(f'response: {response}')
|
||||
return response
|
||||
|
||||
@zhipu_controller.route('/zhipu/file', methods=['POST'])
|
||||
@zhipu_controller.route('/zhipu/file/submit', methods=['POST'])
|
||||
def submit_report():
|
||||
username = "user"
|
||||
data = request.json
|
||||
report_text = data.get('report_text', '')
|
||||
project_name = data.get('project_name', '')
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ class ZhipuAlltoolService:
|
|||
"properties": {
|
||||
"category": {
|
||||
"type": "string",
|
||||
"description": "用户的意图有以下选项:web_search,retrive_knowledge,generate_report",
|
||||
"description": "用户的意图有以下选项:web_search,retrive_knowledge,generate_report,update_report",
|
||||
}
|
||||
},
|
||||
"required": ["category"],
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
import logging
|
||||
import time
|
||||
from zhipuai import ZhipuAI
|
||||
from app.utils.prompt_repository import PromptRepository
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
|
@ -121,4 +122,32 @@ class ZhipuService:
|
|||
logger.info("retrive_sse call completed in %.2f seconds", end_time - start_time)
|
||||
except Exception as e:
|
||||
logger.error("Error in retrive_sse: %s", str(e))
|
||||
raise
|
||||
raise
|
||||
|
||||
def check_report_missing_info(self, message):
|
||||
logger.info("Starting check_report_missing_info call")
|
||||
|
||||
#1. 日志模版
|
||||
prompt_report_template = PromptRepository().get_prompt("report_template")
|
||||
|
||||
prompt_report_missing_check = f"""{prompt_report_template}
|
||||
请检查以下日志信息是否完整,如果信息缺失则提示要求用户需要补充的信息要点,如果信息完整请直接返回“上述日志信息为全部信息”。日志信息如下:\n\"\"\"\n{message}\n\"\"\"\n"""
|
||||
|
||||
client = ZhipuAI(api_key=self.app_secret_key)
|
||||
try:
|
||||
response = client.chat.completions.create(
|
||||
model="glm-4-flash",
|
||||
messages=[
|
||||
{"role": "user", "content": prompt_report_missing_check},
|
||||
],
|
||||
stream=True,
|
||||
temperature=0.01,
|
||||
top_p=0.1,
|
||||
)
|
||||
for chunk in response:
|
||||
yield chunk.choices[0].delta.content
|
||||
end_time = time.time()
|
||||
logger.info("check_report_missing_info call completed in %.2f seconds", end_time - start_time)
|
||||
except Exception as e:
|
||||
logger.error("Error in check_report_missing_info: %s", str(e))
|
||||
raise
|
||||
|
|
|
|||
|
|
@ -47,9 +47,28 @@ class PromptRepository:
|
|||
- 阶段转化标准: 1.客户明确表示取消项目 2.投标确认状态为输单
|
||||
"""
|
||||
|
||||
DEFAULT_REPORT_TEMPLATE = f"""以下是销售日志信息模版,其中列出了需要描述的要点:
|
||||
一、项目进展
|
||||
1,【项目名称】
|
||||
时间:【时间】
|
||||
参与人:【参与人角色-姓名】
|
||||
事件:【电话、会议、邮件、拜访等】
|
||||
获得信息:【信息内容】
|
||||
**信息/来源:【信息来源】
|
||||
项目进展描述:【项目进展描述】
|
||||
二、非项目进展
|
||||
1,事件:【事件名称】
|
||||
时间:【日期】
|
||||
参与人:【参与人角色-姓名】
|
||||
获得信息:【信息内容】
|
||||
**信息/来源:【信息来源】
|
||||
事件结果描述:【事件结果描述】
|
||||
"""
|
||||
|
||||
PROMPTS = {
|
||||
"default_retrieval": DEFAULT_RETRIEVAL_PROMPT,
|
||||
"sales_analysis": DEFAUT_SALES_ANALYSIS_PROMPT,
|
||||
"report_template": DEFAULT_REPORT_TEMPLATE,
|
||||
# Add more prompts here as needed
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue