使用AI聊天机器人生成软件架构语法图

在当今快节奏的开发环境中,高效的沟通和协作是项目成功的关键。在本文中,我们将探讨生成式 AI(尤其是 Amazon Bedrock)的力量如何彻底改变跨职能工程团队的协作方式。

从破译现有代码到将解决方案架构师注释转换为可操作的序列流,甚至促进敏捷项目管理,人工智能驱动的 Mermaid 语法图有可能重新定义团队可视化和执行工作的方式。

 Mermaid图表:基于 JavaScript 的图表和图表工具,可呈现 Markdown 启发的文本定义以动态创建和修改图表。
我们可以通过简单的基于代码的语法生成许多不同样式的图表,在本文中,我们将介绍如何通过 Generative AI 和 Amazon Bedrock 以及基于文本的提示动态生成代码。

以通过以下页面访问 Mermaid 网站以了解更多信息:https ://mermaid.js.org/

让我们看一下为跨职能工程团队中的不同团队成员生成Mermaid图的不同用例。

理解并记录现有代码
我们的第一个基本示例是,工程经理需要以状态图的形式理解和记录现有的代码逻辑,支持 QA 团队测试功能,而工程师和业务分析师则需要一目了然地了解现有的逻辑是什么。

让我们采用 .NET C# API 控制器的现有基本代码,如下所示:

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;

namespace YourNamespace.Controllers
{
    [Route("api/orders")]
    [ApiController]
    public class OrderController : ControllerBase
    {
        [HttpPost]
        public IActionResult CreateOrder([FromBody] OrderDto order)
        {
            if (order.OrderLines.Sum(ol => ol.Quantity) <= 0 || order.OrderLines.Sum(ol => ol.Quantity) > 1000)
            {
                return BadRequest("Total order quantity must be between 1 and 1000.");
            }

            if (order.OrderAddress.Country != "UK")
            {
                return BadRequest("Order address must be in the UK.");
            }

            if (order.Customer.Status == "Hold")
            {
                return BadRequest("Customer is on 'Hold' status and cannot place orders.");
            }

            foreach (var orderLine in order.OrderLines)
            {
                if (orderLine.Quantity <= 0 || orderLine.Quantity > 10)
                {
                    return BadRequest("Order line quantity must be between 1 and 10.");
                }

                if (!orderLine.ProductId.StartsWith("PROD-"))
                {
                    return BadRequest("Product ID must start with 'PROD-'.");
                }

                if (string.IsNullOrEmpty(orderLine.Description) || orderLine.Description.Length <= 50)
                {
                    return BadRequest("Description must have a length greater than 50.");
                }
            }
            return Ok("Order created successfully.");
        }
    }

    public class OrderDto
    {
        public List<OrderLineDto> OrderLines { get; set; }
        public AddressDto OrderAddress { get; set; }
        public CustomerDto Customer { get; set; }
    }

    public class OrderLineDto
    {
        public int Quantity { get; set; }
        public string ProductId { get; set; }
        public string Description { get; set; }
    }

    public class AddressDto
    {
        public string Country { get; set; }
    }

    public class CustomerDto
    {
        public string Status { get; set; }
    }
}

我们可以使用类似下面的提示:

人类:请以Mermaid状态图的形式总结一下这段代码?<此处的代码>"。

这将通过亚马逊 Bedrock 使用生成式人工智能动态生成以下美人鱼语法的状态图:

stateDiagram-v2
 

  • -->ValidateOrderQuantity
      ValidateOrderQuantity-->ValidQuantity: Total quantity <= 1000
      ValidateOrderQuantity-->InvalidQuantity: Total quantity > 1000
      ValidQuantity-->ValidateAddress: Order address
      ValidateAddress-->UKAddress: Address country = UK
      ValidateAddress-->NonUKAddress: Address country != UK
      UKAddress-->ValidateCustomerStatus: Customer status
      NonUKAddress-->BadRequest: Return 400
      ValidateCustomerStatus-->ValidStatus: Status != Hold 
      ValidateCustomerStatus-->InvalidStatus: Status = Hold
      ValidStatus-->ValidateOrderLines: Each order line
      InvalidStatus-->BadRequest: Return 400
      ValidateOrderLines-->ValidLine: Quantity, ID and Description valid
      ValidateOrderLines-->InvalidLine: Quantity, ID or Description invalid
      ValidLine-->CreateOrder: Return 200 OK
      InvalidLine-->BadRequest: Return 400
      CreateOrder-->

    • : Order created
        BadRequest-->

      • : Bad request error

        如果我们使用 Mermaid playground 来查看这个图表,就会发现它准确地记录了代码中的业务逻辑。

        好了,这只是一个非常基本的代码示例,但我们可以看到团队根据状态图一目了然地了解现有代码的业务逻辑的价值所在

        项目负责人的甘特图
        现在让我们举一个例子,项目负责人试图通过使用人工智能生成的甘特图直观地展示三个团队完成的工作及其依赖关系。我们可以给出下面的示例提示:

        人类:请为我创建一个Mermaid 语法甘特图,其中显示以下内容:

        Order Domain 团队将于 2​​023 年 10 月 1 日至 2023 年 11 月 28 日期间开发功能 X。然后,他们将在 2023 年 11 月 31 日至 2024 年 2 月 10 日期间启动功能 Y。

        Customer Domain 团队将于 2​​023 年 9 月 1 日至 2023 年 10 月 1 日期间开发功能 Z。

        平台团队正在 2023 年 11 月 1 日至 2023 年 12 月 1 日期间开发功能 A。

        日期格式应为月/年

        这会生成以下 Mermaid 语法图代码:

        gantt
            title Project Timeline
            dateFormat  MM/YYYY
            axisFormat %m/%Y

            section Order Domain
            Feature X :10/2023, 11/2023
            Feature Y :11/2023, 02/2024

            section Customer Domain  
            Feature Z :09/2023, 10/2023

            section Platform
            Feature A :11/2023, 12/2023


        支持解决方案架构师生成用户流程
        让我们看一个更基本的示例,在事件风暴和需求收集之后,解决方案架构师生成一个序列图以更好地说明流程。

        我们可以在这个虚构的示例中使用以下示例提示:

        人类:请为我创建一个美人鱼语法序列类型图,其中显示以下内容:

        一位顾客走进分店并选择产品。

        分行经理扫描收银台的产品并向用户提供总数。

        然后,分行经理询问客户的电子邮件地址。

        顾客使用现金或银行卡支付产品费用。

        客户的电子邮件地址会收到一封电子邮件收据。

        客户还可以从分行经理处获得下一笔订单 10% 的折扣。

        使用生成式 AI,我们可以动态生成以下 Mermaid 语法输出:

        sequenceDiagram
          participant C as Customer
          participant BM as Branch Manager
          participant E as Email System
          
          C->>BM: Selects products
          BM->>BM: Scans products at till
          BM-->>C: Gives total cost
          BM->>C: Asks for email address
          C->>BM: Provides email address
          C->>BM: Pays with cash/card
          BM->>E: Sends receipt to email 
          E-->>C: Emails receipt
          BM->>C: Gives 10% off next order

        结论
        我们可以利用生成式人工智能和亚马逊 Bedrock 的强大功能,以多种方式为跨职能工程团队提供支持。