提示词工程模式
约 1524 字大约 5 分钟
2026-08-02
基于全面的 Prompt Engineering Guide 的实用实现。该指南涵盖提示词工程的理论、原则和模式,而本文展示如何使用 Java AI 的流畅 ChatClient API 将这些概念转化为可工作的 Java 代码。
1. 配置
LLM 提供商选择
Java AI 支持多种 LLM 提供商(OpenAI、Anthropic、Google GenAI、AWS Bedrock、Ollama 等),可以在不更改应用代码的情况下切换提供商:
<!-- 以 Anthropic Claude API 为例 -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-model-anthropic</artifactId>
</dependency>指定 LLM 模型名称:
.options(ChatOptions.builder()
.model("claude-sonnet-4-6") // 使用 Anthropic Claude 模型
.build())LLM 输出配置
Temperature(温度)
Temperature 控制模型响应的随机性或"创造性":
- 低值 (0.0-0.3):更确定性、聚焦的响应。适合事实性问题、分类或需要一致性的任务
- 中值 (0.4-0.7):确定性和创造性之间的平衡。适合通用场景
- 高值 (0.8-1.0):更有创造性、多样化和惊喜的响应。适合创意写作、头脑风暴
.options(ChatOptions.builder()
.temperature(0.1) // 高确定性响应
.build())输出长度 (MaxTokens)
maxTokens 参数限制模型在响应中可以生成的 token 数量:
- 低值:简短摘要、是/否答案、简短分类
- 中值:标准问答、解释、代码片段
- 高值:长文档、综合报告、详细分析
.options(ChatOptions.builder()
.maxTokens(250) // 中等长度响应
.build())采样控制 (Top-K 和 Top-P)
这些参数提供对生成过程中 token 选择的细粒度控制:
- Top-K:限制每一步考虑的候选 token 数量
- Top-P (Nucleus Sampling):选择累计概率达到阈值 P 的最小 token 集合
.options(ChatOptions.builder()
.topK(40) // 仅考虑前 40 个最可能的 token
.topP(0.9) // 核采样,P=0.9
.build())结构化响应格式
enum Sentiment { POSITIVE, NEUTRAL, NEGATIVE }
Sentiment sentiment = chatClient.prompt("分析以下文本的情感...")
.call()
.entity(Sentiment.class); // 直接映射到 Java 类型2. 提示词工程技巧
2.1 零样本提示 (Zero-Shot Prompting)
零样本提示是最简单的形式——直接提问而不提供示例。LLM 依靠其预训练知识直接生成响应:
// 零样本:无示例,直接提问
String answer = chatClient.prompt("将以下文本分类为积极、消极或中性: '这个产品太棒了!'")
.call()
.content();2.2 少样本提示 (Few-Shot Prompting)
少样本提示在提示词中提供几个输入-输出示例,帮助模型理解期望的模式:
String prompt = """
示例1: 输入: "我爱这个" → 情感: 积极
示例2: 输入: "太糟糕了" → 情感: 消极
示例3: 输入: "还行吧" → 情感: 中性
现在分析: "超出预期!"
情感:
""";2.3 系统提示 (System Prompting)
系统提示定义 AI 的角色、行为和约束,在整个对话中持续生效:
String answer = chatClient.prompt()
.system("你是一位经验丰富的 Java 架构师,专注于 Spring 生态系统。")
.user("解释 Spring Boot 的自动配置原理")
.call()
.content();2.4 思维链 (Chain of Thought, CoT)
思维链提示通过鼓励逐步推理来提高复杂推理任务的性能:
String prompt = """
问题: 商店有 15 个苹果。卖了 8 个,又进货 12 个。现在有多少苹果?
请逐步推理:
第一步: 初始数量是 15 个苹果
第二步: 卖出 8 个后,剩余 15-8=7 个
第三步: 进货 12 个后,总共 7+12=19 个
答案: 19 个苹果
问题: 工厂有 45 名工人。上午有 5 人请假,下午又来了 8 名临时工。下午有多少工人在工作?
请逐步推理:
""";2.5 角色扮演 (Role Prompting)
角色扮演提示为 AI 分配特定的角色、专业领域或视角:
chatClient.prompt()
.system("你是一位拥有 20 年经验的高级 DevOps 工程师。用专业但友好的语气回答。")
.user("如何为微服务设置 CI/CD 流水线?")
.call()
.content();2.6 自我一致性 (Self-Consistency)
自我一致性技术生成多个推理路径,然后选择最一致的答案,提高复杂推理的可靠性:
// 多次运行相同提示,选择最频繁的答案
List<String> answers = new ArrayList<>();
for (int i = 0; i < 5; i++) {
answers.add(chatClient.prompt(complexQuestion)
.options(ChatOptions.builder().temperature(0.7).build()) // 增加多样性
.call().content());
}
String bestAnswer = selectMostConsistent(answers); // 多数投票2.7 思维树 (Tree of Thoughts, ToT)
思维树通过探索多个推理路径及其分支来扩展思维链。对于有多种可能方法或需要探索和评估的复杂问题特别有效。
2.8 自动提示工程 (Automatic Prompt Engineering, APE)
自动提示工程使用 AI 来生成和评估替代提示词。通过系统地生成和评估提示词变体,APE 可以找到比人工设计的提示词更有效的版本。
2.9 代码提示 (Code Prompting)
代码提示指针对代码相关任务的专门技术:
// 代码编写示例:清晰的规范 + 上下文
String prompt = """
使用 Java 17+ 和 Spring Boot 编写一个 REST 控制器,
实现用户注册功能,包括:
- POST /api/users 端点
- 输入验证(邮箱格式、密码长度 >= 8)
- 返回 201 Created 和用户 ID
- 使用 @Valid 注解进行验证
""";总结
Java AI 提供了优雅的 Java API 来实现所有主要的提示词工程技术。最有效的方法通常是组合多种技术——例如,使用系统提示定义角色,结合思维链进行复杂推理,以及少样本示例来提高格式准确性。
生产环境建议
- 从简单模式开始,根据需要逐步添加复杂性
- 对提示词进行版本控制和 A/B 测试
- 监控 token 使用和成本
- 使用结构化输出确保类型安全
- 建立评估流水线验证提示词效果
核心原则
提示词工程的关键在于清晰的指令、适当的上下文和一致的格式。从最简单的模式开始,只有在确实需要时才增加复杂度。