修改了聊天窗口

This commit is contained in:
zhangxunhui 2026-01-27 16:23:21 +08:00
parent a4c87178ab
commit b932bf8ae0
5 changed files with 153 additions and 57 deletions

View File

@ -36,25 +36,6 @@ QA_PROMPT_STR_HISTORY = """
3. **明确说明限制**如果参考信息完全不相关或为空明确说明后将基于通用知识回答
4. **完全无信息的情况**如果参考信息为空或完全无关直接基于你的知识库提供有帮助的回答
# 回答格式
请按以下结构组织回答
核心回答
首先给出简洁的核心回答
信息匹配度说明
- 如果基于参考信息说明"以下回答主要基于提供的参考资料"
- 如果参考信息不足说明"参考资料有限,已结合通用知识进行补充"
- 如果无相关参考信息说明"未找到相关参考资料,将基于通用知识回答"
详细解答
提供详细的解释分析或建议
补充说明可选
- 参考信息中的关键点如适用
- 通用知识的补充说明
- 相关建议或注意事项
# 重要原则
1. **绝不拒绝回答**即使参考信息为空也必须提供有帮助的回答
2. **透明诚实**明确说明信息的来源和局限性
@ -62,7 +43,7 @@ QA_PROMPT_STR_HISTORY = """
4. **历史连贯**保持与对话历史的一致性
5. **结构清晰**使用适当的格式增强可读性
现在请基于以上指导原则回答用户问题/no_think
现在请基于以上指导原则回答用户问题
"""
QA_PROMPT_STR_NO_HISTORY = """
@ -82,25 +63,6 @@ QA_PROMPT_STR_NO_HISTORY = """
3. **明确说明限制**如果参考信息完全不相关或为空明确说明后将基于通用知识回答
4. **完全无信息的情况**如果参考信息为空或完全无关直接基于你的知识库提供有帮助的回答
# 回答格式
请按以下结构组织回答
核心回答
首先给出简洁的核心回答
信息匹配度说明
- 如果基于参考信息说明"以下回答主要基于提供的参考资料"
- 如果参考信息不足说明"参考资料有限,已结合通用知识进行补充"
- 如果无相关参考信息说明"未找到相关参考资料,将基于通用知识回答"
详细解答
提供详细的解释分析或建议
补充说明可选
- 参考信息中的关键点如适用
- 通用知识的补充说明
- 相关建议或注意事项
# 重要原则
1. **绝不拒绝回答**即使参考信息为空也必须提供有帮助的回答
2. **透明诚实**明确说明信息的来源和局限性
@ -108,7 +70,7 @@ QA_PROMPT_STR_NO_HISTORY = """
4. **历史连贯**保持与对话历史的一致性
5. **结构清晰**使用适当的格式增强可读性
现在请基于以上指导原则回答用户问题/no_think
现在请基于以上指导原则回答用户问题
"""
# Default PromptTemplate object

View File

@ -4,8 +4,9 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>RAG 聊天助手</title>
<link rel="stylesheet" href="/static/chat/style.css?v=202601261545">
<script src="/static/chat/script.js?v=202601261545"></script>
<link rel="stylesheet" href="/static/chat/style.css?v=202601271553">
<script src="/static/chat/script.js?v=202601271553"></script>
<script src="/static/chat/marked.min.js"></script>
</head>
<body>
<!-- 登录模态框 -->

69
static/chat/marked.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -553,30 +553,61 @@ function renderMessages(messages) {
// 简单的本地 Markdown 渲染函数
function renderMarkdown(content) {
// 替换换行符为 <br>
let html = content.replace(/\n/g, '<br>');
// 如果marked可用则使用marked解析
if (typeof marked !== 'undefined') {
try {
// 配置marked选项可选
marked.setOptions({
breaks: true, // 自动转换换行为<br>
gfm: true // 启用GitHub风格的Markdown
});
return marked.parse(content);
} catch (error) {
console.error('Marked解析错误:', error);
return simpleMarkdownFallback(content);
}
} else {
// 如果marked未加载使用降级方案
return simpleMarkdownFallback(content);
}
}
// 简单的Markdown降级处理函数
// 降级方案当marked不可用时使用
function simpleMarkdownFallback(content) {
let html = content;
// 处理代码块(先处理,避免被其他规则影响)
// 按顺序处理,确保代码块优先
// 1. 处理代码块 (保持原样)
html = html.replace(/```([\s\S]*?)```/g, '<pre><code>$1</code></pre>');
// 处理行内代码
// 2. 处理行内代码
html = html.replace(/`([^`]+)`/g, '<code>$1</code>');
// 处理链接
html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" target="_blank">$1</a>');
// 3. 处理加粗(使用**text**语法)
html = html.replace(/\*\*([^*]+?)\*\*/g, '<strong>$1</strong>');
// 处理粗体和斜体(确保匹配完整的语法)
html = html.replace(/\*\*([^*]+)\*\*/g, '<strong>$1</strong>');
html = html.replace(/\*([^*]+)\*/g, '<em>$1</em>');
// 4. 处理斜体(使用*text*语法)
html = html.replace(/\*([^*]+?)\*/g, '<em>$1</em>');
// 处理列表
html = html.replace(/(^|\n)-\s+([^\n]+)/g, '$1<li>$2</li>');
// 5. 处理标题(# 标题)
html = html.replace(/^### (.+)$/gm, '<h3>$1</h3>');
html = html.replace(/^## (.+)$/gm, '<h2>$1</h2>');
html = html.replace(/^# (.+)$/gm, '<h1>$1</h1>');
// 6. 处理无序列表
html = html.replace(/^\s*-\s+(.+)$/gm, '<li>$1</li>');
html = html.replace(/(<li>[\s\S]*?<\/li>)/g, '<ul>$1</ul>');
// 处理标题
html = html.replace(/(^|\n)###\s+([^\n]+)/g, '$1<h3>$2</h3>');
html = html.replace(/(^|\n)##\s+([^\n]+)/g, '$1<h2>$2</h2>');
html = html.replace(/(^|\n)#\s+([^\n]+)/g, '$1<h1>$2</h1>');
// 7. 处理有序列表
html = html.replace(/^\s*\d+\.\s+(.+)$/gm, '<li>$1</li>');
html = html.replace(/(<li>[\s\S]*?<\/li>)/g, '<ol>$1</ol>');
// 8. 处理链接
html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2" target="_blank">$1</a>');
// 9. 最后处理换行
html = html.replace(/\n/g, '<br>');
return html;
}

View File

@ -505,6 +505,15 @@ body {
.message-content {
max-width: 75%;
flex: 1;
word-wrap: break-word;
display: flex;
flex-direction: column;
}
.message-content > * {
display: block;
width: 100%;
}
.message.text {
@ -515,6 +524,30 @@ body {
word-wrap: break-word;
font-weight: 400;
box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
display: block;
width: 100%;
}
.message.text * {
display: block;
width: 100%;
margin: 0 0 10px 0;
padding: 0;
}
.message.text *:last-child {
margin-bottom: 0;
}
.message.text p {
margin: 0 0 10px 0;
padding: 0;
display: block;
width: 100%;
}
.message.text p:last-child {
margin-bottom: 0;
}
.message.user .message.text {