简介#

Kork 是一个实验性 Langchain 链,旨在帮助构建由 LLM 驱动的自然语言 API。

特性#

  1. 从一组 Python 函数组装一个自然语言 API。

  2. 生成提示,以帮助 LLM 编写正确的程序。

  3. 安全地执行由 LLM 生成的程序。

  4. 程序生成只需一次 LLM 调用,而不是代理那样每次操作都调用一次。

如何使用#

该链接受用户查询,将其翻译成程序,并使用 Kork 解释器执行它。

解释器用于运行用 Kork 编程语言编写的代码。

该语言在设计上受到限制,仅限于变量声明、函数调用和算术运算。

这种限制允许控制 LLM 可以生成的程序类型,使 LLM 的输出更可预测,并且在生产环境中执行更安全。(具有访问“受限”工具的代理具有类似的好处,但每次操作都需要调用。)

Kork 添加了一些额外的技巧(例如,用于示例和外部函数的检索器接口),以帮助指导 LLM 生成正确的程序。

什么?#

没有循环,没有条件语句,没有文件访问,没有网络访问,没有任意代码执行。什么?!

调用自定义函数的能力在可以编写的程序类型方面大有作为!(您始终可以添加 write_to_file 函数!)

局限性#

  • Kork 不能编写任意代码。如果那是您需要的,请节省一些时间并使用 docker 和一种真正的编程语言。

  • Kork不是代理,因此它不能检查中间步骤,而是生成一组需要执行的预定义函数调用。(但请记住,函数调用可能涉及对代理的调用!)

  • Kork 语言和解释器仅限于函数调用变量声明基本算术(没有函数声明、循环等)

  • 仅支持 intfloatstrtype(None)bool 类型。不支持 listsobject 类型。

  • 非常有限的类型注释。

质量#

简短版本:尚无基准测试!

完整版本:生成的程序质量取决于许多因素。

您可以尝试调整提示(例如,解释语言的语法)、更改外部函数检索器(例如,根据用户查询检索最相关的外部函数),或以(查询,预期程序)的形式提供示例。

语言的提示、示例和语法可能会误导 LLM 认为它正在使用特定语言(例如,typescript 或 python)进行编程,并假设它可以使用 Kork 不支持的语言功能,或者导入不可用的库。

安全#

当涉及到人类时,没有什么是一劳永逸的。

  • 不要做像将 eval 暴露为外部函数这样的愚蠢事情。

  • 如果外部函数分配内存,则 LLM 可能会请求比可用内存更多的内存,从而导致进程崩溃。

  • 在使用 LLM 的输出之前请仔细考虑。如果 LLM 行为恶意,那么在给定的上下文中使用 LLM 是否安全?

未来工作#

如果您有兴趣贡献或对改进有任何想法,请告知我们!

  • 允许启用/禁用语言功能

  • 允许更改底层语言语法

  • 添加对象支持

  • 添加其他语言功能(例如,循环)

  • 提供基于与用户查询相似性的外部函数检索器实现

兼容性#

Kork 已针对 Python 3.8、3.9、3.10、3.11 进行测试。

安装#

pip install kork

🙏 感谢#

© 贡献#

如果您有任何想法或功能请求,请打开一个 issue 并分享!

有关更多信息,请参阅 CONTRIBUTING.md

🎶 为什么叫这个名字?#

易于输入,并且可能足够独特。