fix: 换一批每次都调AI注入用户画像生成,新问题追加到池
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user