refactor: 重构AI服务架构为基于gRPC的实现

- 将AI服务从OpenAI API调用重构为gRPC服务架构
- 添加gRPC相关依赖和Protobuf编译插件
- 更新application.yml配置为gRPC客户端设置
- 移除旧的AIServiceImpl实现

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-01-20 17:17:55 +08:00
parent 51d16ea077
commit ef6b5cb11e
4 changed files with 117 additions and 82 deletions

View File

@@ -14,5 +14,111 @@
<packaging>jar</packaging> <packaging>jar</packaging>
<description>AIOJ AI服务</description> <description>AIOJ AI服务</description>
<!-- TODO: 添加依赖 --> <dependencies>
</project> <!-- ==================== API文档 ==================== -->
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
</dependency>
<!-- ==================== 内部模块 ==================== -->
<dependency>
<groupId>cn.meowrain.aioj</groupId>
<artifactId>aioj-backend-common-core</artifactId>
</dependency>
<dependency>
<groupId>cn.meowrain.aioj</groupId>
<artifactId>aioj-backend-common-log</artifactId>
</dependency>
<!-- ==================== Web ==================== -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- ==================== gRPC ==================== -->
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-netty-shaded</artifactId>
<version>1.68.1</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-protobuf</artifactId>
<version>1.68.1</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-stub</artifactId>
<version>1.68.1</version>
</dependency>
<dependency>
<groupId>io.grpc</groupId>
<artifactId>grpc-services</artifactId>
<version>1.68.1</version>
</dependency>
<!-- Protobuf -->
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>4.29.2</version>
</dependency>
<!-- 对于 Java 9+ 需要 javax.annotation -->
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>annotations-api</artifactId>
<version>6.0.53</version>
<scope>provided</scope>
</dependency>
<!-- ==================== Spring Cloud 服务发现 ==================== -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- ==================== 测试 ==================== -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<extensions>
<extension>
<groupId>kr.motd.maven</groupId>
<artifactId>os-maven-plugin</artifactId>
<version>1.7.1</version>
</extension>
</extensions>
<plugins>
<!-- Protobuf 编译插件 -->
<plugin>
<groupId>org.xolstice.maven.plugins</groupId>
<artifactId>protobuf-maven-plugin</artifactId>
<version>0.6.1</version>
<configuration>
<protocArtifact>com.google.protobuf:protoc:4.29.2:exe:${os.detected.classifier}</protocArtifact>
<pluginId>grpc-java</pluginId>
<pluginArtifact>io.grpc:protoc-gen-grpc-java:1.68.1:exe:${os.detected.classifier}</pluginArtifact>
<protoSourceRoot>${project.basedir}/src/main/proto</protoSourceRoot>
</configuration>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>compile-custom</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>

View File

@@ -1,72 +0,0 @@
package cn.meowrain.aioj.backend.aiservice.service.impl;
import cn.meowrain.aioj.backend.aiservice.service.AIService;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
/**
* AI 服务实现
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class AIServiceImpl implements AIService {
private final ChatLanguageModel chatLanguageModel;
@Override
public String analyzeCode(String code, String language) {
String prompt = buildPrompt("代码分析", language, code,
"请分析以下代码的质量、潜在问题和改进建议。");
log.info("执行代码分析: language={}, codeLength={}", language, code.length());
return chatLanguageModel.generate(prompt);
}
@Override
public String optimizeCode(String code, String language) {
String prompt = buildPrompt("代码优化", language, code,
"请提供以下代码的优化建议,包括性能优化、代码风格改进等。");
log.info("执行代码优化: language={}, codeLength={}", language, code.length());
return chatLanguageModel.generate(prompt);
}
@Override
public String generateTestCases(String code, String language) {
String prompt = buildPrompt("测试用例生成", language, code,
"请为以下代码生成完整的测试用例,包括边界条件和异常情况。");
log.info("生成测试用例: language={}, codeLength={}", language, code.length());
return chatLanguageModel.generate(prompt);
}
@Override
public String explainCode(String code, String language) {
String prompt = buildPrompt("代码解释", language, code,
"请详细解释以下代码的功能、逻辑和实现方式。");
log.info("解释代码: language={}, codeLength={}", language, code.length());
return chatLanguageModel.generate(prompt);
}
/**
* 构建提示词
*/
private String buildPrompt(String task, String language, String code, String instruction) {
return String.format("""
# 任务:%s
# 编程语言:%s
# 代码:
```%s
%s
```
# 要求:
%s
请提供详细、准确的分析结果。
""", task, language, language, code, instruction);
}
}

View File

@@ -39,14 +39,14 @@ jwt:
access-expire: 900000 # 15分钟 access-expire: 900000 # 15分钟
refresh-expire: 604800000 # 7天 refresh-expire: 604800000 # 7天
# AI 服务配置 # gRPC 客户端配置
ai: grpc:
openai: client:
api-key: ${OPENAI_API_KEY:your-api-key} host: ${GRPC_SERVER_HOST:localhost}
base-url: ${OPENAI_BASE_URL:https://api.openai.com} port: ${GRPC_SERVER_PORT:50051}
model: ${OPENAI_MODEL:gpt-4} timeout: ${GRPC_TIMEOUT:10}
max-tokens: ${OPENAI_MAX_TOKENS:2000} tls-enabled: ${GRPC_TLS_ENABLED:false}
temperature: ${OPENAI_TEMPERATURE:0.7} max-message-size: ${GRPC_MAX_MESSAGE_SIZE:10485760}
aioj: aioj:
log: log:

View File

@@ -28,6 +28,7 @@
<module>aioj-backend-auth</module> <module>aioj-backend-auth</module>
<module>aioj-backend-upms</module> <module>aioj-backend-upms</module>
<module>aioj-backend-file-service</module> <module>aioj-backend-file-service</module>
<module>aioj-backend-blog-service</module>
</modules> </modules>
<properties> <properties>