Logo
Section 1 / 5

提示链

探索如何通过提示词链将复杂任务分解为安全、可验证且可复用的智能代理步骤。

导入

提示链

探索如何通过提示词链将复杂任务分解为安全、可验证且可复用的智能代理步骤。

...
...
提示链的工作原理
...
1from typing import Optional, List 2from pydantic import BaseModel, Field 3 4class DocumentOutline(BaseModel): 5 """第一次调用大模型:生成文档的结构化大纲。""" 6 topic: str = Field(description="文档的主题。") 7 sections: List[str] = Field( 8 description="文档大纲中的各个章节标题列表。" 9 ) 10 11class OutlineValidation(BaseModel): 12 """第二次调用大模型:根据质量标准验证生成的大纲。""" 13 is_valid: bool = Field( 14 description="大纲是否逻辑清晰、内容完整且结构合理。" 15 ) 16 reasoning: str = Field( 17 description="判断大纲有效或无效的简要说明。" 18 ) 19 confidence_score: float = Field( 20 description="对大纲有效性判断的置信度评分,范围为0到1。" 21 ) 22 23class FinalDocument(BaseModel): 24 """第三次调用大模型:根据大纲生成完整的文档内容。""" 25 title: str = Field(description="最终文档的合适标题。") 26 full_content: str = Field( 27 description="基于所提供大纲生成的完整、高质量的文档内容。" 28 )
1def generate_document_outline(topic: str) -> DocumentOutline: 2 """第一次调用大模型:根据主题生成结构化大纲。""" 3 logger.info(f"开始为主题生成大纲:'{topic}'") 4 5 completion = client.beta.chat.completions.parse( 6 model=model, 7 messages=[ 8 { 9 "role": "system", 10 "content": ( 11 """你是一位专业的文案策划专家。 12 请为给定主题创建一个逻辑清晰且内容全面的文档大纲。 13 大纲应包括引言、若干正文部分和结论。""" 14 ), 15 }, 16 {"role": "user", "content": topic}, 17 ], 18 response_format=DocumentOutline, 19 ) 20 21 result = completion.choices[0].message.parsed 22 logger.info("大纲生成成功。") 23 return result
1import logging 2 3logging.basicConfig( 4 level=logging.INFO, 5 format="%(asctime)s - %(levelname)s - %(message)s", 6 datefmt="%Y-%m-%d %H:%M:%S", 7) 8 9logger = logging.getLogger(__name__)
1def validate_document_outline(outline: DocumentOutline) -> OutlineValidation: 2 """第二次调用大模型:验证生成大纲的质量。""" 3 logger.info("开始验证大纲质量。") 4 5 completion = client.beta.chat.completions.parse( 6 model=model, 7 messages=[ 8 { 9 "role": "system", 10 "content": ( 11 "你是一位严谨的质量审查编辑。你的主要任务是拒绝" 12 "低质量或模糊不清的大纲。如果原始主题过于宽泛、含糊或缺乏明确焦点(例如'一些东西'、" 13 "'事情'、'一篇文章'),则视为无效。评判需严格。若主题不佳,则大纲即为不合格。" 14 "请简要说明你的判断理由。" 15 ) 16 }, 17 {"role": "user", "content": str(outline.model_dump())}, 18 ], 19 response_format=OutlineValidation, 20 ) 21 result = completion.choices[0].message.parsed 22 logger.info( 23 f"验证完成 — 是否有效:{result.is_valid},置信度:{result.confidence_score:.2f}" 24 ) 25 # 记录判断依据,尤其是失败情况 26 if not result.is_valid: 27 logger.warning(f"验证未通过。原因:{result.reasoning}") 28 return result
1def generate_final_document(outline: DocumentOutline) -> FinalDocument: 2 """第三次调用大模型:将已验证的大纲扩展为完整文档。""" 3 logger.info("正在根据大纲生成最终文档。") 4 5 completion = client.beta.chat.completions.parse( 6 model=model, 7 messages=[ 8 { 9 "role": "system", 10 "content": ( 11 """你是一位经验丰富的作者。 12 请根据提供的大纲撰写一篇内容详实、结构清晰的完整文档。 13 包括一个吸引人的标题、明确的章节标题以及简洁的结论。""" 14 ), 15 }, 16 {"role": "user", "content": str(outline.model_dump())}, 17 ], 18 response_format=FinalDocument, 19 ) 20 21 result = completion.choices[0].message.parsed 22 logger.info(f"已生成最终文档,标题为:'{result.title}'") 23 return result
1def create_document_from_topic(topic: str) -> Optional[FinalDocument]: 2 """主函数,实现带有验证关卡的提示链流程。""" 3 logger.info(f"开始文档生成流程,主题:'{topic}'") 4 5 # 第一次调用大模型:生成大纲 6 document_outline = generate_document_outline(topic) 7 8 # 第二次调用大模型:验证大纲 9 validation_result = validate_document_outline(document_outline) 10 11 # 关卡检查:确认大纲有效且置信度足够高 12 if not validation_result.is_valid or validation_result.confidence_score < 0.8: 13 logger.warning( 14 f"关卡检查未通过 — 大纲无效或置信度过低({validation_result.confidence_score:.2f})。" 15 ) 16 logger.warning(f"原因:{validation_result.reasoning}") 17 return None 18 19 logger.info("关卡检查通过,继续生成最终文档。") 20 21 # 第三次调用大模型:生成完整文档 22 final_document = generate_final_document(document_outline) 23 24 logger.info("文档生成流程成功完成。") 25 return final_document

简介

路由