上传文件至「/」
This commit is contained in:
228
.gitignore
vendored
Normal file
228
.gitignore
vendored
Normal file
@@ -0,0 +1,228 @@
|
||||
# Dependencies
|
||||
node_modules/
|
||||
__pycache__/
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyd
|
||||
.Python
|
||||
env/
|
||||
venv/
|
||||
.venv/
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Build outputs
|
||||
dist/
|
||||
build/
|
||||
*.egg-info/
|
||||
*.egg
|
||||
.next/
|
||||
out/
|
||||
|
||||
# Environment variables
|
||||
.env
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
*.env
|
||||
|
||||
# IDE and editor files
|
||||
.vscode/
|
||||
.idea/
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Logs
|
||||
logs/
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
|
||||
# Runtime data
|
||||
pids/
|
||||
*.pid
|
||||
*.seed
|
||||
*.pid.lock
|
||||
|
||||
# Coverage directory used by tools like istanbul
|
||||
coverage/
|
||||
*.lcov
|
||||
|
||||
# nyc test coverage
|
||||
.nyc_output
|
||||
|
||||
# Dependency directories
|
||||
jspm_packages/
|
||||
|
||||
# Optional npm cache directory
|
||||
.npm
|
||||
|
||||
# Optional REPL history
|
||||
.node_repl_history
|
||||
|
||||
# Output of 'npm pack'
|
||||
*.tgz
|
||||
|
||||
# Yarn Integrity file
|
||||
.yarn-integrity
|
||||
|
||||
# parcel-bundler cache (https://parceljs.org/)
|
||||
.cache
|
||||
.parcel-cache
|
||||
|
||||
# Next.js build output
|
||||
.next
|
||||
|
||||
# Nuxt.js build / generate output
|
||||
.nuxt
|
||||
|
||||
# Gatsby files
|
||||
.cache/
|
||||
public
|
||||
|
||||
# Storybook build outputs
|
||||
.out
|
||||
.storybook-out
|
||||
|
||||
# Temporary folders
|
||||
tmp/
|
||||
temp/
|
||||
|
||||
# Database files
|
||||
*.db
|
||||
*.sqlite
|
||||
*.sqlite3
|
||||
|
||||
# Python specific
|
||||
*.py[cod]
|
||||
*$py.class
|
||||
*.so
|
||||
.Python
|
||||
build/
|
||||
develop-eggs/
|
||||
downloads/
|
||||
eggs/
|
||||
.eggs/
|
||||
lib/
|
||||
lib64/
|
||||
parts/
|
||||
sdist/
|
||||
var/
|
||||
wheels/
|
||||
*.whl
|
||||
share/python-wheels/
|
||||
*.egg-info/
|
||||
.installed.cfg
|
||||
*.egg
|
||||
MANIFEST
|
||||
|
||||
# PyInstaller
|
||||
*.manifest
|
||||
*.spec
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
.tox/
|
||||
.nox/
|
||||
.coverage
|
||||
.coverage.*
|
||||
.cache
|
||||
nosetests.xml
|
||||
coverage.xml
|
||||
*.cover
|
||||
*.py,cover
|
||||
.hypothesis/
|
||||
.pytest_cache/
|
||||
cover/
|
||||
|
||||
# Translations
|
||||
*.mo
|
||||
*.pot
|
||||
|
||||
# Scrapy stuff
|
||||
.scrapy
|
||||
|
||||
# Sphinx documentation
|
||||
docs/_build/
|
||||
|
||||
# PyBuilder
|
||||
.pybuilder/
|
||||
target/
|
||||
|
||||
# Jupyter Notebook
|
||||
.ipynb_checkpoints
|
||||
|
||||
# IPython
|
||||
profile_default/
|
||||
ipython_config.py
|
||||
|
||||
# pyenv
|
||||
.python-version
|
||||
|
||||
# pipenv
|
||||
Pipfile.lock
|
||||
|
||||
# PEP 582
|
||||
__pypackages__/
|
||||
|
||||
# Celery stuff
|
||||
celerybeat-schedule
|
||||
celerybeat.pid
|
||||
|
||||
# SageMath parsed files
|
||||
*.sage.py
|
||||
|
||||
# Environments
|
||||
.env
|
||||
.venv
|
||||
env/
|
||||
venv/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# Spyder project settings
|
||||
.spyderproject
|
||||
.spyproject
|
||||
|
||||
# Rope project settings
|
||||
.ropeproject
|
||||
|
||||
# mkdocs documentation
|
||||
/site
|
||||
|
||||
# mypy
|
||||
.mypy_cache/
|
||||
.dmypy.json
|
||||
dmypy.json
|
||||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# pytype static type analyzer
|
||||
.pytype/
|
||||
|
||||
# Cython debug symbols
|
||||
cython_debug/
|
||||
|
||||
# OS generated files
|
||||
.DS_Store
|
||||
.DS_Store?
|
||||
._*
|
||||
.Spotlight-V100
|
||||
.Trashes
|
||||
ehthumbs.db
|
||||
Thumbs.db
|
||||
|
||||
# Project specific
|
||||
.claude/
|
||||
.ruff_cache/
|
||||
121
README.md
Normal file
121
README.md
Normal file
@@ -0,0 +1,121 @@
|
||||
# Interactive Mindmap
|
||||
|
||||
基于 Next.js、FastAPI 和 SQLite 的交互式思维导图应用,支持通过腾讯云 AI Agent 对话生成思维导图。
|
||||
|
||||
## 项目结构
|
||||
|
||||
```
|
||||
mindmap/
|
||||
├── backend/ # FastAPI 后端
|
||||
│ ├── app/
|
||||
│ │ ├── main.py # 应用入口
|
||||
│ │ ├── config.py # 配置
|
||||
│ │ ├── database.py # 数据库
|
||||
│ │ ├── models.py # 数据模型
|
||||
│ │ ├── schemas.py # Pydantic schemas
|
||||
│ │ └── routers/
|
||||
│ │ ├── mindmaps.py # 思维导图 CRUD API
|
||||
│ │ └── chat.py # AI 对话代理 (SSE)
|
||||
│ ├── data/ # SQLite 数据库文件
|
||||
│ ├── requirements.txt
|
||||
│ └── .env.example
|
||||
├── frontend/ # Next.js 前端
|
||||
│ ├── app/
|
||||
│ │ ├── page.tsx # 首页
|
||||
│ │ └── mindmap/
|
||||
│ │ ├── [id]/page.tsx # 思维导图详情页
|
||||
│ │ └── chat/page.tsx # AI 对话 + 思维导图页
|
||||
│ ├── components/
|
||||
│ │ ├── MindmapCanvas.tsx # 思维导图画布
|
||||
│ │ ├── MindmapNodeCard.tsx # 节点卡片
|
||||
│ │ ├── ChatPanel.tsx # 聊天面板
|
||||
│ │ └── CreateMindmapForm.tsx # 创建表单
|
||||
│ ├── lib/
|
||||
│ │ ├── api.ts # API 调用
|
||||
│ │ └── treeToGraph.ts # 树转图布局
|
||||
│ └── types/
|
||||
│ └── mindmap.ts # TypeScript 类型
|
||||
└── mind_prompt.md # AI Agent 系统提示词
|
||||
```
|
||||
|
||||
## 环境配置
|
||||
|
||||
### 后端
|
||||
|
||||
1. 安装依赖:
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
2. 配置环境变量:
|
||||
|
||||
```bash
|
||||
# 复制示例配置
|
||||
cp .env.example .env
|
||||
|
||||
# 编辑 .env,填入腾讯云 AI Agent 的 bot_app_key
|
||||
TENCENT_BOT_APP_KEY=your-key-here
|
||||
```
|
||||
|
||||
3. 启动后端:
|
||||
|
||||
```bash
|
||||
TENCENT_BOT_APP_KEY=your-key-here uvicorn app.main:app --reload
|
||||
```
|
||||
|
||||
### 前端
|
||||
|
||||
1. 安装依赖:
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
```
|
||||
|
||||
2. 启动开发服务器:
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## 页面说明
|
||||
|
||||
### 首页 `/`
|
||||
|
||||
输入主题创建思维导图(使用 mock 数据)。
|
||||
|
||||
### 思维导图详情 `/mindmap/[id]`
|
||||
|
||||
查看已保存的思维导图,支持节点展开/收缩。
|
||||
|
||||
### AI 对话生成 `/mindmap/chat?sessionId=xxx`
|
||||
|
||||
通过与腾讯云 AI Agent 对话生成思维导图:
|
||||
|
||||
- **左侧**: 思维导图画布,初始为空,AI 返回有效数据后自动渲染
|
||||
- **右侧**: 聊天面板,支持实时 SSE 流式响应
|
||||
|
||||
URL 参数:
|
||||
- `sessionId` (必填): 会话 ID,用于标识对话会话
|
||||
|
||||
## 数据流
|
||||
|
||||
```
|
||||
用户输入 → ChatPanel → POST /api/chat → 后端代理 → 腾讯云 SSE API
|
||||
↓
|
||||
画布更新 ← onMindmapUpdate ← JSON 解析 ← SSE 流式响应 ←─┘
|
||||
```
|
||||
|
||||
1. 用户在聊天面板输入消息
|
||||
2. 前端发送 POST 请求到后端 `/api/chat`
|
||||
3. 后端将请求代理到腾讯云 AI Agent SSE 接口
|
||||
4. SSE 流式响应逐步返回到前端
|
||||
5. 前端解析 SSE 事件,逐步显示 AI 回复
|
||||
6. 当 AI 回复完成后,尝试从回复中提取思维导图 JSON
|
||||
7. 如果提取成功,更新左侧画布
|
||||
|
||||
## AI Agent 配置
|
||||
|
||||
参见 [mind_prompt.md](./mind_prompt.md) 获取 AI Agent 的系统提示词配置。
|
||||
176
help.md
Normal file
176
help.md
Normal file
@@ -0,0 +1,176 @@
|
||||
# 思维导图工具使用说明
|
||||
|
||||
## 概述
|
||||
|
||||
本工具用于对接腾讯云智能体平台,实现思维导图的可视化展示和交互式对话。
|
||||
|
||||
## 工作流程
|
||||
|
||||
```
|
||||
腾讯云智能体平台 → 发送sessionID和思维导图JSON → 本系统存储并返回URL → 用户访问URL查看思维导图 → 点击节点触发AI对话
|
||||
```
|
||||
|
||||
## API 接口
|
||||
|
||||
### 1. 创建思维导图
|
||||
|
||||
**请求**
|
||||
|
||||
```
|
||||
POST /api/mindmaps
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"session_id": "腾讯云对话sessionID",
|
||||
"mindmap_json": {
|
||||
"id": "node_0",
|
||||
"label": "机器学习",
|
||||
"parent_id": null,
|
||||
"level": 0,
|
||||
"is_leaf": false,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_1",
|
||||
"label": "监督学习",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": false,
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**响应**
|
||||
|
||||
```json
|
||||
{
|
||||
"id": 1,
|
||||
"unique_id": "abc123xyz",
|
||||
"session_id": "腾讯云对话sessionID",
|
||||
"title": "机器学习",
|
||||
"raw_json": "{...}",
|
||||
"tree": {...},
|
||||
"url": "http://localhost:3000/mindmap/abc123xyz",
|
||||
"created_at": "2026-03-20T12:00:00",
|
||||
"updated_at": "2026-03-20T12:00:00"
|
||||
}
|
||||
```
|
||||
|
||||
**说明**
|
||||
- `session_id`: 腾讯云智能体平台的对话sessionID,用于后续节点点击时的对话
|
||||
- `mindmap_json`: 思维导图的JSON数据,标题从根节点的`label`字段自动提取
|
||||
- `url`: 返回的唯一访问链接,可直接发送给用户
|
||||
|
||||
### 2. 获取思维导图
|
||||
|
||||
**请求**
|
||||
|
||||
```
|
||||
GET /api/mindmaps/{unique_id}
|
||||
```
|
||||
|
||||
**响应**
|
||||
|
||||
与创建接口返回格式相同
|
||||
|
||||
### 3. 对话接口
|
||||
|
||||
**请求**
|
||||
|
||||
```
|
||||
POST /api/chat
|
||||
Content-Type: application/json
|
||||
|
||||
{
|
||||
"session_id": "腾讯云对话sessionID",
|
||||
"content": "帮我解释一下监督学习"
|
||||
}
|
||||
```
|
||||
|
||||
**响应**
|
||||
|
||||
SSE流式响应,转发腾讯云智能体平台的对话结果
|
||||
|
||||
## 思维导图JSON格式
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "node_0",
|
||||
"label": "根节点标题",
|
||||
"parent_id": null,
|
||||
"level": 0,
|
||||
"is_leaf": false,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_1",
|
||||
"label": "子节点标题",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": true,
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
**字段说明**
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | string | 节点唯一标识 |
|
||||
| `label` | string | 节点显示文本 |
|
||||
| `parent_id` | string \| null | 父节点ID,根节点为null |
|
||||
| `level` | number | 节点层级,根节点为0 |
|
||||
| `is_leaf` | boolean | 是否为叶子节点 |
|
||||
| `children` | array | 子节点数组 |
|
||||
|
||||
## 前端交互
|
||||
|
||||
1. **查看思维导图**: 用户访问返回的URL即可查看思维导图
|
||||
2. **展开/折叠节点**: 点击有子节点的节点可展开或折叠
|
||||
3. **触发AI对话**: 点击任意节点,右侧聊天面板会自动显示并发送"帮我解释一下{节点内容}"到腾讯云智能体平台
|
||||
4. **继续对话**: 用户可在聊天面板中继续与AI对话
|
||||
|
||||
## 环境变量配置
|
||||
|
||||
后端 `.env` 文件:
|
||||
|
||||
```env
|
||||
# 腾讯云智能体平台 AppKey
|
||||
# 获取方式:应用管理 → 找到运行中的应用 → 点击"调用" → 复制AppKey
|
||||
BOT_APP_KEY=your-app-key-here
|
||||
|
||||
# 前端基础URL(用于生成思维导图链接)
|
||||
FRONTEND_BASE_URL=http://localhost:3000
|
||||
```
|
||||
|
||||
前端 `.env.local` 文件:
|
||||
|
||||
```env
|
||||
# 后端API地址
|
||||
NEXT_PUBLIC_API_BASE_URL=http://127.0.0.1:8000
|
||||
```
|
||||
|
||||
## 启动方式
|
||||
|
||||
### 后端
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
pip install -r requirements.txt
|
||||
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
|
||||
```
|
||||
|
||||
### 前端
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
## 腾讯云智能体平台配置
|
||||
|
||||
在腾讯云智能体平台的系统提示词中,指导AI返回符合上述格式的思维导图JSON。参考 `mind_prompt.md` 文件中的示例提示词。
|
||||
178
mind_prompt.md
Normal file
178
mind_prompt.md
Normal file
@@ -0,0 +1,178 @@
|
||||
# 思维导图 AI Agent 系统提示词
|
||||
|
||||
将以下内容配置为腾讯云 AI Agent 的系统提示词(System Prompt):
|
||||
|
||||
---
|
||||
|
||||
你是一个思维导图生成助手。当用户提出一个主题时,你需要生成一个结构化的思维导图 JSON 数据。
|
||||
|
||||
## 输出格式
|
||||
|
||||
你必须严格按照以下 JSON Schema 输出思维导图数据,不要包含任何额外的解释文字,只返回 JSON:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "node_0",
|
||||
"label": "根节点标题",
|
||||
"parent_id": null,
|
||||
"level": 0,
|
||||
"is_leaf": false,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_1",
|
||||
"label": "子节点标题",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": false,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_4",
|
||||
"label": "叶子节点",
|
||||
"parent_id": "node_1",
|
||||
"level": 2,
|
||||
"is_leaf": true,
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
## 字段说明
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| `id` | string | 节点唯一标识,格式为 `node_N`(N 从 0 开始递增) |
|
||||
| `label` | string | 节点显示文本 |
|
||||
| `parent_id` | string \| null | 父节点 ID,根节点为 null |
|
||||
| `level` | number | 节点层级,根节点为 0 |
|
||||
| `is_leaf` | boolean | 是否为叶子节点(无子节点时为 true) |
|
||||
| `children` | array | 子节点数组,叶子节点为空数组 `[]` |
|
||||
|
||||
## 规则
|
||||
|
||||
1. 根节点的 `label` 应为用户提出的主题
|
||||
2. 建议生成 3-5 个一级子节点
|
||||
3. 每个一级子节点下建议生成 2-4 个二级子节点
|
||||
4. 最多不超过 3 层(level 0, 1, 2)
|
||||
5. **必须** 将整个 JSON 放在 ` ```json ``` ` 代码块内返回
|
||||
6. 除了 JSON 代码块外,不要输出任何其他文字
|
||||
|
||||
## 示例
|
||||
|
||||
用户输入:`机器学习`
|
||||
|
||||
你应该返回:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "node_0",
|
||||
"label": "机器学习",
|
||||
"parent_id": null,
|
||||
"level": 0,
|
||||
"is_leaf": false,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_1",
|
||||
"label": "监督学习",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": false,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_5",
|
||||
"label": "线性回归",
|
||||
"parent_id": "node_1",
|
||||
"level": 2,
|
||||
"is_leaf": true,
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": "node_6",
|
||||
"label": "决策树",
|
||||
"parent_id": "node_1",
|
||||
"level": 2,
|
||||
"is_leaf": true,
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "node_2",
|
||||
"label": "无监督学习",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": false,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_7",
|
||||
"label": "聚类分析",
|
||||
"parent_id": "node_2",
|
||||
"level": 2,
|
||||
"is_leaf": true,
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": "node_8",
|
||||
"label": "降维",
|
||||
"parent_id": "node_2",
|
||||
"level": 2,
|
||||
"is_leaf": true,
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "node_3",
|
||||
"label": "强化学习",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": false,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_9",
|
||||
"label": "Q-Learning",
|
||||
"parent_id": "node_3",
|
||||
"level": 2,
|
||||
"is_leaf": true,
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": "node_10",
|
||||
"label": "策略梯度",
|
||||
"parent_id": "node_3",
|
||||
"level": 2,
|
||||
"is_leaf": true,
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "node_4",
|
||||
"label": "深度学习",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": false,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_11",
|
||||
"label": "卷积神经网络",
|
||||
"parent_id": "node_4",
|
||||
"level": 2,
|
||||
"is_leaf": true,
|
||||
"children": []
|
||||
},
|
||||
{
|
||||
"id": "node_12",
|
||||
"label": "循环神经网络",
|
||||
"parent_id": "node_4",
|
||||
"level": 2,
|
||||
"is_leaf": true,
|
||||
"children": []
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
155
test_api.py
Normal file
155
test_api.py
Normal file
@@ -0,0 +1,155 @@
|
||||
import requests
|
||||
|
||||
BASE_URL = "http://127.0.0.1:8000"
|
||||
|
||||
|
||||
def test_create_mindmap():
|
||||
payload = {
|
||||
"session_id": "test-session-123456",
|
||||
"mindmap_json": {
|
||||
"id": "node_0",
|
||||
"label": "Python编程",
|
||||
"parent_id": None,
|
||||
"level": 0,
|
||||
"is_leaf": False,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_1",
|
||||
"label": "基础语法",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": False,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_5",
|
||||
"label": "变量与数据类型",
|
||||
"parent_id": "node_1",
|
||||
"level": 2,
|
||||
"is_leaf": True,
|
||||
"children": [],
|
||||
},
|
||||
{
|
||||
"id": "node_6",
|
||||
"label": "控制流程",
|
||||
"parent_id": "node_1",
|
||||
"level": 2,
|
||||
"is_leaf": True,
|
||||
"children": [],
|
||||
},
|
||||
{
|
||||
"id": "node_7",
|
||||
"label": "函数定义",
|
||||
"parent_id": "node_1",
|
||||
"level": 2,
|
||||
"is_leaf": True,
|
||||
"children": [],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"id": "node_2",
|
||||
"label": "面向对象",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": False,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_8",
|
||||
"label": "类与对象",
|
||||
"parent_id": "node_2",
|
||||
"level": 2,
|
||||
"is_leaf": True,
|
||||
"children": [],
|
||||
},
|
||||
{
|
||||
"id": "node_9",
|
||||
"label": "继承与多态",
|
||||
"parent_id": "node_2",
|
||||
"level": 2,
|
||||
"is_leaf": True,
|
||||
"children": [],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"id": "node_3",
|
||||
"label": "常用库",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": False,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_10",
|
||||
"label": "NumPy",
|
||||
"parent_id": "node_3",
|
||||
"level": 2,
|
||||
"is_leaf": True,
|
||||
"children": [],
|
||||
},
|
||||
{
|
||||
"id": "node_11",
|
||||
"label": "Pandas",
|
||||
"parent_id": "node_3",
|
||||
"level": 2,
|
||||
"is_leaf": True,
|
||||
"children": [],
|
||||
},
|
||||
{
|
||||
"id": "node_12",
|
||||
"label": "Requests",
|
||||
"parent_id": "node_3",
|
||||
"level": 2,
|
||||
"is_leaf": True,
|
||||
"children": [],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
"id": "node_4",
|
||||
"label": "应用场景",
|
||||
"parent_id": "node_0",
|
||||
"level": 1,
|
||||
"is_leaf": False,
|
||||
"children": [
|
||||
{
|
||||
"id": "node_13",
|
||||
"label": "Web开发",
|
||||
"parent_id": "node_4",
|
||||
"level": 2,
|
||||
"is_leaf": True,
|
||||
"children": [],
|
||||
},
|
||||
{
|
||||
"id": "node_14",
|
||||
"label": "数据分析",
|
||||
"parent_id": "node_4",
|
||||
"level": 2,
|
||||
"is_leaf": True,
|
||||
"children": [],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
}
|
||||
|
||||
response = requests.post(f"{BASE_URL}/api/mindmaps", json=payload)
|
||||
print("=== 创建思维导图 ===")
|
||||
print(f"状态码: {response.status_code}")
|
||||
result = response.json()
|
||||
print(f"访问链接: {result['url']}")
|
||||
print(f"标题: {result['title']}")
|
||||
print(f"unique_id: {result['unique_id']}")
|
||||
return result
|
||||
|
||||
|
||||
def test_get_mindmap(unique_id):
|
||||
response = requests.get(f"{BASE_URL}/api/mindmaps/{unique_id}")
|
||||
print("\n=== 获取思维导图 ===")
|
||||
print(f"状态码: {response.status_code}")
|
||||
print(f"标题: {response.json()['title']}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
result = test_create_mindmap()
|
||||
test_get_mindmap(result["unique_id"])
|
||||
Reference in New Issue
Block a user