PicoBot/src/topic_description.rs
ooodc 3a623cc8a3 fix: 修复话题描述更新逻辑的竞态条件和语义错误,前端自动刷新描述
- topic_description.rs: LLM 返回空字符串时返回 Err 而非 Ok(""),防止空值写回 DB 触发循环生成
- processor.rs: 添加 Arc<Mutex<HashSet>> 生成中守卫防止重复触发,改用 DB 中真正第一条用户消息生成描述
- useChat.ts: assistant_response 时检测当前话题描述为空则递增刷新信号
- App.tsx: 监听刷新信号,500ms 防抖后自动发送 list_topics 获取新描述
2026-06-07 16:52:44 +08:00

31 lines
1003 B
Rust
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

use crate::providers::{ChatCompletionRequest, LLMProvider, Message};
pub async fn generate_topic_description(
provider: &dyn LLMProvider,
first_user_message: &str,
) -> Result<String, Box<dyn std::error::Error + Send + Sync>> {
let prompt = format!(
"请根据用户的第一句话用简短的词语不超过15字描述这个对话的主题或意图。只输出描述内容不要其他解释。\n\n用户消息:{}",
first_user_message
);
let request = ChatCompletionRequest {
messages: vec![Message::user(prompt)],
temperature: Some(0.3),
max_tokens: Some(50),
tools: None,
};
let response = provider.chat(request).await?;
let description = response.content.trim().to_string();
if description.is_empty() {
return Err("LLM returned empty description".into());
}
if description.len() > 50 {
Ok(description.chars().take(50).collect())
} else {
Ok(description)
}
}