# 嘉陵江-code (Jialing Code)

🖥️ 终端 AI 编程助手 — 支持 22+ 大模型厂商,默认本地 Ollama 零配置启动

快速开始模型厂商功能特性架构配置FAQ

--- ## 简介 **嘉陵江-code** 是一个基于终端的 AI 编程助手 CLI 工具,fork 自 Anthropic Claude Code 并进行了深度改造,核心目标是: - **多模型支持**:不再绑定 Anthropic 单一厂商,通过 OpenAI 兼容接口统一接入 22+ 大模型厂商 - **本地优先**:默认使用本地 Ollama,无需 API Key、无需联网、零配置即可启动 - **保留核心能力**:完整的 REPL 交互、工具系统、权限管理、MCP 协议支持 - **国内厂商友好**:深度适配 DeepSeek、通义千问、智谱、月之暗面、豆包等国内主流大模型 ``` $ jialing-code ╭──────────────────────────────────────╮ │ 嘉陵江-code v1.3.14 │ │ Provider: Ollama (qwen3.5:35b) │ │ Type /help for commands │ ╰──────────────────────────────────────╯ > ``` ## 快速开始 ### 环境要求 - [Bun](https://bun.sh/) >= 1.3.11(**必须最新版本**,旧版有兼容性问题,请先 `bun upgrade`) - (可选)[Ollama](https://ollama.com/) — 本地模型运行时 - (可选)任意云端大模型的 API Key ### 安装与运行 ```bash # 1. 克隆仓库 git clone https://github.com/claude-code-best/claude-code.git cd claude-code # 2. 安装依赖 bun install # 3. 开发模式运行(看到版本号 888 说明启动成功) bun run dev # 4. 构建 bun run build # 5. 构建后运行(Bun 或 Node.js 均可) bun dist/cli.js node dist/cli.js ``` ### 全局安装(可选) 构建后可以发布到私有 npm 源,或直接全局链接: ```bash bun run build bun link # 全局可用 jialing-code / jl 命令 ``` ### 首次运行 首次运行会进入 **交互式配置向导**,引导你选择模型厂商、填写 API Key、选择模型。也可以通过环境变量预先配置: ```bash # 方式一:使用本地 Ollama(默认,无需任何配置) jialing-code # 方式二:通过环境变量指定厂商 export PROVIDER=deepseek export DEEPSEEK_API_KEY=sk-xxx jialing-code # 方式三:使用 --setup 重新配置 jialing-code --setup ``` ## 支持的模型厂商 嘉陵江-code 通过统一的 OpenAI 兼容适配器接入所有厂商,无需关心各家 API 差异。 ### 国际厂商 | 厂商 | 环境变量 | 默认模型 | 代表模型 | |------|---------|---------|---------| | **Anthropic** | `ANTHROPIC_API_KEY` | claude-sonnet-4-20250514 | Claude Opus/Sonnet/Haiku | | **OpenAI** | `OPENAI_API_KEY` | gpt-4o | GPT-4o, GPT-4.1, o3, o4-mini | | **Google Gemini** | `GOOGLE_API_KEY` | gemini-2.5-flash | Gemini 2.5 Pro/Flash | | **Mistral AI** | `MISTRAL_API_KEY` | mistral-large-latest | Mistral Large, Codestral | | **Groq** | `GROQ_API_KEY` | llama-3.3-70b-versatile | Llama 3.3, Mixtral | | **xAI** | `XAI_API_KEY` | grok-3 | Grok 3, Grok 3 Mini | | **Together AI** | `TOGETHER_API_KEY` | meta-llama/Llama-3.3-70B | Llama, Qwen, DeepSeek | | **Cohere** | `COHERE_API_KEY` | command-a-03-2025 | Command A/R+ | | **Perplexity** | `PERPLEXITY_API_KEY` | sonar-pro | Sonar Pro/Reasoning | ### 国内厂商 | 厂商 | 环境变量 | 默认模型 | 代表模型 | |------|---------|---------|---------| | **DeepSeek** | `DEEPSEEK_API_KEY` | deepseek-chat | DeepSeek V3, R1 | | **通义千问 (Qwen)** | `QWEN_API_KEY` | qwen-max | Qwen Max/Plus/Turbo, QwQ | | **智谱 (GLM)** | `ZHIPU_API_KEY` | glm-4-plus | GLM-4 Plus/Flash/Long | | **月之暗面 (Kimi)** | `MOONSHOT_API_KEY` | moonshot-v1-auto | Kimi 全系列 | | **豆包 (Doubao)** | `DOUBAO_API_KEY` | doubao-1.5-pro-256k | 豆包 Pro/Lite | | **百度文心 (Ernie)** | `BAIDU_API_KEY` | ernie-4.5-8k | ERNIE 4.5/4.0/Speed | | **零一万物 (Yi)** | `YI_API_KEY` | yi-lightning | Yi Lightning/Large | | **阶跃星辰 (Step)** | `STEPFUN_API_KEY` | step-2-16k | Step 2/1 全系列 | | **百川 (Baichuan)** | `BAICHUAN_API_KEY` | Baichuan4 | Baichuan 4/3 | | **MiniMax** | `MINIMAX_API_KEY` | MiniMax-Text-01 | MiniMax Text/Abab | | **讯飞星火 (Spark)** | `SPARK_API_KEY` | general-v3.5 | Spark Max/Ultra/Pro | | **腾讯混元** | `HUNYUAN_API_KEY` | hunyuan-turbo | 混元 Turbo/Pro/Lite | ### 聚合平台 & 本地 | 平台 | 环境变量 | 说明 | |------|---------|------| | **Ollama** | 无需 Key | 本地运行,默认 `qwen3.5:35b`,零配置 | | **SiliconFlow** | `SILICONFLOW_API_KEY` | 国内聚合平台,支持多家模型 | | **OpenRouter** | `OPENROUTER_API_KEY` | 国际聚合平台,统一接入 | ### 企业级部署 | 平台 | 环境变量 | 说明 | |------|---------|------| | **AWS Bedrock** | `CLAUDE_CODE_USE_BEDROCK=1` | 需配置 AWS 凭证 | | **Google Vertex** | `CLAUDE_CODE_USE_VERTEX=1` | 需配置 GCP 凭证 | | **Azure Foundry** | `CLAUDE_CODE_USE_FOUNDRY=1` | 需配置 Azure AD | ## 功能特性 ### 核心能力 | 能力 | 状态 | 说明 | |------|------|------| | REPL 交互界面 | ✅ | 基于 Ink 的终端 UI,完整交互体验 | | 流式对话与工具调用 | ✅ | 流式输出 + 自动工具调用循环 | | 会话引擎 | ✅ | 管理对话状态、上下文压缩、归因追踪 | | 权限系统 | ✅ | plan/auto/manual 三种模式,细粒度控制 | | Hook 系统 | ✅ | pre/post tool use 钩子,通过 settings.json 配置 | | 会话恢复 | ✅ | `/resume` 恢复历史会话 | | 自动压缩 | ✅ | 超长对话自动 compact,节省 token | | MCP 协议 | ✅ | 支持 Model Context Protocol 扩展 | | 多厂商适配 | ✅ | 22+ 厂商统一 OpenAI 兼容接口 | | 思考链支持 | ✅ | 适配 DeepSeek R1、Qwen thinking 等推理模型 | ### 内置工具 | 工具 | 功能 | |------|------| | **BashTool** | Shell 命令执行,支持沙箱模式 | | **FileReadTool** | 文件 / PDF / 图片 / Notebook 读取 | | **FileEditTool** | 精确字符串替换编辑 + diff 追踪 | | **FileWriteTool** | 文件创建与覆写 | | **GlobTool** | 文件模式搜索 | | **GrepTool** | 内容正则搜索 | | **AgentTool** | 子代理(fork / async / background) | | **WebFetchTool** | URL 抓取 → Markdown 转换 | | **WebSearchTool** | 网页搜索 + 域名过滤 | | **NotebookEditTool** | Jupyter Notebook 编辑 | ### 斜杠命令 (90+) 常用命令: | 命令 | 功能 | |------|------| | `/help` | 显示帮助信息 | | `/model` | 切换模型 | | `/config` | 查看/修改配置 | | `/compact` | 手动压缩上下文 | | `/diff` | 查看文件变更 | | `/doctor` | 环境诊断 | | `/resume` | 恢复历史会话 | | `/memory` | 管理持久记忆 | | `/mcp` | 管理 MCP 服务器 | | `/plan` | 进入规划模式 | | `/permissions` | 权限管理 | | `/theme` | 切换主题 | | `/export` | 导出对话 | | `/vim` | Vim 模式 | ## 配置指南 ### 配置文件位置 ``` ~/.jialing-code/ ├── config.json # 主配置(厂商、模型、API Key) ├── settings.json # 行为设置(hooks、权限规则) ├── memory/ # 持久记忆存储 └── sessions/ # 会话历史 ``` ### 环境变量配置 ```bash # ── 厂商选择(二选一) ── # 方式一:指定厂商名 export PROVIDER=deepseek # 厂商名(小写) export DEEPSEEK_API_KEY=sk-xxx # 对应 API Key # 方式二:自动检测(根据已设置的 API Key 自动识别) export OPENAI_API_KEY=sk-xxx # 设了哪个就用哪个 # ── Anthropic 原生模式 ── export ANTHROPIC_API_KEY=sk-ant-xxx # Anthropic 直连 export ANTHROPIC_MODEL=claude-sonnet-4-20250514 # 可选,指定模型 # ── 自定义 API 端点 ── export OPENAI_BASE_URL=https://your-proxy.com/v1 # 自定义兼容端点 export OPENAI_API_KEY=your-key # ── 其他 ── export CLAUDE_CODE_SIMPLE=1 # 简洁模式(去掉装饰) ``` ### 交互式配置 ```bash # 首次启动自动进入,或手动触发 jialing-code --setup ``` 配置向导会: 1. 列出所有支持的厂商 2. 验证 API Key 连通性 3. 拉取可用模型列表供选择 4. 保存到 `~/.jialing-code/config.json` ## 项目架构 ``` jialing-code/ ├── src/ │ ├── entrypoints/ │ │ ├── cli.tsx # 入口:polyfill + 快速路径分发 │ │ └── sdk/ # SDK 导出 │ ├── main.tsx # Commander.js CLI 定义 │ ├── query.ts # API 查询核心(流式 + 工具循环) │ ├── QueryEngine.ts # 会话引擎(状态管理 + 压缩) │ ├── services/ │ │ └── api/ │ │ ├── claude.ts # Anthropic 原生 API 客户端 │ │ ├── openaiAdapter.ts # OpenAI 兼容适配器(核心) │ │ ├── providerRegistry.ts # 22+ 厂商注册表 │ │ ├── client.ts # 客户端工厂 │ │ └── setupWizard.ts # 交互式配置向导 │ ├── tools/ # 工具目录(每个工具独立文件夹) │ │ ├── BashTool/ │ │ ├── FileEditTool/ │ │ ├── FileReadTool/ │ │ ├── GrepTool/ │ │ ├── AgentTool/ │ │ └── ... # 30+ 工具 │ ├── screens/ │ │ └── REPL.tsx # REPL 主界面(5000+ 行) │ ├── components/ # Ink 终端 UI 组件 │ ├── commands/ # 斜杠命令实现 │ ├── state/ # 状态管理(Zustand) │ ├── context.ts # 系统提示词构建 │ └── utils/ │ └── model/ │ └── providers.ts # 厂商检测与路由 ├── packages/ # Monorepo workspace 包 │ ├── @ant/ # Computer Use stub 包 │ ├── color-diff-napi/ # 颜色 diff(完整实现) │ └── *-napi/ # 其他 NAPI stub 包 ├── build.ts # 构建脚本(code splitting) ├── package.json # Bun workspaces monorepo ├── tsconfig.json # TypeScript 配置 └── CLAUDE.md # Claude Code 项目指导 ``` ### 关键设计 #### 多厂商适配层 ``` 用户请求 → 厂商检测 → OpenAI 兼容适配器 → 各厂商 API ↓ ↓ Anthropic 直连 统一消息格式转换 Bedrock/Vertex 工具调用翻译 Azure Foundry 思考链处理 ``` - **`providerRegistry.ts`**:22+ 厂商的 baseURL、模型列表、API Key 映射 - **`openaiAdapter.ts`**:将 OpenAI 格式的流式响应实时转换为 Anthropic 内部格式 - **`providers.ts`**:厂商检测优先级链(显式 > 环境变量 > 自动检测 > Ollama 兜底) #### 工具分层 针对非 Anthropic 模型,工具按能力分层: - **Tier 1**(始终可用):Bash、Read、Write、Edit、Glob、Grep - **Tier 2**(中等模型):WebFetch、WebSearch、NotebookEdit、Agent - **跳过**:Anthropic 专属工具(EnterWorktree、TodoWrite 等) - **MCP 工具**:始终透传 #### 构建流程 ```bash bun run build ``` 1. 清理 `dist/` 目录 2. Bun bundler + code splitting → 入口 `dist/cli.js` + ~450 chunk 文件 3. 后处理:`import.meta.require` 替换(Node.js 兼容) 4. Shebang 修正:`#!/usr/bin/env node` 5. 注入 `globalThis.Bun` polyfill 构建产物 **Bun 和 Node.js 均可运行**。 ## 与原版 Claude Code 的区别 | 方面 | 原版 Claude Code | 嘉陵江-code | |------|-----------------|-------------| | 模型支持 | 仅 Anthropic Claude | 22+ 厂商 + 本地 Ollama | | 默认配置 | 需要 API Key | 本地 Ollama 零配置启动 | | 国内厂商 | 不支持 | 深度适配 12 家国内厂商 | | 思考链 | Claude 原生 | 适配 DeepSeek R1、Qwen thinking 等 | | 功能裁剪 | 全功能 | 移除 Computer Use、Voice、Magic Docs 等 | | Feature Flags | 内部功能开关 | 全部 `false`(禁用未实现分支) | | 运行时 | Bun | Bun 开发 / Bun+Node 运行 | | 配置体验 | 需手动配置 | 交互式向导 + 自动检测 | ### 已移除/Stub 的模块 | 模块 | 状态 | 说明 | |------|------|------| | Computer Use (`@ant/*`) | Stub | 保留包结构,无实际功能 | | NAPI 包 (audio/image/url/modifiers) | Stub | 除 `color-diff-napi` 外均为空实现 | | Analytics / GrowthBook / Sentry | 空实现 | 移除遥测 | | Magic Docs / Voice Mode / LSP Server | 移除 | 不影响核心功能 | | Plugins / Marketplace | 移除 | 不影响核心功能 | ## 开发指南 ### 项目特殊说明 - **~1341 个 tsc 错误**:来自反编译,类型多为 `unknown`/`never`/`{}`,**不影响 Bun 运行时**,请勿尝试修复 - **`feature()` 始终返回 `false`**:所有 feature flag 后的代码是死代码 - **React Compiler 产物**:组件中大量 `const $ = _c(N)` 是编译器输出的记忆化模板,属正常现象 - **`bun:bundle` 导入**:构建时 API,开发时由 `cli.tsx` 顶部 polyfill 提供 ### 常用命令 ```bash # 开发运行 bun run dev # 构建 bun run build # Lint(需先安装 biome) bun run lint bun run lint:fix # 格式化 bun run format # 依赖检查 bun run check:unused # 健康检查 bun run health ``` ### 添加新厂商 在 `src/services/api/providerRegistry.ts` 中添加条目即可: ```typescript export const PROVIDER_REGISTRY = { // ... your_provider: { name: 'Your Provider', baseURL: 'https://api.your-provider.com/v1', defaultModel: 'your-default-model', apiKeyEnvVars: ['YOUR_PROVIDER_API_KEY'], models: [ { id: 'model-1', name: 'Model 1', description: '描述' }, ], }, } ``` 只要厂商支持 OpenAI 兼容接口,即可无缝接入。 ## 常见问题 ### Q: 安装依赖失败? 确保 Bun 为最新版本: ```bash bun upgrade bun install ``` ### Q: 如何切换模型? 运行中使用 `/model` 命令,或设置环境变量: ```bash export PROVIDER=openai export OPENAI_API_KEY=sk-xxx export ANTHROPIC_MODEL=gpt-4o # 指定具体模型 ``` ### Q: 本地 Ollama 如何使用? 1. 安装 [Ollama](https://ollama.com/) 2. 拉取模型:`ollama pull qwen3.5:35b` 3. 启动嘉陵江-code,默认自动连接本地 Ollama ### Q: 能否用 Node.js 运行? 可以。`bun run build` 后,`node dist/cli.js` 即可运行(构建时已注入 Node.js 兼容 shim)。 ### Q: tsc 报大量错误? 正常现象,来自反编译。不影响运行,请忽略。 ### Q: 工具调用不工作? 部分本地模型(尤其小参数量模型)不支持 function calling。建议使用 7B+ 参数的模型,推荐 `qwen3.5:35b` 或 `deepseek-r1:32b`。 ## 贡献指南 欢迎贡献!请遵循以下流程: 1. Fork 本仓库 2. 创建特性分支:`git checkout -b feature/your-feature` 3. 提交变更:`git commit -m 'Add your feature'` 4. 推送分支:`git push origin feature/your-feature` 5. 创建 Pull Request ### 贡献方向 - 新增模型厂商适配 - Bug 修复 - 文档改进 - 工具增强 - 国际化 (i18n) ## 许可证 本项目采用 [MIT 许可证](LICENSE)。 ## 致谢 - 本项目基于 [Anthropic Claude Code](https://claude.ai/code) 反编译与改造 - 感谢所有大模型厂商提供的 OpenAI 兼容接口 - 感谢 [Ollama](https://ollama.com/) 提供的本地模型运行时 - 感谢 [Bun](https://bun.sh/) 提供的高性能 JavaScript 运行时 --- **Star ⭐ 这个项目如果对你有帮助!**