【慧游鲁博】【13】后端 · 文物图片识别功能完善 · 个性化文物介绍
本次更新
在后端文件ArtifactController
的matchArtifact
接口方法中,实现了针对不同用户模式对文物图片识别结果进行个性化润色的功能。
文章目录
- 本次更新
- 使用示例
- 主要流程
- 个性化润色实现细节
- 模式处理逻辑
- AI服务调用
- 容错处理
使用示例
假设用户上传了一张白釉加彩女俑
的图片:
专业模式:
普通模式:
教育模式:
AI润色超时:返回原始识别结果
主要流程
-
接收请求参数:
- 方法接收一个
MatchRequest
对象,包含imageUrl
(图片URL)和mode
(模式,默认为"normal") - 使用
@RequestBody
注解将JSON
请求体自动映射到Java对象
- 方法接收一个
-
调用Python服务进行文物匹配:
- 通过
pythonService.matchArtifact()
方法获取文物匹配结果 - 如果匹配失败,直接返回错误信息
- 通过
-
构建基础文本:
- 从匹配结果中提取文物名称、描述和匹配度分数
- 使用
String.format()
构建基础响应文本,包含文物基本信息
-
根据模式生成不同提示词:
- 这是实现个性化润色的核心部分
- 根据
mode
参数生成不同的AI提示词(prompt) - 支持三种模式:“professional”(专业)、“normal”(普通)、“education”(教育)
-
调用AI服务进行润色:
- 使用线程池和Future实现超时控制(1分钟超时)
- 通过
aiService.getAIResponse()
获取AI生成的润色结果
-
处理结果返回:
- 优先返回AI润色后的结果
- 如果AI服务超时或出错,返回原始文本作为备用
- 确保线程池被正确关闭
个性化润色实现细节
模式处理逻辑
switch (mode) {case "professional":prompt = "你是一位专业的文物鉴定专家,请用专业术语对以下文物识别结果进行润色和补充说明:\n\n" + responseText;break;case "normal":prompt = "请用通俗易懂的语言,简单明了地解释以下文物信息,适合普通观众理解:\n\n" + responseText;break;case "education":prompt = "请将以下文物信息润色一下,使其适合向儿童或学生讲述(但是一定要正确说明文物的基本信息):\n\n" + responseText;break;default: // normal模式prompt = "请用通俗易懂的语言,简单明了地解释以下文物信息,适合普通观众理解:\n\n" + responseText;break;
}
- 专业模式(professional):提示AI以文物鉴定专家的身份,使用专业术语进行说明
- 普通模式(normal):提示AI使用通俗易懂的语言,适合普通观众理解
- 教育模式(education):提示AI调整语言风格,适合儿童或学生理解
AI服务调用
在AIService
中,使用OpenAI
的ChatCompletion API
进行文本生成:
- 使用"
DeepSeek-R1
"模型 - 将构建好的提示词作为用户消息发送
- 获取并返回AI生成的响应
容错处理
方法实现了完善的错误处理:
- 超时处理:1分钟超时后返回原始文本
- 异常处理:任何异常情况下都尝试返回原始文本
- 资源清理:确保线程池被正确关闭