# localBot **Repository Path**: ereddate2017/local-bot ## Basic Information - **Project Name**: localBot - **Description**: LocalBot 是一个开源的 AI 智能体框架,可在您的设备上本地运行,优先考虑数据隐私并提供广泛的技能支持。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-17 - **Last Updated**: 2026-03-01 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # LocalBot JavaScript 实现 LocalBot 是一个开源的 AI 智能体框架,可在您的设备上本地运行,优先考虑数据隐私并提供广泛的技能支持。 [English](README.md) | 简体中文 ## 功能特性 - **本地化运行**: 在本地机器上运行,无需依赖云服务 - **技能系统**: 可扩展的技能框架,支持各种任务 - **双内存系统**: 使用 Markdown 存储的短期和长期记忆 - **多种界面**: 包含命令行界面和 Web 界面 - **网关系统**: 处理与外部系统的通信 - **多模型支持**: 支持阿里云、OpenAI、Anthropic、Google 等 16+ 种 AI 提供商 - **技能配置**: 类似 MCP 的技能配置系统,每个技能可独立配置 - **热重载**: 技能支持热重载,无需重启即可更新 - **上下文理解**: AI 能够理解多轮对话的历史上下文 - **按需技能安装**: 启动时不自动下载所有技能,只在需要时安装 - **自动技能发现**: AI 分析任务时自动识别并安装缺失的技能 - **动态配置输入**: 当技能缺少必要配置时,自动弹出配置对话框 - **配置持久化**: 用户提交的配置自动保存到 config.json ## 安装 ### 前提条件 - Node.js (v14 或更高版本) - npm ### 安装步骤 1. 克隆仓库 ```bash git clone cd localbot-js ``` 2. 安装依赖 ```bash npm install ``` 3. 启动 LocalBot ```bash npm start ``` ## 项目结构 ``` localbot-js/ ├── src/ │ ├── ai/ # AI 提供商管理 │ ├── core/ # 核心运行时和网关 │ ├── skills/ # 技能系统和技能管理 │ ├── memory/ # 记忆系统 │ ├── interface/ # 用户界面 │ ├── config/ # 配置管理 │ ├── task/ # 任务处理(分析、分解、递归处理) │ ├── web/ # Web 服务器 │ └── utils/ # 工具函数 ├── skills/ # 本地技能目录 ├── memory/ # 长期记忆存储 ├── config.json # 配置文件 ├── package.json # 项目配置 ├── README.md # 英文文档 ├── README.zh-CN.md # 中文文档 └── USAGE.md # 使用指南 ``` ## 核心组件 1. **LocalBot**: 主运行时类 2. **Gateway**: 处理与外部系统的通信 3. **SkillManager**: 管理技能加载和热重载 4. **MemoryManager**: 管理短期和长期记忆 5. **InterfaceManager**: 管理用户界面 6. **ConfigManager**: 管理配置持久化 7. **AIProviderManager**: 管理多个 AI 提供商 8. **TaskAnalyzer**: 分析任务复杂度 9. **TaskDecomposer**: 分解复杂任务 10. **RecursiveProcessor**: 递归处理子任务 ## 新功能详解 ### 上下文理解 LocalBot 现在支持完整的多轮对话上下文理解: - AI 在处理消息时会自动包含历史对话记录 - 支持最多 50 条历史消息作为上下文 - 对话历史以 Markdown 格式存储,便于查看和编辑 - 每个会话有独立的 ID 和存储文件 - **智能压缩**:当对话超过 10 条消息或 2000 tokens 时,自动将旧消息压缩为摘要 - **多次压缩支持**:压缩可多次触发,始终保留最近的 8 条消息 - **上下文优化**:压缩后的摘要作为上下文传递给 AI,减少 token 使用同时保留关键信息 ### 按需技能安装 为了避免启动时自动下载 1000+ 技能,LocalBot 采用按需安装策略: - 启动时只加载已安装的本地技能 - 远程技能列表被缓存但不自动下载 - 当 AI 分析任务发现需要某个技能时,自动从远程源安装 - 技能安装后立即生效,无需重启 ### 自动技能发现 AI 在处理用户需求时会自动: 1. 分析任务需要哪些技能 2. 检查本地是否已安装所需技能 3. 从远程源自动下载并安装缺失的技能 4. 重新分析任务(因为现在有新技能可用了) 5. 执行任务 ### 动态配置输入 当技能缺少必要的配置参数时: 1. AI 自动检测缺失的配置 2. 前端弹出动态配置对话框 3. 用户输入所需参数 4. 配置自动保存到 config.json 5. 任务自动重试 ### 配置持久化 - 用户提交的配置自动保存 - 配置按技能分组存储 - 支持敏感信息标记(secret) - 配置可以在 Web 界面中查看和修改 ## 支持的 AI 提供商 - **OpenAI** - GPT-4, GPT-3.5 - **Anthropic** - Claude 系列 - **Google** - Gemini 系列 - **阿里云** - 通义千问系列 - **Azure OpenAI** - Azure 托管的 OpenAI 模型 - **Cohere** - Command 系列 - **Mistral AI** - Mistral 系列 - **深度求索** - DeepSeek 系列 - **Groq** - Llama 系列高速推理 - **Together AI** - 开源模型聚合 - **OpenRouter** - 多模型路由 - **百度文心一言** - **智谱 AI** - ChatGLM 系列 - **月之暗面** - Kimi 系列 - **字节豆包** - **Ollama** - 本地模型支持 ## 内置技能 ### 基础技能 - **HelloSkill**: 响应问候语 - **TimeSkill**: 告诉当前时间 - **WeatherSkill**: 提供天气信息 - **LocationSkill**: 提供位置信息 ### 文件与代码 - **FileManager**: 文件读写、目录管理 - **CodeInterpreter**: 代码执行与解释 - **Git**: Git 操作支持 - **TerminalPro**: 终端命令执行 ### 内容处理 - **Search**: 多搜索引擎集成(百度、Bing、Google、知乎等) - **Summarize**: 文本摘要 - **Markdown**: Markdown 格式处理 ### 服装相关 - **ClothingAnalysisSkill**: 服装分析 - **ClothingRecommendationSkill**: 服装推荐 ## 技能配置系统 每个技能都可以定义自己的配置 Schema,类似 MCP(Model Context Protocol): ```javascript class MySkill extends Skill { getConfigSchema() { return { apiKey: { type: 'string', title: 'API Key', description: '服务的 API 密钥', default: '', required: true, secret: true // 敏感信息,不在界面显示 }, timeout: { type: 'number', title: '超时时间 (ms)', description: '请求超时时间', default: 30000, required: false, min: 1000, max: 120000 }, engine: { type: 'enum', title: '搜索引擎', description: '选择默认搜索引擎', default: 'baidu', options: [ { value: 'baidu', label: '百度' }, { value: 'google', label: 'Google' } ] } }; } } ``` ### 配置 API | 方法 | 路径 | 说明 | |------|------|------| | GET | `/api/skills` | 获取所有技能列表 | | GET | `/api/skills/:name` | 获取单个技能详情 | | GET | `/api/skills/:name/schema` | 获取技能配置 Schema | | GET | `/api/skills/:name/config` | 获取技能配置 | | PUT | `/api/skills/:name/config` | 更新技能配置 | | PATCH | `/api/skills/:name/config/:key` | 更新单个配置项 | | DELETE | `/api/skills/:name/config` | 重置技能配置 | ## 配置说明 LocalBot 使用 `.env` 文件进行配置。`config.json` 文件用于存储技能配置和运行时数据。 ### .env 文件配置 1. 基于 `.env.example` 模板创建 `.env` 文件 2. 使用您的配置更新环境变量 ```bash # 复制示例文件 cp .env.example .env # 编辑 .env 文件 ``` ### API 密钥配置 配置您要使用的 AI 提供商的 API 密钥: ```env # 阿里云 ALIYUN_API_KEY=your-aliyun-api-key # OpenAI OPENAI_API_KEY=your-openai-api-key # Anthropic ANTHROPIC_API_KEY=your-anthropic-api-key # 其他提供商... ``` ### 可选配置 ```env # 记忆配置 MEMORY_COMPACTION_THRESHOLD=100 # 界面配置 COMMAND_LINE_ENABLED=true # 网关配置 GATEWAY_PORT=3000 # Web 服务器配置 WEB_PORT=3000 ``` ## 记忆系统 LocalBot 使用双记忆系统: - **短期记忆**: 在内存中存储最近的消息 - **长期记忆**: 在 `memory` 目录中以 Markdown 文件形式存储压缩后的消息 ## Web 界面 LocalBot 提供 Web 界面进行交互: 1. 启动后访问 `http://localhost:3000` 2. 支持实时对话 3. 支持历史记录查看和切换 4. 支持 AI 提供商切换 5. 支持消息复制功能 ## 添加自定义技能 1. 在 `skills/` 目录下创建新文件夹 2. 创建 `index.js` 文件,继承 `Skill` 基类 3. 实现 `canHandle()` 和 `handle()` 方法 4. 可选:实现 `getConfigSchema()` 定义配置 示例: ```javascript const Skill = require('../../src/skills/Skill'); class MySkill extends Skill { constructor(localbot) { super(localbot); this.name = 'MySkill'; this.description = '我的自定义技能'; } async canHandle(message) { return message.includes('关键词'); } async handle(message) { return '处理结果'; } } module.exports = MySkill; ``` 更多详情请参阅 [USAGE.md](USAGE.md)。 ## 贡献 欢迎贡献!请随时提交 Pull Request。 ## 许可证 MIT 许可证