乐趣区

关于人工智能:ChatGPT与软件架构1-快速原型

通过 ChatGPT 生成设计和原型代码,能够帮忙团队疾速启动我的项目,验证想法,提高效率。原文: ChatGPT and Software Architecture

OpenAI 的 ChatGPT 当初越来越火,呈现了各种乏味用例。

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

就像在白板上画画一样,过程会有点凌乱,各种因素相互作用会导致不得不通过一直批改来找到最佳答案。本文旨在演示胜利应用 ChatGPT 的一些发问技巧,这些技巧产生了真正有价值的后果。

须要留神,ChatGPT 仍在学习中,所以不要对一致性有太大冀望,屡次问同样的问题可能会失去不同的后果。

设置 ChatGPT 帐户很简略,能够依照官网文档实现: https://openai.com/blog/chatgpt/

用户故事

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

写一个用户故事,测量员登录到零碎,输出天文空间坐标、修建、修建类型和特色信息,这是他们一天中要进行的许多考察中的一个

如你所见,这是个特定行业的用户故事。ChatGPT 领有宏大的知识库,须要通过试验来理解 ChatGPT 的常识深度,即它晓得些什么?

第一个问题的要害是要对要害细节十分明确,以获得最佳后果。这样,ChatGPT 能够响应一组体面的后果,如下所示:

如果取得的后果与上述相似,那就意味着 ChatGPT 曾经找到了线索,并将依据进一步提出的问题进行构建。要记住的要害是,以下所有后果都将基于这个初始上下文,因而值得花工夫定义第一个交互。

当初能够做些十分了不起的事件,构建数据库!

构建数据库

在 markdown 中以表格格局具体生成数据模型

ChatGPT 是这样回应的:

不止如此,咱们持续…

生成 SQL

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

CREATE TABLE Buildings (
    id INT NOT NULL AUTO_INCREMENT,
    type_id INT NOT NULL,
    coordinates VARCHAR(255) NOT 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(255) NOT NULL,
    PRIMARY KEY (id)
);

ChatGPT 输入了齐全可用的 SQL,能够顺利创立 SQL 数据库。不止如此……

创立类图
<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 生成的类图如下所示…

ChatGPT 真是让人惊喜:

ChatGPT 没法显示图表,但能够生成可能创立图表的 Mermaid 代码。ChatGPT 十分相熟 Mermaid 脚本,能够生成这种脚本语言反对的图表。

由此可见,ChatGPT 曾经学会了编码,能够持续要求 ChatGPT 编写 JavaScript、CSS 和 HTML,通过简略的申请将原型组合在一起。ChatGPT 经过训练,能够用许多风行的编程语言生成代码。

如果有足够的工夫,每个有教训的人都能够做到,只不过速度要慢一些。但这不是生产代码,要使代码达到生产品质和可用性程度,还须要做更多工作。不过 ChatGPT 曾经很让人惊艳了。

咱们尝试用 ChatGPT 来进步代码品质:

生成遵循 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 { get; set;}
    decimal Longitude {get; set;}
    string BuildingType {get; set;}
    Dictionary<string, string> BuildingCharacteristics {get; set;}
}

public class Survey : ISurvey
{public decimal Latitude { get; set;}
    public decimal Longitude {get; set;}
    public string BuildingType {get; set;}
    public Dictionary<string, string> BuildingCharacteristics {get; set;}

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

作为一组脚手架类,十分不错了。

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

论断

ChatGPT 性能宽泛,能够帮忙启动开发,但还无奈实现比拟深度的工作。每个回合都必须靠人来激发 ChatGPT 实现工作,不足主动性,须要有人发动并推动接下来的步骤。

不过能够开发一组规范问题,促使 ChatGPT 提供好的后果,兴许足以帮忙团队以多种形式开始开发。


你好,我是俞凡,在 Motorola 做过研发,当初在 Mavenir 做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI 等技术始终保持着浓重的趣味,平时喜爱浏览、思考,置信继续学习、一生成长,欢送一起交流学习。微信公众号:DeepNoMind

本文由 mdnice 多平台公布

退出移动版