代码验证
为什么我们需要代码验证?
智能体开发者在运行生成的代码前可能希望先进行验证。 如下图所示案例中,生成的代码为
import os
file = open("abc.py", "r")
code = file.read()
exec(code)

在这种情况下,生成的代码会读取文件内容并执行,这存在潜在危险。 为防止这种情况,我们可以使用代码验证机制,在运行前检查生成的代码。 如果代码未通过验证,错误将被报告给CodeGenerator以重新生成代码。
如何使用代码验证功能?
要使用代码验证功能,您可以在项目配置文件taskweaver_config.json中添加配置"code_interpreter.code_verification_on": true。
这样,生成的代码在运行前会先进行验证。
启用代码验证后,您还可以在项目配置文件中指定代码验证规则。
| 参数 | 描述 | 默认值 |
|---|---|---|
| code_interpreter.allowed_modules | 代码生成中允许导入的模块列表。 | ["pandas", "matplotlib", "numpy", "sklearn", "scipy", "seaborn", "datetime", "typing"], 如果列表为空,则不允许导入任何模块 |
| code_interpreter.blocked_functions | 代码生成中需要阻止的函数列表。 | ["__import__","eval", "exec", "execfile", "compile", "open", "input", "raw_input", "reload"] |
我们目前支持检查允许的模块和被阻止的函数。
如果一个模块在allowed_modules列表中,它可以在生成的代码中被导入。
如果一个函数在blocked_functions列表中,它不能在生成的代码中使用。
代码验证是如何实现的?
代码验证分为两部分实现。
首先,我们在CodeGenerator的提示中添加指令,使其生成的代码遵循所需规则。
例如,如果我们不希望生成的代码导入os模块,
我们就会在提示中添加指令,告诉CodeGenerator不要导入os模块。
其次,我们对生成的代码进行静态分析,检查其是否符合所需规则。
代码被解析为AST(抽象语法树),我们检查该AST
仅导入允许的模块,且未使用被禁止的函数。
静态分析的实现可在taskweaver/code_interpreter/code_verification.py中找到。