#机器学习 #API #API 密钥 #合成 #API 绑定

textsynth

TextSynth API 的(非官方)包装器,一个文本合成服务

1 个不稳定版本

0.1.0 2022 年 1 月 21 日

#14 in #合成

MIT 许可证

44KB
883

TextSynth

TextSynth API 的(非官方)Rust 包装器,一个免费的(截至 2022 年 1 月 21 日)文本合成服务。

准备

您必须有一个 API 密钥才能使用此库。

为了获取 API 密钥,您必须在 TextSynth 上创建一个账户。

注册并验证您的电子邮件地址后,您将获得一个 API 密钥。

基本用法

最常用的类型和特质在 prelude 中。首先导入它们

use textsynth::prelude::*;

我们现在需要创建一个 TextSynth 实例。这是我们可以创建引擎的地方,下面将进一步解释。将您在准备阶段获得的 API 密钥传递给 TextSynth::new

let api_key = String::from("<your-api-key>");
let textsynth = TextSynth::new(api_key);

我们现在需要创建一个 Engine。一个 Engine 是有趣事情发生的地方。这是您可以完成文本和记录概率的地方。

然而,要创建一个引擎,我们需要提供一个定义,一个 EngineDefinition。一个 EngineDefinition 是 TextSynth API 需要的信息,以确定应使用哪个引擎。它还确定了在文本完成中可以使用多少最大令牌。

通常,您可以使用 EngineDefinition::GptJ6B 来使用 GPT-J 模型。还有其他模型可用,但这个可能是您最常用的。

let engine = textsynth.engine(EngineDefinition::GptJ6B);

让我们开始有趣的吧。

记录概率

这是在上下文之后生成续写的概率的对数。当只有少数答案(如是/否)可能时,可用于回答问题。它还可以用于基准测试模型。

您需要向此函数提供两个参数

  • 一个 context,您希望预测其续写的文本,以及
  • 一个 continuation,一个非空字符串,您希望将其与 context 进行预测。
let context = String::from("The quick brown fox jumps over the lazy");
let continuation = String::from(" dog");
let continuation = NonEmptyString::new(continuation)?;
let log_probabilities = engine.log_probabilities(context, continuation).await??;

log_probabilitiesLogProbabilities 类型,其中包含 API 的结果。它包含多个字段。

  • log_probability:这是在上下文之前生成的延续概率的对数。它总是 <= 0。
  • is_greedy:如果 continuation 将通过从 continuation 进行贪婪采样生成,则 true
  • total_tokens:表示令牌的总数。它有助于估计请求使用的计算资源数量。
println!("log probability = {}", log_probabilities.log_probability());
println!("is greedy = {}", log_probabilities.is_greedy());
println!("total tokens = {}", log_probabilities.total_tokens());

文本补全

由于这里我们只展示基本用法(更多高级用法请参阅文档),我们将只关注大多数用户感兴趣的部分。

为了开始文本补全的过程,我们需要提供一个 prompt,即输入文本。

let prompt = String::from("Once upon a time, there was")
let text_completion = engine.text_completion(prompt);

这创建了一个构建器,其中包含许多方法,但我们只关注最常见的一些。

即时文本补全

嗯,"即时"文本补全。您仍需要等待 API 返回结果。

这将获取整个结果,而不会将其分成多个块。

let text_completion = text_completion.now().await??;

text 字段包含生成的文本本身。

println!("{}", text_completion.text());

流式文本补全

这返回一系列文本补全。

let text_completion = text_completion.stream().await?;

遍历它,您可以得到 text

// due to `async` limitations, we must iterate like this
while let Some(text_completion) = text_completion.next().await {
    let text_completion = text_completion???;
    print!("{}", text_completion.text());
    io::stdout().flush()?;
}

示例

示例可以在 examples 目录中找到。

应用

使用此库的程序是 synthtext 程序。

许可证

此软件采用 MIT 许可证

依赖项

~4–18MB
~247K SLoC