不用装 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 - 操作确认 :
writeFile、gitCommit、executeCommand三个危险操作默认需要用户通过 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 的天下吗?
几个原因:
- 企业技术栈:国内大厂后端主力还是 Java,这套东西可以直接嵌入现有 Spring Boot 微服务,不用额外运维 Python 服务
- Maven 依赖管理:比起 Python 的 pip/conda/poetry 混战,Maven 的依赖解析和构建确定性高一个量级
- Spring 生态 :AOP 做审计、
@ConfigurationProperties做配置、依赖注入做工具注册------这些在 Python 里要自己搭的脚手架,Spring 开箱即用 - JDK 17+ 语法已经很现代了:records、sealed classes、pattern matching、text blocks,写起来并不比 Python 啰嗦多少
当前状态和后续计划
项目刚开源,已经可以:
- 完整跑通 Agent 对话循环
- 10 个内置工具正常工作
- MCP Client 接入外部服务
- 安全护栏和审计日志就位
- 全量编译通过(Spring AI 1.0.0-M6)
后续打算做的:
- WebSocket 流式输出
- 前端交互界面
- 更多内置工具(代码分析、测试生成)
- Function Call 的并行执行优化
- Docker 一键部署
链接
- GitHub:https://github.com/your-repo/alspd-code-agent
- 运行手册:<docs/RUNBOOK.md>
- 二次开发指南:<docs/DEV-GUIDE.md>
如果觉得有用,欢迎 Star ⭐,也欢迎提 Issue 和 PR。Java 程序员也要有自己的 AI Agent。