|
|
@@ -181,84 +181,84 @@ class OutlineGeneratorAgent:
|
|
|
|
|
|
# 构建基础提示词
|
|
|
base_prompt = f"""[角色定义]
|
|
|
-你的角色是: 流水分析报告的大纲生成模块。
|
|
|
-你的目标是:{question},生成一份针对{industry}行业的全面的流水分析报告大纲。
|
|
|
-生成结构清晰、可被程序解析的JSON格式大纲,明确每个章节及其下属分析主题所需的分析指标。
|
|
|
-
|
|
|
-[职责边界]
|
|
|
-你只能完成以下事项:
|
|
|
-1.确定{industry}流水分析报告应包含的章节结构
|
|
|
-2.明确每个章节下需要覆盖的分析主题
|
|
|
-3.为每个分析主题列出所需的计算指标、统计指标或分析指标
|
|
|
-
|
|
|
-你不得做以下任何事情:
|
|
|
-1.不得计算任何指标
|
|
|
-2.不得对流水数据进行分析
|
|
|
-3.不得判断交易是否异常或存在风险
|
|
|
-4.不得生成任何分析结论、判断性描述或报告正文
|
|
|
-5.不得决定分析执行顺序或分析方法
|
|
|
-
|
|
|
-你输出的内容仅是"分析需求清单",而不是"分析结果"。
|
|
|
-
|
|
|
-[可用指标总览]
|
|
|
-系统当前支持 {len(available_metrics)} 个指标。
|
|
|
-指标内容为{available_metrics}
|
|
|
-
|
|
|
-[重要要求]
|
|
|
-请根据用户需求和可用指标列表,从上述指标中选择最相关的指标。必须基于用户查询的具体需求进行智能匹配,确保选择的指标能够充分满足分析需求。
|
|
|
-
|
|
|
-[强制要求]
|
|
|
-生成大纲时,请:
|
|
|
-1. 仔细分析用户查询,识别所有提到的分析需求点
|
|
|
-2. 从可用指标中选择能够满足这些需求的完整指标组合
|
|
|
-3. 基于语义相关性进行指标筛选,不要过于保守
|
|
|
-4. 在各章节的metrics对象中,按照指标类型(calculation_metrics/statistical_metrics/analysis_metrics)列出选定的指标
|
|
|
-5. 为每个指标提供metric_name和metric_description字段
|
|
|
-6. 优先选择与用户查询直接相关的指标
|
|
|
-
|
|
|
-[可选择的指标列表]
|
|
|
-{metrics_list_text}
|
|
|
-
|
|
|
-[重要说明]
|
|
|
-请确保:
|
|
|
-- 从提供的可用指标列表中选择最相关的指标
|
|
|
-- 为每个选定的指标提供清晰的名称和描述
|
|
|
-- 输出格式必须严格遵循上述JSON结构
|
|
|
-- 确保选择的指标能够满足用户查询的具体分析需求
|
|
|
-
|
|
|
-[输出格式要求]
|
|
|
-你必须且只能以 JSON 字符串 形式输出分析大纲,不得输出任何解释性自然语言。
|
|
|
-JSON 必须严格遵循以下结构约定:
|
|
|
-{{
|
|
|
- "chapter_title": "string",
|
|
|
- "sections": [
|
|
|
- {{
|
|
|
- "section_id": "string",
|
|
|
- "section_title": "string",
|
|
|
- "section_description": "string",
|
|
|
- "metrics": {{
|
|
|
- "calculation_metrics": [
|
|
|
- {{
|
|
|
- "metric_name": "string",
|
|
|
- "metric_description": "string"
|
|
|
- }}
|
|
|
- ],
|
|
|
- "statistical_metrics": [
|
|
|
- {{
|
|
|
- "metric_name": "string",
|
|
|
- "metric_description": "string"
|
|
|
- }}
|
|
|
- ],
|
|
|
- "analysis_metrics": [
|
|
|
- {{
|
|
|
- "metric_name": "string",
|
|
|
- "metric_description": "string"
|
|
|
- }}
|
|
|
- ]
|
|
|
- }}
|
|
|
- }}
|
|
|
- ]
|
|
|
-}}"""
|
|
|
+ 你的角色是: 流水分析报告的大纲生成模块。
|
|
|
+ 你的目标是:{question},生成一份针对{industry}行业的全面的流水分析报告大纲。
|
|
|
+ 生成结构清晰、可被程序解析的JSON格式大纲,明确每个章节及其下属分析主题所需的分析指标。
|
|
|
+
|
|
|
+ [职责边界]
|
|
|
+ 你只能完成以下事项:
|
|
|
+ 1.确定{industry}流水分析报告应包含的章节结构
|
|
|
+ 2.明确每个章节下需要覆盖的分析主题
|
|
|
+ 3.为每个分析主题列出所需的计算指标、统计指标或分析指标
|
|
|
+
|
|
|
+ 你不得做以下任何事情:
|
|
|
+ 1.不得计算任何指标
|
|
|
+ 2.不得对流水数据进行分析
|
|
|
+ 3.不得判断交易是否异常或存在风险
|
|
|
+ 4.不得生成任何分析结论、判断性描述或报告正文
|
|
|
+ 5.不得决定分析执行顺序或分析方法
|
|
|
+
|
|
|
+ 你输出的内容仅是"分析需求清单",而不是"分析结果"。
|
|
|
+
|
|
|
+ [可用指标总览]
|
|
|
+ 系统当前支持 {len(available_metrics)} 个指标。
|
|
|
+ 指标内容为{available_metrics}
|
|
|
+
|
|
|
+ [重要要求]
|
|
|
+ 请根据用户需求和可用指标列表,从上述指标中选择最相关的指标。必须基于用户查询的具体需求进行智能匹配,确保选择的指标能够充分满足分析需求。
|
|
|
+
|
|
|
+ [强制要求]
|
|
|
+ 生成大纲时,请:
|
|
|
+ 1. 仔细分析用户查询,识别所有提到的分析需求点
|
|
|
+ 2. 从可用指标中选择能够满足这些需求的完整指标组合
|
|
|
+ 3. 基于语义相关性进行指标筛选,不要过于保守
|
|
|
+ 4. 在各章节的metrics对象中,按照指标类型(calculation_metrics/statistical_metrics/analysis_metrics)列出选定的指标
|
|
|
+ 5. 为每个指标提供metric_name和metric_description字段
|
|
|
+ 6. 优先选择与用户查询直接相关的指标
|
|
|
+
|
|
|
+ [可选择的指标列表]
|
|
|
+ {metrics_list_text}
|
|
|
+
|
|
|
+ [重要说明]
|
|
|
+ 请确保:
|
|
|
+ - 从提供的可用指标列表中选择最相关的指标
|
|
|
+ - 为每个选定的指标提供清晰的名称和描述
|
|
|
+ - 输出格式必须严格遵循上述JSON结构
|
|
|
+ - 确保选择的指标能够满足用户查询的具体分析需求
|
|
|
+
|
|
|
+ [输出格式要求]
|
|
|
+ 你必须且只能以 JSON 字符串 形式输出分析大纲,不得输出任何解释性自然语言。
|
|
|
+ JSON 必须严格遵循以下结构约定:
|
|
|
+ {{
|
|
|
+ "chapter_title": "string",
|
|
|
+ "sections": [
|
|
|
+ {{
|
|
|
+ "section_id": "string",
|
|
|
+ "section_title": "string",
|
|
|
+ "section_description": "string",
|
|
|
+ "metrics": {{
|
|
|
+ "calculation_metrics": [
|
|
|
+ {{
|
|
|
+ "metric_name": "string",
|
|
|
+ "metric_description": "string"
|
|
|
+ }}
|
|
|
+ ],
|
|
|
+ "statistical_metrics": [
|
|
|
+ {{
|
|
|
+ "metric_name": "string",
|
|
|
+ "metric_description": "string"
|
|
|
+ }}
|
|
|
+ ],
|
|
|
+ "analysis_metrics": [
|
|
|
+ {{
|
|
|
+ "metric_name": "string",
|
|
|
+ "metric_description": "string"
|
|
|
+ }}
|
|
|
+ ]
|
|
|
+ }}
|
|
|
+ }}
|
|
|
+ ]
|
|
|
+ }}"""
|
|
|
|
|
|
return base_prompt
|
|
|
|
|
|
@@ -278,10 +278,10 @@ JSON 必须严格遵循以下结构约定:
|
|
|
# 在prompt末尾添加业务背景信息
|
|
|
full_prompt = f"""{prompt}
|
|
|
|
|
|
-【业务背景信息】
|
|
|
-行业:{industry}
|
|
|
-产品类型:经营贷
|
|
|
-客群类型:小微企业"""
|
|
|
+ 【业务背景信息】
|
|
|
+ 行业:{industry}
|
|
|
+ 产品类型:经营贷
|
|
|
+ 客群类型:小微企业"""
|
|
|
|
|
|
messages = [
|
|
|
("system", "你是一名专业的报告大纲生成专家,必须输出完整、有效的JSON格式,包含所有必需字段。"),
|
|
|
@@ -537,32 +537,33 @@ JSON 必须严格遵循以下结构约定:
|
|
|
|
|
|
try:
|
|
|
missing_prompt = ChatPromptTemplate.from_messages([
|
|
|
- ("system", """你是一个专业的指标推荐专家,需要根据用户查询的关键词,识别出可能缺失的关键指标。
|
|
|
-
|
|
|
-请分析:
|
|
|
-1. 用户关心的分析维度(收入、支出、排名、趋势等)
|
|
|
-2. 已选择的指标
|
|
|
-3. 可用的指标库
|
|
|
-
|
|
|
-推荐一些重要的缺失指标,帮助完善分析报告。
|
|
|
-
|
|
|
-返回格式:
|
|
|
-只返回指标名称列表,用换行符分隔,不要其他解释。
|
|
|
-
|
|
|
-示例:
|
|
|
-总收入分析
|
|
|
-支出占比统计
|
|
|
-交易对手排名"""),
|
|
|
- ("human", """查询关键词:{keywords}
|
|
|
-
|
|
|
-已选择的指标:
|
|
|
-{selected_metrics}
|
|
|
-
|
|
|
-可用指标库:
|
|
|
-{available_metrics}
|
|
|
-
|
|
|
-请推荐一些重要的缺失指标。""")
|
|
|
- ])
|
|
|
+ ("system", """
|
|
|
+ 你是一个专业的指标推荐专家,需要根据用户查询的关键词,识别出可能缺失的关键指标。
|
|
|
+
|
|
|
+ 请分析:
|
|
|
+ 1. 用户关心的分析维度(收入、支出、排名、趋势等)
|
|
|
+ 2. 已选择的指标
|
|
|
+ 3. 可用的指标库
|
|
|
+
|
|
|
+ 推荐一些重要的缺失指标,帮助完善分析报告。
|
|
|
+
|
|
|
+ 返回格式:
|
|
|
+ 只返回指标名称列表,用换行符分隔,不要其他解释。
|
|
|
+
|
|
|
+ 示例:
|
|
|
+ 总收入分析
|
|
|
+ 支出占比统计
|
|
|
+ 交易对手排名"""),
|
|
|
+ ("human", """查询关键词:{keywords}
|
|
|
+
|
|
|
+ 已选择的指标:
|
|
|
+ {selected_metrics}
|
|
|
+
|
|
|
+ 可用指标库:
|
|
|
+ {available_metrics}
|
|
|
+
|
|
|
+ 请推荐一些重要的缺失指标。""")
|
|
|
+ ])
|
|
|
|
|
|
# 格式化输入
|
|
|
selected_list = '\n'.join(selected_metric_names) if selected_metric_names else '无'
|
|
|
@@ -606,30 +607,31 @@ JSON 必须严格遵循以下结构约定:
|
|
|
available_metric_ids = {m.metric_id for m in outline.global_metrics}
|
|
|
|
|
|
assign_prompt = ChatPromptTemplate.from_messages([
|
|
|
- ("system", """你是一个专业的报告结构专家,需要将全局指标智能分配到各个章节。
|
|
|
-
|
|
|
-分配原则:
|
|
|
-1. 每个章节分配3-5个最相关的指标
|
|
|
-2. 指标应与章节内容高度相关
|
|
|
-3. 避免重复分配相同的指标
|
|
|
-4. 优先分配核心指标到主要章节
|
|
|
-
|
|
|
-返回格式:
|
|
|
-为每个章节返回指标ID列表,用分号分隔章节,格式如下:
|
|
|
-章节ID:指标ID1,指标ID2,指标ID3
|
|
|
-
|
|
|
-示例:
|
|
|
-sec_1:metric-total_income,metric-expense_trend,metric-profit_margin
|
|
|
-sec_2:metric-customer_analysis,metric-market_share"""),
|
|
|
- ("human", """报告标题:{report_title}
|
|
|
-
|
|
|
-章节列表:
|
|
|
-{sections}
|
|
|
-
|
|
|
-可用指标:
|
|
|
-{available_metrics}
|
|
|
-
|
|
|
-请为每个章节分配最合适的指标ID。""")
|
|
|
+ ("system", """
|
|
|
+ 你是一个专业的报告结构专家,需要将全局指标智能分配到各个章节。
|
|
|
+
|
|
|
+ 分配原则:
|
|
|
+ 1. 每个章节分配3-5个最相关的指标
|
|
|
+ 2. 指标应与章节内容高度相关
|
|
|
+ 3. 避免重复分配相同的指标
|
|
|
+ 4. 优先分配核心指标到主要章节
|
|
|
+
|
|
|
+ 返回格式:
|
|
|
+ 为每个章节返回指标ID列表,用分号分隔章节,格式如下:
|
|
|
+ 章节ID:指标ID1,指标ID2,指标ID3
|
|
|
+
|
|
|
+ 示例:
|
|
|
+ sec_1:metric-total_income,metric-expense_trend,metric-profit_margin
|
|
|
+ sec_2:metric-customer_analysis,metric-market_share"""),
|
|
|
+ ("human", """报告标题:{report_title}
|
|
|
+
|
|
|
+ 章节列表:
|
|
|
+ {sections}
|
|
|
+
|
|
|
+ 可用指标:
|
|
|
+ {available_metrics}
|
|
|
+
|
|
|
+ 请为每个章节分配最合适的指标ID。""")
|
|
|
])
|
|
|
|
|
|
# 格式化输入
|
|
|
@@ -829,23 +831,24 @@ sec_2:metric-customer_analysis,metric-market_share"""),
|
|
|
|
|
|
# 使用大模型进行语义匹配
|
|
|
match_prompt = ChatPromptTemplate.from_messages([
|
|
|
- ("system", """你是一个专业的指标匹配专家,需要根据指标名称和描述,从提供的知识库中找到最合适的匹配项。
|
|
|
-
|
|
|
-请分析指标的语义含义和计算逻辑,判断哪个知识项最匹配。
|
|
|
-
|
|
|
-返回格式:
|
|
|
-如果找到匹配:返回知识ID
|
|
|
-如果未找到匹配:返回空字符串 ""
|
|
|
-
|
|
|
-只返回知识ID或空字符串,不要其他解释。"""),
|
|
|
- ("human", """指标信息:
|
|
|
-名称:{metric_name}
|
|
|
-描述:{metric_description}
|
|
|
-
|
|
|
-可用知识库:
|
|
|
-{knowledge_list}
|
|
|
-
|
|
|
-请判断这个指标是否与知识库中的某个项目匹配。如果匹配,返回对应的知识ID;如果不匹配,返回空字符串。""")
|
|
|
+ ("system", """
|
|
|
+ 你是一个专业的指标匹配专家,需要根据指标名称和描述,从提供的知识库中找到最合适的匹配项。
|
|
|
+
|
|
|
+ 请分析指标的语义含义和计算逻辑,判断哪个知识项最匹配。
|
|
|
+
|
|
|
+ 返回格式:
|
|
|
+ 如果找到匹配:返回知识ID
|
|
|
+ 如果未找到匹配:返回空字符串 ""
|
|
|
+
|
|
|
+ 只返回知识ID或空字符串,不要其他解释。"""),
|
|
|
+ ("human", """指标信息:
|
|
|
+ 名称:{metric_name}
|
|
|
+ 描述:{metric_description}
|
|
|
+
|
|
|
+ 可用知识库:
|
|
|
+ {knowledge_list}
|
|
|
+
|
|
|
+ 请判断这个指标是否与知识库中的某个项目匹配。如果匹配,返回对应的知识ID;如果不匹配,返回空字符串。""")
|
|
|
])
|
|
|
|
|
|
# 构建知识库描述
|