Desert Ant Labs

もっと賢いチャットを、オンデバイスで。

送信前のメッセージから個人データを隠し、投稿前の暴言を検知し、入力に合わせて絵文字を提案し、ボイスメッセージを文字起こしします。すべてオンデバイスで。

チャットのための AI モデル

エンドツーエンド暗号化のチャットでも使える

どのモデルもオンデバイスで動きます。処理するのは、暗号化される前か、復号された後のメッセージです。テキストが自社のサーバーに届くことはないので、暗号化を弱めることも、新たに何かを運用することもなく機能を追加できます。

呼び出しごとの費用なし

送受信されるすべてのメッセージをチェックできます。メッセージごとの請求も、運用するインフラもありません。プロダクトチームは、先にクラウド費用を見積もらなくても機能を追加できます。

入力よりも速い

Emo は 2 ms 未満で絵文字を提案するので、キーを押すたびに候補が変わります。Tongue は、届いたメッセージの言語を数十マイクロ秒で判定します。

動作例

どの例も、モデルの実際の出力を再生しています。自分のテキストで試すには、各モデルのページを開いてください。

Redact · PII マスキング

口座番号や ID 番号を共有する前に警告する

Redact は、入力中のメッセージ欄から社会保障番号、カード番号、IBAN、電話番号を見つけます。カード番号と IBAN はチェックサムを通ったものだけを拾うので、その警告は信頼できます。Redact の見落としが最も多いのは、決まった形のない氏名や住所です。

88.8%捕捉した個人データ
11.6MBオンデバイスApple。Android と Web では 24.5MB
27言語
Redact

Toxic · ヘイトスピーチのトリアージ · ベータ

人を傷つけるメッセージは、投稿前に見直しを

Toxic は、投稿される前のメッセージ一つひとつに、ヘイト、暴言、脅迫のスコアを 35 言語で付けます。スコアが高いときは、送信者に書き直す機会を設けましょう。Toxic はトリアージの補助なので、検知したものはそのまま削除せず、人の確認に回してください。

35言語
3シグナルヘイト、暴言、脅迫
102MBオンデバイスApple。Android と Web では 103MB
Toxic

Moderator · コンテンツモデレーション

望まない画像に、誰かが見る前にモザイクをかける

Moderator は送信者の端末上で写真を 1 枚ずつチェックするので、エンドツーエンド暗号化のチャットでも、チェックのために画像がサーバーへ送られることはありません。ヌード画像はモザイクがかかった状態で届き、受け取った人が表示するか報告するかを選びます。

87.8%捕捉したヌード
93.7%通過した安全な写真
9.7MBオンデバイスApple。Android と Web では 9.2MB
Moderator

Emo · 絵文字の提案

メッセージに合わせて変わる絵文字

Emo はキーを押すたびに候補を更新します。チームのピザパーティーには 🍕、スペイン語の誕生日メッセージには 🎂、フランス語で書いた歯医者の予約には 🦷。

<2ms提案 1 件あたり
5MBオンデバイスApple。Android と Web では 11MB
22言語
Emo

Tongue · 言語識別

最初の数語から翻訳を提案する

Tongue は届いたメッセージの言語を数語で判定するので、翻訳ボタンは必要なメッセージにだけ表示されます。翻訳そのものは、お使いの翻訳サービスが行います。

84言語
2MBオンデバイスパッケージに同梱、ダウンロード不要
0.933FLORES-200、3 語293MB の検出器は 0.887
Tongue

Voz · 音声認識

ボイスメッセージを、再生せずに読む

Voz はボイスメッセージを単語ごとのタイムスタンプ付きで文字起こしするので、テキストが波形の下に表示され、再生に合わせて進みます。Voz が対応するのは欧州の 25 言語なので、Ear と組み合わせて先に言語を判定してください。

2s10 分の音声iPhone 17 Pro
25言語欧州
337MBディスク上Apple、初回利用時にダウンロード
Voz

はじめる

必要なモデルは、1 つの SDK から Swift、Kotlin、JavaScript でインストールできます。この例では、送信するメッセージを Toxic と Redact でチェックします。

iOS, macOS, Linux, Windows

インストール
// Swift Package Manager
.package(url: "https://github.com/Desert-Ant-Labs/desert-ant-core", from: "4.3.0")
// target dependencies
.product(name: "Redact", package: "desert-ant-core")
.product(name: "Toxic", package: "desert-ant-core")
.product(name: "Emo", package: "desert-ant-core")
.product(name: "Tongue", package: "desert-ant-core")
使用例 - Swift
import Redact
import Toxic

let redact = Redact()
let toxic = Toxic()

// before a message is sent
let check = try await toxic.analyze(message)
if check.isToxic { askToRewrite(check.content) }

let r = try await redact.redaction(of: message)
if !r.items.isEmpty { offerToMask(r.items) }

Android

インストール
// build.gradle.kts (Maven Central)
implementation("ai.desertant:redact:4.3.0")
implementation("ai.desertant:toxic:4.3.0")
implementation("ai.desertant:emo:4.3.0")
implementation("ai.desertant:tongue:4.3.0")
使用例 - Kotlin
import ai.desertant.redact.Redact
import ai.desertant.toxic.Toxic

val redact = Redact(context)
val toxic = Toxic(context)

// before a message is sent
val check = toxic.analyze(message)
if (check.isToxic) askToRewrite(check.content)

val r = redact.redaction(message)
if (r.redactedText != message) offerToMask(r)

Web, Node.js

インストール
npm i @desert-ant-labs/redact @desert-ant-labs/toxic @desert-ant-labs/emo @desert-ant-labs/tongue @litertjs/core
使用例 - TypeScript
import { Redact } from "@desert-ant-labs/redact";
import { Toxic } from "@desert-ant-labs/toxic";

const redact = await Redact.load();
const toxic = await Toxic.load();

// before a message is sent
const check = await toxic.analyze(message);
if (check.isToxic) askToRewrite(check.content);

const r = await redact.redaction(message);
if (r.items.length) offerToMask(r.items);

チャットプロダクトを開発中ですか?

ユーザーのために何を加えたいかを教えてください。モデル選びと組み込みの計画をお手伝いします。