#openai #llm #magic #schema #derive #macro-derive #ai

openai-magic-instantiate

使用 LLM 实例化类型正确的值

11 个版本

0.2.2 2024 年 2 月 12 日
0.2.1 2024 年 2 月 5 日
0.1.7 2024 年 2 月 4 日

#429机器学习

Download history 9/week @ 2024-03-13 24/week @ 2024-03-27 46/week @ 2024-04-03

每月下载量 97

MIT 许可证

45KB
726

魔法实例化

快速入门

use openai_magic_instantiate::*;

#[derive(MagicInstantiate)]
struct Person {
    // Descriptions can help the LLM understand how to generate the value
    #[magic(description = "The person's name without any titles or honorifics")]
    name: String,
    // Validators can be used to enforce constraints on the generated value
    #[magic(validator = Min(1800))]
    #[magic(validator = Max(2100))]
    year_of_birth: u32,
}

let client = async_openai::Client::new();
let person: Person = client.instantiate("The president of the USA in 1954").await?;

// For even more ergonomics, use the `make_magic` macro to create the `magic!` macro
make_magic!(client);

let person: Person = magic!("The prime minister of the UK in 1954");

描述和验证器可以应用于字段级别,或者结构体/枚举级别。

提供了一些基本的验证器,但您也可以通过实现 Validator 特性来自定义。

这里发生的事情是,派生的 MagicInstantiate 特性允许此结构体以 TypeScript 类型定义的形式表示。

此类型定义和一些指令用作对 LLM 的提示。验证 LLM 的输出并将其打包回 Rust 类型。尝试重新提示 LLM 以修复任何验证错误。

使用这种简单机制,您可以编写包含 AI 的整个程序。

依赖项

~9–25MB
~346K SLoC