main
HuangHai 2 weeks ago
parent 15107185d8
commit 4c230e893c

@ -53,7 +53,12 @@ async def rag(request: fastapi.Request):
mode = data.get("mode", "hybrid") # 默认为hybrid模式
# 查询的问题
query = data.get("query")
# 关闭参考资料
# 用户提示词
output_model=data.get("output_model", "txt")
if output_model=="txt":
user_prompt = "\n 1、不要输出参考资料 或者 References "
#user_prompt = "\n 1、不要输出参考资料 或者 References "
user_prompt = "\n 2、资料中提供化学反应方程式的一定要严格按提供的Latex公式输出绝对不允许对Latex公式进行修改 "
user_prompt = user_prompt + "\n 3、如果资料中提供了图片的一定要严格按照原文提供图片输出不允许省略或不输出"
@ -61,6 +66,39 @@ async def rag(request: fastapi.Request):
user_prompt = user_prompt + "\n 4、根据资料回答问题可以适当拓展一下内容进行回答"
user_prompt = user_prompt + "\n 5、如果问题与提供的知识库内容不符则明确告诉未在知识库范围内提到"
user_prompt = user_prompt + "\n 6、发现输出内容中包含Latex公式的一定要检查是不是包含了$$或$的包含符号,不能让Latex无包含符号出现"
elif output_model=='html':
user_prompt="""
我需要一个专业的交互式数据可视化数据资料我将提供你也可以根据自己了解的信息进行补充注意1不要与用户进行二次交互直接生成即可2直接输出html代码不要其它信息出现3正面负面信息都要
绘制可视化具体要求如下
1. **主题类型**
[明确主题如历史人物关系/公司组织架构/生物基因网络等]
2. **技术要求**
- 使用 [指定技术栈 D3.js v7 + HTML5 + SVG]
- 实现 [关键功能节点拖动/多布局切换/关系分类等]
- 必须包含 [核心交互右侧信息面板/3D效果/关系图例等]
3. **设计规范**
- 主色调[如深蓝色渐变]
- 视觉特效[如3D节点/发光效果/阴影]
- 布局响应式[/]
- 文字要求[如完美居中/特定字体]
4. **数据要求**
- 数据结构[层级/网络/树状]
- 关系分类[至少3种关系类型]
- 节点属性[如类型/描述/重要性]
5. **交互细节**
- 悬停效果[显示详细信息]
- 点击响应[更新信息面板]
- 布局切换[至少4种布局方式]
6. **拒绝内容**
- 不要 [树状结构/基础2D效果]
- 避免 [纯表格展示/静态图片]
"""
# 使用PG库后这个是没有用的,但目前的项目代码要求必传,就写一个吧。
WORKING_DIR = f"./output"

@ -175,7 +175,7 @@
</head>
<body>
<div class="container">
<h1>少惠林2025暑期读书营【少年读史记】知识问答</h1>
<h1>【少年读史记】知识问答</h1>
<div class="data-area" id="answerArea">
<div style="color:#666; padding:20px; text-align:center;">
<p>请在下方输入您的问题,答案将在此处显示</p>
@ -207,6 +207,7 @@
</div>
<button id="submitBtn" onclick="submitQuestion()"><span class="icon">💡</span>提问</button>
<button id="clearBtn" onclick="clearAll()"><span class="icon">🗑️</span>清空</button>
<button id="relationBtn" onclick="generateRelation()" style="background-color:#9c27b0"><span class="icon">👥</span>生成刘帮集团的人物关系图</button>
</div>
<script>
@ -342,6 +343,65 @@
document.getElementById('questionInput').value = '';
document.getElementById('answerArea').innerHTML = '';
}
// 在script部分添加新函数
function generateRelation() {
const answerArea = document.getElementById('answerArea');
answerArea.innerHTML = '<div class="loading-animation"><div class="spinner"></div><div>正在生成人物关系图...</div></div>';
fetch('/api/rag', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'text/event-stream'
},
body: JSON.stringify({
query: "生成刘帮集团的人物关系图",
topic: "ShiJi",
mode: "hybrid",
output_model: "html"
})
})
.then(response => {
const reader = response.body.getReader();
const decoder = new TextDecoder();
let buffer = '';
let accumulatedContent = '';
function processChunk() {
return reader.read().then(({done, value}) => {
if (done) return;
buffer += decoder.decode(value, {stream: true});
const lines = buffer.split('\n');
buffer = lines.pop();
for (const line of lines) {
if (line.includes('data:')) {
const jsonStr = line.replace(/^data:\s*/, '').replace(/^data:\s*/, '').trim();
if (jsonStr) {
try {
const data = JSON.parse(jsonStr);
if (data.reply) {
accumulatedContent += data.reply;
answerArea.innerHTML = marked.parse(accumulatedContent, markedOptions);
MathJax.typesetPromise();
}
} catch (e) {
console.log('忽略解析错误:', e);
}
}
}
}
return processChunk();
});
}
return processChunk();
})
.catch(error => {
answerArea.innerHTML = '<div style="color:red">生成关系图出错,请重试</div>';
});
}
</script>
<script src="/static/mathjax/es5/tex-mml-chtml.js" id="MathJax-script" async></script>
<script src="/static/js/marked.min.js"></script>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Loading…
Cancel
Save