Browse Source

fix: 修改最终结果输出位置

main
tanxing 4 days ago
parent
commit
469e2ef782
  1. 6
      deepsearcher/agent/deep_search.py
  2. 55
      deepsearcher/backend/templates/index.html
  3. 6
      main.py

6
deepsearcher/agent/deep_search.py

@ -85,9 +85,8 @@ REFLECT_PROMPT = """
SUMMARY_PROMPT = """
你是一个内容分析专家请你根据提供的问题和检索到的信息生成详尽的长文回答
如果检索到的信息不足以回答问题或者必须添加额外信息才能能回答你应该使用你的知识来进行补充
这种情况下你自己提供的信息需要使用"<unreferenced>your knowledge here</unreferenced>"括起来
添加多个<unreferenced></unreferenced>块时不需要序号并且<unreferenced></unreferenced>块不应该被单独分到一个段落中而是放到回答的各处
同时你应该根据提供的信息生成文内引用和文末参考资料列表
这种情况下你自己提供的信息需要使用例如"your knowledge here[^0]"引用注意这里的"[^0]"的序号0是固定的表示你的知识下文当中有文末引用的例子
同时你应该根据提供的信息生成文内引用和文末参考资料列表来自文档切片的reference引用从[^1]开始
如果多个片段是相同的来源或者一个片段可以回答多个问题文内引用可以引用多次但文末只引用一次来源即文末的引用列表中不能有重复的来源
例子:
@ -99,6 +98,7 @@ SUMMARY_PROMPT = """
文末引用示例 (需要与前文reference的href一致不需要对每个chunk分配一个引用而是每一个referecen共用一个引用):
[^0]: AI Generated
[^2]: files/docs/chap_001_003_models.md
</EXAMPLE>

55
deepsearcher/backend/templates/index.html

@ -190,15 +190,32 @@
.query-result {
white-space: pre-wrap;
line-height: 1.6;
background-color: white;
padding: 16px;
border-radius: 6px;
border: 1px solid var(--border-color);
margin-top: 8px;
}
.message-stream {
margin-top: 16px;
}
#processResult {
margin-top: 16px;
}
#processResult h3 {
color: var(--text-secondary);
font-size: 1rem;
}
#queryResult h3 {
color: var(--text-secondary);
font-size: 1rem;
}
.message-container {
max-height: 400px;
overflow-y: auto;
border: 1px solid var(--border-color);
border-radius: 6px;
background-color: white;
@ -325,7 +342,9 @@
<div id="queryResult" class="result-container">
<h3>查询结果:</h3>
<div class="query-result" id="resultText"></div>
</div>
<div id="processResult" class="result-container">
<h3>处理过程:</h3>
<div id="messageStream" class="message-stream">
<div class="message-container" id="messageContainer"></div>
@ -406,10 +425,10 @@
}
container.appendChild(messageElement);
// 确保结果容器是可见的
const resultContainer = document.getElementById('queryResult');
if (resultContainer && !resultContainer.classList.contains('visible')) {
resultContainer.classList.add('visible');
// 确保处理过程容器是可见的
const processContainer = document.getElementById('processResult');
if (processContainer && !processContainer.classList.contains('visible')) {
processContainer.classList.add('visible');
}
// 滚动到底部
@ -425,10 +444,8 @@
}
// 工具函数:显示结果
function showResult(message) {
function showResult() {
const resultElement = document.getElementById('queryResult');
const resultTextElement = document.getElementById('resultText');
resultTextElement.textContent = message;
resultElement.classList.add('visible');
}
@ -438,6 +455,18 @@
resultElement.classList.remove('visible');
}
// 工具函数:显示处理过程
function showProcessResult() {
const processElement = document.getElementById('processResult');
processElement.classList.add('visible');
}
// 工具函数:隐藏处理过程
function hideProcessResult() {
const processElement = document.getElementById('processResult');
processElement.classList.remove('visible');
}
// 工具函数:转义HTML特殊字符
function escapeHtml(text) {
const map = {
@ -532,8 +561,7 @@
document.getElementById('resultText').textContent = message.content;
showResult();
}
// 同时添加到消息容器中
addMessageToContainer(message);
// 不将answer消息添加到处理过程容器中,只显示在查询结果框中
break;
default:
console.log('Unknown message type:', message.type);
@ -582,6 +610,7 @@
setButtonLoading(button, true);
showStatus('loadStatus', '正在加载文件...', 'loading');
hideResult();
hideProcessResult();
try {
const response = await fetch('/load-files/', {
@ -649,6 +678,7 @@
setButtonLoading(button, true);
showStatus('webLoadStatus', '正在加载网站内容...', 'loading');
hideResult();
hideProcessResult();
try {
const response = await fetch('/load-website/', {
@ -702,6 +732,7 @@
setButtonLoading(button, true);
showStatus('queryStatus', '正在启动查询...', 'loading');
hideResult();
hideProcessResult();
// 清空消息容器
const container = document.getElementById('messageContainer');

6
main.py

@ -316,7 +316,11 @@ async def perform_query_stream(
print(f"Query error: {error}")
yield f"data: {json.dumps({'type': 'error', 'content': f'查询失败: {error}'}, ensure_ascii=False)}\n\n"
return
# 成功完成时,发送complete消息并结束
# 成功完成时,先发送answer消息包含查询结果
if result_text:
print(f"Sending answer message with result length: {len(result_text)}")
yield f"data: {json.dumps({'type': 'answer', 'content': result_text}, ensure_ascii=False)}\n\n"
# 然后发送complete消息并结束
print("Query completed successfully, sending complete message")
yield f"data: {json.dumps({'type': 'complete', 'content': '查询完成'}, ensure_ascii=False)}\n\n"
print("Complete message sent, ending stream")

Loading…
Cancel
Save