向量脉络:一个开源的无代码 AI 工作流+本地知识库软件
Matrix 首页推荐
Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对标题和排版略作修改。
最近做了一个无代码 AI 工作流+知识库的产品向量脉络:vectorvein.com,顺便开源了一个本地的版本,今天给诸位介绍一下为什么做这样一个产品以及它的使用方式。如果对背景不感兴趣的朋友可以直接拉到后半部分看产品介绍和使用方式。
大语言模型的发展给各个行业带来了不小的冲击,ChatGPT 已经成为人尽皆知的名词了,而基于 ChatGPT 能力开发的各类通用领域产品、垂直领域产品也层出不穷让人眼花缭乱。
最开始 ChatGPT 仅仅以聊天的产品形态就已经吸引了大量的用户,稍微有点开发能力的开发者,如果没有想象力但是有行动力,就能开发一个套壳 ChatGPT 聊天产品,于是我们见到了可能是有史以来最多聊天类软件诞生的时期,只不过对面不是真人而是机器人。
接下来稍微有些想象力的开发者会考虑结合一些细分的垂直领域来做产品,比如典型的市场营销文案策划产品描述领域的 AI 产品。
再后来不满足于聊天形式的开发者们继续尝试拓展它的能力边界,于是有了 AutoGPT 和 Langchain 这样的明星项目。他们都是基于当前大语言模型的能力之上构建的新的应用形式,可以满足更具体更不一样的细化的需求。
AutoGPT 和 Langchain 虽然都很强很有潜力,但是说实话如果让一个没写过代码的人去使用,基本不太现实。于是大部分时候没有开发能力的用户只能通过一次次聊天来使用 AI 的能力。
但是我个人认为,如果要在工作中真正利用大语言模型来进行提效,聊天可能并不是最高效的一种形式。
举个例子,我看到一篇微信文章的标题好像挺有意思,想要听 AI 总结的音频,同时看看思维导图,然后顺便把这个文章存入我的个人知识库方便后续搜索提问。这样一个个人的工作流,里面虽然用到了 AI 的能力,但是如果单纯用 ChatGPT 聊天的形式我还需要花费不少时间完成工作流中其它的部分。
这套工作流如果对我来说是经常用到的并且我有编程能力,那么我可以写成一个固定的程序。然而这个程序很可能只能满足我的需求而不能满足你的需求,另外总不能遇到一个工作流就写个程序吧?而这样的工作流在每个人的生活和工作中会有很多。
简单对比一下:
编程能力要求 | 自定义化程度 | |
---|---|---|
ChatGPT 网页版 | 无 | 低 |
Langchain | 有 | 高 |
那么有没有介于 ChatGPT 和 Langchain 之间的产品?不需要编程但是也有一定的自定义化程度?
这个时候很容易就能想到无代码平台。尽管无代码平台已经不是新鲜的概念,但是在大语言模型的加持之下完全值得重新做一遍。这里面非常重要的一个原因就在于大语言模型把流程中大量复杂的逻辑全部搞定了,使得用户只需要设计好需要什么输入和输出以及如何触发工作流,中间的处理部分交给大语言模型就行,不再需要用编程的思维去设计逻辑处理中的各个细节。这样的无代码平台是真正面向无代码能力用户友好的。
其实基于 Langchain 有一个叫 langflow 的项目,已经比较接近我想要的效果了。
通过节点和连线的方式构建产品原型,非常清晰易懂,美中不足的是依然依赖于聊天的方式进行交互,重心并不在更多的输入和输出和工作流提效上。
正好前段时间公司有一些业务部门希望用 AI 来提效,我就从未来的扩展性和产品易用性思考了一下核心的诉求点:
于是就有了向量脉络这个 AI 工作流无代码平台,只需要通过简单的拖拽就能快速构建工作流,实现各类日常工作流的智能化和自动化。
最开始我先做了一个 SaaS 的版本 vectorvein.com,这周我用类似的前后端结构基于 pywebview 做了一个开源版,可以在本地使用,直接调用 OpenAI 的接口。开源的代码已经放在 Github 上。为了方便大家快速开始使用,我准备了一些官方模板方便你直接添加到自己的工作流中。
下面我以一个模板为例来介绍一下向量脉络是如何使用的。
上面是一个可以将任意语言文章总结为中文思维导图的工作流模板,添加到自己的工作流以后是这样的使用界面:
一个工作流代表了一个工作任务流程,包含了输入、输出以及工作流的触发方式(按钮触发、定时自动触发)。你可以任意定义输入是什么,输出是什么,以及输入是如何处理并到达输出结果的。
举几个例子让你理解不同的输入输出如何组成不同的工作流:
回到任意语言文章总结为中文思维导图的例子,输入是一个网址,工作流触发方式是按钮,点击按钮后工作流运行,输出是一个思维导图。
点击编辑按钮到编辑页面看看:
应该很容易就能看明白,左侧是节点选择区,右边是工作流画布。这里一个节点(矩形模块)代表一个子任务,不同的节点互相之间通过连线形成一个完整的工作流任务。
首先是文本爬虫节点,作用很简单就是将给定网址的正文内容爬取出来,给出标题和正文两个输出端口。
下一个是文本合成节点,以变量+模板的形式合成一段文字,具体有什么变量可以由用户自己设计。模板中的变量在工作流运行的时候会被替换为来源输入的结果。
这样我们将爬虫的标题和正文连到文本合成,就得到一个简单的爬取+合成的子流程了。
下一个节点是 OpenAI 节点,可以接收 Prompt 和温度等参数,我们将前面文本合成的结果连接到 OpenAI 节点的 Prompt 端口。
把 OpenAI 的输出连到思维导图节点,再加上一个按钮触发节点,我们就大功告成了。注意按钮触发节点不需要连接到其它节点,它作为特殊节点只要放在画布上就行。
点击保存以后我们就可以正常使用这个文章总结思维导图工作流了。如下图所示在左边输入任意网址然后点击运行即可在右边得到 AI 总结的思维导图结果。
同样的工作流如果我们稍作修改,还可以输出一段音频总结直接播放。
再看一个更加复杂一点的例子,输入是一张差评内容表格以及分类列表,AI 自动分类并给出处理后的表格文件。
这个工作流的设计如下:
你会看到里面包含了一个编程函数节点,对于目前没有的任务节点你可以简单编写一个函数来手动实现输入输出。也许你会觉得这个要求就高了,但是我告诉你,其实这个工作流的函数节点里的代码我也是直接让 AI 自己写的。下面是我的 Prompt:
编写一个 Python 函数,函数名是 main(),接收两个参数 table1 和 table2,两个参数都是 CSV 表格的字符串。将两个表格按照「编号」这一列合并为一张表格,返回合并后的 CSV 表格字符串。
只需要输出代码,绝对不要写其它非代码内容。
然后就得到我想要的代码了。甚至可以直接在工作流中用这个方式来实现自然语言描述需求然后 AI 生成函数并运行。
不过为了省钱省时间,一般来说 AI 写好的函数如果没有问题我会直接保存下来不用每次都从自然语言描述来生成。
向量脉络另一个重要的功能是私有知识库的结合,也就是 Embedding + 向量数据库。通过私有知识库,我们可以实现更为个性化的功能。比如上传客服知识库以后可以帮助客服根据聊天记录找到相关知识并且用 AI 组织新语言生成一个礼貌的客服回复内容。
得到的输出结果直接点复制按钮就可以粘贴回复客户了。
其实叫向量脉络最开始的原因就是我希望能日常在手机上看到的文章能快速存入我自己的向量数据库,还能方便搜索和提问,后来有了工作流的需求就整合在一起了。 除了开源的本地版本,目前向量脉络的 SaaS 版本支持在浏览器进行操作,未来会支持在小程序里打开你自己的 AI 工作流,更加深度整合到移动端的使用流程中,这也是我最开始的初衷。毕竟目前大部分人还是使用移动端更多一些。
最后简单介绍一下向量脉络的开源版整体结构和设计思考,也方便希望加入开发的朋友快速了解这个项目。 开源版是基于 pywebview 进行开发的,虽然是一个本地的 PC 端软件,但依然是前后端分离的结构。前端采用 Vue3+Vite+Ant Design Vue+Vue Flow。不过我对前端技术不那么熟悉,也就去年开始自学的 Vue,可能代码质量和风格还有所欠缺,希望有熟悉前端的朋友可以帮忙改进一下。
前端都放在 frontend 里,如果需要开发的朋友先安装 pnpm 然后在 frontend 里面:
pnpm install
后端部分都是 Python,API 里包含了与前端交互的接口,用户的数据是采用 peewee 这个 ORM 来储存在数据库里(本地版使用 SQLite),各个模型的定义放在 models 里面,utilities 里面是各类工具型代码,web 放的是前端打包后的资源,worker 里的 tasks 放的是各个不同任务节点的具体处理函数。
textCrawler 在前端里有一段定义如下,其中 task_name 就是指定用后端哪个 task 函数来运行处理
templateData: {
"description": "description",
"task_name": "web_crawlers.text_crawler",
"has_inputs": true,
"template": {
"url": {
"required": true,
"placeholder": "",
"show": true,
"multiline": false,
"value": "",
"password": false,
"name": "url",
"display_name": "url",
"type": "str",
"clear_after_run": true,
"list": false,
"field_type": "input"
},
"output_type": {...},
"output_text": {...},
"output_title": {...},
}
}
而在后端的 text_crawler 函数是类似这样的
@task
def text_crawler(
workflow_data: dict,
node_id: str,
):
workflow = Workflow(workflow_data)
url = workflow.get_node_field_value(node_id, "url")
if url is None or url == "":
raise Exception("url is empty")
...
这个项目中涉及到一点非常简单的图论算法,就是有向无环图的拓扑排序。由于每个节点代表一个任务,这个任务可能有前后连接的关系,因此需要通过拓扑排序来确定工作流每个函数的运行顺序,确保每个函数运行时它的所有输入值都已经有结果。
非常惭愧的是,虽然以前给学生们教过这个知识点,但我还是偷懒了直接让 ChatGPT 给我写了这段算法的代码。
关于向量数据库,我选用的是 Qdrant,它支持简单的本地运行和服务端分布式部署,而且使用方便,速度也不错。
后端的开发采用 PDM(https://pdm.fming.dev/)管理项目,这是我这一年一直在用的 Python 包和依赖管理器。安装 PDM 后在 backend 目录下运行
pdm install
安装后端所需要的各个 Python 模块。然后运行
pdm run build-front
可以直接构建打包前端资源放到后端的 web 里。日常开发直接运行
pdm run dev
打包成 PC 软件只需要运行
pdm run build
最后是关于向量脉络开源版未来我希望加入的功能:
希望有能力的朋友可以一起开发更多功能出来,也希望更多的朋友可以结合自己的实际情况设计更多有意思的工作流分享给大家。
> 下载 少数派 2.0 客户端 、关注 少数派公众号,解锁全新阅读体验 📰
> 实用、好用的 正版软件,少数派为你呈现 🚀