用 Java 复刻 Claude Code:一个终端编程助手的实现

news_bot 2025-12-17 01:31 22 0
N
news_bot 楼主
2025-12-17 01:31
第1楼

用 Java 复刻 Claude Code:一个终端编程助手的实现

一个基于 LangChain4j 的智能编程助手🐕柯基 Code,能实现简易编程功能,复刻 Claude Code确实是我标题党啦......

1. 项目概述

KejiCode(柯基Code)是一个基于 LangChain4j 框架的简易智能终端编程助手。

  • 自动化编程任务:创建文件、编辑代码、搜索内容
  • 智能工具链:AI 自主决定调用哪些工具及调用顺序
  • 安全可控:所有操作限制在指定工作目录内
  • 多模型支持:适配 Claude、GPT-4、通义千问等主流 AI

下面是整个项目用到的一些技术栈

技术版本选型理由
Java17稳定、生态成熟、企业级支持
LangChain4j0.35.0Java 生态最佳 AI 集成框架,原生支持工具调用
JLine3.24.1强大的终端交互库,支持命令补全、历史记录
Jackson2.16.0高性能 JSON/YAML 处理
Maven3.x依赖管理、构建自动化

2. 功能展示

  1. 启动项目

  2. 常见命令/help/model/version/params temperature=0.5/reset等,具体使用方式可参照/help

  3. 进行第一轮对话,让它写一个"图书管理系统",这里用的模型是 qwen-max

    终端输出内容

  4. 可以在对应的目录成功的看到图书管理系统的代码

  5. 体验一下图书管理系统,简单的增删改查还是实现了呢~

  6. 上面看着交互还差一点,让柯基Code给优化下

    终端不输出

  7. 重新体验图书管理系统

3. 系统架构设计

3.1 分层架构

KejiCode 采用经典的四层架构,每层职责清晰、低耦合高内聚

3.2 层次职责详解

3.2.1 表现层 (Presentation Layer)

核心组件TerminalUI

职责

  • 输入监听:接收用户的文字命令
  • 输出展示:格式化显示 AI 回复和工具执行结果
  • 命令解析:处理特殊命令(/help, /switch, /model 等)
  • 用户体验:清晰的操作提示和状态反馈

设计亮点

比喻:这是柯基的"耳朵和嘴巴",负责听指令和说话。

3.2.2 应用层 (Application Layer)
核心组件 1:CodeAssistantAgent

这是整个系统的大脑,协调各个组件工作

核心方法设计

设计模式应用

  • 策略模式:不同 AI 模型的统一接口
  • 观察者模式:工具执行结果通知
  • 模板方法:工具执行的统一流程
核心组件 2:Configuration

配置管理采用分层配置策略:

配置优先级:命令行参数 > 环境变量 > YAML 配置 > 默认值

设计理由

  • 安全性:敏感信息(API Key)优先从环境变量读取
  • 灵活性:不同环境可以有不同配置
  • 便捷性:命令行参数方便临时调整
核心组件 3:PathValidator

路径验证是安全架构的基石,采用沙箱模式

核心算法

安全保障

  • 防止路径遍历攻击(../../../etc/passwd
  • 防止符号链接逃逸(link-to-/etc
  • 防止绝对路径直达(/tmp/malicious.sh
3.2.3 领域层 (Domain Layer)
工具系统设计

所有工具实现统一的 Tool 接口:

工具分类

类别工具作用典型场景
文件操作Read读取文件内容(支持分页)查看代码、配置文件
Write创建或覆盖文件生成新文件、重写配置
Edit精确字符串替换编辑修改代码片段、更新变量名
搜索工具Glob按模式匹配文件名查找所有 .java 文件
Grep按正则搜索文件内容查找所有 TODO 注释
命令执行Bash执行任意 shell 命令编译、运行、系统操作
版本控制GitGit 操作封装提交、推送、查看历史
构建工具MavenMaven 操作封装编译、打包、测试
NpmNpm 操作封装安装依赖、运行脚本

工具注册机制

工具规范(Tool Specification)设计

这是告诉 AI "工具能做什么" 的关键:

为什么需要详细的描述?

比喻:就像给新员工写岗位说明书

  • 简单描述:"处理文件" → AI 不知道具体能做什么
  • 详细描述:"创建或覆盖文件,需要 file_path 和 content 参数" → AI 清楚知道何时使用
模型工厂设计

采用抽象工厂模式 + 策略模式

工厂方法实现

对话历史管理

对话历史是 AI 的"记忆",设计要点

消息类型

  1. UserMessage:用户输入
  2. AiMessage:AI 回复(文字或工具调用请求)
  3. ToolExecutionResultMessage:工具执行结果

历史管理策略

设计考虑

  • 上下文连贯性:AI 需要记住之前的对话才能正确理解
  • 内存管理:过长的历史会占用大量内存
  • 成本控制:AI API 按 token 收费,历史越长成本越高
3.2.4 基础设施层 (Infrastructure Layer)

这一层封装了所有第三方依赖系统调用

核心职责

  • AI 服务对接:通过 LangChain4j 调用各家 AI API
  • 文件系统操作:Java NIO 文件读写
  • 进程管理:ProcessBuilder 执行外部命令
  • 日志记录:SLF4J + Logback

为什么需要这一层?

比喻:就像建筑的地基,上层不用关心底层细节

优势

  • 易于测试:可以 mock 文件系统
  • 易于替换:底层实现变化不影响上层
  • 统一控制:在这一层统一处理异常、日志等

4. 对话流程设计

4.1 完整交互流程

这是 KejiCode 最核心的流程设计

4.2 工具链决策机制

AI 如何决定调用哪些工具?这是一个智能决策过程

决策影响因素

  1. System Prompt:定义 AI 的行为规范

  2. 工具描述:详细说明工具用途和参数

  3. 对话历史:上下文决定下一步操作

4.3 错误恢复流程

当工具执行失败时,如何处理?

错误处理策略

结语

KejiCode 可以帮你简单了解Coding Agent的工作原理,Happy Coding! 🐕💻

代码可以通过关注微信公众号【柯基写代码】回复【柯基Code】获取~

  • 1 / 1 页
敬请注意:文中内容观点和各种评论不代表本网立场!若有违规侵权,请联系我们.