简介#
Kork
是一个实验性 Langchain 链,旨在帮助构建由 LLM 驱动的自然语言 API。
特性#
从一组 Python 函数组装一个自然语言 API。
生成提示,以帮助 LLM 编写正确的程序。
安全地执行由 LLM 生成的程序。
程序生成只需一次 LLM 调用,而不是代理那样每次操作都调用一次。
如何使用#
该链接受用户查询,将其翻译成程序,并使用 Kork
解释器执行它。
解释器用于运行用 Kork
编程语言编写的代码。
该语言在设计上受到限制,仅限于变量声明、函数调用和算术运算。
这种限制允许控制 LLM 可以生成的程序类型,使 LLM 的输出更可预测,并且在生产环境中执行更安全。(具有访问“受限”工具的代理具有类似的好处,但每次操作都需要调用。)
Kork
添加了一些额外的技巧(例如,用于示例和外部函数的检索器接口),以帮助指导 LLM 生成正确的程序。
什么?#
没有循环,没有条件语句,没有文件访问,没有网络访问,没有任意代码执行。什么?!
调用自定义函数的能力在可以编写的程序类型方面大有作为!(您始终可以添加 write_to_file
函数!)
局限性#
Kork
不能编写任意代码。如果那是您需要的,请节省一些时间并使用 docker 和一种真正的编程语言。Kork
链不是代理,因此它不能检查中间步骤,而是生成一组需要执行的预定义函数调用。(但请记住,函数调用可能涉及对代理的调用!)Kork
语言和解释器仅限于函数调用、变量声明和基本算术(没有函数声明、循环等)仅支持
int
、float
、str
、type(None)
、bool
类型。不支持lists
或object
类型。非常有限的类型注释。
质量#
简短版本:尚无基准测试!
完整版本:生成的程序质量取决于许多因素。
您可以尝试调整提示(例如,解释语言的语法)、更改外部函数检索器(例如,根据用户查询检索最相关的外部函数),或以(查询,预期程序)的形式提供示例。
语言的提示、示例和语法可能会误导 LLM 认为它正在使用特定语言(例如,typescript 或 python)进行编程,并假设它可以使用 Kork
不支持的语言功能,或者导入不可用的库。
安全#
当涉及到人类时,没有什么是一劳永逸的。
不要做像将
eval
暴露为外部函数这样的愚蠢事情。如果外部函数分配内存,则 LLM 可能会请求比可用内存更多的内存,从而导致进程崩溃。
在使用 LLM 的输出之前请仔细考虑。如果 LLM 行为恶意,那么在给定的上下文中使用 LLM 是否安全?
未来工作#
如果您有兴趣贡献或对改进有任何想法,请告知我们!
允许启用/禁用语言功能
允许更改底层语言语法
添加对象支持
添加其他语言功能(例如,循环)
提供基于与用户查询相似性的外部函数检索器实现
兼容性#
Kork
已针对 Python 3.8、3.9、3.10、3.11 进行测试。
安装#
pip install kork
🙏 感谢#
Lark – 感谢它使定义语法和解析变得如此容易!
Bob Nystrom – 感谢撰写了 Crafting Interpreters!
© 贡献#
如果您有任何想法或功能请求,请打开一个 issue 并分享!
有关更多信息,请参阅 CONTRIBUTING.md。
🎶 为什么叫这个名字?#
易于输入,并且可能足够独特。
目录