基於FastGPT和芋道源碼挑戰一句話生成代碼

来源:https://www.cnblogs.com/xfishup/archive/2023/12/20/17916922.html
-Advertisement-
Play Games

芋道源碼相信很多朋友都很瞭解了,今天我們試著基於FastGPT實現芋道框架的代碼生成。芋道的代碼生成,是基於資料庫表欄位實現的,那我們的思路就是看看如何使用GPT幫我們生成資料庫表結構,只要資料庫表欄位有了,代碼也就生成好了。實現這個需求我們就需要用到FastGPT的高級編排功能。編排的整體思路如下 ...


芋道源碼相信很多朋友都很瞭解了,今天我們試著基於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());
    }

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1. 選擇結構 If(...) Begin ​ 語句塊 ​ End ​ else if(...) Begin ​ 語句塊 ​ End ​ Else ​ Begin ​ 語句塊 ​ End; 註意事項 語法中begin..end相當於C#中的{} 執行語句只有一條時,begin..end可以省略 () ...
  • create database step2_unit12; go use step2_unit12; go -- 部門表 CREATE TABLE [dbo].[Department]( [Id] [int] PRIMARY KEY IDENTITY(1,1) NOT NULL, [Name] [v ...
  • create database step2_unit13; go use step2_unit13; go -- 創建數據表 CREATE TABLE account ( id INT PRIMARY KEY identity, NAME VARCHAR(10), balance decimal(1 ...
  • 概述:.NET依賴註入(DI)通過反射自動註冊服務,示例展示了註冊指定類、帶特性類、項目下所有介面實現的類。簡化配置,提高可維護性。 在.NET中,進行依賴註入(DI)的自動註冊,可以通過反射機制和程式集掃描來實現。以下是詳細的步驟以及相應的C#源代碼示例,包括註冊指定類、註冊帶有自定義特性的類、以 ...
  • 問題 在調試接收串口數據的Qt程式中發現,數據存在延遲和粘包現象。下位機發送數據包頻率是100Hz,一包56位元組,波特率115200,在列印port->readAll()的值的時候發現並不是每10ms讀到一包數據,而是大概每50ms左右一次接收到5包數據,在其他電腦上調試,以及下載其他串口助手調試後 ...
  • Flink中的處理函數(ProcessFunction和KeyedProcessFunction)在對於數據進行顆粒化的精確計算時使用較多,處理函數提供了一個定時服務(TimerService),可以向未來註冊一個定時服務, ...
  • 一、按照月分片 使用場景為按照自然月來分片,每個自然月為一個分片,但是一年有12個月,是不是要有12個數據節點才行呢?並不是。例如我現在只有三個分片資料庫,這樣就可以1月在第一個數據分片中,2月在第二個數據分片中,3月在第三個數據分片中,當來到4月的時候,就會重新開始分片,4月在第一個數據分片,5月 ...
  • 1. 基礎知識回顧 1、索引的有序性,索引本身就是有序的 2、InnoDB中間隙鎖的唯一目的是防止其他事務插入間隙。間隙鎖可以共存。一個事務取得的間隙鎖並不會阻止另一個事務取得同一間隙上的間隙鎖。共用和獨占間隔鎖之間沒有區別。它們彼此之間不衝突,並且執行相同的功能。 3、MySQL預設隔離級別是 R ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...