""" 所有AI模型的提示词模板 """ PROMPTS = { # 1. 判断问题类型 "question_type_analysis": """ 请分析以下用户问题,判断其属于哪种类型: 用户问题:{question} 请从以下类型中选择最合适的一个: 1. factual - 事实查询型:需要具体、准确的信息 2. comparative - 分析对比型:需要多角度分析和比较 3. exploratory - 探索发现型:需要广泛探索未知领域 4. decision - 决策支持型:需要综合分析支持决策 请直接返回类型代码(如:factual),不需要其他解释。 """, # 2. 细化问题 "refine_questions": """ 基于用户的问题和问题类型,请提出3-5个细化问题,帮助更好地理解和研究这个主题。 原始问题:{question} 问题类型:{question_type} 请思考: 1. 还需要哪些具体信息? 2. 应该关注问题的哪些方面? 3. 有哪些潜在的相关维度需要探索? 请以列表形式返回细化问题,每个问题独占一行。 """, # 3. 初步研究思路 "research_approach": """ 基于用户问题和细化问题,请制定初步的研究思路。 原始问题:{question} 问题类型:{question_type} 细化问题: {refined_questions} 请简要说明研究这个问题的整体思路和方法(200字以内)。 """, # 4. 制定研究大纲 "create_outline": """ 请为以下研究主题制定详细的研究大纲。 主题:{question} 问题类型:{question_type} 细化问题:{refined_questions} 研究思路:{research_approach} 请按以下JSON格式输出大纲: ```json {{ "main_topic": "用户输入的主题", "research_questions": [ "核心问题1", "核心问题2", "核心问题3" ], "sub_topics": [ {{ "topic": "子主题1", "explain": "子主题1的简单解释", "priority": "high", "related_questions": ["核心问题1", "核心问题2"] }}, {{ "topic": "子主题2", "explain": "子主题2的简单解释", "priority": "medium", "related_questions": ["核心问题2"] }} ] }} ``` 注意: - 子主题数量建议3-6个 - priority可选值:high/medium/low - 确保子主题覆盖所有核心问题 """, # 5. 大纲验证搜索 "outline_validation": """ 请评估这个研究大纲是否完整和合理。 研究大纲: {outline} 请思考并搜索验证: 1. 核心问题是否全面? 2. 子主题划分是否合理? 3. 是否有遗漏的重要方面? 如果需要改进,请提供具体建议。 """, # 6. 修改大纲 "modify_outline": """ 基于用户反馈和验证结果,请修改研究大纲。 原大纲: {original_outline} 用户反馈: {user_feedback} 验证发现的问题: {validation_issues} 请输出修改后的大纲,格式与原大纲相同。 重点关注用户提出的修改意见。 """, # 8. 评估搜索结果 "evaluate_search_results": """ 请评估以下搜索结果对于研究子主题的重要性。 子主题:{subtopic} 搜索结果: 标题:{title} URL:{url} 摘要:{snippet} 评估标准: 1. 主题匹配度:内容与子主题的相关程度 2. 问题覆盖度:能否回答相关的核心问题 3. 信息新颖度:是否提供了独特或深入的见解 请直接返回重要性级别:high/medium/low """, # 9. 信息反思 "information_reflection": """ 好的,现在需要梳理已获取的信息 子主题:{subtopic} 已获得信息总结: {search_summary} 让我再仔细思考总结一下是否有哪些信息非常重要,需要更细节的内容: {detailed_analysis} 基于以上分析,以下信息还需要进一步获取细节内容: """, # 11. 信息结构化整合 "integrate_information": """ 请将子主题的所有搜索结果整合为结构化信息。 子主题:{subtopic} 所有搜索结果: {all_search_results} 请按以下JSON格式输出整合后的信息: ```json {{ "key_points": [ {{ "point": "关键点描述", "evidence": [ {{ "source_url": "https://example.com", "confidence": "high" }} ], "contradictions": [], "related_points": [] }} ], "themes": [ {{ "theme": "主题归类", "points": ["关键点1", "关键点2"] }} ] }} ``` """, # 12. 子主题报告撰写 "write_subtopic_report": """ 请基于整合的信息撰写子主题研究报告。 子主题:{subtopic} 整合信息: {integrated_info} 撰写要求: 1. 使用以下格式 2. 每个观点必须标注来源URL 3. 保持客观、准确 4. 突出关键发现和洞察 格式要求: ## [子主题名称] ### 一、[主要发现1] #### 1.1 [子标题] [内容](来源:[具体URL]) #### 1.2 [子标题] [内容](来源:[具体URL]) ### 二、[主要发现2] #### 2.1 [子标题] [内容](来源:[具体URL]) ### 三、关键洞察 1. **[洞察1]**:基于[来源URL]的数据显示... 2. **[洞察2]**:根据[来源URL]的分析... ### 四、建议与展望 [基于研究的可执行建议] """, # 13. 幻觉内容检测 "hallucination_detection": """ 请检查撰写内容是否存在幻觉(与原始来源不符)。 撰写内容: {written_content} 声称的来源URL:{claimed_url} 原始搜索结果中的对应内容: {original_content} 请判断: 1. 撰写内容是否准确反映了原始来源? 2. 是否存在夸大、错误归因或无中生有? 如果存在幻觉,请指出具体问题。 返回格式: {{ "is_hallucination": true/false, "hallucination_type": "夸大/错误归因/无中生有/无", "explanation": "具体说明" }} """, # 14. 幻觉内容重写(V3使用) "rewrite_hallucination": """ 请基于原始搜索材料重新撰写这部分内容。 原始内容(存在幻觉): {hallucinated_content} 原始搜索材料: {original_sources} 请严格基于搜索材料重新撰写,确保准确性。 保持原有的格式和风格。 """, # 15. 最终报告生成 "generate_final_report": """ 请基于所有子主题报告生成最终的综合研究报告。 研究主题:{main_topic} 研究问题:{research_questions} 各子主题报告: {subtopic_reports} 要求: 1. 综合各子主题的发现 2. 提炼整体洞察 3. 保持URL引用格式 4. 提供可执行的建议 报告结构: # [研究主题] ## 执行摘要 [整体研究发现概述] ## 主要发现 ### 1. [综合发现1] 基于多个来源的分析...(来源:[URL1], [URL2]) ### 2. [综合发现2] 研究表明...(来源:[URL3], [URL4]) ## 综合洞察 [基于所有研究的深度洞察] ## 建议 [具体可执行的建议] ## 详细子主题报告 [插入所有子主题的详细报告] """ } # 搜索相关的提示词(V3使用) SEARCH_PROMPTS = { "generate_search_queries": """ 为以下子主题生成{count}个搜索查询。 子主题:{subtopic} 子主题说明:{explanation} 相关问题:{related_questions} 要求: 1. 查询要具体、有针对性 2. 覆盖不同角度 3. 使用不同的关键词组合 4. 每个查询独占一行 请直接返回搜索查询列表。 """, "generate_refined_queries": """ 基于信息反思结果,为以下重点生成细节搜索查询。 重点信息:{key_info} 需要的细节:{detail_needed} 请生成3个针对性的搜索查询,每个查询独占一行。 """ } def get_prompt(prompt_name: str, **kwargs) -> str: """获取并格式化提示词""" if prompt_name in PROMPTS: return PROMPTS[prompt_name].format(**kwargs) elif prompt_name in SEARCH_PROMPTS: return SEARCH_PROMPTS[prompt_name].format(**kwargs) else: raise ValueError(f"Unknown prompt: {prompt_name}")