【ai_agent】從零寫一個agent框架(五)基于egui制作一個agent/workflow在線編輯器

前言

上篇我們實現了基礎節點,并暴露出grpc服務,但是手動編輯文本制作一個workflow實在強人所難。

所以本文我們做個webui自動生成workflow。

開搞之前先看看別人怎么做的。

Dify 的ui

效果如下圖示:

  • 支持多種功能節點

  • 但只能打開一個節點的詳細內容

  • 提供debug能力,能看到執行細節

image.png

Coze的ui

界面算是dify的升級版,一樣絲滑,效果如下圖示:

  • 能在編輯頁直接看到每個節點的細節,但是當節點非常多的時候,非常難以操作,看的眼暈。
  • debug在每個節點中可以直接看到。

image.png

Stable diffusion 的comfyui

畫風一轉,是我喜歡的類型

  • 更自由的節點設計,任意擴散
  • 不再是節點間的流轉,而是變量間相互鏈接
  • 和coze一個毛病,節點多了極難維護。

image.png

設計和目標

  • 能夠看到整體節點的流轉,但是每個界面可以單獨打開關閉,參考dify。

  • 必須提供debug功能。最好是和coze一樣直接綁定到節點上。

  • 節點的界面設計和comfyui一樣是開放式的,可以隨意定義。

效果預覽

服務啟動方法:【ai_agent】從零寫一個agent框架(一)打造最強開放agent編輯框架,拳打dify,腳踩coze

操作方法:

  • 頂邊控制欄 project|setting|about ,點擊會在左邊生成控制界面,在project界面可以加載項目的service節點。

  • 編輯窗口

    • FlowChart LLM Script Workflow 都是具體的服務節點。
    • 紅色clean,清理所有的已經生成的節點
    • 紅色reset,重置整個界面
    • 綠色save,保存配置,默認30s自動保存,時間在project界面可以調整。
    • 綠色debug,debug一次流程。
  • 右邊上側為所有節點列表,可以在這里打開關閉節點視圖,也可以刪除。

  • work-flow-view,查看節點間的流轉關系

  • plan-text-view:查看執行計劃,下載所有生成的節點,上傳節點配置(會覆蓋當前配置)。

  • 底邊為日志信息,可以展開

如下窗口: image.png

關于窗口的設計

窗口的結構目前是固定的五部分,當然未來可能會更多。

  • 節點編號,描述,service類型,

  • input,輸入參數結構

  • output,輸出參數結構

  • goto,向那些節點流轉

  • debug,調試信息

我們看一下窗口的具體定義,以openai-llm為例。在線查看,我這里也貼一下:

{"plugin_list":[{"code":"openai-LLM","class":"LLM","desc":"openai LLM chat","ui_type":"window","service_type":"openai_llm","input_vars": {"model": {"type":"string","default":"gpt-3.5-turbo","ui_type": "enum","ui_extend_enum": ["gpt-4o","gpt-4-turbo","gpt-4","gpt-3.5-turbo"]},"temperature":{"type":"f32","default": 0.7,"desc":"The randomness of the model generated responses","ui_extend_slider": {"max": 2.0,"min": 0.0,"speed": 0.01}},"max_tokens":{"type":"number","default": 512,"desc":"answer max tokens","ui_extend_slider": {"max": 512,"min": 0,"speed": 1}},"prompt":{"type":"string","default":"","ui_type":"text_edit_multi"},"query":{"type":"string","default":"","required":true},"tools":{"type": "list"},"context": {"type": "list"},"extend":{"type": "object"}},"output_vars": {"answer": "this is text","tools": [{"function_name": "tool name","args": "function call args"}]}}]
}

那么它對應展示的效果如下。

image.png

如果自己定義了一個功能視圖,應該放在哪里?

所有的視圖配置都在webui/server/plugin目錄下,當點擊project->LOAD按鈕時,會默認加載這個目錄下的全部配置。

代碼實現

倉庫地址:ai_agent/webui at main · woshihaoren4/ai_agent

  • webui本身也是一個前后端分離的項目,webui/server這個文件是一個微小的服務端,提供插件加載,debug調用的功能,通過go run main.go啟動
  • webui項目是跨端的,可以當做應用打開。
  • 也可以在瀏覽器上打開,此時以wasm的模型運行,需要用trunk啟動,trunk安裝使用教程。

具體的實現就不貼了,用egui畫的,順著update往下捋就行了。

尾語

目前做的這版UI還是很簡潔的,算是基本能用。

整個ai_agent在設計思路上參考了BaaS Solution,也就是說你在webui上設計好了流程后,最終拿到生產環境上用時就不需要webui的參與了,直接api調用。

當然如果你覺得界面實在丑陋到無法接受,那可以自己搞一套。

本文轉自 https://juejin.cn/post/7383201975733796891,如有侵權,請聯系刪除。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/42952.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42952.shtml
英文地址,請注明出處:http://en.pswp.cn/web/42952.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【spark】Exception in thread “main“ ExitCodeException exitCode=-1073741701

在window上運行spark程序寫到本地文件的時候報錯。 val rdd sc.sparkContext.parallelize(list)val arr rdd.collect()arr.foreach(println)rdd.saveAsTextFile("test1")sc.close()錯誤信息: zhangsan lisi wangwu Exception in thread "main" ExitCode…

如何在電子文件上加蓋印章

在電子文件上加蓋印章,可以通過多種方法實現,主要包括使用專業軟件、在線工具以及圖片編輯軟件等。以下是一些具體步驟和方法: 一、使用專業軟件 PDF編輯工具: 啟動常用的PDF編輯軟件,如Adobe Acrobat、PhantomPDF等…

紅日靶場----(三)漏洞利用

上期已經信息收集階段已經完成,接下來是漏洞利用。 靶場思路 通過信息收集得到兩個吧靶場的思路 1、http://192.168.195.33/phpmyadmin/(數據庫的管理界面) root/root 2、http://192.168.195.33/yxcms/index.php?radmin/index/login&am…

阿里云通義千問開源兩款語音基座模型分別是SenseVoice和CosyVoice

阿里巴巴近期發布了開源語音大模型項目FunAudioLLM,該項目包含了兩個核心模型:SenseVoice和CosyVoice。可以精準多語言識別并且進行語音克隆。 SenseVoice:精準多語言識別與情感辨識 SenseVoice主要致力于高精度多語言語音識別、情感辨識和…

使用八股搭建神經網絡

神經網絡搭建八股 使用tf.keras 六步法搭建模型 1.import 2.train, test 指定輸入特征/標簽 3.model tf.keras.model.Sequential 在Squential,搭建神經網絡 4.model.compile 配置訓練方法,選擇哪種優化器、損失函數、評測指標 5.model.fit 執行訓練過程&a…

送給我親愛的Python

親愛的 Python, 在萬物皆代碼的世界里,你是我最優雅、最高效的算法。自從第一次遇見你,在那行“Hello, World!”之后,我的世界就被點亮了。你的簡潔性和強大的功能,讓我深深著迷,就像一個精心設計的函數&am…

數據結構雙向循環鏈表

主程序 #include "fun.h" int main(int argc, const char *argv[]) { double_p Hcreate_head(); insert_head(H,10); insert_head(H,20); insert_head(H,30); insert_head(H,40); insert_tail(H,50); show_link(H); del_tail(H); …

Python 傳遞參數和返回值

Python是一種功能強大的編程語言,它以其簡潔和易用性而廣受歡迎。在Python編程中,參數傳遞和返回值是函數調用中兩個非常重要的概念。理解這些概念對于編寫高效且可維護的代碼至關重要。 一、參數傳遞 在Python中,函數參數可以通過以下幾種…

Linux 網絡時間同步:NTP 與 Chrony 的終極對決

Linux 網絡時間同步:NTP 與 Chrony 的終極對決 在網絡世界中,時間同步是一項至關重要的任務。無論是確保分布式系統的一致性,還是維護安全協議的完整性,準確的時間同步都是必不可少的。網絡時間協議(NTP)和…

Golang期末作業之電子商城(源碼)

作品介紹 1.網頁作品簡介方面 :主要有:首頁 商品詳情 購物車 訂單 評價 支付 總共 5個頁面 2.作品使用的技術:這個作品基于Golang語言,并且結合一些前端的知識,例如:HTML、CSS、JS、AJAX等等知識點,同時連接數據庫的&…

統信UOS軟件包標識化工具deepin-sbom-tools使用

原文鏈接:統信UOS上使用軟件包標識化工具deepin-sbom-tools Hello,大家好啊!今天給大家帶來一篇關于在統信UOS上使用軟件包標識化工具deepin-sbom-tools的文章。deepin-sbom-tools是一個強大的工具,可以幫助開發者和系統管理員更好…

Linux初始化新的git倉庫

1.在git服務器上找到項目常部署的git地址可以根據其他項目的git地址確認 例如ssh://git192.168.10.100/opt/git/repository.git 用戶名:git(前面的是用戶) 服務器地址:192.168.10.100 git倉庫路徑:/opt/git/ 2.在服務器…

數據結構之折半查找

折半查找的算法思想: 折半查找又稱二分查找,它僅僅適用于有序的順表。 折半查找的基本思想:首先將給定值key與表中中間位置的元素(mid的指向元素)比較。midlowhigh/2(向下取整) 若key與中間元…

C#—Json序列化和反序列化

C#—Json序列化和反序列化 在C#中,可以使用System.Web.Script.Serialization.JavaScriptSerializer類來序列化和反序列化JSON數據。 可以使用Newtonsoft.Json庫進行JSON的序列化。 可以使用.NET內置的System.Text.Json庫來進行JSON的序列化。 json文件格式 [ { …

搜索引擎優化培訓機構怎么選?這篇文章告訴你答案

搜索引擎優化(SEO)已成為網絡生存必備技能。然而面對眾多培訓機構,如何選擇優秀者?本文將為您揭曉此事,助您找到騰飛之地。 一、培訓機構的多樣性:琳瑯滿目的選擇 當前SEO培訓市場繁蕪復雜,既…

C++ 八股(1)

C語言中strcpy為什么不安全?如何解決? 主要原因是缺乏對輸入長度的邊界檢查,容易導致緩沖區溢出漏洞。 解決:可以使用strncpy函數替代,或者在程序最頂端加入代碼段 #define _CRT_SECURE_NO_WARNINGS 緩沖區溢出 …

javascript高級部分筆記

javascript高級部分 Function方法 與 函數式編程 call 語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]]) 定義:調用一個對象的一個方法,以另一個對象替換當前對象。 說明:call 方法可以用來代替另一個對象調用一個方法。cal…

MySQL運維實戰之ProxySQL(9.5)proxysql和MySQL Group Replication配合使用

作者:俊達 如果后端MySQL使用了Group Replication,可通過配置mysql_group_replication_hostgroups表來實現高可用 1 mysql_group_replication_hostgroups 字段描述writer_hostgroup寫hostgroup。read_only和super_read_only OFF的節點。backup_writer…

Vue3 pdf.js將二進制文件流轉成pdf預覽

好久沒寫東西,19年之前寫過一篇Vue2將pdf二進制文件流轉換成pdf文件,如果Vue2換成Vue3了,順帶來一篇文章,pdf.js這個東西用來解決內網pdf預覽,是個不錯的選擇。 首先去pdfjs官網,下載需要的文件 然后將下載…

第4章 IT服務規劃設計

第4章 IT服務規劃設計 4.1 概述 規劃設計處于整個IT服務生命周期中的前端,可以幫助IT服務供方了解客戶的需求,并對其進行全面的需求分析,然后通過對服務要素(包括人員、資源、技術和過程)、服務模式和服務方案的具體…