iOS 클라이언트는 강한 대비의 헤드라인 목록, 웹을 읽기 어렵게 만든 요소를 제거하는 리더 모드, 선택적으로 기사를 요약하는 “intelligence” 뷰를 포함함
핵심은 요약이 Apple의 로컬 모델 API를 통해 온디바이스에서 생성된다는 점임
서버 우회, 프롬프트나 사용자 로그, 벤더 계정, “콘텐츠를 30일 보관한다”는 식의 각주가 필요 없음
모든 AI 사용이 서버 측에서 일어난다고 받아들이는 흐름이 너무 자연스러워졌고, 이를 되돌리려면 업계 차원의 노력이 필요함
일부 사용 사례는 클라우드 호스팅 모델만 제공할 수 있는 지능을 요구하지만, 모든 사용 사례가 그런 것은 아니므로 신중한 판단이 필요함
Apple 생태계의 로컬 AI 도구
Apple 생태계에서는 최근 1년 동안 개발자가 내장 로컬 AI 모델을 쉽게 활용할 수 있도록 투자가 이뤄짐
기본 흐름은 FoundationModels를 가져오고, SystemLanguageModel.default의 사용 가능 여부를 확인한 뒤, LanguageModelSession으로 프롬프트를 구성해 응답을 받는 방식임
import FoundationModels
let model = SystemLanguageModel.default
guard model.availability == .available else { return }
let session = LanguageModelSession {
"""
Provide a brutalist, information-dense summary in Markdown format.
- Use **bold** for key concepts.
- Use bullet points for facts.
- No fluff. Just facts.
"""
}
let response = try await session.respond(options: .init(maximumResponseTokens: 1_000)) {
articleText
}
let markdown = response.content
긴 콘텐츠는 일반 텍스트를 약 1만 자 단위로 나누고, 각 청크에서 간결한 “facts only” 노트를 만든 뒤, 두 번째 패스로 최종 요약을 결합할 수 있음
이런 작업은 로컬 모델에 잘 맞음
입력 데이터는 사용자가 이미 읽고 있는 콘텐츠라서 기기에 있음
출력은 가벼움
빠르고 비공개로 처리됨
사용자가 방금 불러온 페이지를 요약하는 작업이지, 세계 지식을 새로 만들어내는 작업이 아니므로 초인적 수준의 지능이 필요하지 않음
로컬 AI는 모델의 역할이 우주 전체를 검색하는 것이 아니라, 사용자가 소유한 데이터를 변환하는 일일 때 빛남
신뢰를 만드는 방식
이메일 요약, 노트에서 할 일 추출, 문서 분류 같은 AI 기능은 사람들이 원하지만 신뢰하지 못하는 기능에 속함
일반적인 클라우드 방식은 이런 기능을 모두 “데이터를 서버로 보내도 괜찮은지”를 묻는 신뢰 문제로 바꿈
로컬 AI는 이미 기기에 있는 데이터를 그 자리에서 처리하게 해 이 구조를 바꿈
사용자 신뢰는 2,000단어짜리 개인정보 처리방침으로 만들어지지 않음
애초에 그런 개인정보 처리방침이 필요 없도록 만드는 방식이 신뢰를 만듦
구조화된 출력과 타입 기반 AI
Apple이 최근 잘한 선택 중 하나는 “AI output”을 구조 없는 텍스트 덩어리에서 타입이 있는 데이터로 옮긴 점임
“모델에게 JSON을 요청하고 잘 나오길 바라는” 방식 대신, 원하는 결과를 나타내는 Swift struct를 정의하는 방식이 더 새롭고 나은 패턴임
각 필드에 자연어 가이드를 주고, 모델에게 해당 타입의 인스턴스를 생성하게 함
import FoundationModels
@Generable
struct ArticleIntel {
@Guide(description: "One sentence. No hype.") var tldr: String
@Guide(description: "3–7 bullets. Facts only.") var bullets: [String]
@Guide(description: "Comma-separated keywords.") var keywords: [String]
}
let session = LanguageModelSession()
let response = try await session.respond(
to: "Extract structured notes from the article.",
generating: ArticleIntel.self
) {
articleText
}
let intel = response.content
이 방식이면 UI가 Markdown의 불릿을 긁어내거나 모델이 JSON 스키마를 기억했기를 기대할 필요가 없음
앱은 실제 필드를 가진 실제 타입을 받아 일관되게 렌더링할 수 있음
앱이 실제로 사용할 수 있는 구조화된 출력을 만들며, 이 과정 전체가 로컬에서 실행됨
단순히 편리한 인터페이스가 아니라 엔지니어링 품질 개선
로컬 퍼스트 앱에서 "AI는 신기한 기능"이 아닌 "신뢰할 수 있는 서브시스템" 으로 기능하게 만드는 차이가 됨
"로컬 모델은 덜 똑똑하다"에 대한 반론
로컬 모델이 클라우드 모델만큼 똑똑하지 않다는 점은 맞지만, 대부분의 앱 기능에는 해당하지 않음
대부분의 기능이 요구하는 것은 셰익스피어를 쓰거나 양자역학을 설명하는 능력이 아니라, 요약, 분류, 추출, 재작성, 정규화 중 하나를 안정적으로 수행하는 능력
이런 작업에 로컬 모델은 충분히 뛰어남
로컬 모델을 인터넷 전체의 대체물로 쓰면 실망하지만, 앱 내부의 "데이터 변환기" 로 사용하면 왜 서버에 보냈는지 의문이 들 정도
클라우드 모델은 진짜 필요할 때만 사용하고, 사용자 데이터는 제자리에 둬야 함
AI를 사용할 때 채팅 박스를 붙이는 것이 아니라, 타입 출력과 예측 가능한 동작을 갖춘 실제 서브시스템으로 활용해야 함
프라이버시와 신뢰 구축
이메일 요약, 노트에서 액션 아이템 추출, 문서 분류 등 사람들이 원하지만 신뢰하지 않는 AI 기능이 다수 존재
클라우드 방식은 이 모든 것을 신뢰 실험으로 전환: "데이터를 서버로 보내주세요, 잘 다루겠습니다"
로컬 AI는 이를 근본적으로 바꿈 — 기기에 이미 데이터가 있고, 기기에서 바로 처리
2,000단어짜리 개인정보 보호정책을 작성해서가 아니라, 애초에 그런 정책이 필요 없는 구조로 신뢰 구축