问题1:复杂的解析逻辑导致失败
parseAnalysisContent方法试图用正则表达式从AI返回的Markdown文本中提取结构化数据问题2:提示词不够强调输出格式
问题3:前端显示依赖结构化数据
formatAIResponse有处理rawContent的逻辑design-analysis-ai.service.ts (Line 420-431)修改前(复杂的正则解析):
private parseAnalysisContent(content: string): any {
try {
// 尝试解析JSON
const jsonMatch = content.match(/\{[\s\S]*\}/);
// ... 大量正则匹配逻辑
// 提取场景识别
const sceneTypeMatch = content.match(/场景类型[::](.*?)[\n\r]/);
// ... 更多正则匹配
return analysisData; // 复杂的结构化数据
} catch (error) {
// 解析失败
}
}
修改后(直接使用AI输出):
private parseAnalysisContent(content: string): any {
console.log('📝 AI返回的原始内容长度:', content.length);
console.log('📝 AI返回的内容预览:', content.substring(0, 500));
// 直接返回完整的AI分析内容
// 不做复杂的结构化解析,保留AI的完整Markdown格式输出
return {
rawContent: content, // 完整的AI分析内容(Markdown格式)
hasContent: content && content.length > 100,
timestamp: new Date().toISOString()
};
}
改进效果:
design-analysis-ai.service.ts (Line 105-417)新增内容:
# 室内设计专业分析任务
你是一位拥有15年经验的资深室内设计师,精通灯光设计和材质搭配。
请对上传的参考图片进行**全面、详细、专业**的"灯光+材质"细节落地分析。
## ⚠️ 输出要求(必须严格遵守)
**格式要求**:
- 使用完整的Markdown格式输出
- 必须包含标题层级(## ### ####)
- 使用表格展示数据(如色卡、灯光参数)
- 使用列表组织信息
- 使用粗体强调关键信息
**内容要求**:
- **输出长度**: 2000-5000字(不能少于2000字!)
- **语言风格**: 专业、准确、详细
- **数值精确度**: RGB值、尺寸(mm)、照度(lux)、色温(K)
- **品牌信息**: 具体品牌、型号、色号
- **完整性**: 每个维度都必须详细展开,不能只列标题
**禁止事项**:
- ❌ 不要输出JSON格式
- ❌ 不要简化或省略内容
- ❌ 不要只列标题不写内容
- ❌ 不要出现乱码或错别字
- ❌ 不要使用含糊的描述(如"较亮"、"偏暖"等)
## 📝 输出示例(参考格式)
\`\`\`markdown
## 🏠 场景识别
### 空间类型
**识别结果**:客餐厅
**识别置信度**:高(95%)
**识别依据**:从图片中可以明确看到餐桌、餐椅组合...
## 🎨 空间区域划分
### 一、顶面系统(约18%)
#### 主体平顶
- **位置**:全域顶面
- **尺寸**:4200mm × 3600mm × 2800mm(高)
- **色彩**:RGB(230, 228, 225),明度88,饱和度6
- **材质**:立邦乳胶漆「暖灰N8.5」,哑光处理
- **品牌**:立邦漆(Nippon Paint)
### 二、灯光系统详解
#### 主照明系统
- **灯具类型**:嵌入式筒灯
- **品牌+型号**:欧普照明 MX350-6W
- **数量**:6盏
- **色温**:3000K(暖白光)
- **显色指数**:Ra90
- **照度**:300lux
## 📊 色彩落地方案
| 区域 | RGB值 | 实物色号 | 匹配材质 | 应用场景 |
|------|-------|----------|----------|----------|
| 墙面主色 | RGB(225, 222, 218) | 立邦「暖灰N8.5」 | 乳胶漆 | 全域墙面 |
\`\`\`
---
**现在开始分析**:
请基于上传的图片,严格按照以上格式和维度,输出2000-5000字的完整专业分析报告。
🧠 **深度思考模式已启用**
请进行更详细、更深入的分析,考虑以下额外维度:
- 设计心理学层面的分析
- 空间氛围营造的细节
- 材质与光线的互动关系
- 实际施工中的注意事项
- 预算优化建议
design-analysis-ai.service.ts (Line 72-100)新增日志:
if (message?.complete && content) {
console.log('✅ AI分析完成');
console.log('📏 原始内容长度:', content.length, '字符');
console.log('📝 内容前500字符:', content.substring(0, 500));
// 检查内容是否足够长
if (content.length < 100) {
console.error('❌ AI返回内容太短,可能分析失败');
reject(new Error('AI分析返回内容不完整,请重试'));
return;
}
// 解析返回的内容
const analysisData = this.parseAnalysisContent(content);
console.log('📊 解析后的数据结构:', {
hasRawContent: !!analysisData.rawContent,
hasContent: analysisData.hasContent,
contentLength: analysisData.rawContent?.length || 0
});
}
日志作用:
文件:stage-requirements.component.ts (Line 3556-3665)
private formatAIResponse(analysisResult: any): string {
// 优先使用rawContent
if (analysisResult.rawContent) {
return this.enhanceMarkdownFormat(analysisResult.rawContent);
}
// ... 兼容模式
}
private enhanceMarkdownFormat(content: string): string {
let enhanced = content;
// 为重要信息添加强调
enhanced = enhanced.replace(/RGB\((\d+),\s*(\d+),\s*(\d+)\)/g, '**RGB($1, $2, $3)**');
enhanced = enhanced.replace(/(\d+)lux/g, '**$1lux**');
enhanced = enhanced.replace(/(\d+)K/g, '**$1K**');
enhanced = enhanced.replace(/Ra(\d+)/g, '**Ra$1**');
enhanced = enhanced.replace(/(\d+)mm/g, '**$1mm**');
return enhanced;
}
显示效果:
用户上传参考图片
↓
点击"开始AI分析"按钮
↓
调用 startAIDesignAnalysis()
↓
构建增强的提示词(buildAnalysisPrompt)
- 明确角色设定
- 严格的输出要求
- 详细的输出示例
- 深度思考模式(可选)
↓
调用豆包1.6模型(fmode-1.6-cn)
- model: 'fmode-1.6-cn'
- max_tokens: 8000
↓
AI生成详细的Markdown格式分析报告
- 场景识别与整体基调
- 空间区域划分(顶面、墙面、地面、门窗、家具)
- 灯光系统详解(自然光、主照明、辅助照明、氛围照明)
- 色彩区域占比与视觉权重
- 专业优化建议
- 色彩落地方案(色卡表格)
↓
流式接收AI输出
- 实时更新内容长度
- complete时检查内容长度
- 输出详细日志
↓
简化解析(parseAnalysisContent)
- 直接包装为 { rawContent: content }
- 不做复杂的结构化解析
↓
前端格式化(formatAIResponse)
- 检测到rawContent,直接使用
- enhanceMarkdownFormat增强显示
- 加粗重要数值
↓
精美的Markdown格式显示在对话框
- 完整的专业分析
- 结构化的排版
- 强调的关键信息
| 方面 | 修改前 | 修改后 |
|---|---|---|
| 解析策略 | 复杂的正则匹配提取结构化数据 | 直接使用AI的原始Markdown输出 |
| 数据结构 | 嵌套的JSON对象(容易解析失败) | 简单的{ rawContent: string } |
| 内容完整性 | 只保留部分关键信息 | 保留AI的完整分析报告 |
| 错误处理 | 解析失败返回空数据 | 始终保留rawContent |
| 方面 | 修改前 | 修改后 |
|---|---|---|
| 角色设定 | "资深室内设计师" | "15年经验的资深室内设计师,精通灯光和材质" |
| 格式要求 | 简单提及 | 明确要求Markdown,并提供示例 |
| 禁止事项 | 未明确 | 明确禁止JSON、简化、含糊描述 |
| 输出长度 | 2000-5000字 | 不能少于2000字! |
| 输出示例 | 无 | 详细的Markdown示例 |
| 方面 | 修改前 | 修改后 |
|---|---|---|
| 内容长度 | 仅显示长度 | 显示长度+预览+数据结构 |
| 错误检查 | 无 | 检查长度<100时报错 |
| 数据验证 | 无 | 验证rawContent是否存在 |
# 清除浏览器缓存
Ctrl + F5
# 或在浏览器开发者工具中
Network → Disable cache
✅ AI分析完成
📏 原始内容长度: XXXX 字符
📝 内容前500字符: ## 🏠 场景识别...
📝 AI返回的原始内容长度: XXXX
📝 AI返回的内容预览: ## 🏠 场景识别...
📊 解析后的数据结构: {
hasRawContent: true,
hasContent: true,
contentLength: XXXX
}
完整的Markdown格式报告,包含:
✅ 场景识别
✅ 整体基调
✅ 空间区域划分
✅ 灯光系统详解
✅ 色彩区域占比表格 | 色彩类别 | RGB值 | 占比 | 视觉权重 | 功能定位 | |----------|-------|------|----------|----------| | ... | ... | ... | ... | ... |
✅ 专业优化建议
✅ 色彩落地方案表格 | 区域 | RGB值 | 实物色号 | 匹配材质 | 应用场景 | |------|-------|----------|----------|----------| | ... | ... | ... | ... | ... |
检查AI输出中的关键数值是否被自动加粗:
症状:控制台显示内容长度<2000字
可能原因:
解决方案:
症状:输出了JSON格式或纯文本
可能原因:
解决方案:
症状:显示中出现奇怪的字符
可能原因:
解决方案:
enhanceMarkdownFormat方法症状:RGB值、照度等没有被强调
可能原因:
enhanceMarkdownFormat的正则表达式没有匹配到解决方案:
enhanceMarkdownFormat中的正则表达式| 文件 | 修改内容 | 行数 |
|---|---|---|
design-analysis-ai.service.ts |
简化parseAnalysisContent方法 | 420-431 |
design-analysis-ai.service.ts |
增强buildAnalysisPrompt方法 | 105-417 |
design-analysis-ai.service.ts |
添加详细日志输出 | 72-100 |
stage-requirements.component.ts |
已有优化(无需修改) | 3556-3665 |
通过以下3个关键修复:
现在AI分析应该能够:
立即测试体验吧! 🚀