main
ExCLI - Agent CLI 框架
一个具有更好记忆能力、输出能力和工具使用能力的 Agent CLI 框架。
项目目标
这个 Agent CLI 解决什么问题:
- 更智能的上下文理解:通过短期和长期记忆记住用户偏好和项目背景
- 结构化输出:根据任务类型自动选择最佳输出风格
- 高效工具集成:通过统一的工具接口完成文件、搜索、执行等任务
适合场景:
- 个人 AI 助手
- 代码开发和调试
- 文档查询和管理
- 自动化任务执行
核心能力:
- 记忆系统:自动提取和检索长期记忆
- 输出风格:自动判断简洁/详细/技术型/写作型
- 工具调用:智能选择和执行工具
技术选型
- 语言:Node.js 18+
- CLI:原生 readline + Chalk + Ora
- 数据存储:JSON 文件存储
- 模型调用:OpenAI API (兼容任何 OpenAI 兼容 API)
- 日志:Pino
- 配置:环境变量 + .env
安装
# 克隆项目
cd excli
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env
# 编辑 .env 配置 OPENAI_API_KEY
使用
# 直接运行
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 添加新的工具类:
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
再见!
注意事项
- 首次运行需要配置
OPENAI_API_KEY - 工具执行可能会根据命令不同而有风险,请谨慎使用
- 敏感信息不会写入长期记忆
- 模型调用可能产生费用,请注意使用量
License
Apache
Description
Languages
JavaScript
98.8%
Shell
1.2%