上周 Claude Code 源码泄露,我写了篇分析发在知乎,20 万阅读 8000 收藏。后来又把核心逻辑用 1300 行 Python 重写了一遍,就是 CoreCoder(300+ Stars)。
这两件事让我收到了大量私信和评论,归纳起来就一句话:
"我用不了 Anthropic 的 API,国产模型能不能跑你这个?"
说实话 CoreCoder 已经支持了,但我觉得做得不够彻底。CoreCoder 的定位是"教学用的精简实现",1300 行代码是个优势但也是限制。很多人想要的是一个真正能日常用的工具,不是一个用来学习的 demo。
所以我又做了一个。
AnyCoder:用你手里的任何模型写代码
AnyCoder 是一个终端里的 AI 编程 Agent。你可以理解为"不挑模型的 Claude Code"。
bash
pip install anycoder
# 用 Kimi(默认,便宜好用)
export DEEPSEEK_API_KEY=sk-...
anycoder
# Use Kimi K2.5
anycoder -m kimi
# 用 Claude
anycoder -m claude
# 用 Qwen
anycoder -m qwen
# 用本地 Ollama,数据不出机器
anycoder -m ollama/llama3.1
就这么简单。一行安装,一个环境变量,开始干活。
它能做什么
跟 Claude Code 一样的事情:
读代码。 你说"帮我看看 auth.py 的登录逻辑",它打开文件,带行号地读给你看。大文件自动分段读,不会一次性塞爆上下文。
改代码。 不是把整个文件覆盖,是精准的搜索替换。你说"把这个函数里的同步调用改成异步",它找到那几行,改了,其他的不动。改之前还会检查搜索字符串是不是唯一的,不唯一就让你给更多上下文,避免改错地方。
跑命令。 "跑一下测试"、"看看 git log"、"安装 requests"。shell 命令直接执行,输出直接拿来分析。
搜代码库。 "这个项目里哪些文件用了 Redis?"两种搜索:按文件名模式找文件(glob),按内容正则搜索(grep)。
自己循环。 这是 Agent 的关键。它不是回答一次就停了。改完代码之后它自己会想"是不是该跑个测试看看",然后真的去跑,看到报错了自己修,修完再跑,直到通过。一个请求可能背后跑了十几轮工具调用。
100+ 模型随便切
底层用的 litellm,几乎市面上所有 LLM 都能接:
| 简写 | 模型 | 厂商 |
|---|---|---|
| deepseek | DeepSeek Chat | 深度求索 |
| qwen | Qwen Plus | 阿里通义 |
| gpt | ChatGPT | OpenAI |
| claude | Claude | Anthropic |
| gemini | Gemini | |
| kimi | Moonshot | 月之暗面 |
| glm | GLM | 智谱 AI |
在 REPL 里还能用 /model deepseek 随时切换,不用退出重启。
不在列表里的也能用,只要是 OpenAI 兼容 API 就行:
ini
export ANYCODER_API_BASE=https://your-api.com/v1
export ANYCODER_API_KEY=your-key
anycoder -m your-model-name
本地模型更简单:
bash
anycoder -m ollama/codestral
anycoder -m ollama/deepseek-coder-v2
数据完全不出你的机器。
为什么是 Python
两个原因。
第一,国内开发者最熟悉的语言。Claude Code 是 TypeScript 写的,想看懂源码还得先懂 TypeScript 的异步模型和类型系统。Python 代码看一眼就明白在干嘛。想改?fork 了直接改。
第二,生态好。litellm 这种统一 LLM 接口的库在 Python 生态最成熟。Rich 做终端渲染、Pydantic 做数据验证,都是拿来就能用的轮子。
整个项目依赖就四个包:litellm、rich、prompt_toolkit、pydantic。没有奇怪的间接依赖链,pip install 不会把你的环境搞乱。
跟现有工具的对比
vs Claude Code: 功能类似,但 Claude Code 只能用 Claude。AnyCoder 支持任意模型。而且 AnyCoder 是纯 Python,改起来容易。
vs Cursor/Windsurf: 那些是 IDE 插件,绑定了编辑器。AnyCoder 是终端工具,在服务器上 SSH 进去也能用。
vs Aider: Aider 也是终端 AI 编程工具,做得很好。AnyCoder 的区别是架构更简单直接,代码量小,想自己 fork 改造很方便。
vs 直接聊天窗口粘代码: Agent 模式的核心区别是它能自己操作文件系统。你不用复制粘贴了,它直接在你的项目里读、改、跑。
架构
四层,很清晰:
- CLI 层:Rich 渲染输出,prompt_toolkit 处理输入,支持历史记录和自动补全
- Agent 层:核心循环。用户输入 → LLM 决策 → 工具执行 → 结果反馈 → LLM 继续决策
- LLM 层:litellm 封装,流式输出,自动汇总 tool_calls 的 delta chunks
- 工具层:6 个工具,每个都有 JSON Schema 描述,注册到工具表里
上下文管理器在后面盯着。对话接近 token 上限时,自动把中间的旧消息压缩成摘要,保留系统提示和最近几轮对话。你感觉不到这个过程,但它让长对话不会因为超限而崩掉。
如果你读过我之前写的 Claude Code 源码分析,会发现 AnyCoder 实现了里面提到的几个核心设计:
- Agent 循环(多轮工具调用)
- 流式 tool_calls 组装
- 搜索替换式文件编辑(唯一性校验)
- 上下文窗口压缩
和 CoreCoder 的关系
CoreCoder 是"教学用途的极简实现",1300 行代码,重点在于让你看懂 Claude Code 的架构。
AnyCoder 是"日常使用的生产工具",该有的功能都有,该做的打磨都做了。
一个是解剖学教材,一个是能上手术台的手术刀。两个项目互补,不冲突。
试试看
ini
pip install anycoder
# 设个 key 就能用
export DEEPSEEK_API_KEY=sk-...
anycoder