成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Dify Sandbox實現文件路徑獲取與Excel數據處理 原創

發布于 2025-4-16 07:12
瀏覽
0收藏

我集中精力,花2個多小時把Dify Sandbox官方源碼研究了一下,終于理清了Sandbox 執行代碼的邏輯,順便實現了在不修改官方dify-sandbox docker鏡像,用戶上傳文件后路徑的獲取和對Excel文件的數據處理。

話不多說,先看效果。一個有9406條數據的Excel文件瞬間完成了數據處理工作。

Dify Sandbox實現文件路徑獲取與Excel數據處理-AI.x社區

下面我來說一下,這個如何實現。

Dify 安裝成功后,會有10個Docker容器,其中docker-sandbox 的作用是用來執行工作流中”代碼“這個節點運行的代碼。這樣就保證了用戶的代碼不會獲取到服務器的文件資源或者執行敏感的系統調用操作,保證了Dify系統和數據安全。

Dify Sandbox實現文件路徑獲取與Excel數據處理-AI.x社區

Dify后端工程師Yeuoly,是Dify sandbox的作者,她寫了一篇博客詳細講解了Dify Sandbox通過沙盒運行代碼原理的英文博客,我借助大模型認真研讀了一下。

Dify Sandbox實現文件路徑獲取與Excel數據處理-AI.x社區

總結起來,主要使用了兩種技術。

1.系統級隔離: 利用 Docker 的底層技術:Seccomp(安全計算模式)。

在 Linux 上,Docker 是一種常見的系統沙箱解決方案。??Seccomp??充當所有訪問系統的嘗試的過濾器。它攔截和控制各種作,包括但不限于文件讀/寫作、系統配置修改、網絡訪問,甚至標準輸入/輸出。這之所以有效,是因為這些作本質上是 (),并且每個作都表示訪問系統的嘗試。

在dify的源碼 docker/volumes/sanbox文件夾下,有個文件config.yaml,可以通過allowed_syscalls參數來控制允許開放哪些系統調用命令,這些命令大約有400個,比如常見的文件的讀寫、文件的執行操作等等。

Dify Sandbox實現文件路徑獲取與Excel數據處理-AI.x社區

allowed_syscalls: # please leave it empty if you have no idea how seccomp works
# 基礎文件操作
  - 0   # read - 從文件描述符讀取數據
  - 1   # write - 向文件描述符寫入數據
  - 2   # open - 打開文件
  - 3   # close - 關閉文件描述符
  - 4   # stat - 獲取文件狀態
  - 5   # fstat - 獲取文件描述符狀態
  - 6   # lstat - 獲取符號鏈接狀態
  - 7   # poll - 等待文件描述符上的事件
  - 8   # lseek - 重新定位讀/寫文件偏移量
  - 9   # mmap - 將文件或設備映射到內存
  - 10  # mprotect - 設置內存區域的保護
  - 11  # munmap - 取消內存映射
  - 12  # brk - 改變數據段大小
  
  ###其它參數請網上自己搜索

2.chroot(更改根目錄)虛擬文件系統

但是上面的Docker Seccomp方案只能允許或者拒絕所有文件的訪問,要么全部允許,要么全部拒絕。這樣就沒法是某些用到的文件單獨訪問了,比如Python庫文件。

所有dify-sandbox又使用了第二個解決方案,在執行代碼進程的時候,使用Linux chroot('/tmp')命令,將代碼所在的/tmp文件夾作為根目錄。也就是代碼只知道它位于/tmp文件夾下面,無法讀取到系統其它文件夾路徑。

在dify-sandbox的源碼中,是這樣實現的,使用的是Go 語言。

Dify Sandbox實現文件路徑獲取與Excel數據處理-AI.x社區

Sandbox的沙盒安全原理大致就是這樣,如果我想用代碼獲取到dify用戶剛剛上傳的文件路徑,就必須將用戶上傳文件夾的實際文件夾掛載到sandbox Docker容器中。

這里要非常感謝Awesome-Dify-Workflow這個Github開源項目,讓我找到了File_read.yml 這個Dify工作流。它的實現前提將用戶上傳文件保存路徑app/storage/upload_files文件夾的路徑掛載到sandbox Docker容器的/upload_files文件夾下面,并且要使用作者制作的Docker鏡像替換官方鏡像。

Dify Sandbox實現文件路徑獲取與Excel數據處理-AI.x社區

這個作者制作的鏡像權限開的太多,我反而有了安全顧慮,所有想繼續使用官方鏡像完成用戶上傳文件路徑的獲取。這時候對上面chroot命令的理解就派上用場了。

既然執行代碼都只認/tmp文件夾,那直接將app/storage/upload_files文件夾的路徑掛載到/tmp下面就可以了(以python代碼執行為例)。

Dify Sandbox實現文件路徑獲取與Excel數據處理-AI.x社區

同時修改sandbox的python庫依賴,添加pandas等Python數據處理庫,來編寫代碼完成Excel文件的處理。

Dify Sandbox實現文件路徑獲取與Excel數據處理-AI.x社區

執行 docker compose down 和 docker compose up -d 命令重建Dify Docker容器后,我們將打開Dify,將File_read.yml導入。

Dify Sandbox實現文件路徑獲取與Excel數據處理-AI.x社區

修改獲取文件路徑處的代碼,將"/upload_files"改為"/tmp/upload_files",再運行這個工作流便大功告成。也就是文章一開始大家看到的效果。


本文轉載自公眾號九歌AI大模型  作者:九歌AI

原文鏈接:??https://mp.weixin.qq.com/s/8jKGn-k-v3_9kPdbWgQEvQ??


?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
已于2025-4-16 07:12:40修改
收藏
回復
舉報
回復
相關推薦
主站蜘蛛池模板: 人操人人| 免费高清成人 | 精品国产欧美一区二区三区成人 | 国产综合一区二区 | 精品麻豆剧传媒av国产九九九 | 性网址 | 成人三级网址 | 午夜精品 | 免费观看成人av | 国产精品久久久久久二区 | 亚洲美女视频 | 2021天天干夜夜爽 | 精品国产1区2区3区 在线国产视频 | 国产精品毛片久久久久久久 | 欧美一级片免费看 | 成人午夜高清 | 午夜视频在线播放 | 久久久久久久一区 | 久久精品成人热国产成 | 国产一区二区三区精品久久久 | 亚洲一区在线日韩在线深爱 | 欧美日韩久久 | av黄色在线 | 一区不卡在线观看 | 国产视频线观看永久免费 | 成人黄色电影在线播放 | 午夜免费小视频 | 免费观看一级毛片视频 | 久久九九免费 | 美人の美乳で授乳プレイ | 亚洲一区免费视频 | 丁香久久 | 国产一区二区影院 | 国产精品久久久久一区二区三区 | 国产精品不卡一区 | 红桃视频一区二区三区免费 | 在线观看黄视频 | 免费一级黄 | 欧美精品综合 | 久久久中文 | 天天操天天摸天天干 |