首页 > 编程语言 >基于FastGPT和芋道源码挑战一句话生成代码

基于FastGPT和芋道源码挑战一句话生成代码

时间:2023-12-20 16:44:06浏览次数:30  
标签:FastGPT AI 代码 和芋 fastCommonRespVO 生成 源码 SQL

芋道源码相信很多朋友都很了解了,今天我们试着基于FastGPT实现芋道框架的代码生成。芋道的代码生成,是基于数据库表字段实现的,那我们的思路就是看看如何使用GPT帮我们生成数据库表结构,只要数据库表字段有了,代码也就生成好了。实现这个需求我们就需要用到FastGPT的高级编排功能。编排的整体思路如下:
file

FastGPT应用编排

  • 1.登录FastGPT,打开应用菜单,点击右上角"新建"按钮,创建一个AI应用(选择"简单的对话"模板即可)。

file

  • 2.进入高级编排页面,先定义"对话开场白",然后点击右上角保存按钮。

file

  • 3.根据前述的整体思路,开始第一个AI环节:需求分析和模型设计。我们需要选择该环节对话模型(本文我选择GPT4-Turbo演示)和设计需求分析提示词。提示词主要是预设身份,并给出需求分析的要求,我这里主要是要求将需求抽象为模型和字段,并以markdown格式输出。配置完成后,保存,然后测试看下效果。

file

file

  • 4.第二个AI环节:判断用户是否已对需求分析和模型设计是否满意,是否可以进入下一环节。在这里我们需要在AI每一次输出需求分析和模型设计后,调用FastGPT的"问题分类"模块,判断用户意图。同样的,我们需要选择分类模型,设计分类提示词,并测试分类结果。

file

file

  • 5.第三个AI环节:用户已经对需求分析和模型设计结果完成确认,那么接下来就需要让AI帮我们生成SQL语句了。在这里我们为方便后续SQL语句的提取,要求AI以json数组形式返回建表SQL语句,并且要求AI在每张表按芋道规范添加公共字段(如创建者、创建时间、修改者、修改时间、逻辑删除、租户ID字段),大家也可以添加自己的要求。

file

file

  • 6.第四个AI环节(可选):如果只是为满足单表代码生成,这一步就可以直接跳过。这个环节主要是让AI根据模型设计和生成的SQL来分析这些表之间是否存在主子表、树表,并且将分析结果使用json格式将分析结果返回,方便后续调用接口生成主子表和树表代码用。

file

file

  • 7.将AI生成好的SQL和表关系数据做为参数,调用我们自定义的接口,生成代码并返回代码下载地址,我们将代码下载地址显示在页面上,用户就可以愉快下载了。

file

file

  • 8.扫码关注我的微信公众号,回复"芋道助手"就可以获取完整的FastGPT应用配置了(包含提示词)。

file

附:芋道自定义接口示例(供参考)

  • 1.我们在芋道工程中自定义一个接口(使用路径传参是因为这样在FastGPT接口配置中传递固定参数很方便,接口也比较好管理),接收上述参数,提取SQL并在数据库建表、按芋道规范生成代码。这里给出接口示例:
    @PermitAll
    @PostMapping("busi/{busiType}")
    public FastCommonRespVO busi(@PathVariable("busiType") String busiType, @RequestBody Map<String, Object> reqMap) {
        log.info("请求参数: {}", JSONUtil.toJsonStr(reqMap));
        FastCommonRespVO fastCommonRespVO = new FastCommonRespVO();
        fastCommonRespVO.setResponse("\\n失败了");
        FastBusiTypeEnum fastBusiTypeEnum = FastBusiTypeEnum.getByBusiCode(busiType);
        if (fastBusiTypeEnum != null) {
            FastService fastService = SpringUtil.getBean("fast".concat(fastBusiTypeEnum.getBusiCode()).concat("ServiceImpl"));
            try {
						    // doBusi方法会返回一个完整的代码下载地址
                fastCommonRespVO.setResponse("\\n".concat(fastService.doBusi(reqMap)));
            } catch (Exception e) {
                log.error("执行业务逻辑失败,异常原因:{}", ExceptionUtils.getStackTrace(e));
                fastCommonRespVO.setResponse("\\n执行业务逻辑失败:".concat(e.getMessage()));
            }
        } else {
            fastCommonRespVO.setResponse("\\n非法的业务类型(busiType参数)");
        }
        log.info("响应结果: {}", JSONUtil.toJsonStr(fastCommonRespVO));
        return fastCommonRespVO;
    }
  • 2.这里还需要在芋道中自定义一个代码下载接口,方便用户下载。
    @PermitAll
    @GetMapping("/download/codegen/{codegenId}")
    public void downloadCodegen(@PathVariable("codegenId") String codegenId,
                                HttpServletResponse response) throws IOException {
        log.info("请求参数: codegenId={}", codegenId);
        // 根据生成代码记录ID查询相关表记录ID
        Set<String> tableIds = stringRedisTemplate.opsForSet().members(codegenId);
        if (CollectionUtils.isEmpty(tableIds)) {
            throw exception(ErrorCodeConstants.AIGC_FAST_NOT_FOUND_RECORD);
        }
        // 生成代码
        Map<String, String> codes = new HashMap<>();
        for (String tableId : tableIds) {
            codes.putAll(codegenApi.generationCodes(Long.valueOf(tableId)));
        }
        // 构建 zip 包
        String[] paths = codes.keySet().toArray(new String[0]);
        ByteArrayInputStream[] ins = codes.values().stream().map(IoUtil::toUtf8Stream).toArray(ByteArrayInputStream[]::new);
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        ZipUtil.zip(outputStream, paths, ins);
        // 输出
        ServletUtils.writeAttachment(response, "codegen.zip", outputStream.toByteArray());
    }

标签:FastGPT,AI,代码,和芋,fastCommonRespVO,生成,源码,SQL
From: https://www.cnblogs.com/xfishup/p/17916922.html

相关文章

  • APIView源码分析
    1.和CBV源码执行流程相似,请求来了先走路由层:path('books/',views.BookView.as_view()) 2.走APIView的as_view方法,代码如下:@classmethoddefas_view(cls,**initkwargs):view=super().as_view(**initkwargs)#调用父类的as_view,view还是View的as_view......
  • 给apollo源码中添加第三方库
    一、为什么需要引用外部库bazel工程期望所有库都在工作空间中,但是实际上有些库Ubuntu提供了非常简单的安装方式,这就涉及到引入外部库步骤1:在apollo/third_party中添加包,需要如下几个文件,写法参考proj的内容,其他涉及包管理的文件可以不要。步骤2:在apollo/tools/workspace.bzl......
  • 基于SaaS模式的云HIS信息管理系统源码
    云HIS全称为基于云计算的医疗卫生信息系统,是运用云计算大数据、物联网等新兴信息技术,按照现代医疗卫生管理要求,在一定区域范围内以数字化形式提供医疗卫生行业数据收集、存储、传递处理的业务和技术亚台云HIS系统采用主流成熟技术开发,软件结构简洁、代码规范易阅读,SaaS应用,全......
  • 【java】工业园区高精准UWB定位系统源码
    UWB(ULTRAWIDEBAND,UWB)技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。UWB定位系统依托在移动通信,雷达,微波电路,云计算与大数据处理等专业领域的多年积累,自主研发,开发并产业化的一套UWB精确定位系统,最高定位精......
  • Databend 源码阅读: Meta-service 数据结构
    作者:张炎泼(XP)DatabendLabs成员,Databend分布式研发负责人https://github.com/drmingdrmer引言Databend是一款开源的云原生数据库,采用Rust语言开发,专为云原生数据仓库的需求而设计。面向云架构:Databend是完全面向云架构的数据库,可以在云环境中灵活部署和扩展简介|......
  • Databend 源码阅读: Meta-service 数据结构
    作者:张炎泼(XP)DatabendLabs成员,Databend分布式研发负责人https://github.com/drmingdrmer引言Databend是一款开源的云原生数据库,采用Rust语言开发,专为云原生数据仓库的需求而设计。面向云架构:Databend是完全面向云架构的数据库,可以在云环境中灵活部署和扩展简介|......
  • iTOP-RK3568开发板实时系统编译,Preemption系统/Xenomai系统编译,获取Linux源码包
    1获取Linux源码包编译环境说明:本手册使用的是迅为提供的编译环境ubuntu20.04,在网盘资料“iTOP-3568开发板\03_【iTOP-RK3568开发板】指南教程\05_NPU开发配套资料\03_RKNN_Toolkit2环境搭建\01课程用到的资料\01_初始Ubuntu20虚拟机”路径下。这里的ubuntu20默认开发......
  • springboot016高校学生党员发展管理系统(vue,毕业设计,附数据库和源码)
    1绪论1.1研究背景1.2研究现状1.3研究意义2系统开发工具介绍2.1Springboot2.2VUE框架2.3Mysql数据库3可行性分析3.1技术的可行性3.2经济的可行性3.3操作可行性 4系统需求分析4.1系统功能需求管理系统的主要功能结构图呈现如下:图4.1高校发展学生党员管理系统功能结构......
  • SourceBrowser 的源码流程(待继续细化)
    先读取sln项目里的文件,csorpj,在读取cs等文件,创建输出文件夹会生成一个类似集合对象,里面有你的代码文件,然后遍历集合,找出代码文件如xx.cs文件,然后读取cs文件里的代码,还有一些roslyn读取语法根,获取语义模型异步,获取文档范围rangs部分该不太确定具体意义根据cs文......
  • SSO单点登录源码解析
    单点登录:用户在单点登录成功后,会访问某一平台模块,1. 向客户端发送一个请求(免密登录接口),请求客户端接口会携带一个ticket,类似于:http//:ip:port:xxx?ticket=xxxx1. 这个请求会被客户端配置的EKPSSOCLIENT的过滤器拦截,读取配置文件sso-config.properties,获取过滤器链(CASURLFilter、Us......