# aish2 **Repository Path**: lujunjian/aish2 ## Basic Information - **Project Name**: aish2 - **Description**: 基于AI的终端shell - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-17 - **Last Updated**: 2025-09-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AISH (AI Shell) 🚀 **AISH** 是一个基于 Go 语言开发的智能终端助手,采用 **ReAct (Reasoning and Acting)** 架构模式。用户可以通过自然语言描述任务目标,AI 智能体会自动分析、规划并执行系统操作来完成任务。 ![Go Version](https://img.shields.io/badge/Go-1.24.5-blue.svg) ![License](https://img.shields.io/badge/License-MIT-green.svg) ![Status](https://img.shields.io/badge/Status-Active-brightgreen.svg) ## ✨ 核心特性 ### 🧠 ReAct 智能架构 - **思考 → 行动 → 观察** 的循环模式 - 自动分解复杂任务为具体步骤 - 智能错误处理和策略调整 ### 💬 **全新:智能询问功能** - **主动询问**:当遇到模糊指令时,AI会主动询问获取更多信息 - **实时交互**:无缝的问答体验,支持多轮对话 - **上下文保持**:询问和回答完整融入对话历史 ### 🛠️ 丰富的工具集 - **命令执行**:跨平台shell命令执行 (Windows/Linux/macOS) - **文件操作**:安全的文件读写,支持大文件分段处理 - **系统监控**:实时系统状态检查和性能分析 ### 🛡️ 安全机制 - 危险操作用户确认 - 文件大小和路径安全检查 - 执行超时保护 - 跨会话记忆管理 ### 🎨 跨平台兼容性 - **Windows兼容性优化**:使用 `fatih/color` 库确保在 Windows 系统上的完美色彩支持 - **自动颜色检测**:根据终端能力自动启用/禁用彩色输出 - **多终端支持**:兼容 PowerShell、CMD、Terminal 等各种终端环境 ## 🚀 快速开始 ### 环境要求 - Go 1.24.5+ - OpenAI API Key 或 DeepSeek API Key(支持OpenAI兼容API的任何模型) ### 安装配置 1. **克隆项目** ```bash git clone https://github.com/dean2027/aish.git cd aish ``` 2. **安装依赖** ```bash go mod tidy ``` 3. **其它安装方式** ```bash go install -v github.com/dean2027/aish.git@latest ``` 4. **配置 API 密钥** 有三种配置方式,按优先级排序: #### 方式1:配置文件(推荐) ```bash # 创建默认配置文件 aish config init # 编辑配置文件 vi ~/.aish/conf.yml # 设置你的 API 密钥 api_key: "your-api-key-here" base_url: "https://api.deepseek.com/v1" model: "deepseek-chat" ``` #### 方式2:环境变量 ```bash export OPENAI_API_KEY="your-api-key" export OPENAI_BASE_URL="https://api.deepseek.com/v1" # 可选,默认为DeepSeek API export OPENAI_MODEL="deepseek-chat" # 可选,默认为deepseek-chat # 或者使用OpenAI API export OPENAI_BASE_URL="https://api.openai.com/v1" export OPENAI_MODEL="gpt-4" ``` #### 方式3:命令行参数 ```bash aish --api-key "your-api-key" --model "gpt-4" ``` 4. **编译运行** ```bash # 基础编译 go build -o aish cmd/main.go # 运行 ./aish # 或直接运行 go run cmd/main.go # 使用Makefile(推荐) make build # 编译当前平台 make dev # 开发模式编译(带race检测) make quick # 快速编译(不优化) # 跨平台编译 make windows # Windows平台 make linux # Linux平台 make macos # macOS平台 make all # 所有平台 ``` ## 💡 使用示例 ### 基础任务执行 ```bash 用户输入> 帮我查看当前目录下的文件 AI自动执行: ls -la 命令 显示结果: 文件列表... ``` ### 🆕 智能询问交互 ```bash 用户输入> 帮我处理配置文件 [ASK] AI询问: 您想要处理哪个配置文件?请提供文件路径和处理方式(如读取、修改、删除等) 请回答> 读取 config/app.json 的内容 [用户回答] 读取 config/app.json 的内容 [ACTION] 使用 read_file 工具读取文件... [OK] 文件内容: {...} ``` ### 复杂任务分解 ```bash 用户输入> 创建一个Go项目的基础结构 AI思考: 需要创建目录结构和基础文件 AI行动: 创建项目目录 → 生成go.mod → 创建main.go → 添加基础代码 任务完成: Go项目结构创建成功 ``` ## 🎯 智能询问功能详解 ### 何时AI会询问? - **指令模糊**:`"处理文件"` → 询问具体文件和处理方式 - **缺少参数**:`"创建配置"` → 询问文件名和内容 - **多种选择**:`"优化系统"` → 询问具体优化方向 - **风险确认**:删除操作前确认细节 ### 问答示例 ```bash # 模糊指令示例 用户: "帮我备份重要文件" AI: 请告诉我需要备份哪些文件?备份到什么位置? 用户: "备份 ~/Documents 到 /backup 目录" AI: 开始执行备份操作... # 参数缺失示例 用户: "写一个脚本" AI: 您想要创建什么功能的脚本?使用哪种语言?请详细说明需求 用户: "用bash写一个自动清理日志的脚本" AI: 开始创建bash清理脚本... ``` ## ⚙️ 命令行选项 ### 基本命令 ```bash # 启动 AISH ./aish [选项] # 查看帮助 ./aish --help # 查看版本 ./aish --version ``` ### 配置管理命令 ```bash # 初始化默认配置文件 ./aish config init # 强制覆盖已存在的配置文件 ./aish config init --force # 查看当前有效配置 ./aish config show # 使用指定配置文件 ./aish --config /path/to/config.yml ``` ### 启动选项 ```bash 选项: --config, -c 配置文件路径 (默认: ~/.aish/conf.yml) --api-key, -k OpenAI API密钥 --base-url, -u API基础URL (默认: https://api.deepseek.com/v1) --model, -m AI模型 (默认: deepseek-chat) --max-iterations 最大循环次数 (默认: 50) --max-history 历史记录数量 (默认: 10) --command-timeout 命令超时时间/秒 (默认: 300) --reasoning-timeout AI推理超时/秒 (默认: 120) --skip-confirm, -y 跳过确认提示 (危险) --help, -h 显示帮助 --version, -v 显示版本 ``` ### 配置优先级 配置采用分层系统,优先级从高到低: 1. **命令行参数** (最高优先级) 2. **环境变量** 3. **配置文件** 4. **默认值** (最低优先级) ## 🏗️ 架构概览 ### 整体架构图 ``` ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ 👤 用户 │ -> │ 💻 CLI接口 │ -> │ 🔄 执行引擎 │ │ 自然语言输入 │ │ 命令行交互 │ │ ReAct循环 │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ ▼ ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ 🛠️ 工具系统 │ <- │ 🤖 ReAct智能体 │ -> │ 🧠 AI引擎 │ │ 命令/文件操作 │ │ 思考→行动→观察 │ │ OpenAI API │ └─────────────────┘ └──────────────────┘ └─────────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐ │ 📝 会话管理 │ │ 📋 提示构建器 │ │ 🔍 响应解析器 │ │ 历史记录维护 │ │ 系统提示生成 │ │ JSON提取器 │ └─────────────────┘ └──────────────────┘ └─────────────────┘ ``` ### 📁 模块化架构 最新的v1.2.0采用了模块化架构设计,代码结构更加清晰: ``` pkg/ ├── agent/ # 🤖 ReAct智能体核心 │ ├── agent.go # 智能体管理 │ ├── engine.go # 执行引擎 │ ├── session.go # 会话管理 │ └── ... # 其他核心组件 ├── config/ # ⚙️ 配置管理系统 │ └── config.go # 完整配置支持 ├── tools/ # 🛠️ 工具系统 │ ├── tool.go # 工具接口 │ ├── command_executor.go # 命令执行 │ └── ... # 其他工具 ├── ui/ # 🎨 用户界面 │ └── banner.go # 启动横幅和显示 ├── cli/ # 📋 命令行处理 │ ├── commands.go # 命令定义 │ └── config_merger.go # 配置合并 ├── app/ # 📱 应用程序管理 │ ├── signal.go # 信号处理 │ └── readline.go # 输入处理 └── version/ # 🏷️ 版本管理 └── version.go # 动态版本信息 ``` ### 🔄 ReAct处理流程 ``` 用户输入 → 创建会话 → 构建系统提示 → AI推理 → 解析响应 ↑ │ │ ▼ 保存历史 ← 任务完成 ← 观察结果 ← 执行工具 ← 选择行动 ``` ### 核心组件 #### 1. 智能体层 (`pkg/agent/`) 🤖 - **ReAct Agent** (`agent.go`):智能体核心,管理推理循环和工具注册 - **执行引擎** (`engine.go`):处理ReAct循环和用户交互的主引擎 - **会话管理** (`session.go`):维护单次会话的状态和历史 - **步骤模型** (`step.go`):定义ReAct循环的步骤类型和状态 #### 2. 配置管理层 (`pkg/config/`) ⚙️ - **配置核心** (`config.go`):完整的配置文件支持和分层配置管理 - **YAML支持**:支持 `~/.aish/conf.yml` 配置文件 - **优先级管理**:CLI参数 > 环境变量 > 配置文件 > 默认值 #### 3. 用户界面层 (`pkg/ui/`) 🎨 - **启动横幅** (`banner.go`):跨平台兼容的启动界面显示 - **图标管理**:Windows/Unix系统的智能图标适配 - **模块化显示**:可配置的用户界面组件 #### 4. 命令行处理 (`pkg/cli/`) 📋 - **命令定义** (`commands.go`):模块化的CLI命令结构 - **配置合并** (`config_merger.go`):统一的配置参数处理逻辑 - **类型安全**:分类型的参数验证和转换 #### 5. 应用管理 (`pkg/app/`) 📱 - **信号处理** (`signal.go`):统一的进程信号管理和优雅退出 - **输入处理** (`readline.go`):可配置的用户输入和历史管理 #### 6. 版本管理 (`pkg/version/`) 🏷️ - **动态版本** (`version.go`):自动获取构建信息和Git版本 - **构建信息**:完整的编译时间和commit信息展示 #### 7. AI处理层 - **提示构建器** (`prompt.go`):构建系统提示词和解析AI响应 - **JSON提取器** (`extractors.go`):从AI响应中提取JSON对象 - **OpenAI集成**:使用官方Go客户端进行API调用 #### 8. 工具系统 (`pkg/tools/`) 🛠️ - **工具接口** (`tool.go`):统一的工具接口定义 - **命令执行器** (`command_executor.go`):跨平台shell命令执行 - **文件读写器** (`file_reader.go`, `file_writer.go`):安全的文件操作 - **网络搜索** (`web_search.go`):Web搜索功能支持 #### 9. 安全与控制 🛡️ - **用户确认机制**:危险操作的安全检查 - **超时保护**:防止长时间运行的操作 - **资源限制**:文件大小和访问权限控制 - **跨平台适配**:自动检测系统类型并适配 ## 🔧 开发和扩展 ### 添加新工具 ```go // 1. 实现Tool接口 type CustomTool struct{} func (ct *CustomTool) Name() string { return "custom_tool" } func (ct *CustomTool) Description() string { return "工具描述" } func (ct *CustomTool) Execute(args map[string]interface{}) (string, error) { // 实现逻辑 return "结果", nil } // 2. 注册工具 agent.RegisterTool(&CustomTool{}) ``` ### 🔨 构建和编译 AISH提供了完整的跨平台编译系统,支持多种构建方式和开发工具。 #### 🚀 快速开始 ```bash # 最简单的构建方式 make build # 编译当前平台 make run # 直接运行 # 开发模式(推荐) make dev # 开发模式编译(带race检测) make quick # 快速编译(不优化,适合调试) ``` #### 🌍 跨平台编译 ```bash # 一键编译所有平台 make all # 编译所有支持的平台和架构 # 编译特定平台 make windows # Windows (amd64 + 386) make linux # Linux (amd64 + 386 + arm64) make macos # macOS (Intel + Apple Silicon) # 使用构建脚本(备选方案) ./build.sh all # Unix/Linux/macOS build.bat all # Windows ``` #### 📊 代码质量控制 ```bash # 代码检查 make fmt # 格式化代码 make vet # 静态分析 make lint # 综合检查(fmt + vet) # 测试相关 make test # 运行测试 make test-coverage # 生成测试覆盖率报告 # 依赖管理 make deps # 更新和验证依赖 ``` #### 🎯 发布管理 ```bash # 系统安装 make install # 安装到 GOPATH/bin # 发布打包 make release # 创建跨平台发布包 # 清理操作 make clean # 清理构建文件 make clean-all # 深度清理(包括Go缓存) # 环境检查 make check-env # 检查构建环境 make version # 显示版本信息 make info # 显示项目信息 ``` #### 📁 构建输出 编译生成的文件位于 `dist/` 目录: ``` dist/ ├── darwin-amd64/ # macOS Intel │ └── aish ├── darwin-arm64/ # macOS Apple Silicon │ └── aish ├── linux-386/ # Linux 32位 │ └── aish ├── linux-amd64/ # Linux 64位 │ └── aish ├── linux-arm64/ # Linux ARM64 │ └── aish ├── windows-386/ # Windows 32位 │ └── aish.exe └── windows-amd64/ # Windows 64位 └── aish.exe ``` #### ⚙️ 构建配置 项目支持以下构建选项: - **优化编译**:使用 `-ldflags="-s -w"` 减少二进制文件大小 - **竞态检测**:开发模式启用 `-race` 标志 - **路径修剪**:使用 `-trimpath` 确保可重现的构建 - **版本信息**:自动从git标签获取版本号 #### 🎨 Windows兼容性优化 - **智能显示**: Windows自动使用ASCII字符替代emoji - **完美兼容**: 支持CMD、PowerShell、Windows Terminal - **自动适配**: 无需手动配置,自动检测系统类型 - **视觉一致**: 保持功能标识清晰美观 ## 🤝 交互命令 在AISH运行时可用的命令: - `输入任务描述` - 开始AI执行任务 - `/clear` 或 `/cls` - 清除历史记忆 - `/exit` 或 `/quit` - 退出程序 ## 📋 配置管理 AISH 提供了完整的配置管理功能,支持配置文件、环境变量和命令行参数的分层配置。 ### 快速配置 ```bash # 1. 初始化配置文件 aish config init # 2. 编辑配置文件,设置你的 API 密钥 vi ~/.aish/conf.yml # 3. 查看当前配置 aish config show # 4. 启动 AISH aish ``` ### 配置文件位置 - **Linux/macOS**: `~/.aish/conf.yml` - **Windows**: `%USERPROFILE%\.aish\conf.yml` 详细配置说明请参考 [配置管理文档](docs/CONFIG.md)。 ### 🆕 配置管理命令 v1.2.0新增了完整的配置管理命令: ```bash # 初始化配置文件 aish config init # 创建默认配置 aish config init --force # 强制覆盖已存在的配置 aish config init --config custom.yml # 指定配置文件路径 # 查看配置信息 aish config show # 显示当前有效配置 aish config show --config custom.yml # 显示指定配置文件 ``` ### ⚙️ 配置优先级 AISH采用分层配置系统,让您可以灵活地管理配置: 1. **命令行参数** - 最高优先级,临时覆盖 2. **环境变量** - 中等优先级,适合CI/CD环境 3. **配置文件** - 低优先级,持久化配置 4. **默认值** - 最低优先级,保证可用性 **示例:** ```bash # 配置文件中设置 model: "deepseek-chat" # 环境变量覆盖 export OPENAI_MODEL="gpt-4" # 命令行参数最终覆盖 aish --model "gpt-3.5-turbo" # 最终使用 gpt-3.5-turbo ``` ## 🛡️ 安全特性 - **用户确认机制**:危险操作需要用户明确确认 - **文件访问限制**:最大1MB文件,防止系统文件误操作 - **执行超时保护**:防止长时间运行的命令 - **路径安全检查**:防止访问敏感系统目录 - **跨平台兼容**:自动处理不同系统的命令和编码 ## 📋 使用场景 ### 日常管理 - 📁 **文件操作**:`"整理桌面文件,按类型分类"` - 🔍 **系统监控**:`"检查系统资源使用情况"` - 📝 **文档处理**:`"分析日志文件并生成报告"` ### 开发辅助 - 🏗️ **项目初始化**:`"创建React项目基础结构"` - 🔧 **环境配置**:`"配置Node.js开发环境"` - 📊 **代码分析**:`"检查代码质量并给出建议"` ### 系统运维 - 🔄 **自动化任务**:`"定期清理临时文件"` - 📈 **性能优化**:`"优化系统启动速度"` - 🛠️ **故障排查**:`"诊断网络连接问题"` ## 🤖 AI模型支持 支持OpenAI兼容API的各种模型: - **DeepSeek** (默认): `deepseek-chat` - 性价比高,推理能力强 - **OpenAI**: `gpt-4`, `gpt-3.5-turbo` - 最佳性能,复杂推理 - **其他**: 任何OpenAI兼容API的模型 默认配置使用DeepSeek API,您可以通过环境变量切换到其他API提供商。 ## 📚 文档资源 ### 详细文档 - **[DESIGN.md](docs/DESIGN.md)**:项目架构设计文档,包含详细的系统设计和流程图 - **[CONFIG.md](docs/CONFIG.md)**:📋 配置管理完整指南,包含所有配置选项说明 - **[CLAUDE.md](CLAUDE.md)**:AI代码助手使用指南,开发者参考文档 - **Makefile**:完整的构建系统配置和命令参考 ### 技术细节 - **ReAct架构实现**:参见 `pkg/agent/` 目录的详细实现 - **配置管理系统**:参见 `pkg/config/` 目录的分层配置实现 - **模块化架构**:参见 `pkg/ui/`, `pkg/cli/`, `pkg/app/` 等新模块 - **工具系统设计**:参见 `pkg/tools/` 目录的扩展接口 - **跨平台适配**:查看构建脚本了解多平台编译细节 ### 🚀 快速链接 - [⚡ 快速开始](#-快速开始) - 立即上手使用 - [📋 配置管理](#-配置管理) - 完整配置指南 - [🏗️ 架构概览](#️-架构概览) - 了解系统设计 - [🔧 开发扩展](#-开发和扩展) - 自定义工具开发 ### 核心创新点 #### 🤖 智能ReAct架构 - **思考-行动-观察循环**:模拟人类解决问题的思维过程 - **自适应策略调整**:根据执行结果动态调整解决方案 - **错误恢复机制**:智能识别失败原因并重新规划 #### ⚙️ 企业级配置管理 - **分层配置系统**:CLI参数 > 环境变量 > 配置文件 > 默认值 - **YAML配置文件**:支持 `~/.aish/conf.yml` 完整配置 - **配置管理命令**:`aish config init/show` 便捷配置管理 - **安全性保护**:API密钥自动掩码显示 #### 🏗️ 模块化架构设计 - **代码分离**:主文件从527行优化到150行,减少71% - **职责清晰**:8个专门模块,单一职责原则 - **易于测试**:小函数设计,单元测试友好 - **高可维护**:模块独立开发,影响范围可控 #### 🔄 会话状态管理 - **跨会话记忆**:智能保留重要的对话上下文 - **历史优化**:自动管理消息历史,避免token限制 - **状态持久化**:完整的会话生命周期管理 #### 🛠️ 可扩展工具系统 - **插件化架构**:统一的工具接口,易于扩展 - **安全执行环境**:完善的权限控制和资源限制 - **跨平台兼容**:自动适配不同操作系统的命令语法 #### 🎨 智能用户界面 - **跨平台适配**:Windows/Unix图标智能选择 - **动态版本显示**:自动获取Git commit和构建信息 - **模块化UI**:可配置的界面显示组件 ## 📄 许可证 本项目采用 MIT 许可证 - 查看 [LICENSE](LICENSE) 文件了解详情。 ## 🙋‍♂️ 支持 如果您在使用过程中遇到问题或有功能建议,欢迎: - 提交 Issue - 创建 Pull Request - 参与讨论 --- --- ## 📊 项目统计 | 指标 | v1.1.0 | v1.2.0 | 改善 | |------|---------|---------|------| | **主文件行数** | 527行 | 218行 | ⬇️ **58%** | | **模块数量** | 3个包 | 8个包 | ⬆️ **模块化** | | **配置方式** | 环境变量 | 4层配置 | ⬆️ **灵活性** | | **可维护性** | 普通 | 优秀 | ⬆️ **大幅提升** | | **扩展性** | 有限 | 高度可扩展 | ⬆️ **架构优化** | ## 💫 为什么选择 AISH? - 🎯 **智能理解**:基于ReAct架构,真正理解您的意图 - ⚡ **即用即配**:一键配置,分钟级上手 - 🔒 **安全可靠**:企业级安全机制,保护您的系统 - 🌍 **跨平台**:完美支持Windows/Linux/macOS - 🔧 **高度可扩展**:模块化设计,轻松添加新功能 - 📈 **持续进化**:活跃的开发和社区支持 --- **让AI成为您的智能终端助手!** 🎉 *AISH v1.2.0 - 企业级架构,智能化体验,现在就开始您的AI终端之旅!*