Dify踩坑记录(续)
Dify踩坑记录(续)
在前文中,做了一个反思翻译,下面开始做一个长文翻译,长文翻译的思路就是,由于大模型的每次发送和接收的数据大小是有限制的,对于一些长的文章,没法一次完成,解决办法就是,把长文分段,一段一段翻译,然后再整合在一起。
这次我就一步一步讲工作流了,工作流在文章末尾,直接导入后就能看到每一个步骤了。整体的流程看起来这样。
这里着重要将的是我遇到的两个问题,以及如何解决他们的。
问题1: sandbox问题
安装三方库
在分片的节点中,我们需要用到三方的python库。
1 | import tiktoken |
由于是sandbox镜像,事先并没有我们要的三方库。实际上sandbox项目留了这个配置。
在dify/docker/volumes/sandbox/dependencies/python-requirements.txt中增加就可以。
1 | tiktoken==0.6.0 |
沙盒权限问题
如何在sandbox限制了一些系统调用,即时你安装了三方库,也用不了。这个花了好好几个小时,希望能够给你一些帮助。在github上,发现很多人都有遇到这个问题。https://github.com/langgenius/dify/issues/4993https://github.com/langgenius/dify/issues/4344,我也尝试一堆方案,比如典型的一个建议就是,类似这样,增加`security_opt`配置,然而并没有成功。假如你也遇到这样的问题,就不要再花时间了。
1 | # The DifySandbox |
我的解决方案就是修改镜像,这也是在官方的faq里面的处理方法。https://github.com/langgenius/dify-sandbox/blob/main/FAQ.md#2-my-python-code-returns-an-operation-not-permitted-error。
下载dify-sandbox源代码
打开internal/static/python_syscall/syscalls_arm64.go,修改其中ALLOW_SYSCALLS。
注意,faq里面写的探测需要哪些权限的步骤我并没有做成功,有知道的小伙伴请分享你的经验。由于我不知道究竟缺少什么权限,所以就直接全部写上0-500。
这是我修改后的代码
1 | var ALLOW_SYSCALLS = []int{ |
修改了之后,需要执行install.sh,以及./build/build_[amd64|arm64].sh完成go的构建。
1 | ./install.sh |
构建完成,会生成env,main两个可执行程序。
下一步就是就用docker重新构建镜像。
1 | docker build --progress=plain -t mysandbox -f docker/arm64/dockerfile . |
修改docker/docker-compose.yaml的sandbox的image,改成刚刚构建的镜像
1 |
|
运行新的容器,回界面测试
1 | docker compose up -d |
临时目录权限问题
到目前为止,权限的问题解决了,但马上就会有新的问题。错误看起来像这样
1 | An error occurred: [Errno 2] No usable temporary directory found in ['/tmp', '/var/tmp', '/usr/tmp', '/'] |
这个问题的原因是sandbox的执行的用户没有写tmp目录的权限。https://dify.ai/blog/dify-ai-blog-introducing-difysandbox,在官方博客中介绍大致是这个意思,每一个沙盒会在`/var/sandbox/`隔离。sandbox的执行用户是sandbox,我不知道是什么原因原始镜像中并没有给这个设置好权限。
于是就手工在容器中执行
1 | cd /var/sandbox/ |
工作池问题
现在你可以去测试工作流了,马上就会遇到新的问题。
1 | Max submit count 100 of workflow thread pool reached. |
为什么是100,这个问题比较容易,通过google搜索社区的内容,按照api容器就好。
https://github.com/langgenius/dify/issues/8659#issuecomment-2367260559
修改完成之后重新构建docker镜像,修改docker-compose文件,使用新的镜像,注意里面有两个容器,api和worker,都用api的镜像。
结束
到此为止,长文翻译的工作流也就算配置完成了。整个事情大概忙了我10多个小时,中间那个权限问题消耗了7个小时。很多概念都不清楚,比如什么seccomp,只是马虎的把问题趟过去了。
另外,这是一个很有用的工具,后边想想能用它来做点什么,或者你有什么好点子也欢迎一起。