feat: 换一批注入用户画像,生成更贴合用户自身的示例问题
This commit is contained in:
@@ -312,6 +312,7 @@ class SampleRequest(BaseModel):
|
||||
scene: str = "legal"
|
||||
topic: str | None = None
|
||||
existing: list[str] | None = None # 已展示的示例,避免重复
|
||||
phone: str | None = None # 用户手机号,用于读取画像个性化推荐
|
||||
|
||||
|
||||
class TopicsRequest(BaseModel):
|
||||
@@ -461,6 +462,15 @@ def generate_samples(req: SampleRequest):
|
||||
)
|
||||
if req.topic:
|
||||
prompt += f"具体话题:{req.topic}\n\n"
|
||||
# 注入用户画像,个性化推荐
|
||||
if req.phone:
|
||||
try:
|
||||
profile = profile_store.get(req.phone)
|
||||
profile_ctx = build_profile_context(profile)
|
||||
if profile_ctx:
|
||||
prompt += f"用户画像(请结合画像生成更贴合用户自身情况的问题):\n{profile_ctx}\n\n"
|
||||
except Exception:
|
||||
pass
|
||||
if existing:
|
||||
prompt += "已展示过的问题(不要重复):\n"
|
||||
for s in existing:
|
||||
|
||||
@@ -38,6 +38,7 @@ import {
|
||||
DialogTrigger,
|
||||
} from '@/components/ui/dialog'
|
||||
import { api } from '@/lib/api'
|
||||
import { getPhone } from '@/lib/auth'
|
||||
import { cn } from '@/lib/utils'
|
||||
import type { AskResponse, EmotionMode, ExpertService, HistoryMessage, KnowledgeDoc, RiskCard, Scene, SessionMode } from '@/types'
|
||||
|
||||
@@ -544,11 +545,12 @@ export function ChatPanel({
|
||||
}, answers.length > 0 ? answers : undefined)
|
||||
}
|
||||
|
||||
/** AI 换一批示例问题 */
|
||||
/** AI 换一批示例问题(注入用户画像,个性化推荐) */
|
||||
const handleRefreshSamples = async () => {
|
||||
setRefreshing(true)
|
||||
try {
|
||||
const res = await api.generateSamples(scene, topic, dynamicSamples)
|
||||
const phone = getPhone() || undefined
|
||||
const res = await api.generateSamples(scene, topic, dynamicSamples, phone)
|
||||
setDynamicSamples(res.samples)
|
||||
} catch {
|
||||
toast.error('换一批失败,请稍后重试')
|
||||
|
||||
+2
-2
@@ -235,9 +235,9 @@ export const api = {
|
||||
request<{ topics: Array<{ title: string; desc: string; samples: string[] }> }>('/topics', {
|
||||
method: 'POST', body: JSON.stringify({ scene, existing }),
|
||||
}),
|
||||
generateSamples: (scene: Scene = 'legal', topic?: string, existing?: string[]) =>
|
||||
generateSamples: (scene: Scene = 'legal', topic?: string, existing?: string[], phone?: string) =>
|
||||
request<{ samples: string[] }>('/samples', {
|
||||
method: 'POST', body: JSON.stringify({ scene, topic, existing }),
|
||||
method: 'POST', body: JSON.stringify({ scene, topic, existing, phone }),
|
||||
}),
|
||||
|
||||
// ===== 每日热点问题 =====
|
||||
|
||||
Reference in New Issue
Block a user