もっと賢いチャットを、オンデバイスで。
送信前のメッセージから個人データを隠し、投稿前の暴言を検知し、入力に合わせて絵文字を提案し、ボイスメッセージを文字起こしします。すべてオンデバイスで。
チャットのための AI モデル
エンドツーエンド暗号化のチャットでも使える
どのモデルもオンデバイスで動きます。処理するのは、暗号化される前か、復号された後のメッセージです。テキストが自社のサーバーに届くことはないので、暗号化を弱めることも、新たに何かを運用することもなく機能を追加できます。
呼び出しごとの費用なし
送受信されるすべてのメッセージをチェックできます。メッセージごとの請求も、運用するインフラもありません。プロダクトチームは、先にクラウド費用を見積もらなくても機能を追加できます。
入力よりも速い
Emo は 2 ms 未満で絵文字を提案するので、キーを押すたびに候補が変わります。Tongue は、届いたメッセージの言語を数十マイクロ秒で判定します。
動作例
どの例も、モデルの実際の出力を再生しています。自分のテキストで試すには、各モデルのページを開いてください。
Redact · PII マスキング
口座番号や ID 番号を共有する前に警告する
Redact は、入力中のメッセージ欄から社会保障番号、カード番号、IBAN、電話番号を見つけます。カード番号と IBAN はチェックサムを通ったものだけを拾うので、その警告は信頼できます。Redact の見落としが最も多いのは、決まった形のない氏名や住所です。
Toxic · ヘイトスピーチのトリアージ · ベータ
人を傷つけるメッセージは、投稿前に見直しを
Toxic は、投稿される前のメッセージ一つひとつに、ヘイト、暴言、脅迫のスコアを 35 言語で付けます。スコアが高いときは、送信者に書き直す機会を設けましょう。Toxic はトリアージの補助なので、検知したものはそのまま削除せず、人の確認に回してください。
Moderator · コンテンツモデレーション
望まない画像に、誰かが見る前にモザイクをかける
Moderator は送信者の端末上で写真を 1 枚ずつチェックするので、エンドツーエンド暗号化のチャットでも、チェックのために画像がサーバーへ送られることはありません。ヌード画像はモザイクがかかった状態で届き、受け取った人が表示するか報告するかを選びます。
Emo · 絵文字の提案
メッセージに合わせて変わる絵文字
Emo はキーを押すたびに候補を更新します。チームのピザパーティーには 🍕、スペイン語の誕生日メッセージには 🎂、フランス語で書いた歯医者の予約には 🦷。
Tongue · 言語識別
最初の数語から翻訳を提案する
Tongue は届いたメッセージの言語を数語で判定するので、翻訳ボタンは必要なメッセージにだけ表示されます。翻訳そのものは、お使いの翻訳サービスが行います。
Voz · 音声認識
ボイスメッセージを、再生せずに読む
Voz はボイスメッセージを単語ごとのタイムスタンプ付きで文字起こしするので、テキストが波形の下に表示され、再生に合わせて進みます。Voz が対応するのは欧州の 25 言語なので、Ear と組み合わせて先に言語を判定してください。
はじめる
必要なモデルは、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")
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")
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
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);
チャットプロダクトを開発中ですか?
ユーザーのために何を加えたいかを教えてください。モデル選びと組み込みの計画をお手伝いします。






