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:
@@ -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>
|
||||||
|
|||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -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:
|
||||||
|
|||||||
1
pom.xml
1
pom.xml
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user