Chuyển đến nội dung chính
Hướng dẫn AI

Xây dựng và chạy tác nhân điện thoại AI cục bộ với ai-phone

Tìm hiểu cách cài đặt ai-phone trên Apple Silicon, cấu hình mô hình giọng nói và ngôn ngữ, chạy daemon cuộc gọi, kiểm thử cục bộ qua SIP, thực hiện cuộc gọi đi và tích hợp tác nhân bên ngoài thông qua chế độ relay.

Xây dựng và chạy tác nhân điện thoại AI cục bộ với ai-phone

ai-phone là gì?

ai-phone là một tác nhân điện thoại AI chạy trên máy tính của bạn. Nó có thể nhận cuộc gọi đến, thực hiện cuộc gọi đi, tiến hành hội thoại dựa trên hướng dẫn bằng văn bản và cung cấp các lệnh theo từng lượt để tích hợp với một tác nhân bên ngoài.

Bản phát hành hiện tại được thiết kế cho macOS trên Apple Silicon. Nhận dạng và tổng hợp giọng nói chạy cục bộ thông qua MLX, ngay cả khi mô hình ngôn ngữ hội thoại ở xa. Máy tính chạy ai-phone phải là máy Mac được hỗ trợ, nhưng người gọi có thể sử dụng bất kỳ điện thoại hoặc ứng dụng SIP nào.

Tính năng chính

  • Cuộc gọi đến và đi: Cấu hình một trong hai hướng hoặc bật cả hai trong quá trình thiết lập.
  • Xử lý giọng nói cục bộ: Nhận dạng giọng nói và tổng hợp giọng nói vẫn chạy trên máy Mac.
  • Mô hình ngôn ngữ linh hoạt: Sử dụng mô hình MLX cục bộ, gói thuê bao Claude Code hoặc Codex, hay một endpoint tương thích với OpenAI.
  • Kết nối SIP và điện thoại: Kiểm thử bằng địa chỉ SIP trực tiếp hoặc kết nối trunk SIP, tài khoản Telnyx hay tài khoản Twilio để sử dụng số điện thoại.
  • Tự động hóa bằng dòng lệnh: Bắt đầu cuộc gọi bằng một prompt và nhận bản chép lời kết quả.
  • Chế độ relay: Cho phép một tác nhân khác có quyền dùng shell điều khiển từng lượt hội thoại.
  • Lựa chọn giọng nói: Sử dụng Phonon với giọng tiếng Anh đi kèm hoặc Kokoro với giọng Mỹ và Anh, cùng tốc độ có thể điều chỉnh.

Hiện tại, ai-phone hỗ trợ tiếng Anh và mỗi lần chỉ một cuộc gọi đang hoạt động.

Yêu cầu

Nền tảng được hỗ trợ

Bạn cần một máy Mac sử dụng Apple Silicon. Mac Intel, Linux và Windows hiện chưa được hỗ trợ vì các backend giọng nói phụ thuộc vào MLX, đồng thời bộ cài đặt có tích hợp dành riêng cho từng nền tảng.

Bộ nhớ và dung lượng lưu trữ

  • RAM 8 GB: Trình thiết lập cung cấp mô hình 2B nhỏ hơn.
  • RAM 16 GB: Được khuyến nghị cho mô hình 4B mặc định.
  • RAM 32 GB: Được khuyến nghị cho mô hình 9B.
  • Dung lượng lưu trữ: Dành vài gigabyte cho trọng số mô hình được tải xuống. Trình thiết lập sẽ kiểm tra dung lượng đĩa còn trống.

Phần mềm và kết nối điện thoại

Cài đặt Git, Homebrew và uv trước khi tiếp tục. Bộ cài đặt sẽ quản lý các gói Python cần thiết và thư viện SIP gốc.

Để thực hiện cuộc gọi, hãy sử dụng địa chỉ SIP để kết nối trực tiếp hoặc cung cấp trunk SIP, tài khoản Telnyx hay tài khoản Twilio của bạn. Có thể áp dụng phí nhà mạng và giới hạn gói thuê bao.

Cài đặt ai-phone

Sao chép kho lưu trữ, chuyển vào thư mục của kho, chạy bộ cài đặt và khởi chạy trình thiết lập tương tác:

git clone https://github.com/oxnw/ai-phone.git
cd ai-phone
./scripts/install.sh
uv run ai-phone setup

Quá trình thiết lập sẽ hỏi bạn muốn nhận cuộc gọi đến, thực hiện cuộc gọi đi hay cả hai. Sau đó, quá trình này cấu hình mô hình ngôn ngữ, đường dây điện thoại và giọng nói. Với mô hình cục bộ, trình thiết lập đề xuất một tùy chọn dựa trên dung lượng bộ nhớ được phát hiện và tải xuống các trọng số cần thiết.

Nếu terminal của bạn không hoạt động tốt với các lời nhắc tương tác tiêu chuẩn, hãy sử dụng chế độ thuần văn bản:

uv run ai-phone setup --plain

Khởi động daemon điện thoại

Sau khi thiết lập, hãy khởi động daemon từ thư mục của kho:

uv run ai-phone run

Giữ tiến trình này chạy bất cứ khi nào bạn muốn nhận cuộc gọi. Đối với trường hợp chỉ thực hiện cuộc gọi đi, hãy khởi động tiến trình trước khi gọi và dừng bằng Ctrl-C khi hoàn tất.

Trình thiết lập không cài đặt dịch vụ chạy nền. Bạn phải tự khởi động daemon sau khi thiết lập hoặc sau khi khởi động lại máy tính.

Thực hiện cuộc gọi đi

Để daemon tiếp tục chạy và mở một terminal khác trong kho. Sử dụng call cùng với số đích và prompt mô tả nhiệm vụ:

uv run ai-phone call +15555550100 --json \
  --prompt "Ask whether they have a table for two at eight tonight."

Thay +15555550100 bằng số bạn muốn gọi. Khi cuộc gọi kết thúc, lệnh sẽ trả về bản chép lời. Mọi cuộc gọi đi đều bắt đầu bằng thông báo AI.

Các cuộc gọi đến sẽ sử dụng lời chào và hướng dẫn đã lưu trong quá trình thiết lập.

Chạy kiểm thử SIP cục bộ miễn phí

Bạn có thể kiểm thử cục bộ mà không cần thực hiện cuộc gọi qua nhà mạng. Chạy trình thiết lập, bật cuộc gọi đến, chọn A SIP address và giữ nguyên tên mặc định agent. Khi daemon ai-phone đang chạy, hãy thực thi:

pjsua --local-port 5070 sip:agent@127.0.0.1

Lệnh này kết nối một ứng dụng SIP cục bộ với tác nhân tại địa chỉ loopback, cho phép bạn kiểm tra quy trình cuộc gọi đến cơ bản trước khi cấu hình nhà cung cấp dịch vụ điện thoại.

Điều khiển cuộc gọi bằng chế độ relay

Chế độ relay dành cho một tác nhân bên ngoài có quyền truy cập shell. Thay vì cung cấp cho ai-phone một prompt cho toàn bộ cuộc hội thoại, tác nhân bên ngoài có thể bắt đầu cuộc gọi, nói, lắng nghe và quyết định việc cần làm sau mỗi phản hồi.

Bắt đầu cuộc gọi relay

uv run ai-phone call +15555550100 --relay --json

Nói và lắng nghe theo từng lượt

uv run ai-phone say "Hi, I'd like to book a table for two." --json
uv run ai-phone listen --json
uv run ai-phone say "Eight o'clock, please." --json

Kết thúc cuộc hội thoại

uv run ai-phone hangup --say "Thank you. Goodbye." --json

Mỗi lệnh sử dụng --json sẽ ghi một đối tượng JSON vào đầu ra tiêu chuẩn. Lệnh call cũng ghi các sự kiện tiến trình vào đầu ra lỗi tiêu chuẩn, vì vậy các tích hợp nên xử lý riêng hai luồng này.

Nếu không có cuộc gọi đang hoạt động, listen --json sẽ chờ cuộc gọi đến và xử lý cuộc gọi đó ở chế độ chuyển tiếp. Theo mặc định, một lượt chuyển tiếp không được trả lời sẽ hết thời gian chờ sau 25 giây. Xem tài liệu tham khảo lệnh agent để biết ID cuộc gọi, cách lấy bản chép lời, thời gian chờ có thể cấu hình và mã thoát.

Chọn mô hình và giọng nói

Nhận dạng giọng nói

ai-phone sử dụng Parakeet cục bộ thông qua MLX để nhận dạng giọng nói.

Mô hình hội thoại

Mô hình ngôn ngữ có thể là mô hình MLX cục bộ, gói đăng ký Claude Code hoặc Codex của bạn, hoặc một endpoint tương thích với OpenAI. Trình thiết lập hỗ trợ cấu hình tùy chọn đã chọn.

Tổng hợp giọng nói

Phonon cung cấp một giọng tiếng Anh đi kèm. Kokoro cung cấp giọng Mỹ và Anh, với tốc độ nói có thể điều chỉnh.

Nếu sử dụng mô hình ngôn ngữ từ xa, mô hình đó sẽ nhận văn bản cuộc gọi, hướng dẫn và lịch sử hội thoại. Nếu một agent bên ngoài sử dụng nhà cung cấp đám mây, nhà cung cấp đó cũng có thể nhận mọi bản chép lời được gửi cho họ. Nhận dạng và tổng hợp giọng nói vẫn được thực hiện cục bộ, trong khi âm thanh điện thoại được truyền qua SIP và RTP.

Mẹo cấu hình nâng cao

Chạy lại trình thiết lập khi yêu cầu thay đổi

Chạy lại trình thiết lập để thay đổi giọng nói, mô hình, các hướng cuộc gọi được bật hoặc ID người gọi:

uv run ai-phone setup

Khởi động lại daemon sau khi thay đổi cấu hình để các cài đặt mới có hiệu lực.

Bắt đầu với SIP cục bộ trước khi thêm nhà mạng

Trước tiên, hãy xác thực agent bằng bài kiểm tra SIP vòng lặp. Khi cuộc gọi cục bộ hoạt động, hãy cấu hình SIP trunk, Telnyx hoặc Twilio nếu cần các số điện thoại thông thường. Đối với các vấn đề liên quan đến mạng, hãy xem danh sách kiểm tra NAT của dự án.

Chọn mô hình phù hợp với bộ nhớ khả dụng

Hãy làm theo đề xuất dựa trên RAM của trình thiết lập thay vì tự động chọn mô hình lớn nhất. Tùy chọn 2B dành cho các hệ thống có bộ nhớ thấp hơn, trong khi mô hình 4B mặc định và các mô hình 9B lớn hơn yêu cầu nhiều bộ nhớ hơn.

Tính đến độ trễ hiện tại và trạng thái kiểm thử

README báo cáo thời gian trung vị để có phản hồi nghe được đầu tiên là 1.50 giây trong lần chạy cục bộ mới nhất khi bộ nhớ chịu áp lực lớn, không đạt mục tiêu một giây của dự án. Các bài kiểm tra cuộc gọi cục bộ và ngắt lời đã được thực hiện, nhưng việc kiểm tra chấp nhận agent trực tiếp qua nhà mạng và đầu cuối vẫn đang chờ xử lý. Hãy xem các phép đo đã công bố và lịch sử độ trễ khi đánh giá mức độ sẵn sàng triển khai.

Sử dụng các tài liệu tham khảo chi tiết

Lưu ý về giấy phép

ai-phone được cấp phép theo AGPL-3.0-or-later. Các tệp giao diện PJSIP đi kèm sử dụng GPLv2-or-later; hãy tham khảo ghi chú giấy phép của dự án trước khi phân phối hoặc tích hợp phần mềm.

Kết luận

ai-phone cung cấp một quy trình dòng lệnh thực tế để chạy agent điện thoại AI trên máy Mac dùng Apple Silicon. Sau khi cài đặt, hãy cấu hình một mô hình và đường dây SIP, khởi động daemon rồi kiểm tra cục bộ trước khi thực hiện cuộc gọi qua nhà mạng. Để tự động hóa, chế độ chuyển tiếp cho phép agent bên ngoài điều khiển có cấu trúc theo từng lượt thông qua các lệnh shell tạo JSON.