@shun-js/aibaiban-server 1.0.4 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +2 -2
- package/server/service/LLMService.js +2 -31
- package/server/util/prompt-agent.js +15 -24
- package/views/index.html +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@shun-js/aibaiban-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "aibaiban.com server",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"ai aibaiban"
|
|
@@ -44,5 +44,5 @@
|
|
|
44
44
|
"access": "public",
|
|
45
45
|
"registry": "https://registry.npmjs.org/"
|
|
46
46
|
},
|
|
47
|
-
"gitHead": "
|
|
47
|
+
"gitHead": "5eb0853768a4ff327c1ddda1eaa414b8645144b1"
|
|
48
48
|
}
|
|
@@ -7,7 +7,7 @@ const { chatFeishuMsg, errorFeishuMsg } = require('../util/feishu.js');
|
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* drawAgent - 流式 Agent 接口
|
|
10
|
-
* 流程:router -> classify -> elaborate ->
|
|
10
|
+
* 流程:router -> classify -> elaborate -> generate
|
|
11
11
|
*/
|
|
12
12
|
exports.drawAgent = async (req, res) => {
|
|
13
13
|
const methodName = 'drawAgent';
|
|
@@ -77,36 +77,7 @@ exports.drawAgent = async (req, res) => {
|
|
|
77
77
|
chatFeishuMsg(req, `elaboration-${elaboration}`);
|
|
78
78
|
res.streaming(`data: ${JSON.stringify({ step: 'elaborate', done: true, duration: elaborateTime })}\n\n`);
|
|
79
79
|
|
|
80
|
-
// 4.
|
|
81
|
-
stepStart = Date.now();
|
|
82
|
-
res.streaming(`data: ${JSON.stringify({ step: 'review', status: 'start' })}\n\n`);
|
|
83
|
-
req.logger.info(methodName, 'step: review');
|
|
84
|
-
const reviewResult = await callLLMForJSON(
|
|
85
|
-
prompts.REVIEW_PROMPT.replace('{input}', input)
|
|
86
|
-
.replace('{diagramType}', diagramType)
|
|
87
|
-
.replace('{elaboration}', elaboration),
|
|
88
|
-
res,
|
|
89
|
-
'review',
|
|
90
|
-
);
|
|
91
|
-
const reviewTime = Date.now() - stepStart;
|
|
92
|
-
req.logger.info(methodName, 'reviewResult', reviewResult, `${reviewTime}ms`);
|
|
93
|
-
chatFeishuMsg(req, `reviewResult-${reviewResult}`);
|
|
94
|
-
res.streaming(`data: ${JSON.stringify({ step: 'review', result: reviewResult.result, duration: reviewTime })}\n\n`);
|
|
95
|
-
|
|
96
|
-
// 信息不足,追问用户
|
|
97
|
-
if (reviewResult.result === 'need_more_info') {
|
|
98
|
-
res.streaming(
|
|
99
|
-
`data: ${JSON.stringify({
|
|
100
|
-
step: 'review',
|
|
101
|
-
result: 'need_more_info',
|
|
102
|
-
questions: reviewResult.questions,
|
|
103
|
-
})}\n\n`,
|
|
104
|
-
);
|
|
105
|
-
res.streamingEnd();
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
// 5. generate - 生成 Mermaid
|
|
80
|
+
// 4. generate - 生成 Mermaid
|
|
110
81
|
stepStart = Date.now();
|
|
111
82
|
res.streaming(`data: ${JSON.stringify({ step: 'generate', status: 'start' })}\n\n`);
|
|
112
83
|
req.logger.info(methodName, 'step: generate');
|
|
@@ -19,12 +19,16 @@ module.exports = {
|
|
|
19
19
|
CLASSIFY_PROMPT: `你是一个图表类型分析专家。根据用户需求,判断最适合的图表类型。
|
|
20
20
|
|
|
21
21
|
可选类型:
|
|
22
|
-
- flowchart:
|
|
23
|
-
- sequence:
|
|
24
|
-
- classDiagram:
|
|
25
|
-
- erDiagram: ER
|
|
22
|
+
- flowchart: 流程图、步骤图、决策流程、状态图、思维导图等通用图表
|
|
23
|
+
- sequence: 时序图、交互流程、调用链、消息传递
|
|
24
|
+
- classDiagram: 类图、对象关系、继承结构、接口设计
|
|
25
|
+
- erDiagram: ER图、实体关系图、数据库设计、数据模型
|
|
26
26
|
|
|
27
|
-
注意:
|
|
27
|
+
注意:
|
|
28
|
+
- 只能从以上4种类型中选择
|
|
29
|
+
- 提到"ER图"、"实体关系"、"数据库"、"表结构"时必须选 erDiagram
|
|
30
|
+
- 提到"类"、"继承"、"接口"、"对象"时选 classDiagram
|
|
31
|
+
- 如果不确定,默认选 flowchart
|
|
28
32
|
|
|
29
33
|
用户输入: {input}
|
|
30
34
|
|
|
@@ -45,25 +49,6 @@ module.exports = {
|
|
|
45
49
|
- classDiagram: {"classes": [{"name": "", "attributes": [...], "methods": [...]}], "relations": [...]}
|
|
46
50
|
- erDiagram: {"entities": [{"name": "", "attributes": [...]}], "relations": [...]}
|
|
47
51
|
|
|
48
|
-
只回复 JSON。`,
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* 质量检查
|
|
52
|
-
*/
|
|
53
|
-
REVIEW_PROMPT: `你是一个质量检查专家。检查以下图表描述是否信息充足,能否生成完整的图表。
|
|
54
|
-
|
|
55
|
-
用户原始输入: {input}
|
|
56
|
-
图表类型: {diagramType}
|
|
57
|
-
细化描述: {elaboration}
|
|
58
|
-
|
|
59
|
-
判断标准:
|
|
60
|
-
1. 节点/步骤是否足够(至少3个有意义的元素)
|
|
61
|
-
2. 关系/连接是否清晰
|
|
62
|
-
3. 是否有明显缺失的关键信息
|
|
63
|
-
|
|
64
|
-
如果信息充足,回复: {"result": "pass"}
|
|
65
|
-
如果信息不足,回复: {"result": "need_more_info", "questions": ["问题1", "问题2"]}
|
|
66
|
-
|
|
67
52
|
只回复 JSON。`,
|
|
68
53
|
|
|
69
54
|
/**
|
|
@@ -80,6 +65,12 @@ module.exports = {
|
|
|
80
65
|
3. 节点文本和连接线文本中禁止使用括号()[]{},这些是 Mermaid 的形状语法符号,会导致解析错误
|
|
81
66
|
4. 连接线标签示例: -->|是| 、-->|否| 、-->|提交|,不要写 -->|否(注册)| 或 -->|是(通过)|
|
|
82
67
|
5. 如需补充说明,用斜杠/顿号/破折号代替括号,如"否-注册"、"否/注册"
|
|
68
|
+
6. erDiagram 属性格式严格为: type name PK/FK "注释",每个属性只能有这4个部分
|
|
69
|
+
- 正确: string username PK "用户名"
|
|
70
|
+
- 正确: int age "年龄"
|
|
71
|
+
- 错误: VARCHAR(50) UNIQUE NOT NULL username "用户名"(不支持SQL语法)
|
|
72
|
+
- 错误: DATETIME DEFAULT CURRENT_TIMESTAMP created_at(不支持DEFAULT等修饰符)
|
|
73
|
+
- type只用简单类型: string, int, text, datetime, boolean, float
|
|
83
74
|
|
|
84
75
|
要求:
|
|
85
76
|
1. 生成合法的 Mermaid 语法
|
package/views/index.html
CHANGED
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
<script
|
|
110
110
|
type="module"
|
|
111
111
|
crossorigin
|
|
112
|
-
src="https://static-small.vincentqiao.com/aibaiban/static/index-
|
|
112
|
+
src="https://static-small.vincentqiao.com/aibaiban/static/index-D3qgIOvl.js"
|
|
113
113
|
></script>
|
|
114
114
|
<link
|
|
115
115
|
rel="modulepreload"
|
|
@@ -134,7 +134,7 @@
|
|
|
134
134
|
<link
|
|
135
135
|
rel="modulepreload"
|
|
136
136
|
crossorigin
|
|
137
|
-
href="https://static-small.vincentqiao.com/aibaiban/static/chunks/excalidraw-
|
|
137
|
+
href="https://static-small.vincentqiao.com/aibaiban/static/chunks/excalidraw-BV1kaZIV.js"
|
|
138
138
|
/>
|
|
139
139
|
<link
|
|
140
140
|
rel="stylesheet"
|