Desert Ant Labs

더 똑똑한 채팅, 온디바이스로.

메시지를 보내기 전에 개인정보를 가리고, 올라가기 전에 욕설을 잡아내고, 입력하는 동안 이모지를 추천하고, 음성 메시지를 전사합니다. 처리는 전부 기기에서 이뤄집니다.

채팅을 위해 만든 AI 모델

종단간 암호화 채팅에서도 작동

모든 모델이 기기에서 실행됩니다. 메시지가 암호화되기 전이나 복호화된 뒤에 처리하므로 서버는 텍스트를 보지 못합니다. 암호화를 약화하지도, 새로 운영할 것을 늘리지도 않고 기능을 더할 수 있습니다.

호출당 비용 없음

주고받는 모든 메시지를 검사해도 메시지당 요금이 없고, 운영할 인프라도 없습니다. 제품팀은 클라우드 비용부터 예측하지 않고도 기능을 추가할 수 있습니다.

타이핑보다 빠르게

Emo는 2ms 이내에 이모지를 추천하므로, 키를 누를 때마다 추천이 바뀝니다. Tongue은 들어온 메시지의 언어를 수십 마이크로초 만에 알아냅니다.

예시

각 예시는 모델의 실제 출력을 재생합니다. 모델 페이지를 열면 직접 쓴 텍스트로 시험해 볼 수 있습니다.

Redact · 개인정보 마스킹

계좌번호나 신분증 번호를 보내기 전에 경고하기

Redact는 사용자가 입력하는 동안 메시지 입력창에서 사회보장번호, 카드 번호, IBAN, 전화번호를 찾습니다. 카드 번호와 IBAN은 체크섬을 통과해야 하므로 이 경고는 믿을 만합니다. Redact가 가장 많이 놓치는 것은 형식이 자유로운 이름과 주소입니다.

88.8%잡아낸 개인정보
11.6MB온디바이스Apple; Android와 웹에서 24.5MB
27언어
Redact

Toxic · 혐오 표현 분류 · 베타

상처 주는 메시지, 올라가기 전에 한 번 더 돌아보기

Toxic은 메시지가 올라가기 전에 35개 언어로 혐오, 욕설, 위협 점수를 매깁니다. 점수가 높으면 보낸 사람에게 다시 쓸 기회를 주세요. Toxic은 1차 선별 도구이므로, 표시된 메시지는 바로 삭제하지 말고 사람이 검토하게 하세요.

35언어
3감지 항목혐오, 욕설, 위협
102MB온디바이스Apple; Android와 웹에서 103MB
Toxic

Moderator · 콘텐츠 모더레이션

원치 않는 이미지를 누가 보기 전에 모자이크 처리하기

Moderator는 보낸 사람의 기기에서 사진을 하나하나 검사하므로, 종단간 암호화 채팅에서도 검사를 위해 서버로 가는 이미지가 없습니다. 노출 사진은 모자이크 처리된 채 도착하고, 받은 사람이 볼지 신고할지 고릅니다.

87.8%잡아낸 노출
93.7%통과한 안전한 사진
9.7MB온디바이스Apple; Android와 웹에서 9.2MB
Moderator

Emo · 이모지 추천

메시지를 따라가는 이모지

Emo는 키를 누를 때마다 추천을 새로 고칩니다: 팀 피자 회식에는 🍕, 스페인어로 쓴 생일 축하에는 🎂, 프랑스어로 쓴 치과 예약에는 🦷.

<2ms추천당
5MB온디바이스Apple; Android와 웹에서 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

시작하기

Swift, Kotlin, JavaScript용 SDK 하나로 필요한 모델을 설치하세요. 예제는 보내는 메시지를 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);

채팅 제품을 만들고 계신가요?

사용자를 위해 더하고 싶은 기능을 알려 주세요. 모델 선택과 통합 계획을 도와드리겠습니다.