From ef6b5cb11ee0aacfd980ca610a0b92951a731f74 Mon Sep 17 00:00:00 2001 From: meowrain Date: Tue, 20 Jan 2026 17:17:55 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E9=87=8D=E6=9E=84AI=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=9E=B6=E6=9E=84=E4=B8=BA=E5=9F=BA=E4=BA=8EgRPC?= =?UTF-8?q?=E7=9A=84=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将AI服务从OpenAI API调用重构为gRPC服务架构 - 添加gRPC相关依赖和Protobuf编译插件 - 更新application.yml配置为gRPC客户端设置 - 移除旧的AIServiceImpl实现 Co-Authored-By: Claude --- aioj-backend-ai-service/pom.xml | 110 +++++++++++++++++- .../aiservice/service/impl/AIServiceImpl.java | 72 ------------ .../src/main/resources/application.yml | 16 +-- pom.xml | 1 + 4 files changed, 117 insertions(+), 82 deletions(-) delete mode 100644 aioj-backend-ai-service/src/main/java/cn/meowrain/aioj/backend/aiservice/service/impl/AIServiceImpl.java diff --git a/aioj-backend-ai-service/pom.xml b/aioj-backend-ai-service/pom.xml index d6337ca..1ed6ab8 100644 --- a/aioj-backend-ai-service/pom.xml +++ b/aioj-backend-ai-service/pom.xml @@ -14,5 +14,111 @@ jar AIOJ AI服务 - - \ No newline at end of file + + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + + + com.github.xiaoymin + knife4j-openapi3-jakarta-spring-boot-starter + + + + + cn.meowrain.aioj + aioj-backend-common-core + + + cn.meowrain.aioj + aioj-backend-common-log + + + + + org.springframework.boot + spring-boot-starter-web + + + + + io.grpc + grpc-netty-shaded + 1.68.1 + + + io.grpc + grpc-protobuf + 1.68.1 + + + io.grpc + grpc-stub + 1.68.1 + + + io.grpc + grpc-services + 1.68.1 + + + + com.google.protobuf + protobuf-java + 4.29.2 + + + + org.apache.tomcat + annotations-api + 6.0.53 + provided + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + kr.motd.maven + os-maven-plugin + 1.7.1 + + + + + + org.xolstice.maven.plugins + protobuf-maven-plugin + 0.6.1 + + com.google.protobuf:protoc:4.29.2:exe:${os.detected.classifier} + grpc-java + io.grpc:protoc-gen-grpc-java:1.68.1:exe:${os.detected.classifier} + ${project.basedir}/src/main/proto + + + + + compile + compile-custom + + + + + + + diff --git a/aioj-backend-ai-service/src/main/java/cn/meowrain/aioj/backend/aiservice/service/impl/AIServiceImpl.java b/aioj-backend-ai-service/src/main/java/cn/meowrain/aioj/backend/aiservice/service/impl/AIServiceImpl.java deleted file mode 100644 index 9f879f2..0000000 --- a/aioj-backend-ai-service/src/main/java/cn/meowrain/aioj/backend/aiservice/service/impl/AIServiceImpl.java +++ /dev/null @@ -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); - } -} diff --git a/aioj-backend-ai-service/src/main/resources/application.yml b/aioj-backend-ai-service/src/main/resources/application.yml index 1b2e0a0..b15d345 100644 --- a/aioj-backend-ai-service/src/main/resources/application.yml +++ b/aioj-backend-ai-service/src/main/resources/application.yml @@ -39,14 +39,14 @@ jwt: access-expire: 900000 # 15分钟 refresh-expire: 604800000 # 7天 -# AI 服务配置 -ai: - openai: - api-key: ${OPENAI_API_KEY:your-api-key} - base-url: ${OPENAI_BASE_URL:https://api.openai.com} - model: ${OPENAI_MODEL:gpt-4} - max-tokens: ${OPENAI_MAX_TOKENS:2000} - temperature: ${OPENAI_TEMPERATURE:0.7} +# gRPC 客户端配置 +grpc: + client: + host: ${GRPC_SERVER_HOST:localhost} + port: ${GRPC_SERVER_PORT:50051} + timeout: ${GRPC_TIMEOUT:10} + tls-enabled: ${GRPC_TLS_ENABLED:false} + max-message-size: ${GRPC_MAX_MESSAGE_SIZE:10485760} aioj: log: diff --git a/pom.xml b/pom.xml index f069109..471303b 100644 --- a/pom.xml +++ b/pom.xml @@ -28,6 +28,7 @@ aioj-backend-auth aioj-backend-upms aioj-backend-file-service + aioj-backend-blog-service