diff --git a/.sisyphus/run-continuation/ses_1bcf4061fffeZ83r0Ra7NUB40Y.json b/.sisyphus/run-continuation/ses_1bcf4061fffeZ83r0Ra7NUB40Y.json
new file mode 100644
index 0000000..8dc4e4e
--- /dev/null
+++ b/.sisyphus/run-continuation/ses_1bcf4061fffeZ83r0Ra7NUB40Y.json
@@ -0,0 +1,10 @@
+{
+ "sessionID": "ses_1bcf4061fffeZ83r0Ra7NUB40Y",
+ "updatedAt": "2026-05-20T01:45:53.650Z",
+ "sources": {
+ "background-task": {
+ "state": "idle",
+ "updatedAt": "2026-05-20T01:45:53.650Z"
+ }
+ }
+}
\ No newline at end of file
diff --git a/backend/src/services/ai/templates/index.ts b/backend/src/services/ai/templates/index.ts
index 990d4b1..cb1717a 100644
--- a/backend/src/services/ai/templates/index.ts
+++ b/backend/src/services/ai/templates/index.ts
@@ -3,7 +3,7 @@ import type { ChatMessage } from '../providers/types.js'
export function predictMetricsPrompt(ingredients: Array<{ name: string; percentage: number; category: string }>): ChatMessage[] {
const ingList = ingredients.map(i => `- ${i.name} (${i.category}): ${i.percentage}%`).join('\n')
return [
- { role: 'system', content: '你是一名资深化妆品配方工程师。根据成分列表预测配方的肤感指数、稳定性评分和成本估算。返回 JSON 格式:{"sensoryIndex":{"spreadability":0-100,"absorption":0-100,"stickiness":0-100,"overall":0-100},"stabilityScore":0-100,"costEstimate":元/kg,"confidence":0-1,"reasoning":"简短理由"}' },
+ { role: 'system', content: '你是一名资深化妆品配方工程师。根据成分列表预测配方的肤感指数、稳定性评分和成本估算。直接返回纯 JSON,不要用 ``` 包裹:{"sensoryIndex":{"spreadability":0-100,"absorption":0-100,"stickiness":0-100,"overall":0-100},"stabilityScore":0-100,"costEstimate":元/kg,"confidence":0-1,"reasoning":"简短理由"}' },
{ role: 'user', content: `请分析以下配方的指标:\n${ingList}` },
]
}
diff --git a/frontend/src/components/FormulaVisualEditor.tsx b/frontend/src/components/FormulaVisualEditor.tsx
index fe1b736..430b83c 100644
--- a/frontend/src/components/FormulaVisualEditor.tsx
+++ b/frontend/src/components/FormulaVisualEditor.tsx
@@ -121,7 +121,7 @@ export default function FormulaVisualEditor({ phases: initialPhases, onSave }: P
} finally { setSaving(false) }
}
- const { prediction, loading: predicting, predict } = useAIPredict()
+ const { prediction, loading: predicting, error: predictError, predict } = useAIPredict()
const handlePredict = () => {
predict(allIngredients.map(i => ({
@@ -169,6 +169,7 @@ export default function FormulaVisualEditor({ phases: initialPhases, onSave }: P
{predicting ?
💡 AI 建议
+{prediction!.reasoning}
+