当前位置: 首页 > news >正文

AI编程:[实践]PDTAC通过叠加多种设计模式,实现高可扩展的第三方系统对接

  • 说明:该需求,我用不同的AI编程工具和模型,共计重复做了9次。主要目的是为了验证 AI编程:[SOP]PDTAC 循环
  • 原则:简单的事情重复做,重复的事情用心做,做到极致就是专家。

一、核心需求拆解

需求拆分到何种粒度,请自行判断并控制

在这里插入图片描述

  • 功能性需求:
    • 开发一个通用的大模型API路由服务,实现对不同大模型平台API的统一调用和管理。
    • 统一业务层接口,屏蔽底层平台差异,提高业务代码的可复用性和可维护性。
  • 非功能性需求
    • 要求符合开闭原则,达到高可扩展性的目的,以便后期我快速接入不同大模型平台的API。
  • 功能拆解:
    • 实现多种大模型平台API的路由功能,支持OpenAI、DashScope等主流大模型平台。
    • 将多种大模型平台API的路由功能,按照模型类型,暴露为rest接口(模型类型:chat、image、video等)。
    • 对话支持同步响应和流式响应。
  • 核心痛点
    • 架构耦合问题:业务逻辑层与不同大模型平台的SDK实现层存在深度耦合,导致系统扩展性受限。当新增模型平台时,需侵入式修改业务代码,违反开闭原则。
    • 接口规范不统一:各平台在相同功能接口上存在参数结构差异(如请求体字段命名、类型规范)和响应体范式不一致(如成功状态码、错误处理机制),产生显著的适配成本。

二、方法论的实践

注意,下面的Prompt,仅仅是按照非常简陋的方式来写的,如果使用编写Prompt的技巧,可能效果会更好。

需求拆分

将需求拆分为如下功能,以便AI生成质量更高的代码

  • 功能1:路由功能
  • 功能2:暴露Rest接口

功能1:路由功能

一、规划阶段(Chat模式)

特别注意:新建一个会话窗口

1、给出任务,让AI反述
2、让AI给出多种方案以及优劣
  • Prompt:

说明:此处合并第一步和第二步的Prompt,简化操作
特别说明:可以让AI优化下面这个提示词,然后让AI基于优化后的提示词生成内容

任务:我要用java实现一个通用的调用不同大模型平台api的路由功能,以便我可快速无感的接入新的大模型平台的api,功能要求如下:
1、对外暴露一个通用的接口,该接口可通过传入的参数,找到对应的大模型平台和对应的api,也就是路由的能力
2、设计一个高可扩展方案,实现不同大模型平台下不同api的快速开发和对接,且要求符合开闭原则
3、不同模型平台的token计费统计
4、模型调用失败后的备选方案
5、支持同步/流式调用方式
6、API调用日志记录请按照如下步骤,逐步帮我分析和解答我的问题:
1、完成这个功能我还需要考虑什么
2、请设计3种方案,并给出优劣势请在方案1和方案2进行整合,基于 注解路由 + 策略模式 + 工厂模式重新设计一个方案
3、权衡并选择最佳方案

人工权衡选择具体的方案

  • Prompt
你的回答很nice,比我预期的要好,现在我根据你帮我设计的3种方案,我决定选择方案一(工厂模式 + 策略模式),但还有一些技术细节我补充给你,请按照方案一,帮我重新设计方案,具体技术细节:
1、我采用的是spring-boot + spring-ai-alibaba,它里面默认实现了openai、dashscope等大模型平台
2、我希望不同的模型类型暴露不同的接口,模型类型有:chat、image、video、translation、mutilmodel等等
3、我希望不同大模型平台的不同api的实现,通过泛型的方式,来限定入参和出参对象,避免使用者传参错误,导致调用了错误的api
4、制定计划,让AI拆解任务

让AI更精准地理解需求,生成的代码更符合期望。

  • Prompt
任务:
1. 基于上面的内容,整理并输出一个MarkDown格式的代码实施计划
2. 该计划应包括需求背景、功能点、关键注意点、项目结构(含controller和test)、代码示例(含单元测试)、实施步骤(含单元测试)要求:
1. 要让一个新来的程序员看懂这个计划,直接就可以写代码
2. 该计划要对AI编程工具友好,以便我使用该计划,直接生成代码
3. 将计划写入 d:\workspace\gitee\study-ai\study-ai-route-ai\note\实施计划.md
4. 代码的存放模块路径:d:\workspace\gitee\study-ai\study-ai-route-ai\

二、行动阶段(Builder模式)

特别注意:新建一个会话窗口

1、@Notepad文档
2、分步执行(Do)【耗时】

在这里插入图片描述

3、分步测试(Test)【耗时】
  • 按照功能,分步执行单元测试,若执行报错,则进入分步修复阶段,进行代码修正(如此循环往复2/3/4/5步骤)
  • 特别注意:如果是分模块的java项目,请说明在哪个目录下执行单元测试,避免路径不对,导致执行失败。
  • 小技巧:对于自己熟悉的技术栈,建议直接在IDE中去执行单元测试,亲测通过AI执行单元测试,各种报错,反而效率不高。
    在这里插入图片描述
4、分步修复(Action)

针对执行单元测试时的报错进行修复

  • 引导AI进行修复,若AI修正不达预期,可能需要人工介入。
5、分步提交(Commit)
  • 将测试通过的功能代码进行提交。
帮我生成一个git提交注释,包含改动的功能点

功能2:暴露Rest接口

一、规划阶段(Chat模式)

特别注意:新建一个会话窗口

1、给出任务,让AI反述
2、让AI给出多种方案以及优劣
  • Prompt
说明:此处合并第一步和第二步的Prompt,简化操作
将大模型API路由服务,对外暴露为rest接口,供调用方调用,具体要求如下
1、基于 `LLMRouter.java` `OpenAIChatService.java` 暴露rest接口
2、不同模型类型,使用不同的Controller完成这个功能我还需要考虑什么
3、权衡并选择最佳方案

由于基础框架已确定,所以上一步未让AI提供多种设计方案,因此直接采用AI生成的内容。

4、制定计划,让AI拆解任务
  • Prompt
1、基于上面的内容,整理一下代码实施计划,输出一个完成计划(它应包括需求背景、功能点、关键注意点、项目结构、代码示例、引用相关资源文件或相关代码片段、以及单元测试代码、实施步骤、验收标准)2、要让一个新来的程序员看懂这个计划,直接就可以写代码3、你的计划要以MarkDown格式输出4、你的计划要对Trae 的Builder模式友好,以便我使用该计划,通过Trae 的Builder模式直接生成代码5、代码示例的存放模块路径:d:\workspace\gitee\study-ai\study-ai-route-ai\

二、行动阶段(Builder模式)

特别注意:新建一个会话窗口

1、@Notepad文档
2、分步执行(Do)【耗时】

在这里插入图片描述

3、分步测试(Test)【耗时】

在这里插入图片描述

4、分步修复(Action)

针对执行单元测试时的报错进行修复

  • 引导AI进行修复,若AI修正不达预期,可能需要人工介入。
5、分步提交(Commit)
  • 将测试通过的功能代码进行提交。

三、实践中的疑难问题

[Cursor]调用OpenAI报错(缺少spring-ai-alibaba依赖)

  • 问题
    • 对Cursor生成的调用OpenAI API的代码,进行测试,一直报错
  • 过程
    • 问AI半天,问题还是无法解决
    • 网上搜索,问题还是无法解决
    • 经过几个小时的调试,最终还是无疾而终
    • 对比:将同样的测试代码,在trae生成的工程中运行,执行正常,在cursor生成的工程中运行,执行失败(报上面的错误)
    • 最后,通过对比两个工程的pom.xml文件,发现cursor工程中,少了spring-ai-alibaba-starter这个依赖,加上后,执行正常
  • 错误
org.springframework.web.client.RestClientException: Error while extracting response for type [org.springframework.ai.openai.api.OpenAiApi$ChatCompletion] and content type [application/json;charset=utf-8]Caused by: java.net.HttpRetryException: cannot retry due to server authentication, in streaming mode

[Trae]兼容性问题(升级 Spring Boot 2.x 到 3.x )

  • 问题
    • 升级 Spring Boot 2.x 到 3.x,导致兼容性问题(启动报错找不到)
  • 分析
    • Spring Boot 2.x 对应 SLF4J 1.x 版本
    • Spring Boot 3.x 对应 SLF4J 2.x 版本
  • 过程
    • 问了AI半天,发现问题还是无法解决,最后根据AI的提示,提供父pom.xml和错误堆栈信息,AI帮我分析出来:主要问题是 SLF4J 版本与 Spring Boot 3.x 版本不兼容。
  • 心得
    • 当AI解决问题陷入无限循环时,请提供完整的错误堆栈信息,AI效果会更佳。

冲突
在这里插入图片描述

在这里插入图片描述


文章转载自:

http://WmexA5KU.hhrpy.cn
http://x68ahRpB.hhrpy.cn
http://yBfpBMtD.hhrpy.cn
http://NMzWo5PF.hhrpy.cn
http://Y8qfNmDl.hhrpy.cn
http://vnBTCiS3.hhrpy.cn
http://O22ps3Rk.hhrpy.cn
http://FjFI3eMz.hhrpy.cn
http://oLQQfrM2.hhrpy.cn
http://dJdIxHQt.hhrpy.cn
http://U1EXdpDX.hhrpy.cn
http://dpTuAvfh.hhrpy.cn
http://ufdgd6jy.hhrpy.cn
http://l2beJ5nj.hhrpy.cn
http://f3sy44nh.hhrpy.cn
http://IQ1zzMsy.hhrpy.cn
http://bpEbFjYq.hhrpy.cn
http://VUx0uzQS.hhrpy.cn
http://xJcV0uBj.hhrpy.cn
http://VukJ01um.hhrpy.cn
http://150HRNkl.hhrpy.cn
http://Xzo8H4m6.hhrpy.cn
http://NED3NZ0H.hhrpy.cn
http://RJyxt8Y7.hhrpy.cn
http://RgVKTl27.hhrpy.cn
http://d4wUAJsP.hhrpy.cn
http://2VVXzMtq.hhrpy.cn
http://1e7VtvdH.hhrpy.cn
http://qJQtopXQ.hhrpy.cn
http://NScNce5G.hhrpy.cn
http://www.dtcms.com/a/375601.html

相关文章:

  • 操作【GM3568JHF】FPGA+ARM异构开发板 使用指南:蓝牙
  • 小目标检测:FFCA-YOLO详解
  • Gemini 2.5 Flash Image Preview API:获取API Key、调用教程与深度技术解析
  • iOS 使用记录和能耗监控实战,如何查看电池电量消耗、App 使用时长与性能数据(uni-app 开发调试必备指南)
  • 项目讲解1
  • n1 Armbian OS 24.11.0 noble 安装suricata
  • 【算法--链表】114.二叉树展开为链表--通俗讲解
  • IntelliJ IDEA 2025.1 Java Stream Debugger 快速使用指南
  • IDEA2024.1使用Debug调试工具F8步过失效解决方法
  • Java 大视界 -- Java 大数据在智能交通智能公交系统优化与乘客出行服务提升中的应用(409)
  • Java数据结构——树
  • vue3和vue2生命周期的区别
  • 《棒球小白》棒球球落地了才能跑垒吗·棒球1号位
  • 排序算法(Java)
  • Oracle数据库
  • 腾讯开源智能体框架Youtu-agent全解析:特性、架构与实战指南
  • 【2511系统分析师备考-快速阅读一】
  • Vue 学习随笔系列二十五 -- 多文件上传并支持修改
  • 从0到1学习Vue框架Day03
  • 【Redis五种数据类型】
  • Redis 双向同步如何避免循环?【附实操演示】
  • Redis单线程模型为什么快?
  • At least one <template> or <script> is required in a single file component
  • 不止是DELETE:MySQL多表关联删除的JOIN语法实战详解
  • 动态控制rabbitmq中的消费者监听的启动和停止
  • C# 基于halcon的视觉工作流-章30-圆圆距离测量
  • Android Studio 构建项目时 Gradle 下载失败的解决方案
  • 【STM32项目开源】STM32单片机智能恒温箱控制系统
  • 苹果ios的系统app应用WebClip免签应用开源及方式原理
  • Java数据库连接JDBC完全解析