feat: 自动总结对话标题 - 第一次和每隔5次对话自动更新
This commit is contained in:
52
www/app.js
52
www/app.js
@@ -514,6 +514,58 @@ async function streamGenerate(userMsgIndex) {
|
|||||||
currentConversation.updatedAt = Date.now();
|
currentConversation.updatedAt = Date.now();
|
||||||
saveConversations();
|
saveConversations();
|
||||||
renderMessages();
|
renderMessages();
|
||||||
|
|
||||||
|
// 自动总结标题:第一次对话和每隔5次对话
|
||||||
|
const totalMessages = currentConversation.messages.length;
|
||||||
|
if (totalMessages === 1 || totalMessages % 5 === 0) {
|
||||||
|
await generateConversationTitle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 生成对话标题
|
||||||
|
async function generateConversationTitle() {
|
||||||
|
if (!currentConversation) return;
|
||||||
|
|
||||||
|
// 构建对话摘要
|
||||||
|
const conversationText = currentConversation.messages.map(m =>
|
||||||
|
`${m.role === 'user' ? '用户' : 'AI'}: ${m.content.slice(0, 200)}`
|
||||||
|
).join('\n');
|
||||||
|
|
||||||
|
const titlePrompt = `请用不超过10个字总结以下对话的主题,只输出标题,不要其他内容:
|
||||||
|
${conversationText}`;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const response = await fetch(CONFIG.apiUrl, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Authorization': `Bearer ${CONFIG.apiKey}`
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
model: CONFIG.model,
|
||||||
|
messages: [{ role: 'user', content: titlePrompt }],
|
||||||
|
max_tokens: 50
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
|
if (response.ok) {
|
||||||
|
const data = await response.json();
|
||||||
|
const newTitle = data.choices?.[0]?.message?.content?.trim();
|
||||||
|
if (newTitle && newTitle.length > 0 && newTitle.length <= 15) {
|
||||||
|
currentConversation.title = newTitle;
|
||||||
|
currentConversation.updatedAt = Date.now();
|
||||||
|
saveConversations();
|
||||||
|
|
||||||
|
// 更新页面标题显示
|
||||||
|
const titleEl = document.querySelector('.header h1');
|
||||||
|
if (titleEl) {
|
||||||
|
titleEl.textContent = newTitle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('生成标题失败:', error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,12 @@
|
|||||||
<meta http-equiv="Pragma" content="no-cache">
|
<meta http-equiv="Pragma" content="no-cache">
|
||||||
<meta http-equiv="Expires" content="0">
|
<meta http-equiv="Expires" content="0">
|
||||||
<title>AI助手</title>
|
<title>AI助手</title>
|
||||||
<link rel="stylesheet" href="style.css?v=2.2.3">
|
<link rel="stylesheet" href="style.css?v=2.3.0">
|
||||||
<link rel="manifest" href="manifest.json">
|
<link rel="manifest" href="manifest.json">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
<script src="marked.min.js?v=2.2.3"></script>
|
<script src="marked.min.js?v=2.3.0"></script>
|
||||||
<script src="app.js?v=2.2.3"></script>
|
<script src="app.js?v=2.3.0"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Reference in New Issue
Block a user