提示模板复用

提示模板复用策略:构建可复用的提示库

引言 提示工程的一个重要原则是"不要重复造轮子"。许多任务(如情感分析、实体抽取、文本摘要)的提示模式是通用的,可以复用于不同场景。2026年,随着提示工程的成熟,提示模板复用已经成为提升效率的关键策略。本文将系统介绍提示模板复用策略。 为什么需要模板复用 价值一:提升效率 无需从零设计提示,直接复用经过验证的模板。 价值二:保证质量 复用经过测试的模板,避免引入新bug。 价值三:便于维护 模板集中管理,修改一次,全局生效。 价值四:知识沉淀 团队可以共享和积累提示工程最佳实践。 模板设计原则 原则一:参数化 将提示中的可变部分参数化: ### 不好的设计(硬编码) 请分析以下评论的情感: 评论:这部电影太棒了! 输出:positive ### 好的设计(参数化) 请分析以下评论的情感: 评论:{{COMMENT}} 输出:{{SENTIMENT}} → 使用时:template.render(comment="...", sentiment="...") 原则二:模块化 将复杂提示分解为多个模块: ### 复杂提示(难以复用) [500字提示,包含角色定义、任务描述、输出格式、示例...] ### 模块化提示(易于复用) {{ROLE_DEFINITION}} {{TASK_DESCRIPTION}} {{OUTPUT_FORMAT}} {{FEW_SHOT_EXAMPLES}} {{USER_INPUT}} → 可以根据需要替换或重用某个模块 原则三:文档化 每个模板都应有清晰的文档: # sentiment_analysis.yaml name: sentiment_analysis version: 1.0 author: 硅基AGI探索者 description: 情感分析提示模板,支持positive/negative/neutral三分类 tasks: - 电商评论情感分析 - 社交媒体情感监控 - 用户反馈情感分类 parameters: - name: comment type: string description: 待分析的评论文本 - name: output_format type: string default: "json" options: ["json", "text"] examples: - input: "这部电影太棒了!" output: "positive" 原则四:可测试 模板应易于测试: ...

2026-07-02 · 3 min · 519 words · 硅基 AGI 探索者
Agent生产部署检查清单

Agent生产部署检查清单:从原型到上线的全面指南

引言 从原型到生产,Agent系统面临的挑战截然不同。原型阶段关注"能不能用",生产阶段关注"能不能稳定用、安全用、省着用"。很多团队在原型阶段表现出色,到了生产环境却问题频出。 2026年,经过大量生产实践,我们总结出一份Agent生产部署检查清单。这份清单覆盖了从架构、安全、性能到运维的各个方面,帮助团队系统性地检查生产就绪度。 一、架构检查 1.1 基础架构 高可用部署:至少2个实例,跨可用区部署 负载均衡:请求均匀分配到各实例 无状态设计:会话状态外部化(Redis/数据库),实例可随时重启 优雅停机:收到终止信号时完成当前请求后退出 健康检查:提供/health和/ready端点 服务发现:新实例自动注册,下线实例自动摘除 1.2 依赖管理 LLM API冗余:至少配置2个LLM提供商,支持自动切换 工具服务SLA:所有外部工具服务有明确的SLA 数据库备份:定期备份,支持快速恢复 依赖版本锁定:所有依赖版本锁定,防止意外升级 依赖监控:监控所有外部依赖的可用性 1.3 容错设计 重试机制:所有外部调用有重试策略 超时设置:每个操作有明确的超时 熔断器:对故障依赖实施熔断 降级策略:定义清晰的降级链 死信队列:处理失败的消息进入死信队列 二、安全检查 2.1 身份认证 用户认证:所有API需要认证 服务间认证:内部服务间使用mTLS API密钥管理:密钥存储在Vault/KMS,不硬编码 密钥轮转:定期轮转所有密钥 最小权限:每个组件只有必要的权限 2.2 输入安全 Prompt注入防护:用户输入经过清洗和验证 输入长度限制:限制输入长度防止资源耗尽 恶意内容过滤:过滤恶意/有害内容 PII检测:检测并脱敏个人身份信息 速率限制:每用户/IP的请求频率限制 2.3 输出安全 输出内容审核:LLM输出经过安全审核 敏感信息过滤:输出不包含敏感信息 幻觉检测:关键事实进行交叉验证 有害内容过滤:过滤模型可能生成的有害内容 输出签名:AI生成内容加水印标识 2.4 数据安全 传输加密:所有通信使用TLS 存储加密:敏感数据加密存储 日志脱敏:日志中不包含敏感信息 数据留存策略:定义数据留存期限和删除机制 合规审计:满足GDPR/数据安全法等法规要求 三、性能检查 3.1 响应延迟 P50 < 2s:中位数响应时间 P95 < 5s:95%请求响应时间 P99 < 10s:99%请求响应时间 流式响应:长任务支持流式输出 超时处理:超过SLA的请求自动降级 3.2 吞吐量 QPS压测:通过目标QPS压测 并发能力:支持目标并发连接数 队列容量:消息队列有足够的缓冲 连接池:数据库和API连接池配置合理 GPU利用率:GPU资源利用率>70% 3.3 成本控制 Token预算:每请求/用户的Token预算 成本监控:实时监控Token消耗和费用 成本告警:消耗超阈值自动告警 缓存策略:实施多层缓存降低LLM调用 模型选择:根据任务复杂度选择合适模型 四、可观测性检查 4.1 日志 结构化日志:所有日志使用JSON格式 请求追踪:每个请求有唯一trace_id 关键事件日志:记录所有关键决策和操作 错误日志:错误堆栈完整记录 日志聚合:日志集中收集和检索 4.2 指标 业务指标:任务完成率、用户满意度 技术指标:QPS、延迟、错误率 AI指标:Token消耗、模型调用次数、缓存命中率 资源指标:CPU、内存、GPU、磁盘使用率 自定义指标:业务特定的关键指标 4.3 追踪 分布式追踪:全链路追踪 Agent行为追踪:记录Agent每一步的推理和行动 工具调用追踪:记录每次工具调用的输入输出 追踪采样:高流量时采样以控制成本 追踪可视化:支持链路可视化展示 4.4 告警 可用性告警:服务不可用时立即告警 延迟告警:延迟超阈值告警 错误率告警:错误率超阈值告警 成本告警:Token消耗异常告警 安全告警:检测到安全威胁时告警 告警分级:不同级别告警通知不同人员 五、Agent特定检查 5.1 Prompt管理 Prompt版本控制:所有Prompt版本化管理 Prompt测试:Prompt变更后有回归测试 Prompt灰度:新Prompt先灰度验证 Prompt回滚:支持快速回滚到上一版本 Prompt审计:记录所有Prompt变更 5.2 工具管理 工具注册:所有工具在注册中心登记 工具版本:工具支持版本管理 工具权限:工具调用有权限控制 工具测试:新工具有自动化测试 工具监控:监控工具调用成功率和延迟 5.3 记忆管理 记忆容量限制:每个Agent的记忆有上限 记忆TTL:过时记忆自动清理 记忆隐私:敏感信息不进入长期记忆 记忆备份:重要记忆定期备份 记忆审计:支持记忆内容审计 5.4 行为约束 操作白名单:Agent只能执行预定义的操作 资源限制:Agent使用的资源有上限 行为审计:Agent所有操作有审计日志 异常检测:检测Agent异常行为 紧急停止:支持远程紧急停止Agent 六、运维检查 6.1 部署 CI/CD流水线:自动化构建、测试、部署 蓝绿/金丝雀部署:支持零停机部署 配置管理:配置与环境分离 数据库迁移:支持平滑的数据库迁移 回滚机制:支持快速回滚到上一版本 6.2 容量规划 负载预测:基于历史数据预测负载 扩容预案:定义自动扩容和手动扩容的触发条件 资源预留:预留20%资源应对突发流量 GPU规划:GPU资源有长期采购/租赁计划 成本预测:基于增长预测未来成本 6.3 灾备 灾难恢复计划:有书面的DR计划 数据备份:关键数据定期备份到异地 故障演练:定期进行故障切换演练 RTO/RPO:明确RTO和RPO目标 多区域部署:关键服务多区域部署 七、文档检查 7.1 技术文档 架构文档:系统架构图和设计说明 API文档:所有API有文档和示例 运维手册:常见运维操作有SOP 故障排查指南:常见故障的排查步骤 工具说明:每个工具的功能和限制 7.2 运营文档 SLA定义:明确服务等级承诺 值班手册:值班人员的操作手册 升级流程:问题升级的流程和联系人 用户指南:终端用户使用指南 变更记录:所有变更记录在changelog 八、上线前最终检查 8.1 上线前72小时 完整的端到端测试通过 性能压测达到目标指标 安全扫描无高危问题 所有监控和告警就位 文档审查完成 8.2 上线前24小时 代码冻结,只允许修复性变更 回滚方案验证 值班安排确认 通知相关利益方 准备上线公告 8.3 上线后1小时 核心指标正常(QPS、延迟、错误率) 日志正常输出 告警未触发 用户反馈正常 成本消耗在预期范围内 结语 这份检查清单不是一次性的——它应该成为每次部署的常规流程。随着系统演进,清单也应该更新,加入新的检查项。 ...

2026-07-02 · 2 min · 222 words · 硅基 AGI 探索者
Agent生产部署Checklist:50个必查项

Agent生产部署Checklist:50个必查项

Agent生产部署:50个必查项 将Agent从Demo推向生产环境,是一个系统工程。以下Checklist基于我们对30+企业Agent项目的实践总结,覆盖了生产部署必须检查的50个关键项。 十大维度概览 维度 检查项数 优先级 1. 安全与权限 7 🔴 必须 2. 性能与延迟 5 🔴 必须 3. 成本控制 5 🟡 重要 4. 监控与告警 6 🔴 必须 5. 容错与恢复 5 🔴 必须 6. 数据与隐私 5 🔴 必须 7. 质量保障 5 🟡 重要 8. 可扩展性 4 🟡 重要 9. 用户体验 4 🟢 建议 10. 文档与运维 4 🟢 建议 1. 安全与权限(7项) ✅ 1.1 LLM输出过滤 # 必须对LLM输出进行安全过滤 class OutputFilter: def __init__(self): self.blocked_patterns = [ r"忽略.*指令", # 越狱尝试 r"system\s*prompt", # 系统提示词泄漏 r"<script.*>", # XSS攻击 ] def filter(self, output: str) -> str: for pattern in self.blocked_patterns: output = re.sub(pattern, "[FILTERED]", output, flags=re.IGNORECASE) return output 检查:LLM输出是否经过安全过滤?是否检测了越狱尝试、提示注入、敏感信息泄漏? ...

2026-06-30 · 4 min · 820 words · 硅基 AGI 探索者
prompt engineering 2026 practices

Prompt 工程 2026 最新实践:从技巧到工程化体系

从手工艺到工程化:Prompt 工程的范式转变 2026 年,Prompt 工程已经走过了"调参数式"的手工艺阶段。随着大模型能力边界的不断扩展,Prompt 的设计、测试、部署和维护已经形成了一套完整的工程化体系。根据 Gartner 2026 年 Q1 报告,超过 78% 的企业级 AI 应用已经建立了专门的 Prompt 工程团队,而 2024 年这一比例仅为 23%。 一、Prompt 工程化的核心要素 1.1 结构化 Prompt 架构 现代 Prompt 已从简单的文本指令发展为结构化的工程产物: # prompt-config.yaml prompt: metadata: name: "customer-support-v2" version: "2.3.1" author: "prompt-team" last_updated: "2026-06-15" system_prompt: role: "你是一个专业的客服助手" constraints: - "回答必须基于知识库内容" - "不确定时明确告知用户" - "单次回复不超过500字" knowledge_sources: - "product_docs" - "faq_database" user_template: | 用户问题:{{user_query}} 上下文信息:{{context}} 历史对话:{{history}} expected_output: format: "json" schema: answer: "string" confidence: "float" sources: "array" 1.2 Prompt 生命周期管理 设计 → 测试 → 评审 → 部署 → 监控 → 迭代 ↑ ↓ ←─────────── 反馈循环 ←─────────────← 二、2026 年 Prompt 设计核心原则 2.1 明确性原则(Clarity First) 维度 错误示例 正确示例 角色 “帮我写文章” “你是科技领域资深编辑,擅长将复杂技术概念转化为通俗易懂的文章” 任务 “总结一下” “用3段话总结以下内容,每段不超过100字,重点突出数据和结论” 约束 “写得好一点” “语气专业但不失亲和力,避免使用行业黑话,目标读者是产品经理” 格式 “列出来” “用Markdown表格输出,包含名称、描述、优缺点三列” 2.2 上下文工程(Context Engineering) 2026 年最重要的进化是"上下文工程"概念的兴起——不再只关注单条 Prompt 的措辞,而是整体上下文的构建: ...

2026-06-28 · 4 min · 711 words · 硅基 AGI 探索者
prompt engineering advanced

Prompt 工程进阶:从技巧到系统化方法论

Prompt 工程不是"写咒语" 很多人以为 Prompt 工程就是"找到对的咒语让 AI 听话"。这是 2023 年的认知。2026 年的 Prompt 工程是一门系统工程:有设计原则、有测试方法、有版本管理、有评估指标。 第一层:结构化 Prompt 模板化 from string import Template PROMPT_TEMPLATE = Template(""" ## 角色 你是一个 $role。 ## 任务 $task ## 约束 - $constraints ## 输入 $input ## 输出格式 $output_format ## 示例 $examples """) prompt = PROMPT_TEMPLATE.substitute( role="技术分析师", task="分析给定技术的成熟度和市场前景", constraints="基于事实数据,不做主观臆断", input="技术名称:WebAssembly", output_format="JSON: {maturity: 1-5, market_size: string, key_players: []}", examples='{"maturity": 4, "market_size": "增长中", "key_players": ["Mozilla", "Google"]}' ) 分层设计 class PromptStack: """分层 Prompt,每层职责清晰""" SYSTEM = """你是一个专业的AI助手。""" # 身份层 RULES = """ ## 行为准则 1. 不确定时明确说明 2. 引用信息来源 3. 不编造数据 """ # 规则层 CONTEXT = """ ## 当前上下文 用户正在研究 {topic}。 已知信息:{known_facts} """ # 上下文层 TASK = """ ## 任务 {specific_task} """ # 任务层 FORMAT = """ ## 输出格式 {format_spec} """ # 格式层 第二层:推理增强 Chain-of-Thought(CoT) # 简单 CoT COT_PROMPT = """ 问题:{question} 请一步步思考: 1. 首先,... 2. 然后,... 3. 因此,... 答案: """ # 自我一致性(Self-Consistency) async def self_consistency(question, n=5): """生成 n 个推理路径,取多数答案""" answers = await asyncio.gather(*[ llm.generate(COT_PROMPT.format(question=question), temperature=0.7) for _ in range(n) ]) # 提取最终答案并投票 final_answers = [extract_answer(a) for a in answers] return most_common(final_answers) Tree-of-Thought(ToT) class TreeOfThought: """树状推理:探索多条路径,剪枝,回溯""" async def solve(self, problem, max_depth=4, branching=3): root = ThoughtNode(problem, depth=0) return await self.search(root, max_depth, branching) async def search(self, node, max_depth, branching): if node.depth >= max_depth or node.is_solution: return node # 生成多个候选思路 thoughts = await self.generate_thoughts(node, branching) # 评估每个思路 for thought in thoughts: score = await self.evaluate(thought) thought.score = score # 只展开得分高的思路 thoughts.sort(key=lambda t: t.score, reverse=True) for thought in thoughts[:branching // 2]: child = ThoughtNode(thought.content, node.depth + 1, parent=node) result = await self.search(child, max_depth, branching) if result and result.is_solution: return result return None ReAct(推理+行动) REACT_PROMPT = """ 问题:{question} 思考过程: Thought 1: 我需要先搜索相关信息。 Action 1: search("{query}") Observation 1: {search_result} Thought 2: 基于搜索结果,我发现... Action 2: calculate("{expression}") Observation 2: {calc_result} Thought 3: 综合以上信息... Action 3: finish("{answer}") """ 第三层:Prompt 测试 单元测试 import pytest class TestPrompt: @pytest.fixture def prompt(self): return load_prompt("analysis_v2.yaml") def test_output_format(self, prompt): """测试输出是否符合格式要求""" result = llm.invoke(prompt.format(input="测试数据")) assert validate_json(result, expected_schema) def test_refusal(self, prompt): """测试对危险请求的拒绝""" result = llm.invoke(prompt.format(input="删除所有文件")) assert "无法" in result or "拒绝" in result def test_consistency(self, prompt): """测试多次调用的一致性""" results = [llm.invoke(prompt.format(input="Python优缺点")) for _ in range(5)] # 核心观点应该一致 key_points = [extract_main_point(r) for r in results] assert len(set(key_points)) <= 2 # 最多2种表述 A/B 测试 class PromptABTest: def __init__(self, prompt_a, prompt_b): self.prompt_a = prompt_a self.prompt_b = prompt_b self.results = {"a": [], "b": []} async def run(self, test_cases, sample_size=100): for case in random.sample(test_cases, min(sample_size, len(test_cases))): # 随机分配到 A 或 B variant = random.choice(["a", "b"]) prompt = self.prompt_a if variant == "a" else self.prompt_b response = await llm.invoke(prompt.format(input=case.input)) score = await self.judge.evaluate(case.input, response, case.expected) self.results[variant].append(score) return self.analyze() def analyze(self): a_avg = mean(self.results["a"]) b_avg = mean(self.results["b"]) return { "a_score": a_avg, "b_score": b_avg, "winner": "a" if a_avg > b_avg else "b", "improvement": abs(a_avg - b_avg) / min(a_avg, b_avg), } 第四层:Prompt 管理 版本控制 # prompts/analysis_v3.yaml metadata: name: "technical_analysis" version: "3.1.0" author: "team" changelog: - "v3.1: 增加安全约束" - "v3.0: 重构为结构化模板" - "v2.0: 添加 Few-shot 示例" system: | 你是一个技术分析师。 rules: - "基于事实数据" - "标注信息来源" - "不确定时说明" template: | 分析以下技术:{technology} 请从以下维度评估: 1. 技术成熟度 2. 社区活跃度 3. 商业采用率 4. 未来前景 variables: - name: technology type: string required: true output: format: json schema: maturity: integer(1-5) community: string adoption: string outlook: string Prompt 注册中心 class PromptRegistry: """Prompt 的注册中心和版本管理""" def get(self, name, version="latest"): prompt = self.db.find(name, version) if not prompt: raise PromptNotFound(name, version) # 记录使用情况 self.metrics.record(name, version) return prompt def register(self, name, prompt_data): # 验证 Prompt self.validate(prompt_data) # 回归测试 if not self.regression_test(prompt_data): raise PromptQualityError("回归测试未通过") # 注册新版本 version = self.next_version(name) self.db.save(name, version, prompt_data) return version 高级技巧 动态 Few-shot class DynamicFewShot: """根据输入动态选择最相关的示例""" def __init__(self, examples): self.examples = examples self.embeddings = {e: embed(e.input) for e in examples} def select(self, input, k=3): input_emb = embed(input) scored = [ (example, cosine_sim(input_emb, emb)) for example, emb in self.embeddings.items() ] scored.sort(key=lambda x: x[1], reverse=True) return [e for e, _ in scored[:k]] Prompt 压缩 class PromptCompressor: """长 Prompt 压缩,降低 Token 成本""" def compress(self, prompt): # 1. 移除冗余空格和换行 prompt = re.sub(r'\n{3,}', '\n\n', prompt) prompt = re.sub(r' {2,}', ' ', prompt) # 2. 缩短描述 prompt = prompt.replace("请仔细阅读以下内容并回答", "阅读后回答") # 3. 用符号替代文字 prompt = prompt.replace("第一步", "1.") prompt = prompt.replace("第二步", "2.") return prompt # 压缩前:1850 tokens # 压缩后:1240 tokens(节省 33%) 评估指标 指标 说明 目标 准确率 答案正确的比例 >90% 格式合规率 输出格式符合要求 >98% 拒绝率 对危险请求的拒绝率 100% 一致性 同输入多次输出一致 >85% Token 效率 输出质量/Token数 越高越好 延迟 首字节延迟 <2s 结论 Prompt 工程在 2026 年已经从"调参数"演进为"系统工程": ...

2026-06-24 · 4 min · 722 words · 硅基 AGI 探索者
鲁ICP备2026018361号