merge: 合并导图报告拆分到main

This commit is contained in:
2026-08-03 23:20:14 +08:00
4 changed files with 5 additions and 12 deletions
+1 -1
View File
@@ -85,7 +85,7 @@ curl http://localhost:5199/ai/tasks/550e8400-e29b-41d4-a716-446655440000
| type | 说明 | params 字段 | | type | 说明 | params 字段 |
|------|------|------------| |------|------|------------|
| `aggregate-report` | 聚合学习残片为报告 | `taskName`, `expectation`, `fragments[]` | | `aggregate-report` | 聚合学习残片为报告 | `taskName`, `expectation`, `fragments[]` |
| `generate-mind-map` | 生成思维导图大纲 | `taskName`, `reports[]`, `fragments[]`, `applications[]` | | `generate-mind-map` | 生成思维导图大纲 | `taskName`, `reports[]`, `applications[]` |
| `compare-recall` | 对比用户回忆与标准导图 | `taskName`, `standardOutline`, `recallOutline` | | `compare-recall` | 对比用户回忆与标准导图 | `taskName`, `standardOutline`, `recallOutline` |
## 架构位置 ## 架构位置
+2 -3
View File
@@ -32,15 +32,14 @@ describe("aggregateReportPrompt", () => {
}); });
describe("generateMindMapPrompt", () => { describe("generateMindMapPrompt", () => {
it("要求输出缩进大纲且包含全部输入", () => { it("要求输出缩进大纲且包含学习报告", () => {
const messages = generateMindMapPrompt( const messages = generateMindMapPrompt(
"Java 并发", "Java 并发",
"并发编程学习", "并发编程学习",
["报告一"], ["报告一"],
["残片一", "残片二"],
); );
expect(messages[0].content).toContain("缩进"); expect(messages[0].content).toContain("缩进");
expect(messages[1].content).toContain("报告一"); expect(messages[1].content).toContain("报告一");
expect(messages[1].content).toContain("残片"); expect(messages[1].content).not.toContain("学习残片");
}); });
}); });
+2 -6
View File
@@ -50,20 +50,19 @@ export function aggregateReportPrompt(
} }
/** /**
* 从学习报告和残片生成标准思维导图(预留,用于替代 Java 端 BuiltinMindMapGenerator)。 * 从学习报告生成标准思维导图(预留,用于替代 Java 端 BuiltinMindMapGenerator)。
* 输出为缩进大纲文本,与后端 MindMapTreeTool.parseOutline 格式一致。 * 输出为缩进大纲文本,与后端 MindMapTreeTool.parseOutline 格式一致。
*/ */
export function generateMindMapPrompt( export function generateMindMapPrompt(
taskName: string, taskName: string,
taskDescription: string, taskDescription: string,
reports: string[], reports: string[],
fragments: string[],
): ChatMessage[] { ): ChatMessage[] {
return [ return [
{ {
role: "system", role: "system",
content: [ content: [
"你是一名知识结构整理助手。请阅读某个学习任务的全部学习报告和残片", "你是一名知识结构整理助手。请阅读某个学习任务的全部学习报告,",
"将其中的知识点整理成一份思维导图大纲。要求:", "将其中的知识点整理成一份思维导图大纲。要求:",
"1. 第一行是导图根标题(任务主题);", "1. 第一行是导图根标题(任务主题);",
"2. 之后每行一个节点,用两个空格的缩进表示层级;", "2. 之后每行一个节点,用两个空格的缩进表示层级;",
@@ -81,9 +80,6 @@ export function generateMindMapPrompt(
"", "",
"学习报告:", "学习报告:",
...reports.map((r, i) => `${i + 1}. ${r}`), ...reports.map((r, i) => `${i + 1}. ${r}`),
"",
"学习残片:",
...fragments.map((f, i) => `${i + 1}. ${f}`),
] ]
.filter(Boolean) .filter(Boolean)
.join("\n"), .join("\n"),
-2
View File
@@ -160,12 +160,10 @@ function buildMessages(task: TaskRecord) {
} }
case "generate-mind-map": { case "generate-mind-map": {
const reports = p.reports as string[] | undefined; const reports = p.reports as string[] | undefined;
const fragments = p.fragments as string[] | undefined;
return generateMindMapPrompt( return generateMindMapPrompt(
p.taskName as string, p.taskName as string,
(p.taskDescription as string) ?? "", (p.taskDescription as string) ?? "",
reports ?? [], reports ?? [],
fragments ?? [],
); );
} }
case "compare-recall": { case "compare-recall": {