Desert Ant Labs

もっと賢いマーケットプレイスを、オンデバイスで。

出品者の説明から出品情報を仕上げ、アップロード前に NSFW 写真を検知し、購入者とのチャットに含まれる電話番号や口座情報を見つけます。すべてオンデバイスで。

マーケットプレイスのための AI モデル

端末の外には何も出ない

どのモデルも、購入者や出品者のスマートフォン、タブレット、ノートパソコン上で動きます。メッセージ、口座情報、写真は送信やアップロードの前にチェックされるので、サーバーで処理されることはありません。

呼び出しごとの費用なし

すべての出品、写真、メッセージをチェックしても、呼び出しごとの請求はなく、運用するインフラもありません。チームは、先にクラウド費用を見積もらなくてもチェックを追加できます。

ユーザーの言語に対応

Redact は 27 言語で個人データを隠します。EU のすべての公用語に、ノルウェー語とアイスランド語を加えた言語です。Toxic は、英語、ドイツ語、フランス語からアラビア語、日本語、中国語まで、35 言語で暴言を検知します。

動作例

どの例も、モデルの実際の出力を再生しています。詳しくは各モデルのページへ。Schemer と Redact は、自分のテキストで試せます。

Redact · PII マスキング

電話番号や口座情報をチャットに出さない

Redact は、入力中のメッセージから電話番号、IBAN、カード番号を見つけます。それを伏せて取引をアプリ内にとどめることも、送信前にユーザーに警告することもできます。IBAN とカード番号はチェックサムを通ったものだけを拾うので、その検出は信頼できます。Redact の見落としが最も多いのは、決まった形のない氏名や住所です。

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

Title · タイトルと説明

説明から出品タイトルを自動で付ける

出品者が商品の説明を終えると、Title が出品用の短いタイトルと概要を書きます。Title は Apple プラットフォーム専用です。細部を間違えることもあるので、書かれた内容は出品者が編集できるようにしてください。

3-8タイトルの語数1〜2 文の説明付き
286MBオンデバイスApple silicon、MLX 経由
AppleプラットフォームiOS、macOS、tvOS、visionOS
Title

Voz · 音声認識

モバイルでは、出品内容を声で説明できるように

出品者がマイクをタップして商品を説明すると、話すそばから Voz が説明文を書きます。リアルタイムの文字起こしは Apple プラットフォームのみで、Android と Web では録音が終わってから文字起こしします。Voz が対応するのは欧州の 25 言語です。

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

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

NSFW 画像を、アップロード前に検知する

Moderator は、写真が追加されるたびに出品者のスマートフォン上でチェックするので、検知したヌード画像が自社のサーバーや出品ページに届くことはありません。アカウントを停止する前に、検知された画像は人が確認するようにしてください。

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

Eye · 画像分類 · ベータ

出品に最適な写真を選ぶ

Eye は、写真が追加されるたびにタグを付けます。何が写っているか、ピントが合っているか、見栄えはどうか。ぼやけた写真は出品者に撮り直してもらい、メイン画像に最も向いている写真を出品の先頭に置きましょう。

5.5ms写真 1 枚あたりNeural Engine、Apple M6 搭載の Mac
558シーン
48MBオンデバイスApple。Android と Web では 66MB
Eye

Schemer · 構造化抽出 · クローズドベータ

購入者のメッセージを、オファーに変える

Schemer は購入者のメッセージから価格、受け渡しの日時、場所を読み取るので、出品者はワンタップでオファーを承諾し、取引を成立させられます。メッセージに書かれていない項目は、Schemer が空欄のまま残します。Schemer はクローズドベータで、最初の SDK(Swift 向け)は近日公開です。

85msメッセージ 1 件あたりM1、4 項目の短いレコード
13言語
230MBディスク上
Schemer

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

チャットの暴言を検知して隠す

Toxic は、メッセージ一つひとつにヘイト、暴言、脅迫のスコアを 35 言語で付けます。検知したメッセージを受信者に見せないようにすることも、送信前に送信者に書き直しを促すこともできます。Toxic はトリアージの補助なので、報告されたメッセージはすぐに削除せず、人の確認に回してください。

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

はじめる

必要なモデルは、1 つの SDK から Swift、Kotlin、JavaScript でインストールできます。この例では、Redact でメッセージ内の個人データを伏せ、Toxic で暴言を含むメッセージを隠します。

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: "Moderator", package: "desert-ant-core")
.product(name: "Voz", package: "desert-ant-core")
使用例 - Swift
import Redact
import Toxic

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

// before a message is sent
let r = try await redact.redaction(of: message)
if !r.items.isEmpty { holdBack(r.items) }

// when a message arrives
let check = try await toxic.analyze(incoming)
if check.isToxic { foldAway(incoming, check.content) }

Android

インストール
// build.gradle.kts (Maven Central)
implementation("ai.desertant:redact:4.3.0")
implementation("ai.desertant:toxic:4.3.0")
implementation("ai.desertant:moderator:4.3.0")
implementation("ai.desertant:voz: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 r = redact.redaction(message)
if (r.redactedText != message) holdBack(r)

// when a message arrives
val check = toxic.analyze(incoming)
if (check.isToxic) foldAway(incoming, check.content)

Web, Node.js

インストール
npm i @desert-ant-labs/redact @desert-ant-labs/toxic @desert-ant-labs/moderator @desert-ant-labs/voz @litertjs/core onnxruntime-web
使用例 - 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 r = await redact.redaction(message);
if (r.items.length) holdBack(r.items);

// when a message arrives
const check = await toxic.analyze(incoming);
if (check.isToxic) foldAway(incoming, check.content);

マーケットプレイスを開発中ですか?

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