我用 Spring Boot 撸了一个 Claude Code 平替,本地 AI 编程 Agent,现已开源

不用装 Node.js,不用配 Python 环境,纯 Java 技术栈,接入 DeepSeek 就能跑。

起因

前段时间 Claude Code 火了一把------在终端里跟 AI 对话,它能自动读文件、改代码、跑 Git 命令,一套工具链下来,开发效率直接起飞。

但问题是:闭源、按 token 计费不便宜、数据要上云

公司内部对代码外传零容忍,私有化部署又是另一笔开销。我就想:这玩意儿核心原理又不复杂,无非是一个 AI 模型 + 工具调用循环 + MCP 协议,用 Java 生态自己撸一套行不行?

于是就有了 ALSPD Code Agent------一个纯 Spring Boot 的本地 AI 编程 Agent,目前已经在 GitHub 开源。

它能做什么

一句话:在终端里跟 AI 聊天,让它自动操作你的代码仓库。

具体来说:

  • 你说"看看这个项目的依赖",它自动读 pom.xml 然后总结给你
  • 你说"把 UserService 里的日志改成 Slf4j 注解",它读文件、改代码、写回去
  • 你说"查一下最近的 git 提交,写个 changelog",它跑 git log,整理输出
  • 你说"重构这个包,把接口和实现拆开",它多轮迭代,读、改、验证

底层的工具调用完全自动化------你只需要描述目标,剩下的读写执行它自己来。

技术架构

项目基于 Spring Boot 3.3 + Spring AI 1.0.0-M6,四个核心模块:

1. 标准 MCP Client(JSON-RPC STDIO)

复制代码
┌──────────────┐    stdin/stdout    ┌──────────────────┐
│  Agent       │ ◄──────────────► │  MCP Server       │
│  (Java)      │   JSON-RPC 2.0   │  (Java/Python/JS) │
└──────────────┘                   └──────────────────┘

不是什么魔改协议,就是标准的 Model Context Protocol。任何语言实现的 MCP Server,只要走 STDIO 通信,一行配置就能接入。内置实现了完整的 initialize → tools/list → tools/call 握手流程和请求/响应关联。

2. 自主 Agent 循环

java 复制代码
while (iteration < maxIterations) {
    var response = chatClient.prompt()
        .system(SYSTEM_PROMPT)
        .messages(conversationHistory)
        .options(OpenAiChatOptions.builder()
            .toolCallbacks(allTools)    // 内置工具 + MCP 工具
            .build())
        .call()
        .chatResponse();

    var output = response.getResult().getOutput();
    if (output.hasToolCalls()) {
        for (var toolCall : output.getToolCalls()) {
            var result = functionCallHandler.dispatch(toolCall.name(), toolCall.arguments());
            conversationHistory.add(new ToolResponseMessage(toolCall.id(), result.content()));
        }
    } else {
        return output.getText();  // AI 认为任务完成,输出最终回答
    }
}

核心就是这段:发消息给 AI → AI 说要调工具 → 执行工具 → 结果回传 → AI 再思考 → 循环,直到 AI 觉得搞定了或者达到迭代上限。

3. 内置 10 个本地工具

工具 用途
readFile 读文件
writeFile 写文件
listDirectory 列目录
searchFiles glob 匹配搜索
gitStatus 工作区状态
gitDiff 查看 diff
gitLog 提交历史
gitCommit 提交变更
gitBranches 分支列表
executeCommand PowerShell/cmd 执行

每个工具通过 FunctionCallback 接口注册到 Spring AI,AI 模型自动生成调用参数 JSON,Agent 解析后路由到对应方法执行。

4. 安全护栏

安全不是事后补丁,是架构级的:

  • 目录白名单 :所有文件操作校验路径,不在白名单的直接抛 SecurityException
  • 操作确认writeFilegitCommitexecuteCommand 三个危险操作默认需要用户通过 API 显式确认
  • 全量审计 :AOP 切面截获每次工具调用,写入 logs/audit/audit.log,格式为 时间 | 工具名 | 参数 | 结果 | 耗时ms

怎么跑起来

三步:

bash 复制代码
git clone https://github.com/your-repo/alspd-code-agent
cd alspd-code-agent

# 设 DeepSeek Key(默认已配 DeepSeek,换其他模型也行)
export OPENAI_API_KEY=sk-your-key

mvn spring-boot:run

然后:

bash 复制代码
curl -X POST http://localhost:8080/api/agent/chat \
  -H 'Content-Type: application/json' \
  -d '{"message": "读一下 src/ 目录结构,给个概览"}'

返回:

json 复制代码
{
  "sessionId": "abc123",
  "message": "项目包含 agent、config、controller、mcp、model、security、service、tools 八个包...",
  "iterations": 3,
  "toolCalls": [
    {"name": "listDirectory", "arguments": "{\"path\":\"src/\",\"recursive\":true}", "result": "...", "success": true}
  ],
  "elapsedMs": 2340
}

接入外部 MCP 服务

这是我觉得最有价值的部分。Agent 本身只带 10 个基础工具,但你可以接入任意外部 MCP Server 来扩展能力。

比如接一个数据库查询服务:

yaml 复制代码
# src/main/resources/mcp-config.yml
mcp:
  servers:
    - name: postgres-server
      command: npx
      args: [-y, "@anthropic/mcp-server-postgres"]
      env:
        DATABASE_URL: "jdbc:postgresql://localhost:5432/mydb"
      enabled: true

启动后 Agent 自动连接、完成 MCP 握手、发现工具,数据库的查询能力就直接注册进去了。无需改一行 Java 代码。

换模型

DeepSeek、通义千问、Moonshot、智谱 GLM、Ollama 本地模型------只要兼容 OpenAI 的 /v1/chat/completions 格式就能用。改一行配置:

yaml 复制代码
# 换成通义千问
spring.ai.openai.base-url: https://dashscope.aliyuncs.com/compatible-mode
spring.ai.openai.chat.options.model: qwen-plus

# 换成本地 Ollama
spring.ai.openai.base-url: http://localhost:11434
spring.ai.openai.chat.options.model: qwen2.5:7b

为什么用 Java 做这个

我知道肯定有人问:AI Agent 不都是 Python 的天下吗?

几个原因:

  1. 企业技术栈:国内大厂后端主力还是 Java,这套东西可以直接嵌入现有 Spring Boot 微服务,不用额外运维 Python 服务
  2. Maven 依赖管理:比起 Python 的 pip/conda/poetry 混战,Maven 的依赖解析和构建确定性高一个量级
  3. Spring 生态 :AOP 做审计、@ConfigurationProperties 做配置、依赖注入做工具注册------这些在 Python 里要自己搭的脚手架,Spring 开箱即用
  4. JDK 17+ 语法已经很现代了:records、sealed classes、pattern matching、text blocks,写起来并不比 Python 啰嗦多少

当前状态和后续计划

项目刚开源,已经可以:

  • 完整跑通 Agent 对话循环
  • 10 个内置工具正常工作
  • MCP Client 接入外部服务
  • 安全护栏和审计日志就位
  • 全量编译通过(Spring AI 1.0.0-M6)

后续打算做的:

  • WebSocket 流式输出
  • 前端交互界面
  • 更多内置工具(代码分析、测试生成)
  • Function Call 的并行执行优化
  • Docker 一键部署

链接


如果觉得有用,欢迎 Star ⭐,也欢迎提 Issue 和 PR。Java 程序员也要有自己的 AI Agent。