kork 包#
子模块#
kork.ast 模块#
该语言的 AST。
就语句与表达式的区别而言,AST 现在有点混乱,在不久的将来可能需要清理一下。
- class kork.ast.Assign(name: str, value: kork.ast.Expr)[source]#
基类:
kork.ast.Expr
变量的赋值语句。
- name: str#
- value: kork.ast.Expr#
- class kork.ast.Binary(left: kork.ast.Expr, operator: str, right: kork.ast.Expr)[source]#
基类:
kork.ast.Expr
一个二元表达式。
- left: kork.ast.Expr#
- operator: str#
- right: kork.ast.Expr#
- class kork.ast.Expr[source]#
基类:
abc.ABC
抽象表达式。
- accept(visitor: kork.ast.Visitor, **kwargs: Any) Any [source]#
访问者的 Accept 实现。
- class kork.ast.ExternFunctionDef(name: str, params: kork.ast.ParamList, return_type: str, implementation: Optional[Callable] = None, doc_string: str = '')[source]#
基类:
kork.ast.Stmt
外部函数定义。
- add_implementation(implementation: Callable) kork.ast.ExternFunctionDef [source]#
向外部函数定义添加实现。
- doc_string: str = ''#
- implementation: Optional[Callable] = None#
- name: str#
- params: kork.ast.ParamList#
- return_type: str#
- class kork.ast.FunctionCall(name: str, args: Sequence[kork.ast.Expr])[source]#
基类:
kork.ast.Expr
表示函数调用。
- args: Sequence[kork.ast.Expr]#
- name: str#
- class kork.ast.FunctionDef(name: str, params: kork.ast.ParamList, body: Sequence[Union[kork.ast.Stmt, kork.ast.Expr]], return_type: str)[source]#
基类:
kork.ast.Stmt
表示带有实现的函数定义。
- body: Sequence[Union[kork.ast.Stmt, kork.ast.Expr]]#
- name: str#
- params: kork.ast.ParamList#
- return_type: str#
- class kork.ast.Grouping(expr: kork.ast.Expr)[source]#
基类:
kork.ast.Expr
一个分组表达式。
- expr: kork.ast.Expr#
- class kork.ast.List_(elements: Sequence[kork.ast.Expr])[source]#
基类:
kork.ast.Expr
列表字面量。
- elements: Sequence[kork.ast.Expr]#
- class kork.ast.Literal(value: Union[float, int, bool, None, str])[source]#
基类:
kork.ast.Expr
一个字面量表达式。
- value: Union[float, int, bool, None, str]#
- class kork.ast.Param(name: str, type_: str)[source]#
基类:
kork.ast.Stmt
表示函数参数。
- name: str#
- type_: str#
- class kork.ast.ParamList(params: Sequence[kork.ast.Param])[source]#
基类:
kork.ast.Stmt
表示函数参数列表。
- params: Sequence[kork.ast.Param]#
- class kork.ast.Program(stmts: Sequence[Union[kork.ast.Stmt, kork.ast.Expr]])[source]#
基类:
kork.ast.Stmt
表示一个程序。
- stmts: Sequence[Union[kork.ast.Stmt, kork.ast.Expr]]#
- class kork.ast.Stmt[source]#
基类:
abc.ABC
抽象语句。
- accept(visitor: kork.ast.Visitor, **kwargs: Any) Any [source]#
访问者的 Accept 实现。
- class kork.ast.Unary(operator: str, right: kork.ast.Expr)[source]#
基类:
kork.ast.Expr
一个一元表达式。
- operator: str#
- right: kork.ast.Expr#
- class kork.ast.VarDecl(name: str, value: kork.ast.Expr)[source]#
基类:
kork.ast.Stmt
表示变量声明。
- name: str#
- value: kork.ast.Expr#
- class kork.ast.Variable(name: str)[source]#
基类:
kork.ast.Expr
变量引用。
- name: str#
kork.ast_printer 模块#
- class kork.ast_printer.AbstractAstPrinter[source]#
基类:
kork.ast.Visitor
,abc.ABC
- abstract visit(element: Union[kork.ast.Stmt, kork.ast.Expr], pretty_print: bool = False) str [source]#
打印 AST 的入口点。
- class kork.ast_printer.AstPrinter[source]#
基类:
kork.ast_printer.AbstractAstPrinter
默认 AST 打印器实现。
- visit(element: Union[kork.ast.Stmt, kork.ast.Expr], pretty_print: bool = False) str [source]#
打印 AST 的入口点。
- visit_assign(assign: kork.ast.Assign, **data: Any) str [source]#
打印赋值。
- visit_binary(binary: kork.ast.Binary, **data: Any) str [source]#
打印二元表达式。
- visit_extern_function_def(extern_function_def: kork.ast.ExternFunctionDef, **data: Any) str [source]#
打印外部函数定义。
- visit_function_call(call: kork.ast.FunctionCall, **data: Any) str [source]#
打印函数调用。
- visit_function_def(function_def: kork.ast.FunctionDef, **data: Any) str [source]#
打印函数定义。
- visit_grouping(grouping: kork.ast.Grouping, **data: Any) str [source]#
- visit_list_(list_: kork.ast.List_, **data: Any) str [source]#
打印列表。
- visit_literal(literal: kork.ast.Literal, **data: Any) str [source]#
打印字面量。
- visit_param(param: kork.ast.Param, **data: Any) str [source]#
打印参数。
- visit_param_list(param_list: kork.ast.ParamList, **data: Any) str [source]#
打印参数列表。
- visit_program(program: kork.ast.Program, **data: Any) str [source]#
打印程序。
- visit_unary(unary: kork.ast.Unary, **data: Any) str [source]#
访问一元表达式。
- visit_var_decl(var_decl: kork.ast.VarDecl, **data: Any) str [source]#
打印变量声明。
- visit_variable(variable: kork.ast.Variable, **data: Any) str [source]#
打印变量。
kork.chain 模块#
编程链的实现。
- class kork.chain.CodeChain(*, memory: Optional[langchain.schema.BaseMemory] = None, callback_manager: langchain.callbacks.base.BaseCallbackManager = None, verbose: bool = None, llm: langchain.schema.BaseLanguageModel, interpreter: Callable[[str, kork.environment.Environment], kork.interpreter.InterpreterResult], ast_printer: kork.ast_printer.AbstractAstPrinter, context_retriever: Optional[kork.retrieval.AbstractContextRetriever] = None, example_retriever: Optional[kork.examples.AbstractExampleRetriever] = None, instruction_template: langchain.prompts.prompt.PromptTemplate = PromptTemplate(input_variables=['language_name', 'external_functions_block'], output_parser=None, partial_variables={}, template='You are programming in a language called "{language_name}".\n\nYou are an expert programmer and must follow the instructions below exactly.\n\nYour goal is to translate a user query into a corresponding and valid {language_name}\nprogram.\n\n{external_functions_block}\n\nDo not assume that any other functions except for the ones listed above exist.\n\nWrap the program in <code> and </code> tags.\n\nStore the solution to the query in a variable called "result".\n\nHere is a sample valid program:\n\n<code>\nvar x = 1 # Assign 1 to the variable x\nvar result = 1 + 2 # Calculate the sum of 1 + 2 and assign to result\nvar result = x # Assign the value of x to result\n</code>\n\nGuidelines:\n- Do not use operators, instead invoke appropriate external functions.\n- Do not declare functions, do not use loops, do not use conditionals.\n- Solve the problem only using variable declarations and function invocations.\n\nBegin!\n', template_format='f-string', validate_template=True), input_key: str = 'query', language_name: str = '😼', input_formatter: Union[Literal['text_prefix'], Literal['triple_quotes'], Literal['markdown_text'], None, Callable[[str], str]] = 'triple_quotes', **extra_data: Any)[source]#
Bases:
langchain.chains.base.Chain
一个编码链。
- class Config[source]#
Bases:
object
此 pydantic 对象的配置。
- arbitrary_types_allowed = True#
- extra = 'allow'#
- ast_printer: AbstractAstPrinter#
用于编码链的 AST 打印器。
- context_retriever: Optional[AbstractContextRetriever]#
要注入到环境和提示中的上下文。
目前,此上下文仅限于外部函数。
- example_retriever: Optional[AbstractExampleRetriever]#
应添加到提示中的示例。
- classmethod from_defaults(*, llm: langchain.schema.BaseLanguageModel, interpreter: typing.Callable[[str, kork.environment.Environment], kork.interpreter.InterpreterResult] = <function run_interpreter>, ast_printer: kork.ast_printer.AbstractAstPrinter = <kork.ast_printer.AstPrinter object>, context: typing.Optional[typing.Union[kork.retrieval.AbstractContextRetriever, typing.Sequence[typing.Union[kork.ast.ExternFunctionDef, typing.Callable]]]] = None, examples: typing.Optional[typing.Union[kork.examples.AbstractExampleRetriever, typing.Sequence[typing.Tuple[str, kork.ast.Program]]]] = None, instruction_template: langchain.prompts.prompt.PromptTemplate = PromptTemplate(input_variables=['language_name', 'external_functions_block'], output_parser=None, partial_variables={}, template='You are programming in a language called "{language_name}".\n\nYou are an expert programmer and must follow the instructions below exactly.\n\nYour goal is to translate a user query into a corresponding and valid {language_name}\nprogram.\n\n{external_functions_block}\n\nDo not assume that any other functions except for the ones listed above exist.\n\nWrap the program in <code> and </code> tags.\n\nStore the solution to the query in a variable called "result".\n\nHere is a sample valid program:\n\n<code>\nvar x = 1 # Assign 1 to the variable x\nvar result = 1 + 2 # Calculate the sum of 1 + 2 and assign to result\nvar result = x # Assign the value of x to result\n</code>\n\nGuidelines:\n- Do not use operators, instead invoke appropriate external functions.\n- Do not declare functions, do not use loops, do not use conditionals.\n- Solve the problem only using variable declarations and function invocations.\n\nBegin!\n', template_format='f-string', validate_template=True), input_key: str = 'query', language_name: str = '😼', input_formatter: typing.Union[typing.Literal['text_prefix'], typing.Literal['triple_quotes'], typing.Literal['markdown_text'], None, typing.Callable[[str], str]] = 'markdown_text') kork.chain.CodeChain [source]#
从预配置的默认值创建代码链。
- 参数
llm – 用于编码的语言模型
interpreter – 将用于执行程序的解释器
ast_printer – 可以将 AST 打印为文本字符串的 ast 打印器
context – 函数列表或上下文检索器。函数列表可以是 python 可调用对象和 Kork 外部函数的混合。所有 python 函数都将转换为 Kork 外部函数,所有内容都将传递到默认上下文检索器。
examples – 示例检索器或示例列表。如果是示例列表,将创建一个简单的示例检索器。
instruction_template – 用于自定义提示的指令组件。
language_name – 用于提示的语言名称。
input_formatter – 一种格式,如果传入示例列表,将应用于每个示例元组的输入部分。
input_key – 要使用的输入键。
- 返回
代码链
- input_formatter: InputFormatter#
微笑猫编程语言;又名 Kork;又名 😼
- input_key: str#
- instruction_template: PromptTemplate#
指令提示的模板。
- interpreter: Callable[[str, Environment], InterpreterResult]#
用于编码链的解释器。
- language_name: str#
- llm: BaseLanguageModel#
用于编码链的语言模型。
- prepare_context(query: str, variables: Optional[Mapping[str, Any]] = None) Tuple[kork.environment.Environment, kork.prompt_adapter.FewShotTemplate] [source]#
获取预填充的环境和少量镜头模板。
- 参数
query – 准备上下文的查询。
variables – 应添加到上下文的任何变量。
- 返回
预填充的环境和预格式化的小样本模板。
kork.display 模块#
用于在笔记本中显示链结果的实用程序。
- class kork.display.HtmlResult[source]#
Bases:
TypedDict
可以在笔记本中显示的结果。
- code: str#
- correct: str#
- errors: str#
- expected: str#
- query: str#
- raw: str#
- result: str#
- kork.display.as_html_dict(code_result: kork.chain.CodeResult, query: Optional[str] = None, expected_answer: Optional[Any] = None, result_key">: str = 'result', pretty_print: bool = True) kork.display.HtmlResult [source]#
用于生成一个字典,可以轻松地在 IPython notebook 中显示。
- kork.display.display_code_result(code_result: kork.chain.CodeResult, query: typing.Optional[str] = None, expected_answer: typing.Optional[typing.Any] = <kork.display._NoExpectedAnswer object>, columns: typing.Optional[typing.Sequence[str]] = None, result_key: str = 'result') Any [source]#
将代码结果显示为表格。
- kork.display.display_html_results(html_results: Union[Sequence[kork.display.HtmlResult], kork.display.HtmlResult], columns: Optional[Sequence[str]] = None) Any [source]#
将 HTML 结果序列显示为表格。
kork.environment 模块#
- class kork.environment.Environment(parent: typing.Optional[kork.environment.Environment] = None, variables: typing.Dict[str, typing.Any] = <factory>)[source]#
Bases:
object
用于存储变量和函数定义的环境。
- clone() kork.environment.Environment [source]#
克隆根级别环境,对变量进行深拷贝。
提供克隆功能是因为环境是可变变量。
最大的危险是改变变量字典,调用者可能会保留对该字典的引用。
TODO(Eugene): 重构以降低这种危险。
- list_external_functions() List[kork.ast.ExternFunctionDef] [source]#
获取外部定义的外部函数列表。
- parent: Optional[kork.environment.Environment] = None#
- variables: Dict[str, Any]#
- kork.environment.create_environment(extern_function_defs: Sequence[kork.ast.ExternFunctionDef], external_variables: Optional[Mapping[str, Any]] = None) kork.environment.Environment [source]#
创建一个预填充状态的新环境。
kork.examples 模块#
轻松指定 kork 示例的接口。
- class kork.examples.AbstractExampleRetriever[source]#
基类:
abc.ABC
示例检索器的抽象接口。
示例接口必须实现 retrieve 方法,该方法根据给定的查询返回相关示例列表。
- class kork.examples.SimpleExampleRetriever(examples: Sequence[Tuple[str, str]])[source]#
基类:
kork.examples.AbstractExampleRetriever
简单示例检索器。
简单的示例检索器,返回初始化时提供的示例。
支持从程序列表初始化。
示例
from kork import SimpleExampleRetriever, AstPrinter, c_, r_ simple_example_retriever = SimpleExampleRetriever.from_programs( language_name="kork", examples=[ ("add 1 2", r_(c_(add, 1, 2))), ("add 1 2 3", r_(c_(add, 1, 2, 3))), ], ast_printer=AstPrinter(), ) examples = simple_example_retriever.retrieve("add 1 2")
- classmethod from_programs(language_name: str, examples: Sequence[Tuple[str, kork.ast.Program]], ast_printer: kork.ast_printer.AbstractAstPrinter) kork.examples.SimpleExampleRetriever [source]#
从程序创建简单示例检索器。
- 参数
language_name – 用于 markdown 代码块的语言名称。
examples – (查询,所需程序) 形式的元组序列。
ast_printer – 用于格式化所需输出的 ast 打印机。
- 返回
一个简单的示例检索器。
- kork.examples.c_(name: Callable, *args: Any) kork.ast.FunctionCall [source]#
创建 kork 函数调用。
- kork.examples.format_examples(language_name: str, examples: Sequence[Tuple[str, kork.ast.Program]], ast_printer: kork.ast_printer.AbstractAstPrinter, input_formatter: Union[Literal['text_prefix'], Literal['triple_quotes'], Literal['markdown_text'], None, Callable[[str], str]] = None) List[Tuple[str, str]] [source]#
格式化示例。
- kork.examples.format_text(text: str, input_formatter: Union[Literal['text_prefix'], Literal['triple_quotes'], Literal['markdown_text'], None, Callable[[str], str]] = None) str [source]#
输入文本的编码器。
- 参数
text – 要编码的文本
input_formatter – 用于输入的格式化程序 * None: 用于单个句子或单个段落,无格式 * triple_quotes: 用 “”” 包围输入,用于长文本 * text_prefix: 与 triple_quote 相同,但带有 `TEXT: ` 前缀 * Callable: 用户提供的函数
- 返回
如果已编码,则为编码后的文本
- kork.examples.r_(expr: kork.ast.Expr) kork.ast.Program [source]#
将最后一个程序表达式分配给结果变量。
kork.exceptions 模块#
自定义 Kork 异常的定义。
- exception kork.exceptions.KorkInterpreterException[source]#
基类:
kork.exceptions.KorkException
解释期间引发的异常。
- exception kork.exceptions.KorkRunTimeException[source]#
基类:
kork.exceptions.KorkInterpreterException
在 Kork 解释器运行时期间引发的异常。
- exception kork.exceptions.KorkSyntaxException[source]#
基类:
kork.exceptions.KorkException
在语法解析期间引发的异常。
- exception kork.exceptions.LLMParseException[source]#
基类:
kork.exceptions.KorkException
无法解析 LLM 输出。
kork.foreign_funcs 模块#
导入外部函数的 API。
- class kork.foreign_funcs.FunctionInfo[source]#
Bases:
TypedDict
有关函数的信息。
- args: List[Tuple[str, Any, Any]]#
- docstring: str#
- name: str#
- return_type: Any#
- kork.foreign_funcs.to_extern_func_def(func: Callable) kork.ast.ExternFunctionDef [source]#
将 python 函数转换为 kork 外部函数定义。
- kork.foreign_funcs.to_kork_function_call(func: Callable, *args: Any) kork.ast.FunctionCall [source]#
将 python 函数调用转换为 kork 函数调用。
kork.interpreter 模块#
- class kork.interpreter.Interpreter(program: kork.ast.Program, environment: kork.environment.Environment)[source]#
-
Kork 的默认解释器。
- visit_assign(assign: kork.ast.Assign) None [source]#
访问赋值。
- visit_binary(binary: kork.ast.Binary) Any [source]#
访问二元表达式。
- visit_extern_function_def(extern_function_def: kork.ast.ExternFunctionDef) None [source]#
访问外部函数定义。
- visit_function_call(call: kork.ast.FunctionCall) Any [source]#
访问函数调用。
- visit_function_def(function_def: kork.ast.FunctionDef) None [source]#
访问函数定义。
- visit_grouping(grouping: kork.ast.Grouping) Any [source]#
访问分组。
- visit_list_(list_: kork.ast.List_) list [source]#
访问列表。
- visit_literal(literal: kork.ast.Literal) Optional[Union[int, float, bool, str]] [source]#
访问数字字面量。
- visit_program(program: kork.ast.Program) None [source]#
访问程序。
- visit_unary(unary: kork.ast.Unary) Any [source]#
访问一元表达式。
- visit_var_decl(var_decl: kork.ast.VarDecl) None [source]#
访问变量声明。
- visit_variable(variable: kork.ast.Variable) Any [source]#
访问变量。
- class kork.interpreter.InterpreterResult[source]#
Bases:
TypedDict
使用此项返回解释器的结果。
- environment: kork.environment.Environment#
- errors: Sequence[Exception]#
- kork.interpreter.run_interpreter(code: str, environment: Optional[kork.environment.Environment] = None) kork.interpreter.InterpreterResult [source]#
使用给定的代码运行解释器。
- 参数
code – 要运行的代码
environment – 运行代码的环境
- 返回
代码运行后的最终环境 (这可能会更改)
kork.parser 模块#
Kork 的默认 AST 解析器。
Kork 使用 Lark 来解析 AST。此语法紧密遵循《Crafting Interpreters》中用于 Lox 编程语言的语法。
https://craftinginterpreters.fullstack.org.cn/appendix-i.html#expressions
此语法和解析器是在几个小时的工作中仓促完成的。
如果您非常在意语言设计,请原谅任何违规行为,并随时帮助改进语法/解析器/解释器。
- class kork.parser.AstParser(visit_tokens: bool = True)[source]#
基类:
lark.visitors.Transformer
给定语言的 AST 解析器。
- binary(left, operator, right) kork.ast.Binary [source]#
从给定的左操作数、运算符和右操作数创建二元表达式。
- expr(item) kork.ast.Expr [source]#
从给定的项创建表达式。
- extern_function_decl(name, params, return_type) kork.ast.ExternFunctionDef [source]#
从给定的名称、参数和返回类型声明外部函数。
- false() kork.ast.Literal [source]#
创建 false 字面量。
- function_call(name, args) kork.ast.FunctionCall [source]#
从给定的名称和参数创建函数调用。
- function_decl(name, params, return_type, block) kork.ast.FunctionDef [source]#
从给定的名称、参数、返回类型和代码块声明函数。
- group(expr) kork.ast.Grouping [source]#
从给定的表达式创建分组。
- identifier(name) kork.ast.Variable [source]#
从给定的名称创建变量引用。
- list(items) kork.ast.List_ [source]#
从给定的项创建列表字面量。
- null() kork.ast.Literal [source]#
创建 null 字面量。
- number(item) kork.ast.Literal [source]#
- param(name, type_) kork.ast.Param [source]#
从给定的名称和类型创建参数。
- params(*items) kork.ast.ParamList [source]#
从给定的项创建参数列表。
- program(*items) kork.ast.Program [source]#
从给定的语句创建程序。
- scientific(coefficient, exponent) kork.ast.Literal [source]#
- statement(item) kork.ast.Stmt [source]#
从给定的项创建语句。
- string(item) kork.ast.Literal [source]#
- true() kork.ast.Literal [source]#
创建 true 字面量。
- unary_r(operator, right) kork.ast.Unary [source]#
从给定的运算符和左操作数创建一元表达式。
- var_decl(name, value) kork.ast.VarDecl [source]#
从给定的名称和值声明变量。
- variable_assign(name, value) kork.ast.Assign [source]#
从给定的名称和值创建变量赋值。
- kork.parser.parse(source: str) kork.ast.Program [source]#
将给定的源代码解析为 AST。
kork.prompt_adapter 模块#
一个提示适配器,允许与常规 LLM 和 Chat LLM 一起工作。
此提示适配器支持将提示分解为以下部分:
指令部分
(可选) 示例部分
- class kork.prompt_adapter.FewShotPromptValue(*, string: Callable[[], str], messages: Callable[[], List[langchain.schema.BaseMessage]])[source]#
基类:
langchain.schema.PromptValue
与 langchain 提示格式集成。
- class Config[source]#
Bases:
object
此 pydantic 对象的配置。
- arbitrary_types_allowed = True#
- extra = 'forbid'#
- messages: Callable[[], List[langchain.schema.BaseMessage]]#
- string: Callable[[], str]#
- class kork.prompt_adapter.FewShotTemplate(*, input_variables: List[str], output_parser: Optional[langchain.schema.BaseOutputParser] = None, partial_variables: Mapping[str, Union[str, Callable[[], str]]] = None, instruction_template: langchain.prompts.prompt.PromptTemplate, examples: Sequence[Tuple[str, str]] = ())[source]#
基类:
langchain.prompts.base.BasePromptTemplate
代码提示模板。
- examples: Sequence[Tuple[str, str]]#
- instruction_template: langchain.prompts.prompt.PromptTemplate#
kork.retrieval 模块#
尝试找出最相关的代码编写信息的逻辑。
- class kork.retrieval.AbstractContextRetriever[source]#
基类:
abc.ABC
用于检索编程上下文的抽象接口。
- abstract retrieve(query: str) Sequence[kork.ast.ExternFunctionDef] [source]#
检索外部函数定义。
- class kork.retrieval.SimpleContextRetriever(external_functions: Sequence[kork.ast.ExternFunctionDef] = ())[source]#
基类:
kork.retrieval.AbstractContextRetriever
检索提供的信息,不进行任何过滤或重新排序。
- external_functions: Sequence[kork.ast.ExternFunctionDef] = ()#
- classmethod from_functions(mixed_funcs: Sequence[Union[kork.ast.ExternFunctionDef, Callable]]) kork.retrieval.SimpleContextRetriever [source]#
从函数序列创建简单的检索器。
- 参数
mixed_funcs – 函数或外部函数定义的序列。
- 返回
一个简单的检索器。
- retrieve(query: str) Sequence[kork.ast.ExternFunctionDef] [source]#
检索外部函数定义。
kork.utils 模块#
kork.version 模块#
获取软件包的版本。
模块内容#
- class kork.AbstractContextRetriever[source]#
基类:
abc.ABC
用于检索编程上下文的抽象接口。
- abstract retrieve(query: str) Sequence[kork.ast.ExternFunctionDef] [source]#
检索外部函数定义。
- class kork.AbstractExampleRetriever[source]#
基类:
abc.ABC
示例检索器的抽象接口。
示例接口必须实现 retrieve 方法,该方法根据给定的查询返回相关示例列表。
- class kork.AstPrinter[source]#
基类:
kork.ast_printer.AbstractAstPrinter
默认 AST 打印器实现。
- visit(element: Union[kork.ast.Stmt, kork.ast.Expr], pretty_print: bool = False) str [source]#
打印 AST 的入口点。
- visit_assign(assign: kork.ast.Assign, **data: Any) str [source]#
打印赋值。
- visit_binary(binary: kork.ast.Binary, **data: Any) str [source]#
打印二元表达式。
- visit_extern_function_def(extern_function_def: kork.ast.ExternFunctionDef, **data: Any) str [source]#
打印外部函数定义。
- visit_function_call(call: kork.ast.FunctionCall, **data: Any) str [source]#
打印函数调用。
- visit_function_def(function_def: kork.ast.FunctionDef, **data: Any) str [source]#
打印函数定义。
- visit_grouping(grouping: kork.ast.Grouping, **data: Any) str [source]#
- visit_list_(list_: kork.ast.List_, **data: Any) str [source]#
打印列表。
- visit_literal(literal: kork.ast.Literal, **data: Any) str [source]#
打印字面量。
- visit_param(param: kork.ast.Param, **data: Any) str [source]#
打印参数。
- visit_param_list(param_list: kork.ast.ParamList, **data: Any) str [source]#
打印参数列表。
- visit_program(program: kork.ast.Program, **data: Any) str [source]#
打印程序。
- visit_unary(unary: kork.ast.Unary, **data: Any) str [source]#
访问一元表达式。
- visit_var_decl(var_decl: kork.ast.VarDecl, **data: Any) str [source]#
打印变量声明。
- visit_variable(variable: kork.ast.Variable, **data: Any) str [source]#
打印变量。
- 类 kork.CodeChain(*, memory: Optional[langchain.schema.BaseMemory] = None, callback_manager: langchain.callbacks.base.BaseCallbackManager = None, verbose: bool = None, llm: langchain.schema.BaseLanguageModel, interpreter: Callable[[str, kork.environment.Environment], kork.interpreter.InterpreterResult], ast_printer: kork.ast_printer.AbstractAstPrinter, context_retriever: Optional[kork.retrieval.AbstractContextRetriever] = None, example_retriever: Optional[kork.examples.AbstractExampleRetriever] = None, instruction_template: langchain.prompts.prompt.PromptTemplate = PromptTemplate(input_variables=['language_name', 'external_functions_block'], output_parser=None, partial_variables={}, template='You are programming in a language called "{language_name}".\n\nYou are an expert programmer and must follow the instructions below exactly.\n\nYour goal is to translate a user query into a corresponding and valid {language_name}\nprogram.\n\n{external_functions_block}\n\nDo not assume that any other functions except for the ones listed above exist.\n\nWrap the program in <code> and </code> tags.\n\nStore the solution to the query in a variable called "result".\n\nHere is a sample valid program:\n\n<code>\nvar x = 1 # Assign 1 to the variable x\nvar result = 1 + 2 # Calculate the sum of 1 + 2 and assign to result\nvar result = x # Assign the value of x to result\n</code>\n\nGuidelines:\n- Do not use operators, instead invoke appropriate external functions.\n- Do not declare functions, do not use loops, do not use conditionals.\n- Solve the problem only using variable declarations and function invocations.\n\nBegin!\n', template_format='f-string', validate_template=True), input_key: str = 'query', language_name: str = '😼', input_formatter: Union[Literal['text_prefix'], Literal['triple_quotes'], Literal['markdown_text'], None, Callable[[str], str]] = 'triple_quotes', **extra_data: Any)[source]#
Bases:
langchain.chains.base.Chain
一个编码链。
- ast_printer: AbstractAstPrinter#
用于编码链的 AST 打印器。
- callback_manager: BaseCallbackManager#
- context_retriever: Optional[AbstractContextRetriever]#
要注入到环境和提示中的上下文。
目前,此上下文仅限于外部函数。
- example_retriever: Optional[AbstractExampleRetriever]#
应添加到提示中的示例。
- classmethod from_defaults(*, llm: langchain.schema.BaseLanguageModel, interpreter: typing.Callable[[str, kork.environment.Environment], kork.interpreter.InterpreterResult] = <function run_interpreter>, ast_printer: kork.ast_printer.AbstractAstPrinter = <kork.ast_printer.AstPrinter object>, context: typing.Optional[typing.Union[kork.retrieval.AbstractContextRetriever, typing.Sequence[typing.Union[kork.ast.ExternFunctionDef, typing.Callable]]]] = None, examples: typing.Optional[typing.Union[kork.examples.AbstractExampleRetriever, typing.Sequence[typing.Tuple[str, kork.ast.Program]]]] = None, instruction_template: langchain.prompts.prompt.PromptTemplate = PromptTemplate(input_variables=['language_name', 'external_functions_block'], output_parser=None, partial_variables={}, template='You are programming in a language called "{language_name}".\n\nYou are an expert programmer and must follow the instructions below exactly.\n\nYour goal is to translate a user query into a corresponding and valid {language_name}\nprogram.\n\n{external_functions_block}\n\nDo not assume that any other functions except for the ones listed above exist.\n\nWrap the program in <code> and </code> tags.\n\nStore the solution to the query in a variable called "result".\n\nHere is a sample valid program:\n\n<code>\nvar x = 1 # Assign 1 to the variable x\nvar result = 1 + 2 # Calculate the sum of 1 + 2 and assign to result\nvar result = x # Assign the value of x to result\n</code>\n\nGuidelines:\n- Do not use operators, instead invoke appropriate external functions.\n- Do not declare functions, do not use loops, do not use conditionals.\n- Solve the problem only using variable declarations and function invocations.\n\nBegin!\n', template_format='f-string', validate_template=True), input_key: str = 'query', language_name: str = '😼', input_formatter: typing.Union[typing.Literal['text_prefix'], typing.Literal['triple_quotes'], typing.Literal['markdown_text'], None, typing.Callable[[str], str]] = 'markdown_text') kork.chain.CodeChain [source]#
从预配置的默认值创建代码链。
- 参数
llm – 用于编码的语言模型
interpreter – 将用于执行程序的解释器
ast_printer – 可以将 AST 打印为文本字符串的 ast 打印器
context – 函数列表或上下文检索器。函数列表可以是 python 可调用对象和 Kork 外部函数的混合。所有 python 函数都将转换为 Kork 外部函数,所有内容都将传递到默认上下文检索器。
examples – 示例检索器或示例列表。如果是示例列表,将创建一个简单的示例检索器。
instruction_template – 用于自定义提示的指令组件。
language_name – 用于提示的语言名称。
input_formatter – 一种格式,如果传入示例列表,将应用于每个示例元组的输入部分。
input_key – 要使用的输入键。
- 返回
代码链
- input_formatter: InputFormatter#
微笑猫编程语言;又名 Kork;又名 😼
- input_key: str#
- instruction_template: PromptTemplate#
指令提示的模板。
- interpreter: Callable[[str, Environment], InterpreterResult]#
用于编码链的解释器。
- language_name: str#
- llm: BaseLanguageModel#
用于编码链的语言模型。
- memory: Optional[BaseMemory]#
- prepare_context(query: str, variables: Optional[Mapping[str, Any]] = None) Tuple[kork.environment.Environment, kork.prompt_adapter.FewShotTemplate] [source]#
获取预填充的环境和少量镜头模板。
- 参数
query – 准备上下文的查询。
variables – 应添加到上下文的任何变量。
- 返回
预填充的环境和预格式化的小样本模板。
- verbose: bool#
- 类 kork.Environment(parent: typing.Optional[kork.environment.Environment] = None, variables: typing.Dict[str, typing.Any] = <factory>)[source]#
Bases:
object
用于存储变量和函数定义的环境。
- clone() kork.environment.Environment [source]#
克隆根级别环境,对变量进行深拷贝。
提供克隆功能是因为环境是可变变量。
最大的危险是改变变量字典,调用者可能会保留对该字典的引用。
TODO(Eugene): 重构以降低这种危险。
- list_external_functions() List[kork.ast.ExternFunctionDef] [source]#
获取外部定义的外部函数列表。
- parent: Optional[kork.environment.Environment] = None#
- variables: Dict[str, Any]#
- 类 kork.InterpreterResult[source]#
Bases:
TypedDict
使用此项返回解释器的结果。
- environment: kork.environment.Environment#
- errors: Sequence[Exception]#
- 类 kork.SimpleContextRetriever(external_functions: Sequence[kork.ast.ExternFunctionDef] = ())[source]#
基类:
kork.retrieval.AbstractContextRetriever
检索提供的信息,不进行任何过滤或重新排序。
- external_functions: Sequence[kork.ast.ExternFunctionDef] = ()#
- classmethod from_functions(mixed_funcs: Sequence[Union[kork.ast.ExternFunctionDef, Callable]]) kork.retrieval.SimpleContextRetriever [source]#
从函数序列创建简单的检索器。
- 参数
mixed_funcs – 函数或外部函数定义的序列。
- 返回
一个简单的检索器。
- retrieve(query: str) Sequence[kork.ast.ExternFunctionDef] [source]#
检索外部函数定义。
- 类 kork.SimpleExampleRetriever(examples: Sequence[Tuple[str, str]])[source]#
基类:
kork.examples.AbstractExampleRetriever
简单示例检索器。
简单的示例检索器,返回初始化时提供的示例。
支持从程序列表初始化。
示例
from kork import SimpleExampleRetriever, AstPrinter, c_, r_ simple_example_retriever = SimpleExampleRetriever.from_programs( language_name="kork", examples=[ ("add 1 2", r_(c_(add, 1, 2))), ("add 1 2 3", r_(c_(add, 1, 2, 3))), ], ast_printer=AstPrinter(), ) examples = simple_example_retriever.retrieve("add 1 2")
- classmethod from_programs(language_name: str, examples: Sequence[Tuple[str, kork.ast.Program]], ast_printer: kork.ast_printer.AbstractAstPrinter) kork.examples.SimpleExampleRetriever [source]#
从程序创建简单示例检索器。
- 参数
language_name – 用于 markdown 代码块的语言名称。
examples – (查询,所需程序) 形式的元组序列。
ast_printer – 用于格式化所需输出的 ast 打印机。
- 返回
一个简单的示例检索器。
- kork.c_(name: Callable, *args: Any) kork.ast.FunctionCall [source]#
创建 kork 函数调用。
- kork.format_examples(language_name: str, examples: Sequence[Tuple[str, kork.ast.Program]], ast_printer: kork.ast_printer.AbstractAstPrinter, input_formatter: Union[Literal['text_prefix'], Literal['triple_quotes'], Literal['markdown_text'], None, Callable[[str], str]] = None) List[Tuple[str, str]] [source]#
格式化示例。
- kork.r_(expr: kork.ast.Expr) kork.ast.Program [source]#
将最后一个程序表达式分配给结果变量。
- kork.run_interpreter(code: str, environment: Optional[kork.environment.Environment] = None) kork.interpreter.InterpreterResult [source]#
使用给定的代码运行解释器。
- 参数
code – 要运行的代码
environment – 运行代码的环境
- 返回
代码运行后的最终环境 (这可能会更改)