共计 2246 个字符,预计需要花费 6 分钟才能阅读完成。
技术背景:为什么需要提示词工程
在现代应用开发中,智能对话功能已成为提升用户体验的重要手段。对于 Java 开发者而言,将 ChatGPT 这样的 AI 能力整合到系统中可以:

- 减少简单重复问题的客服人力成本
- 实现 24 小时在线的智能问答服务
- 通过自然语言交互降低用户使用门槛
- 为产品增加差异化竞争力
提示词工程(Prompt Engineering)就是通过精心设计输入文本来获得更精准 AI 输出的技术,相当于 ” 与 AI 沟通的艺术 ”。
架构设计:Spring Boot + Vue 整合方案
典型的技术栈组合如下:
flowchart LR
A[Vue 前端] -->|Axios| B[Spring Boot API]
B -->|OpenAI SDK| C[ChatGPT API]
B --> D[(MySQL)]
关键组件说明:
- 前端层:Vue 3 组合式 API + Axios 处理 HTTP 请求
- 后端层:Spring Boot 3.x 提供 REST 接口
- AI 服务:通过官方 OpenAI Java SDK 接入
- 数据存储:MySQL 记录对话历史
核心代码实现
后端 Spring Boot 接口(带 JWT 鉴权)
@RestController
@RequestMapping("/api/chat")
public class ChatController {
@PostMapping
public ResponseEntity<ChatResponse> chat(
@RequestBody ChatRequest request,
@RequestHeader("Authorization") String token) {
// JWT 验证
if (!JwtUtil.validateToken(token)) {return ResponseEntity.status(401).build();}
// 构造提示词(实际项目建议抽离为策略模式)String prompt = "你是一个 Java 技术专家,用中文回答关于"
+ request.getTopic() + "的问题:" + request.getQuestion();
// 调用 OpenAI API
OpenAiService service = new OpenAiService(API_KEY);
CompletionRequest completionRequest = CompletionRequest.builder()
.prompt(prompt)
.model("text-davinci-003")
.maxTokens(500)
.build();
CompletionResult result = service.createCompletion(completionRequest);
return ResponseEntity.ok(new ChatResponse(result.getChoices().get(0).getText()));
}
}
前端 Vue 调用示例
import axios from 'axios';
export default {data() {
return {
question: '',
answer: ''
}
},
methods: {async submitQuestion() {
try {const token = localStorage.getItem('jwt');
const response = await axios.post('/api/chat', {
topic: 'Java 编程',
question: this.question
}, {headers: { Authorization: `Bearer ${token}` }
});
this.answer = response.data.answer;
} catch (error) {console.error('请求失败:', error);
}
}
}
}
五大常见陷阱及解决方案
- 提示词过于笼统
- 错误示例:” 告诉我关于 Java 的知识 ”
-
修正方案:明确场景和范围,如 ” 用简单例子解释 Java 多线程的 synchronized 用法 ”
-
忽略 token 限制
- 问题:超过模型最大 token 数会导致截断
-
方案:通过
text-davinci-003的maxTokens参数控制,长文本考虑分块处理 -
未处理敏感信息
- 风险:用户可能输入个人隐私数据
-
措施:后端增加关键词过滤和内容审核
-
缺乏上下文管理
- 现象:多轮对话时 AI” 忘记 ” 之前内容
-
解决:在 prompt 中包含历史对话摘要
-
响应时间过长
- 原因:网络延迟 +AI 计算时间
- 优化:前端添加加载状态,考虑流式传输(SSE)
性能优化实践
Token 计算策略
- 中文 1 个汉字≈2 个 token
- 通过
tiktoken库精确计算 - 示例优化代码:
public String trimPrompt(String prompt, int maxTokens) {
// 实现基于 token 数的截断逻辑
// ...
}
缓存设计方案
- 本地缓存:对高频问题使用 Caffeine
- 分布式缓存:Redis 存储常见问答对
- 对话缓存:用户会话级缓存(有效期 15 分钟)
@Cacheable(value = "chatCache", key = "#question")
public String getCachedAnswer(String question) {return null; // 缓存未命中时实际查询}
总结建议
在实际项目中引入 ChatGPT 时,建议从小功能点开始验证,例如:
- 文档智能搜索
- 错误日志分析助手
- 代码片段生成
注意平衡 AI 能力与系统稳定性,初期可以设置熔断机制,当 AI 服务不可用时自动降级到常规流程。随着对提示词工程的掌握加深,逐步探索更复杂的应用场景。
正文完
