3.6 KiB
3.6 KiB
贡献
代码结构
参考如下代码文件结构可以帮助你更好地理解代码的组织方式。
[cmd/]
├── server // Enterpoint for starting the server.
├── lib // Enterpoint for Shared libraries.
└── test // Common test scripts.
[build/] // build scripts for different architectures and platforms.
[internal/] // Internal packages.
├── controller // HTTP request handlers.
├── middleware // Middleware for request processing.
├── server // Server setup and configuration.
├── service // Provides service for controller.
├── static // Configuration files.
│ ├── nodejs_syscall // Whitelist for nodejs syscall.
│ └── python_syscall // Whitelist for python syscall.
├── types // Entities
├── core // Core logic for isolation and execution.
│ ├── lib // Shared libraries.
│ ├── runner // Code execution.
│ │ ├── nodejs // Nodejs runner.
| | └── python // Python runner.
└── tests // Tests for CI/CD.
原理
目前来说,核心逻辑的入口部分有两个,一个是DifySandbox的HTTP服务入口,另一个是动态链接库的入口,在Sandbox尝试运行代码时,它会首先生产一个临时代码文件,在这个文件的最开始,会调用动态链接库来初始化运行环境,也就是Sandbox,随后才是用户代码的执行,最终执行代码时并不会直接执行用户提交的代码,而是执行这个临时文件,从而确保不会被用户提交的代码破坏系统。
其中,动态链接库中就是使用了Seccomp来限制系统调用,其中运行的系统调用位于static目录下的nodejs_syscall和python_syscall文件中,并分别提供了ARM64和AMD64两种架构的系统调用白名单,一共四份文件,在没有特殊需求的情况下,请不要随意修改这些文件。
如何贡献
首先,对于Typo、Bug等问题,欢迎直接提交PR,如果是较大的改动或Feature级别的提交,请先提交Issue,以便我们更好地讨论。
待办事项
这里是一些我们目前正在考虑的待办事项,如果你有兴趣,可以选择其中一个来贡献。
- 新编程语言的支持:
- 我们目前支持
Python和Nodejs,如果你有兴趣,可以尝试添加新的编程语言支持。 - 请注意,每新增一个语言,都要同时考虑
ARM64和AMD64两种架构,并提供CI测试,以便我们能确保新增语言的安全性。
- 我们目前支持
- Nodejs的依赖问题:
- 目前我们仅完成了
Python的依赖支持,可以在Sandbox初始化时自动安装Python依赖,但对于Nodejs,由于其node_modules的复杂性,我们目前还没有找到一个很好的解决方案,如果你有兴趣,可以尝试解决这个问题。
- 目前我们仅完成了
- 图片处理:
- 在未来、多模态是一个必然的趋势,因此在
Sandbox支持处理图片也是一个很有意义的事情。 - 你可以尝试添加对图片处理的支持,比如
Pillow等库的支持,并支持在Dify中传入图片到Sandbox中进行处理。
- 在未来、多模态是一个必然的趋势,因此在
- 完善的
CI测试:- 目前我们的
CI测试还不够完善,只有一些简单的用例。
- 目前我们的
- 生成多模态数据:
- 尝试使用
Sandbox生成多模态数据,比如文本和图片的组合数据。
- 尝试使用