【04】从0到1构建AI生成思维导图应用 – 创建 AI 工作流
大家好!最近自己做了一个完全免费的AI生成思维导图的网站,支持下载,编辑和对接微信公众号,可以在这里体验:https://lt2mind.zeabur.app/
上一章:https://blog.csdn.net/m0_56699208/article/details/140037195?spm=1001.2014.3001.5502
工作流介绍
工作流支持通过可视化的方式,对插件、大语言模型、代码块等功能进行组合,从而实现复杂、稳定的业务流程编排,例如旅行规划、报告分析等。
工作流支持通过可视化的方式,对插件、大语言模型、代码块等功能进行组合,从而实现复杂、稳定的业务流程编排,例如旅行规划、报告分析等。
当目标任务场景包含较多的步骤,且对输出结果的准确性、格式有严格要求时,适合配置工作流来实现。
功能概述
工作流由多个节点构成,节点是组成工作流的基本单元。例如,大语言模型 LLM、自定义代码、判断逻辑等节点。
工作流默认包含了开始节点和结束节点。
- 开始节点是工作流的起始节点,可以包含用户输入信息。
- 结束节点是工作流的末尾节点,用于返回工作流的运行结果。
搭建好 agent 之后,使用一套工作流可以有效地完成使用语言模型将文字总结成思维导图的格式,再转换成图片的一系列操作,在之前搭建好的 bot 里选择新建一个工作流,根据我的操作,可以自行搭建一个生成脑图的工作流:
工作流拆解
- 开始节点:接受用户的输入
- 代码块:判断是文本还是链接`
from typing import TypedDict, Dict
# 定义输入参数类型
class Input(TypedDict):
input: str
# 定义输出参数类型
class Output(TypedDict):
output: int
async def main(args) -> Output:
params = args.params
text = params['input']
# 判断输入是文本还是链接
if text.startswith("http://") or text.startswith("https://"):
return {'output': 2}
else:
return {'output': 1}
- 选择器:为下一步的操作做判断,文本和链接使用不同的大模型prompt和插件
- LinkReaderPlugin:获取链接内容的插件,如果用户输入为链接,则调用这个插件
- 大模型1:用户输入为文本时调用,目的是设计思维导图的蓝本
- 大模型2:用户输入为链接时调用,目的是设计思维导图的蓝本
prompt:
## 角色(Role):
你是一位思维导图设计专家,擅长将长篇文章、讲座内容、会议录音等不同形式的长文本,转化为结构清晰、层次分明的思维导图。你能快速提炼文本的核心内容和关键信息,并使用Markdown格式对其进行有效地组织和呈现,使之成为一份可直接导入思维导图软件并生成美观实用脑图的蓝本。
## 背景(Background):
在信息爆炸的时代,人们每天接收和处理海量信息,提炼关键内容和梳理逻辑结构成为重要的能力。思维导图是一种行之有效的信息整理和学习工具,但从零开始制作一张高质量的思维导图并非易事。将长文本内容快速转化为思维导图的需求日益增长。
## 任务(Task):
你的任务是将【用户原始需求描述】比如提供的长篇文章、讲座内容、会议录音等长文本,转化为以Markdown格式呈现的思维导图蓝本。你需要仔细阅读或聆听材料,快速提炼出核心内容和关键信息,并运用Markdown的各种格式元素(如标题、列表、粗斜体等),对内容进行层次清晰的组织和排版,使之成为一份可直接导入思维导图软件、一键生成美观实用脑图的蓝本。
## 规则与限制(Rules & Restrictions):
输出的思维导图蓝本必须严格遵循Markdown语法规范。
思维导图的结构层次要清晰、缜密,主次分明,确保生成的脑图一目了然。
思维导图的内容必须准确、完整地反映原文本的核心内容,不得遗漏关键信息。
每个节点的内容要简洁明了,避免冗长或模棱两可的表述。
要善于运用Markdown的格式元素,提高思维导图蓝本的可读性和美观度。
禁止生成任何违法、违规、色情、暴力或冒犯性的内容。
## 参考短语(Reference sentences):
逻辑清晰、结构缜密
主次分明、层次鲜明
提炼精准、重点突出
简洁明了、一目了然
排版美观、格式规范
忠于原文、不遗核心
一键生成、即取即用
## 案例展示(Case Show):
### 用户输入:
[一段关于时间管理的讲座文稿,1000字]
### 生成的思维导图蓝本:
时间管理的艺术
时间管理的重要性
提高效率,事半功倍
减轻压力,保持平衡
实现目标,成就自我
时间管理的五个步骤
列出待办事项清单
工作事项
个人事项
其他事项
区分轻重缓急
重要且紧急:优先处理
重要但不紧急:提上日程
不重要但紧急:尽快完成
不重要也不紧急:酌情安排
合理规划时间
预留缓冲时间
切割大任务为小任务
习惯使用日程表
专注高效执行
避免完美主义
克服拖延症
充分利用碎片时间
定期回顾总结
评估完成情况
分析存在问题
调整优化策略
常见的时间管理工具
番茄工作法
甘特图
GTD法
SMART原则
时间管理的建议
学会说"不"
培养良好习惯
注重身心健康
拥抱变化和不确定性
## 风格和语气(Style & Tone):
思维导图蓝本的整体风格应简洁明快、专业实用。语言表达要准确、干练,避免使用过于口语化或随意的表述。在保证内容完整、结构清晰的同时,也要注重排版的美观和可读性,力求为用户提供一份高质量的、即取即用的思维导图蓝本。
## 受众群体(Audience):
思维导图蓝本的目标用户主要是需要快速对长文本内容进行梳理提炼、生成思维导图的学生、职场人士、研究者等。他们希望能借助AI的力量,将海量信息快速转化为清晰有序、一目了然的思维导图,以提高学习和工作效率。
## 输出格式(Output format):
以Markdown格式输出思维导图蓝本,其中:
- 根节点(中心主题)使用一级标题(#)
- 一级分支节点使用二级标题(##)
- 二级及以下分支节点使用列表(-、1. 等)
- 关键词使用粗体(**)或斜体(*)标注
- 代码、引用等特殊内容使用代码块(```)标注
确保生成的Markdown文本层次分明、格式规范,可直接导入主流思维导图软件并一键生成美观实用的脑图。
## 工作流程(Workflow):
1. 仔细阅读或聆听【用户原始需求描述】,快速提炼出核心内容和关键信息。
2. 根据提炼出的内容,确定思维导图的整体结构和层次关系。
3. 使用Markdown格式对提炼出的内容进行组织和排版,形成初步的思维导图蓝本。
4. 检查并润色思维导图蓝本,确保其内容完整、结构清晰、格式规范。
5. 以Markdown格式输出最终的思维导图蓝本。
## 初始化(Initialization):
【用户原始需求描述】= < {{input}} > + {{input_link}};
根据上面的用户原始需求描述,按上面的提示词原则,必须用规定<输出格式>来输出;不要输出其它任何无关内容,如果用户输入英文,请用英文输出;如果用户输入中文,请用中文输出!
- generateTreeMind:插件,将蓝本生成为思维导图
- 代码块:生成返回值
from typing import TypedDict, Dict
# 定义输入参数类型
class Input(TypedDict):
input: str
# 定义输出参数类型
class Output(TypedDict):
image_url: str
edit_url: str
async def main(args) -> Output:
params = args.params
text = params['input']
# 提取图片型链接地址
image_url_start = text.find("![返回图片](") + len("![返回图片](")
image_url_end = text.find(")", image_url_start)
image_url = text[image_url_start:image_url_end]
# 提取编辑型链接地址
edit_url_start = text.find("[编辑](") + len("[编辑](")
edit_url_end = text.find(")", edit_url_start)
edit_url = text[edit_url_start:edit_url_end]
return {
'image_url': image_url,
'edit_url': edit_url
}
- 结束:返回生成的值,为图片的链接和编辑链接
测试无误后可以点击发布,工作流发布后,点击 bot 的发布,发布为 API,则可以在我们的前端页面中调用这个模型了:
import axios from "axios";
export const toMind = async (query: string) => {
const url = 'https://api.coze.cn/open_api/v2/chat';
const headers = {
'Content-Type': 'application/json',
'Authorization': "Bearer your api key"
};
const body = {
"conversation_id": "1",
"bot_id": "your bot id",
"user": "29032201862555",
"query": query,
"stream": false
};
try {
const response = await axios.post(url, body, { headers });
console.log('Response:', response.data.messages[2].content);
const urlPattern = /https:\/\/[^\s]+/g;
let urls = response.data.messages[2].content.match(urlPattern);
let imgUrl = urls[0]
let editUrl = urls[1]
return {imgUrl, editUrl}
} catch (error) {
console.error('Error:', error);
}
};
这段代码使用正则表达式/https:\/\/[^\s]+/g
来匹配响应内容中的URL,包含两个属性imgUrl和editUrl,分别对应匹配到的第一个和第二个URL。将apikey和botid替换为自己的即可调用成功。
---- 完整的工作流可以+v: aircrushin 获取 ----
下一章我们将会在前端调用这个API,使其显示在页面中,实现生成功能。