ChatGPT与软件架构(4) - 架构师提示工程指南

news2024/12/23 18:31:08

架构师可以通过各种类型的对话提示,提升驱动ChatGPT对话输出的质量,更好的利用AI能力辅助架构设计。原文: Software Architects’ Guide to Enhancing ChatGPT Interactions With Prompt Types

Robert Stump @Unsplash
Robert Stump @Unsplash

前言

随着ChatGPT等人工智能语言模型的发展,不同类型的提示有助于优化交互并针对特定上下文生成对应的响应。本文将探讨不同类型的提示及其历史和应用,重点关注与软件架构师相关案例,参考关键领域研究,并提供可供实际项目验证的提示示例。

人物/角色提示

人物/角色提示是一种用于为AI分配特定人物或角色的技术,指导AI提供更相关、特定于领域和上下文的响应。通过赋予AI角色或专业知识,用户可以更好的定制互动关系,聚焦对话内容。当寻求特定领域(如软件架构、市场营销或财务)建议或见解时,这种方法非常有用。当你想让AI承担特定角色或专业知识以提供更有针对性和更明智的回应时,可以使用人物/角色提示。

人物/角色提示源于人机交互和用户体验设计,在这些设计中,设计师创建用户角色从而与目标受众共情。这种方法同样适用于AI,特别是在会话代理和NLP中,并与GPT等模型一起发展。Li, Galley, Brockett, Gao和Dolan撰写过一篇相关论文<A Persona-Based Neural Conversation Model[1]>,该模型提出了基于角色的神经对话模型,用于生成更有吸引力和多样化的响应。

下面是一些例子:

  1. 假设你是微服务架构方面的专家,提供在大规模应用程序中设计和实现微服务的最佳实践。
  2. 假设你是安全专家,提供保护基于云的应用程序和保护敏感数据的建议。
  3. 假设你的角色是DevOps顾问,提供实现CI/CD流水线和改进部署流程的策略建议。
  4. 把自己想象成软件性能工程师,提供优化应用程序性能和减少延迟的技术建议。
  5. 想象一下数据库架构师的样子,解释不同数据库技术之间的利弊,并指导如何为特定用例选择最佳解决方案。

思维链(CoT,Chain of Thought)提示

思维链(CoT,Chain of Thought)提示是一种引导AI解释其反应背后的原因,从而提高决策过程透明度的技术。通过让AI描述影响其结论的因素,用户可以深入了解其思维过程,从而更好的评估和信任AI的建议。在复杂的决策场景中,理解AI的基本原理至关重要,当你需要AI澄清思维过程,或者当你想要更深入了解其决策所考虑的因素时,使用CoT提示。

CoT提示与可解释人工智能(Explainable AI, XAI)领域密切相关,XAI旨在使AI模型更加透明和可理解。Gunning的论文<Explainable Artificial Intelligence(XAI)>讨论了XAI项目的发展和目标,Miller的论文<Explanation in artificial intelligence: Insights from the social sciences>从多学科角度探讨了AI中的解释概念。

  1. 解释你为这个项目推荐特定云供应商的过程,以及考虑因素。
  2. 介绍一下你是如何为这个应用程序评估不同编程语言,以及选择最合适语言的标准。
  3. 详细介绍为这个高流量web应用确定最有效的负载均衡策略所采取的步骤。
  4. 概述选择特定容器编排平台来管理和扩展应用程序的原因。
  5. 阐明如何确定最合适的API设计方法以及在决策过程中考虑的利弊。

逐步/指令提示

逐步/指令提示是一种将复杂任务或过程分解成更小、更易于管理的步骤的方法。通过要求AI提供分步指令或指导,用户可以更好的理解并遵循所需步骤以实现特定目标。这种方法在处理复杂任务时很有帮助,例如在软件开发中采用新技术、配置系统或实现特定功能。当你需要详细指导或系统方法来完成复杂任务时,使用逐步/指令提示。

在Schank和Abelson的<Scripts, Plans, Goals, and Understanding: An Inquiry into Human Knowledge Structures>一书中探讨了将知识表示为程序的概念,从而影响了AI中逐步提示的发展。

  1. 提供在云供应商上设置Kubernetes集群的分步说明。
  2. 描述使用Jenkins或GitLab CI/CD等流行工具配置CI/CD流水线的过程。
  3. 概述在web应用中实现OAuth 2.0身份验证的步骤。
  4. 解释如何使用AWS Lambda和API网关创建和部署无服务功能。
  5. 详细介绍将现有单体应用迁移为微服务架构的过程。

目标导向提示

目标导向提示是一种专注于引导AI实现特定目标或解决特定问题的技术。通过在提示中说明期望的结果或目标,AI被鼓励生成解决方案或策略来帮助用户实现目标。在用户需要解决挑战、克服障碍或确定实现目标的有效方法的情况下,目标导向提示非常有用。当你希望AI专注于解决问题或提供策略以达到特定结果时,可以使用目标导向的提示。

Russell和Norvig在<Artificial Intelligence: A Modern Approach>一书中概述了基于目标的代理及其解决问题的能力。Laird、Newell和Rosenbloom的论文<Soar: An Architecture for General Intelligence>讨论了智能代理的Soar架构,强调了目标驱动的行为。

  1. 确定在数据库迁移期间最小化停机时间的最有效方法。
  2. 确定扩展web应用以处理用户流量激增的最佳方法。
  3. 找到降低分布式系统管理多个微服务的复杂性的解决方案。
  4. 制定将遗留系统与现代基于云的服务集成的策略。

探索性/问题驱动提示

探索性/问题驱动型提示向AI提出开放式问题,以鼓励对特定主题进行更深入的理解或探索。通过向AI提出问题,用户可以进行更具互动性的苏格拉底式对话,发现见解,并从AI的回答中学习。当用户想要探索不同视角、收集更多信息或分析各种方法之间的利弊时,这种方法非常有用。当你想让AI提供全面见解,探索不同领域时,可以使用探索性/问题驱动的提示。

Graesser, Person和Harter的论文<[Teaching tactics and dialogue in AutoTutor]>介绍了一种基于问题驱动方法来增强学习效果的AI辅助系统。

  1. 将本地应用迁移到云环境的主要挑战是什么?如何解决这些挑战?
  2. Istio或Linkerd这样的服务网格对基于微服务的应用有何好处?
  3. 在为分布式系统选择消息代理时应该考虑哪些因素?为什么考虑这些因素?
  4. 如何有效管理API版本以最小化中断并保持向后兼容?
  5. 哪些场景使用NoSQL数据库比传统关系数据库更有利?有什么潜在缺点?

提示示例

一个非常常见的例子是在开发电商网站的整个项目生命周期中,可以使用不同类型的提示来解决各种挑战并实现特定目标。以下是在开发电商网站时,何时及如何使用这些提示的例子:

1. 人物/角色提示

在计划和设计阶段,可以通过人物/角色提示收集不同专家视角的见解。例如:

  • UI/UX设计师:

作为一名拥有10年经验的UX/UI设计师,在设计电商网站的布局和用户流程时,需要考虑哪些关键原则?

  • 安全专家:

假设你是安全专家,在电商平台上保护用户数据和支付交易的最佳实践是什么?

2. 思维链(CoT)提示

在做出技术或设计选择时,可以使用CoT提示来理解AI建议背后的原因。例如:

对于构建电子商务网站,你会推荐哪些编程语言和框架,为什么? 你能解释一下电商网站使用单页应用程序(SPA)架构的优缺点吗?

3. 逐步/指令提示

在实现和部署阶段,逐步/指令提示可以指导我们完成复杂的任务。例如:

为电商网站建立一个安全支付网关,提供一个循序渐进的指导。 解释一下集成CDN以优化电商平台性能的过程。

4. 目标导向提示

在整个项目生命周期中,可以使用目标导向提示来处理特定挑战或实现特定目标。例如:

找出改善电子商务网站加载时间和性能的最有效策略。 提供确保电子商务平台对残疾用户可访问性的最佳方法。

5. 探索性/问题驱动提示

在计划、设计和评估阶段,探索性/问题驱动提示可以帮助收集见解并探索不同观点。例如:

选择电商平台要考虑的关键因素是什么?与Shopify、Magento和WooCommerce等流行解决方案相比如何? 如何利用社交媒体增强用户体验并推动电商销售?

通过在电商网站项目生命周期的不同阶段使用这些不同类型的提示,可以获取有价值的见解,做出更明智的决策,并有助于提高项目的整体结果。

用于定义服务级别的目标导向提示

要定义项目的服务级别和规范需求,可以结合使用目标导向和探索性/问题驱动的提示。目标导向提示可以帮助概述与服务级别或法规遵从性相关的特定目标,而探索性/问题驱动提示可以帮助收集见解并探索和这一主题相关的不同观点。下面是一些例子:

  1. "确定应追踪的关键表现指标(KPI),以确保电子商务网站的服务达到最佳水平。"
  2. "确定与托管服务商建立服务水平协议(SLA)的最佳方法,以保证正常运行时间和性能。"
  3. "制定计划,监控及维持电商网站的表现,以达到或超越目标服务水平。"
  4. "制定策略,扩展电商平台的基础设施,以应对高峰流量,同时保持所需的服务水平。"
  5. "概述一个定期检讨和更新服务水平目标的流程,以配合电商网站的发展和不断变化的需求。"
用于定义法规需求的探索性/问题驱动提示
  1. "电商网站必须遵守哪些重要的数据保护法规(例如GDPR和CCPA)?如何确保遵守这些法规?"
  2. "不同的支付处理规定(如PCI DSS),对电商网站有什么影响?应该采取什么措施来满足这些要求?"
  3. "电商网站应遵循哪些主要的易读性指引(例如WCAG),以确保所有用户都能获得积极的体验?如何实施这些指引?"
  4. "电商网站在跨境销售商品和服务时,应考虑哪些国际贸易和税收法规?如何满足这些要求?"
  5. "如何遵守不断发展的消费者保护条例,并确保电商网站的政策和做法符合这些标准?"

通过目标导向提示定义服务级别,并使用探索性/问题驱动提示来定义法规需求,就可以收集必要信息并制定策略来满足这些目标,并确保整个项目遵从必要的法律法规要求。

提示库

作为软件架构师,在YAML中构建提示库并将其存储在Git存储库中可以为AI项目提供许多好处。组织良好的提示库可以促进团队成员保持一致,重用工作结果,提高协作效率,让我们能够轻松跟踪和维护在ChatGPT驱动的应用中使用的提示,简化开发过程并提高AI交互的质量。

通过将提示存储在Git中,可以利用版本控制特性(例如跟踪更改、版本回滚和分支),确保团队可以在提示库上高效工作并无缝协作。

# chatgpt-prompts.yaml
# This YAML file contains AI prompts for ChatGPT that can be stored in a Git database
# and used within an Obsidian graph. It includes metadata about the prompt type, creator, 
# creation date, usage history, and comments.

prompts:
  - id: 1
    type: question
    category: general
    prompt: "Tell me a joke."
    keywords:
      - joke
      - humor
      - fun
    creator: user1
    created_at: 2023-04-23
    history:
      - date: 2023-04-23
        user: user2
    comments:
      - user: user2
        date: 2023-04-23
        comment: "This prompt generates entertaining results."

  - id: 2
    type: question
    category: general
    prompt: "What are the benefits of exercise?"
    keywords:
      - exercise
      - benefits
      - health
    creator: user3
    created_at: 2023-04-22
    history:
      - date: 2023-04-22
        user: user4
      - date: 2023-04-23
        user: user5
    comments:
      - user: user4
        date: 2023-04-22
        comment: "Great prompt for discussing the importance of physical activity."

  # Add more prompts with corresponding metadata here

总结

总之,理解和利用各种类型的提示,例如人物/角色提示、思维链提示、逐步指导提示、目标导向提示和探索性问题驱动提示,可以极大提高与ChatGPT交互的质量和有效性。作为软件架构师,在YAML中构建组织良好的提示库并将其存储在Git中可以简化开发过程并改善团队内部协作。通过掌握这些技术并将其整合到AI驱动项目中,可以释放ChatGPT的全部潜力,并创建强大的、特定于上下文的、类似人类的会话体验。


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

参考资料

[1]

A Persona-Based Neural Conversation Model: https://arxiv.org/abs/1603.06155,

- END -

本文由 mdnice 多平台发布

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

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

相关文章

12.数据结构之AVL树

前言 提到平衡二叉查找树&#xff0c;不得不提二叉查找树。二叉查找树&#xff0c;说简单点&#xff0c;其实就是将我们的数据节点&#xff0c;有序的维护为一个树形结构。这样我们查的时候&#xff0c;那么我们查找某个节点在不在集合中的时间复杂度实际上就是树的高度。如果…

华为OD机试真题 Java 实现【玩牌高手】【2023 B卷 100分】,附详细解题思路

一、题目描述 给定一个长度为n的整型数组&#xff0c;表示一个选手在n轮内可选择的牌面分数。选手基于规则选牌&#xff0c; 请计算所有轮结束后其可以获得的最高总分数。 选择规则如下&#xff1a; 在每轮里选手可以选择获取该轮牌面&#xff0c;则其总分数加上该轮牌面分…

python笔记 第二章 变量

系列文章目录 第一章 初识python 文章目录 2.1变量2.1.1变量的作用2.1.2定义变量标识符命名习惯使用变量 2.2 认识bugDebug工具Debug工具使用步骤: 2.3 数据类型 2.1变量 目标 变量的作用定义变量认识数据类型 2.1.1变量的作用 变量就是一个存储数据的的时候当前数据所在的…

Java基础——堆和栈、static关键字、静态变量和成员变量的区别

Java程序运行顺序&#xff1a;Java应用程序—虚拟机—操作系统—硬件 Java中栈内存用来存储局部变量和方法调用&#xff0c;堆内存用来存储Java中的对象&#xff0c;成员变量、局部变量、类变量指向的对象都存储在堆内存中。 static关键字&#xff1a; 随着类的加载而加载优先…

ISATAP隧道配置与验证

ISATAP隧道配置与验证 【实验目的】 熟悉IPv6ISATAP隧道的概念。 掌握IPv6和IPv4共存的实现方法。 掌握IPv6 ISATAP地址编址规则。 掌握IPv6 ISATAP隧道的配置。 验证配置。 【实验拓扑】 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 R1 S0/0 192.…

【内存管理大猫腻:从“越界”到“内存泄漏”应有尽有】

本章重点 什么是动态内存 为什么要有动态内存 什么是野指针 对应到C空间布局&#xff0c; malloc 在哪里申请空间 常见的内存错误和对策 C中动态内存“管理”体现在哪 什么是动态内存 动态内存是指在程序运行时&#xff0c;根据需要动态分配的内存空间。 #include <stdio.h&…

1.链表的实现:不带哨兵

一、链表linked list 1.定义 链表是数据元素的线性集合&#xff0c;其每个元素都指向下一个元素&#xff0c;元素存储上并不连续,链表逻辑连续。 2.分类 ①单向链表&#xff1a;每个元素只知道其下一个元素是谁 ②双向链表: 每个元素知道其上一个元素和下一个元素 ③循环链…

Java - Stream流详解

文章目录 前言 大家好,好久不见了,最近由于实训的影响导致拖更了,在更新这一次估计javaSE基本上就算是完结了,还有一些落下的后面也会补上的,下次见面就是数据结构了 尽情期待吧!那么就让我们步入Stream流的学习吧! 一、Stream流是什么&#xff1f; Stream流是Java 8中的一个…

【openEuler 20.03 TLS编译openGauss2.0.0源码】

openEuler 20.03 TLS编译openGauss2.0.0源码 一、安装环境二、安装前准备二、安装步骤 一、安装环境 项目Value操作系统openEuler 20.03 64bit with ARMopenGauss2.0.0openGauss-third_party2.0.0 二、安装前准备 项目Value购买华为ECS鲲鹏 8vCPU32G 100M/s带宽 openEuler 2…

使用CubeMX配置STM32驱动HC-SR04超声波模块

文章目录 前言1 使用STM32CubeMX初始化代码1.1 时钟配置1.2 设置定时器1.3 触发引脚1.4 串口配置 2 代码编写2.1 添加驱动文件2.2 修改main.c 3 实现效果参考 前言 硬件选择 stm32f103c8t6&#xff08;最小板&#xff09;hc-sr04超声波模块 软件环境 stm32cubeIDE 1.12.1 …

【Linux】TCP网络套接字编程+协议定制+序列化和反序列化

悟已往之不谏&#xff0c;知来者之可追。抓不住的就放手&#xff0c;属于你的都在路上…… 文章目录 一、TCP网络套接字编程1.日志等级分类的日志输出API2.单进程版本的服务器客户端通信3.多进程版本和多线程版本4.线程池版本5.守护进程化的线程池服务器6.三次握手和四次挥手的…

python编程——pycharm的安装与使用

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 目录 一、python IDLE的使用 二、pycharm的安装与使用 1、…

十分钟带你看懂——Python测试框架之pytest最全讲

pytest特短 pytest是一个非常成熟的全功能的Python测试框架&#xff0c;主要有以下几个特点&#xff1a; 简单灵活&#xff0c;容易上手 支持参数化 能够支持简单的单元测试和复杂的功能测试&#xff0c;还可以用来做selenium/appnium等自动化测试、接口自动化测试&#xff08…

重磅版本发布|三大关键特性带你认识 Milvus 2.2.9 :JSON、PartitionKey、Dynamic Schema

亮点颇多、精彩程度堪比大版本的 Milvus 2.2.9 来啦&#xff01; 随着 LLM 的持续火爆&#xff0c;众多应用开发者将目光投向了向量数据库领域&#xff0c;而作为开源向量数据库的领先者&#xff0c;Milvus 也充分吸收了大量来自社区、用户、AI 从业者的建议&#xff0c;把重心…

非常简单就能理解的 链表带环问题 你也能轻松学会!

文章目录 判断链表是否带环若链表带环找出环的入口其他高频的面试问题 判断链表是否带环 题目描述&#xff1a; 给定一个链表&#xff0c;判断链表中是否有环。 思路&#xff1a; 可以明确的是&#xff1a;若一个链表带环&#xff0c;那么用指针一直顺着链表遍历&#xff0c…

《嵌入式系统》知识总结10:使用位带操作操纵GPIO

位操作 汇编层面 外设控制常要针对字中某个位&#xff08;Bit&#xff09;操作 以字节编址的存储器地址空间中&#xff0c;需要3步骤&#xff08;读出-修改-写回&#xff09; 1.&#xff08;从外设&#xff09;读取包含该位的字节数据 2. 设置该位为0或1、同时屏蔽其他位&am…

微信小程序 <view></view>容器嵌套,wxss样式修改内部内部样式不产生效果

网上关于”微信小程序讲的知识很少“&#xff0c;微信开发文档对于新手不是很友好&#xff0c;但是建议一定要学会看文档。 问题如下&#xff1a; 我写了好几个<view></view> 容器嵌套&#xff0c;我在对内部容器包括的内容做修改时&#xff0c;不产生效果&#…

apache RocketMQ远程代码执行(CVE-2023-33246)

RocketMQ是阿里巴巴在2012年开发的分布式消息中间件&#xff0c;专为万亿级超大规模的消息处理而设计&#xff0c;具有高吞吐量、低延迟、海量堆积、顺序收发等特点。它是阿里巴巴双十一购物狂欢节和众多大规模互联网业务场景的必备基础设施。 RocketMQ的NameServer、Broker、…

【计算机网络之HTTP篇】Cookie与Session的区别

目录 Cookie 原理 缺点 Session 原理 区别 Cookie cookie是浏览器在本地存储数据的一种机制。 原理 当浏览器向服务器第一次发送请求时&#xff0c;服务器会向浏览器返回一个Cookie&#xff0c;此时 cookie记录着浏览器访问服务器的用户登录状态。 后续浏览器再次访问服…

[深度学习入门案例1]基于Keras的手写数字图像识别

文章目录 一、工具与环境 二、深度学习环境的搭建 1.安装Anaconda 2.创建虚拟环境 第1步&#xff1a;打开Anaconda的命令窗口&#xff0c;即Anaconda Prompt 第2步&#xff1a;使用命令创建指定版本的python环境&#xff08;这里以py36命令环境名称举例&#xff09; 3.切换…