fix: 换一批每次都调AI注入用户画像生成,新问题追加到池
CI / 后端测试 (push) Has been cancelled
CI / 前端构建 (push) Has been cancelled

This commit is contained in:
selfrelease
2026-08-31 17:25:25 +08:00
parent 2e51ee3a42
commit f3e3ee3c71
+6 -19
View File
@@ -285,9 +285,8 @@ export function ChatPanel({
const [loading, setLoading] = useState(false) const [loading, setLoading] = useState(false)
const [dynamicSamples, setDynamicSamples] = useState<string[]>(samples) const [dynamicSamples, setDynamicSamples] = useState<string[]>(samples)
const [refreshing, setRefreshing] = useState(false) const [refreshing, setRefreshing] = useState(false)
/** 当天热点问题池(从后端加载的全部问题)和当前批次起始索引 */ /** 当天热点问题池(从后端加载 + AI 追加),用 ref 避免闭包旧值 */
const [dailyPool, setDailyPool] = useState<string[]>([]) const dailyPoolRef = useRef<string[]>([])
const [poolIndex, setPoolIndex] = useState(0)
const BATCH_SIZE = 12 const BATCH_SIZE = 12
// ===== 2.0 新增:案卡状态 ===== // ===== 2.0 新增:案卡状态 =====
@@ -411,8 +410,7 @@ export function ChatPanel({
api.getDailyTopics(scene) api.getDailyTopics(scene)
.then((res) => { .then((res) => {
if (res.questions?.length > 0) { if (res.questions?.length > 0) {
setDailyPool(res.questions) dailyPoolRef.current = res.questions
setPoolIndex(0)
setDynamicSamples(res.questions.slice(0, BATCH_SIZE)) setDynamicSamples(res.questions.slice(0, BATCH_SIZE))
} }
}) })
@@ -551,26 +549,15 @@ export function ChatPanel({
}, answers.length > 0 ? answers : undefined) }, answers.length > 0 ? answers : undefined)
} }
/** 换一批:优先从当天热点池轮换,池用完再调 AI 生成(注入用户画像) */ /** 换一批:每次都调 AI 生成(注入用户画像),新问题追加到池中 */
const handleRefreshSamples = async () => { const handleRefreshSamples = async () => {
// 池里还有未展示的,直接取下一批
const nextIndex = poolIndex + BATCH_SIZE
if (nextIndex < dailyPool.length) {
setPoolIndex(nextIndex)
setDynamicSamples(dailyPool.slice(nextIndex, nextIndex + BATCH_SIZE))
return
}
// 池用完,调 AI 生成新问题
setRefreshing(true) setRefreshing(true)
try { try {
const phone = getPhone() || undefined const phone = getPhone() || undefined
const res = await api.generateSamples(scene, topic, dynamicSamples, phone) const res = await api.generateSamples(scene, topic, dynamicSamples, phone)
if (res.samples?.length > 0) { if (res.samples?.length > 0) {
// AI 生成的新问题加入池并显示 // 新问题追加到池末尾并显示
const newPool = [...dailyPool, ...res.samples] dailyPoolRef.current = [...dailyPoolRef.current, ...res.samples]
const newIndex = dailyPool.length
setDailyPool(newPool)
setPoolIndex(newIndex)
setDynamicSamples(res.samples) setDynamicSamples(res.samples)
} }
} catch { } catch {