ChatGPT与软件架构(1) - 快速原型

news2025/1/18 11:43:02

通过ChatGPT生成设计和原型代码,可以帮助团队快速启动项目,验证想法,提高效率。原文: ChatGPT and Software Architecture

Surfing Croyde Bay @Unsplash
Surfing Croyde Bay @Unsplash

OpenAI的ChatGPT现在越来越火,出现了各种有趣用例。

从许多方面来看,ChatGPT都可以看作是AI赋能的架构师白板,除了画画线条和框框,还可以有许多用途。我在本文中将演示如何基于ChatGPT启动软件架构流程。

就像在白板上画画一样,过程会有点混乱,各种因素相互作用会导致不得不通过不断修改来找到最佳答案。本文旨在演示成功使用ChatGPT的一些提问技巧,这些技巧产生了真正有价值的结果。

需要注意,ChatGPT仍在学习中,所以不要对一致性有太大期望,多次问同样的问题可能会得到不同的结果。

设置ChatGPT帐户很简单,可以按照官方文档完成: https://openai.com/blog/chatgpt/

用户故事

我们从要求ChatGPT写用户故事开始。

alt

写一个用户故事,测量员登录到系统,输入地理空间坐标、建筑、建筑类型和特征信息,这是他们一天中要进行的许多调查中的一个

如你所见,这是个特定行业的用户故事。ChatGPT拥有庞大的知识库,需要通过实验来了解ChatGPT的知识深度,即它知道些什么?

第一个问题的关键是要对关键细节非常明确,以获得最佳结果。这样,ChatGPT可以响应一组体面的结果,如下所示:

alt

如果获得的结果与上述类似,那就意味着ChatGPT已经找到了线索,并将根据进一步提出的问题进行构建。要记住的关键是,以下所有结果都将基于这个初始上下文,因此值得花时间定义第一个交互。

现在可以做些非常了不起的事情,构建数据库!

构建数据库

alt

在markdown中以表格格式详细生成数据模型

ChatGPT是这样回应的:

alt

不止如此,我们继续…

alt

生成SQL

CREATE TABLE Surveyors (
    id INT NOT NULL AUTO_INCREMENT,
    name VARCHAR(255NOT NULL,
    email VARCHAR(255NOT NULL,
    password VARCHAR(255NOT NULL,
    PRIMARY KEY (id)
);

CREATE TABLE Buildings (
    id INT NOT NULL AUTO_INCREMENT,
    type_id INT NOT NULL,
    coordinates VARCHAR(255NOT NULL,
    notes TEXT,
    surveyor_id INT NOT NULL,
    PRIMARY KEY (id),
    FOREIGN KEY (type_id) REFERENCES BuildingTypes(id),
    FOREIGN KEY (surveyor_id) REFERENCES Surveyors(id)
);

CREATE TABLE BuildingTypes (
    id INT NOT NULL AUTO_INCREMENT,
    type VARCHAR(255NOT NULL,
    PRIMARY KEY (id)
);

ChatGPT输出了完全可用的SQL,可以顺利创建SQL数据库。不止如此……

创建类图
alt
<script src="https://cdn.jsdelivr.net/npm/mermaid@8.6.0/dist/mermaid.min.js"></script>
<script>mermaid.initialize({startOnLoad:true});</script>

<div class="mermaid">
    classDiagram
    class Surveyors {
        +id: int
        +name: string
        +email: string
        +password: string
    }
    class Buildings {
        +id: int
        +type_id: int
        +coordinates: string
        +notes: string
        +surveyor_id: int
    }
    class BuildingTypes {
        +id: int
        +type: string
    }
    Surveyors --> Buildings
    Buildings --> BuildingTypes
</div>

ChatGPT生成的类图如下所示…

alt

ChatGPT真是让人惊喜:

alt
alt

ChatGPT没法显示图表,但可以生成能够创建图表的Mermaid代码。ChatGPT非常熟悉Mermaid脚本,可以生成这种脚本语言支持的图表。

由此可见,ChatGPT已经学会了编码,可以继续要求ChatGPT编写JavaScript、CSS和HTML,通过简单的请求将原型组合在一起。ChatGPT经过训练,可以用许多流行的编程语言生成代码。

如果有足够的时间,每个有经验的人都可以做到,只不过速度要慢一些。但这不是生产代码,要使代码达到生产质量和可用性水平,还需要做更多工作。不过ChatGPT已经很让人惊艳了。

我们尝试用ChatGPT来提高代码质量:

alt

生成遵循C#实践原则的类设计,包含错误处理和数据库访问层

ChatGPT的响应:

public class Surveyor
{
    private readonly string _name;
    private readonly string _email;
    private readonly List<ISurvey> _surveys;
    private readonly IDatabaseAccess _databaseAccess;

    public Surveyor(string name, string email, IDatabaseAccess databaseAccess)
    {
        _name = name;
        _email = email;
        _databaseAccess = databaseAccess;
        _surveys = new List<ISurvey>();
    }

    public void AddSurvey(ISurvey survey)
    {
        try
        {
            _surveys.Add(survey);
            _databaseAccess.SaveSurvey(survey);
        }
        catch (Exception ex)
        {
            // Log the error
        }
    }

    public void RemoveSurvey(ISurvey survey)
    {
        try
        {
            _surveys.Remove(survey);
            _databaseAccess.DeleteSurvey(survey);
        }
        catch (Exception ex)
        {
            // Log the error
        }
    }

    public List<ISurvey> GetSurveys()
    {
        try
        {
            return _databaseAccess.GetSurveys();
        }
        catch (Exception ex)
        {
            // Log the error
            return new List<ISurvey>();
        }
    }
}

public interface IDatabaseAccess
{
    void SaveSurvey(ISurvey survey);
    void DeleteSurvey(ISurvey survey);
    List<ISurvey> GetSurveys();
}

public class DatabaseAccess : IDatabaseAccess
{
    public void SaveSurvey(ISurvey survey)
    {
        // Implementation for saving the survey to a database
    }

    public void DeleteSurvey(ISurvey survey)
    {
        // Implementation for deleting the survey from the database
    }

    public List<ISurvey> GetSurveys()
    {
        // Implementation for retrieving a list of surveys from the database
    }
}

public interface ISurvey
{
    decimal Latitude { getset; }
    decimal Longitude { getset; }
    string BuildingType { getset; }
    Dictionary<stringstring> BuildingCharacteristics { getset; }
}

public class Survey : ISurvey
{
    public decimal Latitude { getset; }
    public decimal Longitude { getset; }
    public string BuildingType { getset; }
    public Dictionary<stringstring> BuildingCharacteristics { getset; }

    public Survey(decimal latitude, decimal longitude, string buildingType, Dictionary<stringstring> buildingCharacteristics)
    {
        Latitude = latitude;
        Longitude = longitude;
        BuildingType = buildingType;
        BuildingCharacteristics = buildingCharacteristics;
    }
}

作为一组脚手架类,非常不错了。

接下来让ChatGPT为RESP API创建Swagger,ChatGPT再次返回了足以启动开发的不错成果。

alt
结论

ChatGPT功能广泛,可以帮助启动开发,但还无法实现比较深度的工作。每个回合都必须靠人来激发ChatGPT完成任务,缺乏主动性,需要有人发起并推动接下来的步骤。

不过可以开发一组标准问题,促使ChatGPT提供好的结果,也许足以帮助团队以多种方式开始开发。


你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。微信公众号:DeepNoMind

- END -

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/597388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为何溃坝事故频发,大坝安全如何保障?

随着水利水电工程的重要性日益突显&#xff0c;水库大坝安全越来越受到相关部门的重视。因为大坝的安全直接影响水利工程的功能与作用&#xff0c;因此对大坝安全的监测显得十分必要。大坝安全监测的作用是能够及时掌握大坝的运行状态&#xff0c;及时发现大坝的变形、渗漏等异…

DB-GPT数据库GPT,支持本地部署,可以在私有环境中运行!!

DB-GPT 是什么&#xff1f; 随着大模型的发布迭代&#xff0c;大模型变得越来越智能&#xff0c;在使用大模型的过程当中&#xff0c;遇到极大的数据安全与隐私挑战。在利用大模型能力的过程中我们的私密数据跟环境需要掌握自己的手里&#xff0c;完全可控&#xff0c;避免任何…

PCB钥匙串 diy

制作目标&#xff1a;type-c供电的可触摸调光LED钥匙链。 初步设计方案&#xff1a; 芯片采用触摸调光芯片&#xff0c;用于LED灯光亮度调节及开关控制的单通道触摸芯片。使用该芯片可以实现LED灯光的触摸开关控制和亮度调节。具有如下功能特点和优势&#xff1a;灯光亮度可根…

Redis+Caffeine两级缓存

1、前言 在高性能的服务架构设计中&#xff0c;缓存是一个不可或缺的环节。在实际的项目中&#xff0c;我们通常会将一些热点数据存储到Redis或MemCache这类缓存中间件中&#xff0c;只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时&#xff0c;也能降低数据库的…

Sui生态域名服务SuiNS正式开放域名竞拍

Sui Name Service&#xff08;SuiNSSui Name Service&#xff08;是Sui推出的开放且分布式域名服务。SuiNS使用户可以竞拍以.sui结尾的专属域名&#xff0c;以建立链上身份。 在上线之际&#xff0c;SuiNS推出实时竞拍&#xff0c;为用户提供公平获取Sui生态专属域名的机会。若…

YUM在线升级功能

文章目录 YUM在线升级功能利用YUM进行查询、安装、升级与删除功能查询功能使用案例 安装/升级功能删除功能 YUM的配置文件修改软件源产生的问题与解决之道使用案例 YUM的软件群组功能使用案例 全系统自动升级 管理的抉择&#xff1a;RPM还是Tarball基础服务案例&#xff1a;以A…

E8-怎么监听表单里的日期控件被修改过

起因 业务部门每周六例会&#xff0c;业务部门请假的&#xff0c;如果包含星期六&#xff0c;需要老板审批。 我思路是当开始日期或结束日期被修改时&#xff0c;判断请假日期中是否包括周六&#xff0c;根据是束包含周六&#xff0c;去设置某个控件的值&#xff0c;后续步骤…

【Zero to One系列】springcloud微服务集成nacos,形成分布式系统

前期回顾&#xff1a; 【Zero to One系列】在WSL linux系统上&#xff0c;使用docker运行Mysql与Nacos 1、Nacos配置设置 先在nacos创建命名空间&#xff0c;如下图操作&#xff1a; 创建完成后&#xff0c;服务列表和配置列表&#xff0c;就都会出现如图的tab&#xff1a; 然…

南京邮电大学电工电子基础B实验八(译码与动态显示电路)

文章目录 一、 实验目的二、 主要仪器设备及软件三、 实验原理四、 实验任务与设计过程实验任务&#xff1a;设计过程&#xff1a; 五、 实验步骤与仿真结果1&#xff0e;用BCD七段显示译码器显示本人学号的后四位&#xff08;0709&#xff09;2&#xff0e;用BCD七段显示译码器…

API电商 ERP 数据管理

没有 API&#xff0c;应用之间的通信将会被扼杀&#xff1b;软件开发者将不断重写并执行相同功能的软件&#xff1b;创新的脚步将会放缓。 API 随处可见。大到一个软件系统&#xff0c;小到几行程序&#xff0c;只要具备了一定的特征&#xff0c;都可以被称作 API。那么&#…

产品手册是团队营销的心脏,让企业宣传更上一层楼

产品手册是企业团队营销的重要工具之一&#xff0c;能够帮助企业更好地宣传产品并提高销售业绩。在现代企业市场竞争日益激烈的情况下&#xff0c;如何制作一份优秀的产品手册成为了企业团队营销的重要课题。本文将从以下几个方面探讨产品手册对团队营销的意义以及如何制作一份…

RocksDB笔记 -- 整体架构

RocksDB是由Facebook开发的存储引擎, 它最初的目标是用于快速存储, 特别是Flash存储. 一个基于C开发keys-values存储引擎库. 整体架构 RocksDB由这三个基本结构组成: memtable, sstfile 和 logfile. 其中: memtable是一个内存数据结构, 新的写入会插入到memtable中, 同时可选…

前端加密对抗——CDP远程调用Debug断点函数python代码实现

文章目录 前端加密对抗——CDP远程调用Debug断点函数python代码实现实现请求断点处函数mitmproxy实现加解密 前端加密对抗——CDP远程调用Debug断点函数python代码实现 前几天看了看tools推送的前端加密的文章&#xff1a;前端加密对抗Part2-通过CDP远程调用Debug断点函数觉得…

NR 5G 系统消息MIB和SIB详解

系统信息分类 系统信息与各个信道的映射图示&#xff1a; 在5G高层中&#xff0c;系统信息可以分为三类&#xff1a; 最少系统信息&#xff08;Minimum System Information&#xff0c;MSI&#xff09;&#xff1a; MSI包括MIB和RMSIMIB的RRC消息 MasterInformationBlockMI…

DTU902 工控机 边缘计算网关

边缘计算网关&#xff08;Edge Computing Gateway&#xff09;是一种连接边缘设备和云端服务器的中间件设备&#xff0c;它可以处理和存储大量的数据&#xff0c;提高数据处理和传输的效率。边缘计算网关可以将数据预处理和过滤&#xff0c;减少数据传输到云端的负荷&#xff0…

2023 最新版IntelliJ IDEA 2023.1创建Java Web前(vue3)后端(spring-boot3)分离 项目详细步骤(图文详解)

文章目录 &#x1f6a9; 接上篇&#x1f3f3;‍&#x1f308; 项目构建所需的相关工具JavaIDEAmavenNodeJSVueVisual Studio Code &#x1f30c; 后端项目创建详细步骤&#x1f6eb; 1、开始创建新项目&#x1f6eb; 2、输入项目名称、选择项目存储位置、项目管理工具&#xff…

HTTP 教程1

HTTP 协议一般指 HTTP&#xff08;超文本传输协议&#xff09;。 超文本传输协议&#xff08;英语&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;是一种用于分布式、协作式和超媒体信息系统的应用层协议&#xff0c;是因特网上应用最为…

CPO技术重塑光模块:行业变革与突破

随着OpenAI的ChatGPT重磅面世&#xff0c;在短短时间内&#xff0c;内容生成式人工智能消费级应用掀起一波新的科技浪潮。ChatGPT用户数也在短短两个月内破亿,成为史上活跃用户破亿速度最快的软件。 可以预料的是,未来算力和数据需求将迎来爆发式的增长,且传统可插拔光模块技术…

3.2 动态规划算法的基本要素

博主简介&#xff1a;一个爱打游戏的计算机专业学生博主主页&#xff1a; 夏驰和徐策所属专栏&#xff1a;算法设计与分析 学习目标&#xff1a; 如果我要学习动态规划算法的基本要素&#xff0c;我会采取以下步骤&#xff1a; 1. 理解概念&#xff1a;首先&#xff0c;我会研…

【程序】基于matlab使用脉冲压缩估计范围和多普勒

一、前言 本例显示了脉冲压缩的效果&#xff0c;其中发射的脉冲被调制并与接收的信号相关联。雷达和声纳系统使用脉冲压缩&#xff0c;通过缩短回波持续时间来提高信噪比&#xff08;SNR&#xff09;和距离分辨率。此示例还演示了多普勒处理&#xff0c;其中目标的径向速度由目…