# Ai Agent Plus **Repository Path**: PrettyAnt/ai-agent-plus ## Basic Information - **Project Name**: Ai Agent Plus - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-03 - **Last Updated**: 2026-09-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AI Agent Demo [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](LICENSE) [![Platform](https://img.shields.io/badge/platform-Android-green.svg)](https://developer.android.com) [![Kotlin](https://img.shields.io/badge/kotlin-1.9-orange.svg)](https://kotlinlang.org) 基于 DeepSeek API 的 Android 手机助手(AI Agent)。你可以用中文跟它对话,它能自主决定调用哪个工具,帮你查位置、看设备信息、查天气、打开设置、发短信。 ## 界面预览 ## 功能特性 - **ReAct 模式 AI Agent**:大模型自主"思考 → 调用工具 → 观察结果 → 再思考",支持多轮工具调用循环 - **自然语言工具调用**(Function Calling): - `get_current_location` — 获取当前设备经纬度 - `get_device_info` — 获取设备型号、系统版本 - `get_weather` — 查询指定城市实时天气(Open-Meteo 免费 API) - `open_settings` — 打开系统设置页面 - `send_sms` — 发送短信 - **热词栏**:输入框上方展示服务端热词(B 站热搜公开接口),点击即可填入输入框 - **仿微信聊天交互**: - 聊天气泡长按弹出"复制 / 全选 / 收藏"菜单,支持拖动光标调整选区 - 菜单位置根据气泡在窗口中的位置智能定位(上半屏显示在选区下方、下半屏显示在选区上方) - 点击任意位置、滑动列表、按返回键均可收起菜单并取消选中 ## 技术栈 | 类别 | 技术 | |------|------| | 语言 | Kotlin + 协程 + Flow | | UI | Jetpack Compose (Material 3) | | 架构 | MVVM(ViewModel + StateFlow) | | 网络 | Retrofit + OkHttp + Gson | | AI | DeepSeek API(deepseek-chat) | | 权限 | Accompanist Permissions(运行时权限) | | 测试 | JUnit + MockWebServer | ## 项目结构 ``` app/src/main/java/com/prettyant/agentdemo/ ├── MainActivity.kt # 入口,组装依赖并注入 API Key ├── data/ # 数据层 │ ├── models/ # 网络数据模型(ChatModels / WeatherModels / HotWordModels 等) │ └── network/ # 网络客户端(Retrofit 接口 + object 合并在同一文件) │ ├── DeepSeekClient.kt # DeepSeek 对话 API │ ├── WeatherClient.kt # Open-Meteo 天气 API │ ├── HotWordClient.kt # B 站热搜 API │ └── RetrofitFactory.kt # Retrofit 统一构建工厂 ├── domain/ # 领域层 │ └── agent/ │ ├── AgentManager.kt # ReAct 循环核心,多轮工具调用 │ └── ToolExecutor.kt # 工具定义与执行(定位/设备/天气/设置/短信) └── ui/ # 界面层 ├── components/ # 聊天气泡、输入栏、热词栏、自定义文本选择菜单 ├── screens/ # ChatScreen └── viewmodel/ # ChatViewModel + ChatUiState ``` 分层约定:UI → ViewModel → AgentManager(领域层)→ 网络客户端(数据层)。 ## 快速开始 ### 1. 配置 API Key 在项目根目录的 `local.properties` 中添加 DeepSeek API Key(构建时由 Gradle 读入 `BuildConfig`,避免硬编码): ```properties DEEPSEEK_API_KEY=sk-xxxxxxxxxxxxxxxx ``` > API Key 申请地址:https://platform.deepseek.com/ ### 2. 构建运行 用 Android Studio 打开项目,等待 Gradle 同步完成后运行到设备或模拟器即可。 环境要求: - Android Studio(较新版本即可) - JDK 17+ - Android SDK 35(minSdk 24 / targetSdk 34) ### 3. 试试这些指令 | 指令 | 效果 | |------|------| | "我的位置在哪?" | 调用定位工具(需授权定位权限) | | "查看设备信息" | 显示手机型号与系统版本 | | "查一下上海的天气" | 调用 Open-Meteo 天气 API | | "打开设置" | 打开系统设置页面 | | "发短信给13800138000,内容是我已到达" | 调用短信工具(需授权短信权限) | ## 运行测试 网络层单元测试基于 MockWebServer,不依赖真实网络: ```bash ./gradlew :app:testDebugUnitTest ``` ## 对话流程(ReAct 循环) ``` 用户输入 → DeepSeek 思考 → 返回工具调用 → ToolExecutor 执行 ↑ ↓ └──────────── 结果回填给模型继续思考 ←──────────┘ (直到模型给出最终回答) ``` `AgentManager` 以 `Flow` 对外输出状态(Thinking / ToolCalling / Completed / Error),`ChatViewModel` 收集后更新消息列表。 ## 许可证 本项目采用 [Apache License 2.0](LICENSE)。 ## 注意事项 - 本项目为学习演示用途,热词接口使用 B 站公开热搜接口,无鉴权 - 短信功能调用系统短信工具,实际发送行为取决于设备权限与系统策略 - 请勿将 API Key 提交到仓库:`local.properties` 已在 `.gitignore` 中,Key 仅保存在本地