Marsha 基于 LLM 的编程语言开源项目

我要开发同款
白开水不加糖2023年07月26日
103阅读
开发技术Python
所属分类编程语言
授权协议AGPL-3.0

作品详情

Marsha是一种基于LLM的编程语言。用简单的语法描述你想要完成的任务,提供使用示例,Marsha编译器将指导LLM生成经过测试的Python软件。

可通过终端或JupyterNotebook使用pip模块编译语法:

pipinstallgit+https://github.com/alantech/marshapython-mmarshadata_mangling.mrsh

Marsha语法看起来很像markdown,是英语和数学符号的混合体。它有自己的文件格式.mrsh,其中包含函数定义。由于Marsha目前处于alpha状态,因此语法可能会发生变化。

数据类型数据类型提供函数类型安全性,有助于提高代码生成的准确性。数据类型格式几乎与CSV格式相同。

#typeEmployeeSkillsname,skillBob,mathJake,spreadsheetsLisa,codingSue,spreadsheetsMarsha还可以从CSV文件推断数据类型

#typeEmployeesByDepartmentemployees_by_department.csvFunctions函数是Marsha的面包和黄油,可以轻松定义不同数据类型之间的转换。Marsha函数分为三个部分:声明、描述和示例。

声明是以为func前缀的一个Markdownheading 部分,然后是名称、包含输入类型的括号,最后是冒号和输出类型。名称必须是单个单词,但类型不需要是经典软件类型,甚至不需要是上面定义的显式数据类型。它们本身可以是类型含义的简单描述。例如,

#funcget_employee_skills(listofEmployeesByDepartment,listofDepartmentSkills):listofEmployeeSkills下一部分是函数描述。在这里,你要解释函数应该做什么。在这里,更明确地说明将减少生成输出的可变性,并提高行为的可靠性,但具体明确到什么程度,以及将多少程度留给LLM来决定。这类似于SQL和HTML等声明性语言,其中未指定的内容都有默认值,如select语句的排序顺序或<div>的默认样式。例如,

ThisfunctionreceivesalistofEmployeesByDepartmentandalistofDepartmentSkills.ThefunctionshouldbeabletocreatearesponseofEmployeeSkillsmergingthe2listbydepartment.Usethepandaslibrary.最后一部分是示例部分。这里你提供了调用该函数的示例以及其输出应该是什么。Marsha使用它向LLM提供更多信息以生成你想要的逻辑,而且还使用它生成测试套件来验证它生成的内容是否确实按照你的要求进行。这种反馈循环使Marsha比直接使用LLM本身更可靠。在某些方面,这类似于基于约束的编程语言,你可以在函数本身的定义中验证函数的行为,但它也没有基于约束的编程语言那么严格,它允许不完整的约束,而基于约束的语言在面对这种模糊性时会编译失败。例如

*get_employee_skills()=throwsanerror*get_employee_skills([EmployeesByDepartment('Joe','Accounting')])=throwsanerror*get_employee_skills([],[])=[]*get_employee_skills([EmployeesByDepartment('Joe','Accounting')],[])=[]*get_employee_skills([],[DepartmentSkills('Accounting','math')])=[]*get_employee_skills([EmployeesByDepartment('Joe','Accounting')],[DepartmentSkills('Accounting','math')])=[EmployeeSkills('Joe','math')]*get_employee_skills([EmployeesByDepartment('Joe','Accounting'),EmployeesByDepartment('Jake','Engineering')],[DepartmentSkills('Accounting','math')])=[EmployeeSkills('Joe','math')]*get_employee_skills([EmployeesByDepartment('Joe','Accounting'),EmployeesByDepartment('Jake','Engineering')],[DepartmentSkills('Accounting','math'),DepartmentSkills('Engineering','coding')])=[EmployeeSkills('Joe','math'),EmployeeSkills('Jake','coding')]这样就产生了:

#funcget_employee_skills(listofEmployeesByDepartment,listofDepartmentSkills):listofEmployeeSkillsThisfunctionreceivesalistofEmployeesByDepartmentandalistofDepartmentSkills.ThefunctionshouldbeabletocreatearesponseofEmployeeSkillsmergingthe2listbydepartment.Usethepandaslibrary.*get_employee_skills()=throwsanerror*get_employee_skills([EmployeesByDepartment('Joe','Accounting')])=throwsanerror*get_employee_skills([],[])=[]*get_employee_skills([EmployeesByDepartment('Joe','Accounting')],[])=[]*get_employee_skills([],[DepartmentSkills('Accounting','math')])=[]*get_employee_skills([EmployeesByDepartment('Joe','Accounting')],[DepartmentSkills('Accounting','math')])=[EmployeeSkills('Joe','math')]*get_employee_skills([EmployeesByDepartment('Joe','Accounting'),EmployeesByDepartment('Jake','Engineering')],[DepartmentSkills('Accounting','math')])=[EmployeeSkills('Joe','math')]*get_employee_skills([EmployeesByDepartment('Joe','Accounting'),EmployeesByDepartment('Jake','Engineering')],[DepartmentSkills('Accounting','math'),DepartmentSkills('Engineering','coding')])=[EmployeeSkills('Joe','math'),EmployeeSkills('Jake','coding')]目标Marsha语法的目的是:

最小化和“obvious”,但也要防止信息不严谨或不完整而导致不可预测的行为可机械地解析语法高亮显示并快速向用户反馈正确性问题可以轻松定义示例,以减少生成错误代码的可能性,并允许生成应用程序代码可测试的测试用例
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论