基于大模型实现的对话智能编程助手,支持多种大模型调用、工具集成和智能上下文管理。
- 自然语音对话: 支持自然语音对话编程
- 提示词自定义: 支持自定义提示词,修改prompts对应的文件即可
- 统一大模型接口: 支持 OpenAI、DeepSeek、Claude、Ollama
- 丰富工具生态: 文件操作、搜索发现、任务管理、系统执行等
- 智能上下文管理: 自动压缩、持久化存储
- 灵活提示词管理: 文件化存储,支持热更新
- 流式响应: 支持实时流式对话
- MCP协议支持: 可扩展工具集成
nala-coder/
├── cmd/ # 命令行入口
├── internal/ # 内部包
│ ├── agent/ # Agent核心调度层
│ ├── llm/ # 大模型调用封装
│ ├── tools/ # 工具引擎
│ ├── context/ # 上下文管理
│ └── interfaces/ # 用户交互接口
├── pkg/ # 公共包
│ ├── types/ # 类型定义
│ └── utils/ # 工具函数
├── prompts/ # 提示词文件
├── configs/ # 配置文件
├── web/ # Web界面
└── storage/ # 存储目录
- Go 1.24.5+
- 大模型API密钥(OpenAI、DeepSeek、Claude或本地Ollama)
- 克隆项目
git clone github.com/zboya/nala-coder
cd nala-coder- 安装使用
make install- 配置API密钥
# 编辑配置文件,设置你的API密钥
vi ~/.nala-coder/config.yaml- 运行服务
cd 你需要编辑代码的目录
nala-coder启动后会自动打开的页面,允许网页使用麦克风,唤醒小娜后就可以对话编程了。
NaLa Coder 将所有配置和数据文件统一存放在 ~/.nala-coder 目录下:
~/.nala-coder/
├── config.yaml # 主配置文件
├── storage/ # 数据存储目录
│ ├── sessions.db # 会话数据库(SQLite)
│ └── CODE_AGENT.md # 持久化上下文文件
├── logs/ # 日志文件目录
│ └── nala-coder.log # 应用日志
└── prompts/ # 提示词文件目录
├── en/ # 英文提示词
│ ├── system.md # 系统提示词
│ ├── compression.md # 压缩提示词
│ └── user_info.md # 用户信息提示词
└── ch/ # 中文提示词
├── system.md
├── compression.md
└── user_info.md
支持多种大模型提供商,可以同时配置多个:
llm:
default_provider: "deepseek" # 默认使用的提供商
openai:
api_key: "sk-xxx"
base_url: "https://api.openai.com/v1"
model: "gpt-4"
max_tokens: 4096
temperature: 0.3
deepseek:
api_key: "sk-xxx"
base_url: "https://api.deepseek.com"
model: "deepseek-chat"
# 更多配置...可以启用/禁用特定工具:
tools:
enabled_tools:
- "read" # 文件读取
- "write" # 文件写入
- "edit" # 文件编辑
- "bash" # 命令执行
# 更多工具...
timeouts:
bash: 120000 # 2分钟超时
web_fetch: 30000 # 30秒超时可以通过环境变量覆盖配置:
export OPENAI_API_KEY="your-key"
export LLM_DEFAULT_PROVIDER="openai"
export SERVER_PORT="8888"- read: 读取文件内容,支持分页
- write: 写入文件内容
- edit: 精确编辑文件特定部分
- multi_edit: 对同一文件进行多处编辑
- glob: 使用模式匹配查找文件
- grep: 在文件内容中搜索文本模式
- ls: 列出目录内容
- bash: 执行系统命令,支持超时控制
- web_search: 网络搜索(需要API支持)
- web_fetch: 获取网页内容
# 构建二进制文件
make build- 在
internal/tools/下创建新的工具文件 - 实现
ToolExecutor接口 - 在
engine.go中注册工具 - 更新配置文件中的
enabled_tools
- 在
prompts/目录下创建.md文件 - 使用Go模板语法支持动态内容
- 支持热重载,修改后立即生效
NaLa Coder 系统架构
┌─────────────────────────────────────────────────────────────────┐
│ 用户交互层 │
│ ┌─────────────┐ │
│ │ CLI/HTTP │ │
│ │ Interface │ │
│ └─────────────┘ │
└─────────────┬───────────────┬───────────────┬───────────────────┘
│ │ │
┌─────────────▼───────────────▼───────────────▼───────────────────┐
│ Agent核心调度层 │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ 主循环引擎 │◄────────┤ 消息队列 │ │
│ │ (AgentLoop) │ │ (AsyncQueue) │ │
│ └─────────────────┘ └─────────────────┘ │
└─────────────┬───────────────────────┬─────────────────────────────┘
│ │
┌─────────────▼───────────────────────▼─────────────────────────────┐
│ 工具执行与管理层 │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ ┌─────────────────┐│
│ │ 工具引擎 │ │ 并发控制 │ │ LLM调用 │ │ 上下文管理 ││
│ │(ToolEngine)│ │(Scheduler) │ │ (LLMClient)│ │(ContextManager) ││
│ └────────────┘ └────────────┘ └────────────┘ └─────────────────┘│
└─────────────┬─────────────────────────────────────────────────────┘
│
┌─────────────▼─────────────────────────────────────────────────────┐
│ 存储与持久化层 │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │短期记忆存储 │ │ 中期压缩历史 │ │ 长期持久存储 │ │状态缓存系统 │ │
│ │(Messages) │ │(Compressed) │ │(Persistence)│ │(StateCache) │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘ │
└───────────────────────────────────────────────────────────────────┘
- Fork 项目
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 打开 Pull Request
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
- 查看 Issues 获取帮助
