Desert Ant Labs

更聪明的交易平台,就在设备上。

把卖家的描述变成一份填写完整的商品信息,在照片上传之前标记 NSFW 内容,在买家聊天中检测电话号码和银行信息,全部在设备上完成。

为交易平台打造的 AI 模型

数据不离开设备

每个模型都在买家或卖家的手机、平板或笔记本电脑上运行。消息、银行信息和照片在发送或上传之前就完成检查,因此不会在服务器上处理。

没有按次调用费用

每件商品、每张照片、每条消息都能检查,不按次计费,也没有基础设施要运维。你的团队加一项检查,不必先预估云端开支。

说用户的语言

Redact 能在 27 种语言中隐藏个人数据:全部欧盟官方语言,外加挪威语和冰岛语。Toxic 能在 35 种语言中标记辱骂内容,从英语、德语、法语到阿拉伯语、日语和中文。

示例

每个示例都回放某个模型的真实输出。打开模型页面查看完整详情,也可以用你自己的文本试试 Schemer 或 Redact。

Redact · PII 脱敏

别让电话号码和银行信息出现在聊天里

用户输入消息时,Redact 就能找出其中的电话号码、IBAN 和银行卡号。你可以把它们拦下,让交易留在应用内完成,也可以在用户点击发送之前提醒一下。IBAN 和银行卡号必须通过校验和,因此这类识别很可靠。Redact 漏得最多的,是格式自由的姓名和地址。

88.8%捕获的个人数据
11.6MB设备端Apple;Android 和 Web 上为 24.5 MB
27语言
Redact

Title · 标题与描述

根据描述自动生成商品标题

卖家描述完商品后,Title 会为它写一个简短的标题和摘要。Title 只在 Apple 平台上运行,也可能写错细节,所以要让卖家能编辑它写的内容。

3-8标题词数另附一到两句话的描述
286MB设备端Apple 芯片,通过 MLX
Apple平台iOS、macOS、tvOS 和 visionOS
Title

Voz · 语音识别

让手机用户开口描述商品

卖家点一下麦克风,开口介绍商品,Voz 就边听边把描述写下来。实时转写只在 Apple 平台上提供;在 Android 和 Web 上,Voz 会在录音结束后转写整段录音。Voz 支持 25 种欧洲语言。

2s10 分钟音频iPhone 17 Pro
25语言欧洲语言
337MB磁盘占用Apple,首次使用时下载
Voz

Moderator · 内容审核

NSFW 图片,在上传之前就识别出来

卖家每添加一张照片,Moderator 都会直接在手机上检查,因此被它标记的裸露照片不会到达你的服务器,也不会出现在商品页上。封禁账号之前,请先让人工复核被标记的图片。

87.8%捕获的裸露内容
93.7%放行的正常照片
9.7MB设备端Apple;Android 和 Web 上为 9.2 MB
Moderator

Eye · 图像分类 · 测试版

为商品挑出最好的照片

每添加一张照片,Eye 都会给它打上标签:拍的是什么、清不清晰、好不好看。照片拍糊了,就请卖家重拍;再把最适合做封面的那张放在商品最前面。

5.5ms每张照片Neural Engine,搭载 Apple M6 的 Mac
558场景
48MB设备端Apple;Android 和 Web 上为 66 MB
Eye

Schemer · 结构化抽取 · 封闭测试

把买家的消息变成一份出价

Schemer 从买家的消息里读出价格、取货时间和地点,卖家点一下就能接受出价、敲定交易。消息里没提到的字段,Schemer 会留空。Schemer 目前处于封闭测试阶段,首个 SDK(面向 Swift)即将推出。

85ms每条消息M1,一条包含四个字段的简短记录
13语言
230MB磁盘占用
Schemer

Toxic · 仇恨言论初筛 · 测试版

识别并隐藏聊天中的辱骂

Toxic 为每条消息中的仇恨、辱骂和威胁打分,支持 35 种语言。可以对接收者隐藏被标记的消息,也可以请发送者在点击发送之前修改。Toxic 是初筛工具,举报请交给人工复核,而不是直接删除。

35语言
3评分项仇恨、辱骂、威胁
102MB设备端Apple;Android 和 Web 上为 103 MB
Toxic

开始使用

从同一个 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);

在做交易平台?

告诉我们你想为买家和卖家加上什么,我们会帮你挑选模型、规划集成。