增加生成日报的功能,以及缺失信息补充后再次生成日报功能

This commit is contained in:
Tiger Ren 2024-10-15 19:49:28 +08:00
parent 62a5b5396d
commit e382fcb04e
4 changed files with 95 additions and 6 deletions

View File

@ -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', '')

View File

@ -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"],

View File

@ -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

View File

@ -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
}