2025-07-18 13:14:28 +08:00

500 lines
10 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 小智手机端
description: 基于Flutter的跨平台小智客户端支持iOS、Android、Web等多平台
---
# 小智手机客户端
<div class="project-header">
<div class="project-logo">
<img src="https://avatars.githubusercontent.com/u/196275872?s=48&v=4" alt="小智手机客户端">
</div>
<div class="project-badges">
<span class="badge platform">多平台</span>
<span class="badge language">Flutter/Dart</span>
<span class="badge status">活跃开发中</span>
</div>
</div>
## 项目简介
小智手机客户端是基于Flutter框架开发的跨平台应用为小智AI生态系统提供了移动端接入能力。通过一套代码实现了在iOS、Android、Web、Windows、macOS和Linux等多个平台的部署让用户随时随地都能与小智AI进行实时语音交互和文字对话。
<div class="app-showcase">
<div class="showcase-image">
<img src="./images/界面1.jpg" alt="应用展示" onerror="this.src='./images/界面1.jpg'; this.onerror=null;">
<div class="overlay">
<a href="https://www.bilibili.com/video/BV1fgXvYqE61" target="_blank" class="watch-demo">观看演示视频</a>
</div>
</div>
<div class="showcase-description">
<p>最新版本客户端已全面升级支持iOS与Android平台并可自行打包为Web、PC版本。通过精心设计的UI和流畅的交互体验为用户提供随时随地与小智AI交流的能力。</p>
</div>
</div>
## 核心功能
<div class="features-grid">
<div class="feature-card">
<div class="feature-icon">📱</div>
<h3>跨平台支持</h3>
<p>使用Flutter开发一套代码支持iOS、Android、Web、Windows、macOS和Linux等多平台</p>
</div>
<div class="feature-card">
<div class="feature-icon">🤖</div>
<h3>多AI模型集成</h3>
<p>支持小智AI服务、Dify、OpenAI等多种AI服务可随时切换不同模型</p>
</div>
<div class="feature-card">
<div class="feature-icon">💬</div>
<h3>丰富交互方式</h3>
<p>支持实时语音对话、文字消息、图片消息,以及通话中手动打断功能</p>
</div>
<div class="feature-card">
<div class="feature-icon">🔊</div>
<h3>语音优化技术</h3>
<p>实现安卓设备AEC+NS回音消除提升语音交互质量</p>
</div>
<div class="feature-card">
<div class="feature-icon">🎨</div>
<h3>精美界面设计</h3>
<p>轻度拟物化设计、流畅动画效果、自适应UI布局</p>
</div>
<div class="feature-card">
<div class="feature-icon">⚙️</div>
<h3>灵活配置选项</h3>
<p>支持多种AI服务配置管理可添加多个小智到聊天列表</p>
</div>
</div>
## 功能亮点
### 实时语音交互
<div class="feature-highlight">
<div class="highlight-image">
<img src="./images/界面1.jpg" alt="实时语音交互" onerror="this.src='./images/界面1.jpg'; this.onerror=null;">
</div>
<div class="highlight-content">
<h3>流畅的语音对话体验</h3>
<ul>
<li>实时语音识别和响应</li>
<li>支持持续对话模式</li>
<li>语音交互过程中支持手动打断</li>
<li>按住说话快捷模式</li>
<li>语音会话历史记录</li>
</ul>
</div>
</div>
### 多AI服务支持
<div class="feature-highlight reverse">
<div class="highlight-content">
<h3>灵活切换不同AI服务</h3>
<ul>
<li>集成小智WebSocket实时语音对话</li>
<li>支持Dify平台接入</li>
<li>支持OpenAI图文消息和流式输出</li>
<li>支持官方小智服务一键设备注册</li>
<li>可同时添加多个AI服务到对话列表</li>
</ul>
</div>
<div class="highlight-image">
<img src="./images/界面2.jpg" alt="多AI服务支持" onerror="this.src='./images/界面2.jpg'; this.onerror=null;">
</div>
</div>
## 系统要求
- **Flutter**: ^3.7.0
- **Dart**: ^3.7.0
- **iOS**: 12.0+
- **Android**: API 21+ (Android 5.0+)
- **Web**: 现代浏览器
## 安装与使用
### 安装方法
1. 克隆项目仓库:
```bash
git clone https://github.com/TOM88812/xiaozhi-android-client.git
```
2. 安装依赖:
```bash
flutter pub get
```
3. 运行应用:
```bash
flutter run
```
### 构建发布版本
```bash
# Android应用
flutter build apk --release
# iOS应用
flutter build ios --release
# Web应用
flutter build web --release
```
> **注意**: iOS编译完成后需要在设置-APP中打开网络权限
## 配置说明
应用支持灵活的服务配置管理,包括:
### 小智服务配置
- 支持配置多个小智服务地址
- WebSocket URL设置
- Token认证
- 自定义MAC地址
### Dify API配置
- 支持配置多个Dify服务
- API密钥管理
- 服务器URL配置
### OpenAI配置
- API密钥设置
- 模型选择
- 参数调整
## 开发计划
<div class="roadmap">
<div class="roadmap-item done">
<div class="status-dot"></div>
<div class="item-content">
<h4>已实现功能</h4>
<ul>
<li>支持多种AI服务提供商</li>
<li>支持OTA自动注册设备</li>
<li>增强语音识别准确性</li>
<li>实现文字和语音混合会话</li>
<li>支持OpenAI接口图文交互</li>
</ul>
</div>
</div>
<div class="roadmap-item progress">
<div class="status-dot"></div>
<div class="item-content">
<h4>正在开发</h4>
<ul>
<li>深色/浅色主题适配</li>
<li>iOS平台回音消除实现</li>
<li>本地ASR语音识别支持</li>
<li>本地唤醒词功能</li>
</ul>
</div>
</div>
<div class="roadmap-item planned">
<div class="status-dot"></div>
<div class="item-content">
<h4>计划实现</h4>
<ul>
<li>支持IoT映射手机操作</li>
<li>本地TTS实现</li>
<li>支持MCP_Client</li>
<li>OpenAI接口联网搜索功能</li>
</ul>
</div>
</div>
</div>
## 项目贡献
欢迎为小智手机客户端贡献代码或提交问题反馈:
- 目前iOS端回音消除尚未实现欢迎有经验的开发者PR
- 提交Bug、功能请求或改进建议
- 分享您使用小智手机客户端的经验和案例
## 相关链接
- [项目GitHub仓库](https://github.com/TOM88812/xiaozhi-android-client)
- [演示视频](https://www.bilibili.com/video/BV1fgXvYqE61)
- [问题反馈](https://github.com/TOM88812/xiaozhi-android-client/issues)
<style>
.project-header {
display: flex;
align-items: center;
margin-bottom: 2rem;
}
.project-logo {
width: 100px;
height: 100px;
margin-right: 1.5rem;
}
.project-logo img {
width: 100%;
height: 100%;
object-fit: contain;
}
.project-badges {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
}
.badge {
display: inline-block;
padding: 0.25rem 0.75rem;
border-radius: 1rem;
font-size: 0.85rem;
font-weight: 500;
}
.badge.platform {
background-color: var(--vp-c-brand-soft);
color: var(--vp-c-brand-dark);
}
.badge.language {
background-color: rgba(59, 130, 246, 0.2);
color: rgb(59, 130, 246);
}
.badge.status {
background-color: rgba(16, 185, 129, 0.2);
color: rgb(16, 185, 129);
}
.app-showcase {
margin: 2rem 0;
background-color: var(--vp-c-bg-soft);
border-radius: 12px;
overflow: hidden;
border: 1px solid var(--vp-c-divider);
}
.showcase-image {
position: relative;
width: 100%;
height: 300px;
}
.showcase-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.3);
display: flex;
align-items: center;
justify-content: center;
opacity: 0;
transition: opacity 0.3s ease;
}
.showcase-image:hover .overlay {
opacity: 1;
}
.watch-demo {
padding: 0.75rem 1.5rem;
/*background-color: var(--vp-c-brand);*/
color: white;
border-radius: 4px;
text-decoration: none;
font-weight: 500;
transition: background-color 0.1s ease;
}
.watch-demo:hover {
background-color: var(--vp-c-brand-dark);
}
.showcase-description {
padding: 1.5rem;
font-size: 1.1rem;
line-height: 1.6;
}
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1.5rem;
margin: 2rem 0;
}
.feature-card {
background-color: var(--vp-c-bg-soft);
border-radius: 8px;
padding: 1.5rem;
transition: transform 0.3s ease, box-shadow 0.3s ease;
border: 1px solid var(--vp-c-divider);
height: 100%;
}
.feature-card:hover {
transform: translateY(-5px);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
}
.feature-icon {
font-size: 2rem;
margin-bottom: 1rem;
}
.feature-card h3 {
color: var(--vp-c-brand);
margin-top: 0;
margin-bottom: 0.5rem;
}
.feature-highlight {
display: flex;
margin: 3rem 0;
background-color: var(--vp-c-bg-soft);
border-radius: 12px;
overflow: hidden;
border: 1px solid var(--vp-c-divider);
}
.feature-highlight.reverse {
flex-direction: row-reverse;
}
.highlight-image {
flex: 1;
min-width: 40%;
}
.highlight-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
.highlight-content {
flex: 1;
padding: 2rem;
}
.highlight-content h3 {
color: var(--vp-c-brand);
margin-top: 0;
margin-bottom: 1rem;
}
.highlight-content ul {
padding-left: 1.5rem;
}
.highlight-content li {
margin-bottom: 0.5rem;
}
.roadmap {
position: relative;
margin: 3rem 0;
padding-left: 2rem;
}
.roadmap:before {
content: "";
position: absolute;
left: 7px;
top: 0;
bottom: 0;
width: 2px;
background-color: var(--vp-c-divider);
}
.roadmap-item {
position: relative;
margin-bottom: 2rem;
}
.status-dot {
position: absolute;
left: -2rem;
top: 0;
width: 16px;
height: 16px;
border-radius: 50%;
z-index: 1;
}
.roadmap-item.done .status-dot {
background-color: rgb(16, 185, 129);
}
.roadmap-item.progress .status-dot {
background-color: rgb(245, 158, 11);
}
.roadmap-item.planned .status-dot {
background-color: rgb(99, 102, 241);
}
.item-content {
background-color: var(--vp-c-bg-soft);
border-radius: 8px;
padding: 1.5rem;
border: 1px solid var(--vp-c-divider);
}
.item-content h4 {
margin-top: 0;
margin-bottom: 1rem;
}
.roadmap-item.done h4 {
color: rgb(16, 185, 129);
}
.roadmap-item.progress h4 {
color: rgb(245, 158, 11);
}
.roadmap-item.planned h4 {
color: rgb(99, 102, 241);
}
@media (max-width: 768px) {
.feature-highlight,
.feature-highlight.reverse {
flex-direction: column;
}
.highlight-image {
height: 200px;
}
.project-header {
flex-direction: column;
align-items: flex-start;
}
.project-logo {
margin-bottom: 1rem;
}
}
</style>