Skip to content

Commit 8828f4d

Browse files
committed
feat(spx-backend): implement independent search/recommend thresholds and project context performance optimization
1 parent 3db3c86 commit 8828f4d

12 files changed

Lines changed: 301 additions & 87 deletions

File tree

AI_IMAGE_GENERATION_API.md

Lines changed: 86 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -179,18 +179,24 @@ XBuilder 的 AI 图像生成系统支持多种生成提供商(SVG.IO、Recraft
179179
3. 执行语义搜索(仅搜索,不生成)
180180
4. 返回增强后的搜索结果
181181

182-
### 5. 项目上下文生成
182+
### 5. 项目上下文生成/更新
183183

184184
**接口路径**: `POST /projects/context/generate`
185185

186-
**描述**: 为项目生成或更新智能上下文关键词,用于后续的图像推荐增强。
186+
**描述**: 创建或更新项目的智能上下文关键词。该接口会检查是否已存在项目上下文,如果存在则直接返回缓存结果,除非明确要求重新生成。
187+
188+
**使用场景**:
189+
- **项目初始化**: 为新项目生成关键词
190+
- **项目信息更新**: 项目名称或描述变更时更新关键词
191+
- **强制刷新**: 需要重新生成更准确关键词时
187192

188193
**请求参数**:
189194
```json
190195
{
191196
"project_id": 123, // 必需,项目ID,必须为正整数
192197
"project_name": "太空冒险游戏", // 必需,项目名称,1-255字符
193-
"project_description": "一个关于太空探索和外星文明的冒险游戏" // 可选,项目描述
198+
"project_description": "一个关于太空探索和外星文明的冒险游戏", // 可选,项目描述
199+
"force_regenerate": false // 可选,强制重新生成,默认false
194200
}
195201
```
196202

@@ -222,11 +228,13 @@ XBuilder 的 AI 图像生成系统支持多种生成提供商(SVG.IO、Recraft
222228
```
223229

224230
**功能特性**:
231+
- **智能缓存**: 自动检查现有上下文,避免重复LLM调用
225232
- **AI智能分析**: 使用大语言模型分析项目内容
226233
- **关键词生成**: 自动生成15-20个相关关键词
227234
- **多语言支持**: 支持中英文关键词混合
228235
- **智能去重**: 自动去除重复和无效关键词
229236
- **优先级排序**: 按重要性对关键词排序
237+
- **性能优化**: 缓存机制大幅减少响应时间和API成本
230238

231239
**关键词生成策略**:
232240
1. **主题相关**: 涵盖项目主题相关的物体、场景
@@ -235,7 +243,48 @@ XBuilder 的 AI 图像生成系统支持多种生成提供商(SVG.IO、Recraft
235243
4. **技术规范**: 每个关键词简短精确(1-50字符)
236244
5. **数量控制**: 最多20个关键词,避免过载
237245

238-
### 6. 提交反馈
246+
### 6. 项目上下文查询
247+
248+
**接口路径**: `GET /projects/context?project_id=123`
249+
250+
**描述**: 快速获取现有的项目上下文关键词,用于前端搜索时的性能优化。该接口只查询数据库,不调用LLM。
251+
252+
**使用场景**:
253+
- **前端搜索**: 在用户进行图像搜索时快速获取项目上下文
254+
- **上下文检查**: 检查项目是否已有生成的上下文
255+
- **性能优化**: 避免不必要的LLM调用
256+
257+
**请求参数**:
258+
- `project_id`: 项目ID(URL参数,必需)
259+
260+
**响应示例**:
261+
```json
262+
{
263+
"project_id": 123,
264+
"name": "太空冒险游戏",
265+
"description": "一个关于太空探索和外星文明的冒险游戏",
266+
"related_words": [
267+
"宇宙飞船",
268+
"外星人",
269+
"星球",
270+
"太空站",
271+
"科幻",
272+
"冒险"
273+
],
274+
"created_at": "2025-01-15T10:30:00Z"
275+
}
276+
```
277+
278+
**错误处理**:
279+
- 如果项目上下文不存在,返回404错误
280+
- 建议前端在接收到404后调用生成接口创建上下文
281+
282+
**性能特点**:
283+
- **毫秒级响应**: 直接数据库查询,无LLM调用
284+
- **高并发支持**: 支持大量并发查询请求
285+
- **缓存友好**: 可配合前端缓存进一步优化
286+
287+
### 7. 提交反馈
239288

240289
**接口路径**: `POST /images/feedback`
241290

@@ -533,6 +582,7 @@ type ProjectContextParams struct {
533582
ProjectID int64 `json:"project_id"` // 项目ID
534583
ProjectName string `json:"project_name"` // 项目名称
535584
ProjectDescription string `json:"project_description"` // 项目描述
585+
ForceRegenerate bool `json:"force_regenerate"` // 强制重新生成
536586
}
537587
```
538588

@@ -554,13 +604,36 @@ type RecommendedImageResult struct {
554604
- **语义搜索**: `POST /v1/resource/search`
555605
- **健康检查**: `GET /health`
556606

557-
### 搜索策略
607+
### 搜索策略与阈值配置
608+
609+
系统支持为不同使用场景配置独立的相似度阈值:
610+
611+
#### 阈值类型
612+
- **搜索阈值** (`ALGORITHM_SEARCH_THRESHOLD`): 默认 0.1,用于搜索场景
613+
- 较低阈值确保返回更多相关结果
614+
- 适用于用户主动搜索图像时的广泛匹配
615+
616+
- **推荐阈值** (`ALGORITHM_RECOMMEND_THRESHOLD`): 默认 0.2,用于推荐场景
617+
- 较高阈值确保推荐质量
618+
- 适用于系统自动推荐时的精准匹配
619+
620+
#### 搜索策略
558621
1. **双路径搜索** (有主题时):
559-
- 语义搜索路径 (70%): 保持语义相关性
560-
- 主题搜索路径 (30%): 确保风格一致性
622+
- 语义搜索路径 (70%): 保持语义相关性,使用搜索阈值
623+
- 主题搜索路径 (30%): 确保风格一致性,使用搜索阈值
561624

562625
2. **单一语义搜索** (无主题时):
563-
- 使用原始提示词进行语义搜索
626+
- 使用原始提示词进行语义搜索,使用搜索阈值
627+
628+
#### 配置方式
629+
通过环境变量配置不同场景的阈值:
630+
```bash
631+
# 搜索场景阈值(更低,返回更多结果)
632+
ALGORITHM_SEARCH_THRESHOLD=0.1
633+
634+
# 推荐场景阈值(更高,保证质量)
635+
ALGORITHM_RECOMMEND_THRESHOLD=0.2
636+
```
564637

565638
### 提示词优化
566639
系统会自动进行多层提示词优化:
@@ -602,9 +675,14 @@ type RecommendedImageResult struct {
602675
## 性能优化
603676

604677
### 缓存机制
678+
- **项目上下文缓存**:
679+
- 智能检查已有上下文,避免重复LLM调用
680+
- 数据库持久化存储项目关键词
681+
- 支持强制重新生成选项
605682
- **提示词分析缓存**: 避免重复AI分析调用
606683
- **推荐结果缓存**: 支持反馈功能的结果追踪
607684
- **向量服务**: 图像语义搜索的向量存储
685+
- **搜索阈值配置**: 分场景配置相似度阈值
608686
- **自动补全缓存**:
609687
- Trie树内存缓存(可选)
610688
- 支持缓存刷新和统计

spx-backend/.env.dev

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ OPENAI_MODEL_ID=
3333
# spx-algorithm service
3434
ALGORITHM_ENDPOINT=
3535
ALGORITHM_TIMEOUT=
36+
# Algorithm service thresholds
37+
ALGORITHM_SEARCH_THRESHOLD=0.1
38+
ALGORITHM_RECOMMEND_THRESHOLD=0.2
3639

3740

3841
# OpenAI (PREMIUM)
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// Get existing project context keywords (fast query for search).
2+
// Returns cached project context without LLM generation.
3+
//
4+
// Request:
5+
// GET /projects/context?project_id=123
6+
7+
import (
8+
"strconv"
9+
"github.com/goplus/builder/spx-backend/internal/controller"
10+
)
11+
12+
ctx := &Context
13+
14+
projectIDStr := ctx.FormValue("project_id")
15+
if projectIDStr == "" {
16+
replyWithCodeMsg(ctx, errorInvalidArgs, "project_id is required")
17+
return
18+
}
19+
20+
projectID, err := strconv.ParseInt(projectIDStr, 10, 64)
21+
if err != nil || projectID <= 0 {
22+
replyWithCodeMsg(ctx, errorInvalidArgs, "project_id must be a positive integer")
23+
return
24+
}
25+
26+
result, err := ctrl.GetProjectContext(ctx.Context(), projectID)
27+
if err != nil {
28+
replyWithCodeMsg(ctx, errorNotFound, "project context not found")
29+
return
30+
}
31+
32+
json result

spx-backend/cmd/spx-backend/post_projects_context_generate.yap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
// Generate or update project context keywords.
1+
// Create or update project context keywords using LLM.
2+
// This endpoint will create new context or update existing context for a project.
3+
// Use force_regenerate=true to force regeneration even if context exists.
24
//
35
// Request:
46
// POST /projects/context/generate

spx-backend/cmd/spx-backend/xgo_autogen.go

Lines changed: 96 additions & 49 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)