#dialogflow #gcp #nlp #api-bindings

typed-dialogflow

一个易于使用的类型化Google Dialogflow客户端

1 个不稳定版本

0.1.0 2022年3月29日

#1658文本处理

MIT/Apache

16KB
220

typed-dialogflow

一个易于使用的类型化Google Dialogflow客户端,用于Rust

这个库是从一个个人项目中提取出来的。因此,它可能仍然非常基础且相当僵化。然而,我非常支持这个库的发展并变得更有能力。

示例

这个库的概念是提供一个相对类型安全的Dialogflow接口。意图被建模为单个Rust enum,你可以对其执行模式匹配。

以下是一些Dialogflow意图

A screenshot of the Dialogflow dashboard with 3 intents named "hello", "weather" and "thank_you"

然后你可以使用以下代码查询和反序列化意图

#[derive(Debug, Eq, PartialEq, serde::Deserialize)]
#[serde(rename_all = "snake_case")]
enum Intent {
  Hello,
  Weather {
    location: String,
  },
  ThankYou,
}

let intent = dialogflow.detect_intent_serde::<Intent>("What's the weather like in Antarctica ?").await.unwrap();

match intent {
  Intent::Weather { location } => println!("The user asked for the weather in/at {location}"),
  ...
}

测试

由于Dialogflow具有私有/专有/外部托管的特点,测试这个库不像测试其他库那样简单。此外,由于Dialogflow依赖于AI,如果模型被重新训练,则文本可能被以不同的方式解释,这使得测试变得不确定。我最终可以尝试使Google后端可模拟,以便测试库的反序列化部分。除此之外,我正在使用一个私有Dialogflow模型在本地运行测试,但仅在单一计算机上运行测试使得在提交代码之前强制执行代码通过测试的规则变得不可能。

许可证

MIT Apache-2.0

依赖关系

~18–32MB
~636K SLoC