1. 项目概述
作为一名长期从事Java开发的工程师,最近我决定系统性地学习AI应用开发。这个系列将记录我从零开始的学习历程,第一天主要聚焦于环境搭建和基础框架整合。选择Java作为主要开发语言,是因为它在企业级应用中仍占据主导地位,而结合AI能力可以显著提升传统业务系统的智能化水平。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备
2.1 开发工具安装
工欲善其事,必先利其器。我选择了以下工具链:
- JDK 17(LTS版本,长期支持)
- IntelliJ IDEA 2023.2(社区版足够使用)
- Maven 3.9.5(构建工具)
- Git(版本控制)
注意:建议使用SDKMAN!来管理Java版本,可以轻松切换不同JDK版本。安装命令:
curl -s "https://get.sdkman.io" | bash
2.2 Maven配置
在~/.m2/settings.xml中添加阿里云镜像加速依赖下载:
xml复制<mirror>
<id>aliyunmaven</id>
<mirrorOf>*</mirrorOf>
<name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
3. 项目初始化
3.1 创建Spring Boot项目
使用Spring Initializr创建基础项目:
- 选择Spring Boot 3.1.5
- 添加依赖:Spring Web, Lombok
- 打包方式:Jar
- Java版本:17
生成的项目结构如下:
code复制ai-demo
├── src
│ ├── main
│ │ ├── java/com/example/aidemo
│ │ │ ├── AidemoApplication.java
│ │ │ └── controller
│ │ └── resources
│ │ ├── application.properties
│ │ └── static
│ └── test
└── pom.xml
3.2 添加LangChain4j依赖
在pom.xml中添加LangChain4j核心依赖:
xml复制<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j</artifactId>
<version>0.24.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-spring-boot-starter</artifactId>
<version>0.24.0</version>
</dependency>
4. 第一个AI功能实现
4.1 配置OpenAI密钥
在application.properties中添加:
properties复制langchain4j.open-ai.chat-model.api-key=sk-your-key-here
langchain4j.open-ai.chat-model.model-name=gpt-3.5-turbo
langchain4j.open-ai.chat-model.temperature=0.7
4.2 创建聊天服务
java复制@Service
@RequiredArgsConstructor
public class ChatService {
private final OpenAiChatModel chatModel;
public String chat(String message) {
return chatModel.generate(message);
}
}
4.3 创建REST接口
java复制@RestController
@RequiredArgsConstructor
@RequestMapping("/api/ai")
public class AiController {
private final ChatService chatService;
@PostMapping("/chat")
public String chat(@RequestBody String message) {
return chatService.chat(message);
}
}
5. 测试与验证
5.1 启动应用
使用命令启动Spring Boot应用:
bash复制mvn spring-boot:run
5.2 发送测试请求
使用curl测试接口:
bash复制curl -X POST -H "Content-Type: text/plain" -d "Java中的Stream API有什么特点?" http://localhost:8080/api/ai/chat
预期会返回关于Stream API的详细解释。
6. 常见问题解决
6.1 依赖冲突
如果遇到依赖冲突,可以使用Maven命令查看依赖树:
bash复制mvn dependency:tree -Dincludes=org.springframework
6.2 内存不足
在启动脚本中添加JVM参数:
bash复制export MAVEN_OPTS="-Xmx1024m -Xms512m"
6.3 代理设置
如果需要配置代理,可以在IDEA的Settings > Appearance & Behavior > System Settings > HTTP Proxy中设置。
7. 进阶配置
7.1 日志记录
添加Logback配置记录AI交互:
xml复制<logger name="dev.langchain4j" level="DEBUG"/>
7.2 超时设置
调整API调用超时时间:
properties复制langchain4j.open-ai.chat-model.timeout=60s
7.3 本地缓存
添加Caffeine缓存减少API调用:
java复制@Bean
public Cache<String, String> aiResponseCache() {
return Caffeine.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES)
.maximumSize(1000)
.build();
}
8. 项目结构优化
8.1 分层架构
建议采用清晰的分层架构:
code复制com.example.aidemo
├── config # 配置类
├── controller # 控制器
├── service # 业务服务
├── model # 数据模型
├── util # 工具类
└── exception # 异常处理
8.2 DTO设计
为API接口设计专门的DTO:
java复制public record ChatRequest(String message, String sessionId) {}
public record ChatResponse(String answer, long tokensUsed) {}
9. 安全考虑
9.1 API密钥保护
不要将密钥提交到代码仓库,可以使用环境变量:
properties复制langchain4j.open-ai.chat-model.api-key=${OPENAI_API_KEY}
9.2 速率限制
实现简单的速率限制:
java复制@Aspect
@Component
@RequiredArgsConstructor
public class RateLimitAspect {
private final Cache<String, Integer> requestCache;
@Around("@annotation(rateLimited)")
public Object limit(ProceedingJoinPoint pjp, RateLimited rateLimited) throws Throwable {
String key = // 生成唯一key
Integer count = requestCache.getIfPresent(key);
if (count != null && count >= rateLimited.value()) {
throw new RateLimitExceededException();
}
requestCache.put(key, count == null ? 1 : count + 1);
return pjp.proceed();
}
}
10. 后续学习路线
完成基础搭建后,建议按以下路线深入学习:
- LangChain4j的核心概念:Model, Memory, Tool等
- 不同AI服务提供商集成:Azure OpenAI, HuggingFace等
- 高级功能:RAG架构实现,Function Calling
- 监控与优化:Token使用统计,响应时间监控
- 生产部署:容器化,自动扩缩容
在实际开发中,我发现AI应用与传统Java应用最大的区别在于:
- 需要更多异常处理(API不稳定)
- 响应时间较长,需要考虑异步处理
- 结果具有不确定性,需要设计重试机制
- Token成本控制很重要
