Files
gcdsfh145 1667a3bfac nee
2026-05-03 07:37:31 +08:00

181 lines
4.0 KiB
Markdown
Raw Permalink 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.
# ExCLI - Agent CLI 框架
一个具有更好记忆能力、输出能力和工具使用能力的 Agent CLI 框架。
## 项目目标
这个 Agent CLI 解决什么问题:
- 更智能的上下文理解:通过短期和长期记忆记住用户偏好和项目背景
- 结构化输出:根据任务类型自动选择最佳输出风格
- 高效工具集成:通过统一的工具接口完成文件、搜索、执行等任务
适合场景:
- 个人 AI 助手
- 代码开发和调试
- 文档查询和管理
- 自动化任务执行
核心能力:
- 记忆系统:自动提取和检索长期记忆
- 输出风格:自动判断简洁/详细/技术型/写作型
- 工具调用:智能选择和执行工具
## 技术选型
- 语言:Node.js 18+
- CLI:原生 readline + Chalk + Ora
- 数据存储:JSON 文件存储
- 模型调用:OpenAI API (兼容任何 OpenAI 兼容 API)
- 日志:Pino
- 配置:环境变量 + .env
## 安装
```bash
# 克隆项目
cd excli
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env
# 编辑 .env 配置 OPENAI_API_KEY
```
## 使用
```bash
# 直接运行
node bin/cli.js
# 或使用启动脚本
chmod +x start.sh
./start.sh
```
## CLI 命令
- `help` - 显示帮助
- `clear` - 清屏
- `memory` - 查看记忆状态
- `preferences` - 查看用户偏好
- `tools` - 查看可用工具
- `stats` - 查看统计信息
- `quit/exit` - 退出
## 项目结构
```
excli/
├── bin/
│ └── cli.js # CLI 入口
├── src/
│ ├── index.js # 主程序入口
│ ├── config/ # 配置模块
│ ├── core/ # 核心模块
│ │ ├── agent.js # Agent 主循环
│ │ └── model.js # 模型适配层
│ ├── memory/ # 记忆模块
│ ├── prompts/ # Prompt 模板
│ ├── tools/ # 工具模块
│ └── utils/ # 工具函数
├── data/ # 数据目录
│ ├── memory/ # 长期记忆
│ └── sessions/ # 会话数据
├── logs/ # 日志目录
├── bin/ # 可执行脚本
├── package.json
└── .env.example
```
## 功能说明
### 记忆系统
- **短期记忆**:保存当前会话上下文,包含用户输入、助手输出、工具结果
- **长期记忆**:JSON 文件持久化存储,区分敏感信息,自动提取
- **记忆提取**:每隔 N 轮对话自动提取重要信息
### 工具系统
- `read_file` - 读取文件
- `write_file` - 写入文件
- `list_files` - 列出文件
- `run_shell` - 执行命令
- `search_text` - 搜索文本
### 输出风格
根据任务类型自动选择:
- 简洁模式:简短回答
- 详细模式:完整解释
- 技术型:代码和命令
- 写作型:文档和说明
## 配置
主要环境变量:
- `OPENAI_API_KEY` - OpenAI API 密钥
- `OPENAI_BASE_URL` - API 地址(默认 OpenAI
- `OPENAI_MODEL` - 模型名称
- `AGENT_TEMPERATURE` - 温度参数
- `MEMORY_DB_PATH` - 记忆数据库路径
- `LOG_LEVEL` - 日志级别
## 扩展
### 添加新工具
`src/tools/index.js` 添加新的工具类:
```javascript
export class MyTool extends BaseTool {
constructor() {
super('my_tool', '工具描述', {
// JSON Schema
});
}
async execute(args) {
// 实现逻辑
return { success: true, result: '...' };
}
}
```
### 修改 System Prompt
`src/prompts/index.js` 修改 `SYSTEM_PROMPT`
## 示例
运行示例:
```
$ ./start.sh
欢迎使用 ExCLI!你可以用自然语言和 AI 交互,输入 help 查看命令帮助。
excli> 帮助
# 显示帮助...
excli> 列出当前目录的 js 文件
# AI 处理并返回结果...
excli> memory
# 显示当前记忆状态...
excli> quit
再见!
```
## 注意事项
1. 首次运行需要配置 `OPENAI_API_KEY`
2. 工具执行可能会根据命令不同而有风险,请谨慎使用
3. 敏感信息不会写入长期记忆
4. 模型调用可能产生费用,请注意使用量
## License
Apache