惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

GbyAI
GbyAI
Martin Fowler
Martin Fowler
I
InfoQ
腾讯CDC
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
云风的 BLOG
云风的 BLOG
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
博客园 - 聂微东
Microsoft Azure Blog
Microsoft Azure Blog
D
Docker
博客园 - 三生石上(FineUI控件)
Y
Y Combinator Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
B
Blog
罗磊的独立博客
Apple Machine Learning Research
Apple Machine Learning Research
Jina AI
Jina AI
V
Visual Studio Blog

人人都是产品经理

为什么你的产品找不到差异化?90%的失败都卡在第一步上(下) – 人人都是产品经理, 3年从30万到1300万用户、获2200万美元融资,这个AI教育产品用“抽卡”破解了获客难题 – 人人都是产品经理, 园区招商系统怎么做才能真正帮到去化?我加了这一个功能,推广链接转发400次阅读过万 – 人人都是产品经理, AI大事件:OpenAI发完网络安全模型又搞药物研发,小鹏汽车要抓”DeepSeek时刻” – 人人都是产品经理, 电商不是卖货,是一场更残酷的产品经理实战 – 人人都是产品经理, 没想到,活动营销又回来了! – 人人都是产品经理, 为何All-in海外KOC:一场关于AI时代窗口期的豪赌 – 人人都是产品经理, 重新理解企业的内部协作 – 人人都是产品经理, 苹果的 AI 战略到底是什么? – 人人都是产品经理, 医疗智能体·第2讲——合规护城河:等保、PIPL与HIPAA的架构实战 – 人人都是产品经理, 向量知识库五步法:从“答非所问”到“精准回复” – 人人都是产品经理, 鸿蒙PC三方库构建总指挥HPKBUILD(sha)库为例 – 人人都是产品经理, 何时该用LLM?AI产品经理的LLM设计指南 – 人人都是产品经理, 医疗信息领域的需求方、决策方、准入方以及关注点(二) – 人人都是产品经理, 即梦涨价:一场被误读的「傲慢」 – 人人都是产品经理, 面试AI PM必答题:Hermes和OpenClaw的区别,如何讲清楚业务价值 – 人人都是产品经理, AI的下一张船票:世界模型——AI产品经理必须理解的技术拐点 – 人人都是产品经理, 小红书做GEO,怎么让AI信你?记住这 3 个重要信息 – 人人都是产品经理, 5 家印度 AI 初创公司,看看印度 AI 再做什么 – 人人都是产品经理, AI项目跨团队协作:产品技术业务如何不打架 – 人人都是产品经理, Agentic Workflow(智能体工作流):让AI从”答案生成器”变成”数字员工” – 人人都是产品经理, lycium_plusplus 项目全景解读:OpenHarmony 三方库构建的“大管家” – 人人都是产品经理, 从爆单救火到前置履约:两套预采策略,把生鲜大促履约效率拉满 – 人人都是产品经理, 什么时候该补货?我用一轮数据做了一个决定 – 人人都是产品经理, 从“机械兜底”到“动态分流”:AI客服重复进线治理的4大底层逻辑 – 人人都是产品经理, 抖音拼效率,红书拼洞察 – 人人都是产品经理, 全民狂欢与退潮——为什么龙虾这波热潮冷却得如此之快? – 人人都是产品经理, Stripe押注!MPP重塑全球支付 – 人人都是产品经理, 小红书GEO:AI引用你的内容,不是因为你对,而是因为你看起来可信 – 人人都是产品经理, 前百度副总裁押注办公Agent,日韩付费爆发,Manus迎来强劲对手 – 人人都是产品经理,
硬核教程:释放Dify硬实力,搭建Manus级别应用
张佳的AI实战笔记 · 2025-09-08 · via 人人都是产品经理

Dify 实际上已经具备与 Manus 相同的能力,只是被沙盒环境的权限管理锁死了。

这篇文章,教你解锁 Dify 沙盒环境的各种限制。

一旦解锁,你可以使用 Dify 做这些事:

1. 正常安装任意第三方 Python 库,不再报错operation not permitted

2. 扩展:使用代码节点,完成 Python 能做的任意工作

3. 正常处理本地文件,不再报错No such file or directory

4. 扩展:像 Manus 一样创建一个ToDo.md来维护更新任务

5. 扩展:配合 Python,可以生成任意文件,包括但不限于 Excel、Word、PPT 等

条件:需要私有部署的 Dify,官方云端版本不行。

原理简述

Dify 配有一个沙盒环境,本质上跟 Manus 之类 Agent 操作的那个“电脑”是一个东西。

1. 那个“电脑”关联你电脑的某个文件夹,可以存储工作流应用产生的文档

2. 预装了 Python 和 nodejs 环境,理论上能实现任意你想要的“电脑”操作

这个沙盒环境在 Dify 的入口是代码执行器工具和代码节点。

你在代码节点写的 Python 或 JavaScript 代码,运行时相当于在这个台电脑的终端里使用python3 daima.py指令。

理论上,你可以像上面截图一样,通过这个 Python 脚本,读取那个“电脑”文件夹里的文件、编辑内容或者生成一个新文件。

但是 Dify 的原生配置考虑到安全性,锁死了这个沙盒环境的大部分权限。

所以常规版本,我们使用沙盒环境里的 Python 只能完成成一些变量转换、http 请求之类的几乎不需要任何系统权限的“低级”功能。

这很不好玩。

接下来,我们把这些权限都放开,彻底解锁 Dify 的创造力!

解锁限制

首先是权限问题,这个问题有两个解法:

1. 按需解锁,但是需要频繁折腾;

2. 一次性解锁,别玩风险操作就好了。

官方其实是给了放行权限入口的,在dify/docker/volumes/sandbox/conf/config.yaml这个文件中,通过allowed_syscalls列表来扩展。

一共包含 500 个权限分类,对应编号 0-499,部分编号对应的权限如下:

# 基础文件操作

-0 # read – 从文件描述符读取数据

-1 # write – 向文件描述符写入数据

-2 # open – 打开文件

……

# 系统操作

-13 # rt_sigaction – 检查或修改信号处理

-14 # rt_sigprocmask – 检查或修改阻塞信号

-15 # rt_sigreturn – 从信号处理程序返回

……

# 内存保护

-331 # pkey_free – 释放内存保护键

-332 # statx – 扩展的文件状态

你可以根据官方 FAQ 的介绍,根据自己的需求改写官方提供的那个text.py脚本,里面包含你想要执行的代码,然后运行官方提供的main.go代码,程序会输出你缺失哪些权限,对应编号是什么。

这个显然有点麻烦。

我是用的方式是“一把梭哈”:把所有权限都放行。

也就是,我把config.yaml配置文件中allowed_syscalls的值里,把0-499全写上了。

在确保只有自己用、不会有啥危险操作的情况下,问题好像也不大?

Tip

以数组的形式写,并且注意配置文件的格式,冒号和数组之间留一个空格

到这里,你可以在dify/docker/volumes/sandbox/dependencies/python-requirements.txt填写任意你需要的第三方库,重启 sandbox 就可以正常运行了。

但是还不能正常读取和生成文件。

因为有两个问题:

1. 沙盒环境里 Python 运行生成的文件,需要跟你电脑的文件进行映射,否则你看不见它们;

2. 在工作流上传文件,进入到沙盒环境后,文件会被重命名,这个命名方式使用了一种不可逆的加密算法。

先解决第一个问题。

沙盒环境运行代码后生成的文件会被存在/var/sandbox/sandbox-python/tmp文件中,这个文件与我们的电脑文件没有进行映射,所以我们看不见他。

修改dify/docker/docker-compose.yaml大概 739 行处的 sandbox 配置信息就好了。

加这么一行:- ./volumes/app/storage/upload_files:/var/sandbox/sandbox-python/tmp/upload_files

修改后大概这样:

然后解决第二个问题:怎么找到刚上传的文件。

因为 Dify 用的那个文件命名算法是不可逆且随机的,所以完全没办法根据你原来的文件名推断出它上传进工作流以后对应谁。

大家可以测试一下,在本地部署的工作流中上传一个文件后,在你dify/docker/volumes/app/storage/upload_files/6**随机数命名的文件夹下面会多出一个随机字符串命名的文件。

有一位博主(找不到原始出处了)分享了一个使用文件大小+时间,在沙盒中查找匹配的方式,迂回解决了这个问题。

下面是代码:

import os

import time

from datetime import datetime, timedelta

def main(filesize):

# 存储符合条件的文件

matched_files = []

# 获取当前时间

current_time = time.time()

# 检查 upload_files 文件夹

upload_dir = ‘/tmp/upload_files’

# 递归遍历文件夹中的所有文件

for root, dirs, files in os.walk(upload_dir):

for filename in files: # 只处理文件,忽略文件夹

file_path = os.path.join(root, filename)

# 获取文件状态信息

file_stat = os.stat(file_path)

# 获取文件修改时间

file_mtime = file_stat.st_mtime

# 计算文件时间差(分钟)

time_diff = (current_time – file_mtime) / 60

# 检查文件大小和修改时间是否符合条件

if file_stat.st_size == filesize:

matched_files.append((file_path, file_mtime))

if matched_files:

# 按修改时间排序,取最新的文件

newest_file = max(matched_files, key=lambda x: x[1])

return {“file_path”:str(newest_file[0])}

else:

return {“file_path”:upload_dir}

把它们放在代码节点中,其中输入变量名为filesize,对应开始节点中的文件-大小;输出变量为file_path,字符串类型。

然后连到后面其他会用到文件处理的节点,直接用 Python 或者 JavaScript 处理就好了。

至此,所有 Dify-sandbox 被锁死的权限就全解开了。

玩法示例

我之前使用 Dify 的 Agent 策略,给大模型配了一个代码解释器和图表 MCP,让它帮我做了一个非常详实的数据分析报告。

这里让 Agent 分析表格,就必须在 Python 里调用上传的 Excel 文件以及使用 Pandas 库,不解锁的话是没法玩的。

我在 AI 学习行动圈知识星球里发过不少 Dify 的工作流 DSL 和玩法。扫码加入星球搜索Dify就能找到。

AI学习行动圈

这是一个我和人人都是产品经理社区共同运营了超过 500 天的 AI 交流圈子。

我的各种 AI 研究心得、发现的好应用、开发的小项目都会在里面分享,目前圈子有核心三个交流学习平台。

7 个微信群,早报和日常交流

微信群里每天一早有 AI 早报,上下午还有“读报时间”,以及我每天不定期刷屏级的各种 AI 工具体验、提示词编排思考、行业新闻解读同步。

以及,你可以在群里讨论任何与 AI 相关的工具、应用问题,几乎都能找到答案。

腾讯文档-圈友空间

用来沉淀体系化、深度的 AI 文章和超长的工程化提示词,不定期更新。

当前包括:Claude code、Cursor、Manus等顶级产品的系统提示词和工具列表,各种深度的 Agent 白皮书和实践指南

知识星球-每日报告、工具和实战经验分享

我在星球里主要维护「实战分享」「工具箱」和「情报局」三个标签

实战分享是可以在日常工作和生活中直接应用的提示词和效率工具。上面截图里的 Step-Back 提示词就非常好用,堪比 o4。在公众号、直播中演示的所有 AI 实战应用的提示词也都在这个标签下。

AI 工具和鲜知道就是好用的、热门的 AI 工具、资讯分享,我把那些太技术、太浮夸的都筛选了,放进这个标签的都是可以直接用来的好玩儿!

星球还有一个“专栏”体系,目前的定位跟标签差不多。

本文的项目源代码已经发布在星球,扫码加入搜索提示词增强系统即可。