AI辅助编程3 提示(提问)工程
3 提示工程
提示工程是机器学习和自然语言处理的一个子领域,研究如何让计算机理解和解释人类语言。其主要目标是研究如何以正确的方式与大型语言模型(旨在处理和生成类似人类语言反应的复杂人工智能系统)对话,以便它们生成我们想要的答案。
你知道当你向别人征求意见时,你必须给他们提供一些背景信息,并明确你需要什么吗?LLM(large language models)也是如此。你必须精心设计你的问题或提示。有时,你甚至可以在问题中加入一些暗示或额外信息。
这也不仅仅是一次性提问,来来回回,不断调整你的问题,直到你得到所需的金块信息。
例如,假设你正在使用人工智能辅助编程工具开发一个网络应用程序。你首先会问如何用Pythoon创建一个简单的用户登录系统。最初的回复可能涵盖了基础知识,但随后您发现自己需要更高级的功能。于是,你又提出了更具体的提示,询问如何结合密码加密和安全连接数据库。与人工智能的每一次互动都会磨练它的反应,使其逐渐适应项目的具体需求。
请记住,提示工程已成为炙手可热的工作类别。根据韦莱韬悦咨询公司(Willis Towers Watson)的数据,提示工程师的平均年收入徘徊在13万美元左右,不过这个数字可能偏保守。为了吸引优秀人才,公司通常会提供诱人的股权和奖金。
在本章中,我们将深入探讨提示工程师的世界,并解读有用的策略和行业诀窍。
3.1 艺术与科学
提示工程是艺术与科学的结合。一方面,你必须选择正确的词语和语气,让人工智能按照你的意愿做出反应。这需要将对话引向某个方向。这需要一点直觉和创造力,将对话引向某个方向,并精炼你的语言,引出细致入微的回答。
是的,这可能很棘手,尤其是对于软件开发人员来说。通常情况下,你按照一套规则编写代码,要么成功,要么编译器告诉你做错了什么。这是合乎逻辑和可预测的。但是提示工程呢?就没那么简单了。它更自由,更不可预测。
话又说回来,提示工程也有不少科学道理。你需要了解人工智能模型工作的原理和细节。除了创造力,你还需要精确度、可预测性和复制结果的能力。这通常意味着你必须进行实验,尝试不同的提示,分析结果,并不断调整,直到得到正确的回应。
对于提示工程,不要指望找到任何每次都能奏效的神奇解决方案。当然,有很多课程、视频和书籍都声称掌握了提示工程的所有 "秘诀"。但请谨慎对待,否则你可能会失望。
另外,人工智能和机器学习的世界总是在不断变化,新的模型和技术层出不穷。因此,要想在即时工程学方面拥有一种明确的技术?这是一个不断变化的目标。
3.2 挑战
提示工程可能令人沮丧。即使是对提示语措辞最微小的改动,也会对LLM的输出结果产生巨大影响。这是因为引擎盖下的先进技术是基于概率框架的。以下是提示工程面临的一些挑战:
-
词不达意
LLM 可能是个话匣子。如果给他们一个提示,他们可能就会滔滔不绝地回答,而你想要的只是一个快速的答案。他们往往会抛出一大堆相关的观点或事实,使回答超出必要的篇幅。如果您希望直奔主题,只需要求"简明扼要"即可。 -
不可转移性
这意味着,一个提示语对一个LLM 来说很有效,但对另一个LLM来说可能就不那么有效了。换句话说,如果你要从 ChatGPT 切换到 Gemini 或 GitHub Copilot,由于每个 LLM 的训练、设计和专业性不同,你可能需要调整你的提示。不同的模型是在不同的数据集和算法上训练出来的,因此对提示语的理解和解释也各不相同。
- 长度敏感性
LLM可能会被冗长的提示语所淹没,从而开始忽略或误解部分输入内容。这就好像LLM的注意力会减弱,其反应也会变得有些心不在焉。这就是为什么你应该避免在提示中提供详细的要求;将提示保持在一页以内。
- 含糊不清
如果您的提示不明确,LLM可能会感到困惑,并提供一些偏离事实或纯属虚构的回答。清晰是关键。
尽管如此,还是有一些方法可以改善结果。我们将在本章的其余部分介绍这些方法。
3.3 提示语
你可以认为提示语有四个主要组成部分:
上下文规定了LLM在提供回复时所扮演的角色。其次是指令,如总结、翻译或分类。然后是输入内容,如果您希望LLM处理信息以创建更好的回复。最后,您可以说明希望如何格式化输出。
请记住,您并不需要所有这些组件。事实上,您可能只需要其中一个就能得到很好的响应。但一般来说,最好向LLM提供更具体的细节。
3.4 上下文
在提示语的开头,您通常会用一两句话来介绍背景。通常情况下,您会指定希望人工智能在提供回复时扮演的角色或人物。这样做出的回答不仅更准确,而且与上下文相关,确保结果更有意义。
例如,如果您想调试一段代码,您可以使用这个作为上下文:
- 提示: 您是一名经验丰富的软件工程师,擅长调试Python应用程序。
或者,假设您想了解某种算法的优化技术。您可以这样设置情境
- 提示: 你是一名资深软件开发人员,擅长算法优化。
添加上下文有助于LLM以正确的心态来处理提示。
3.5 指令
您的提示应至少包含一条明确的指令。没有什么能阻止您添加更多指令,但您需要谨慎。在提示中加入大量询问会让 LLM陷入困境,难以获得您想要的答案。
让我们来分析一下出现这种情况的原因。首先,当你有多个指令时,情况会变得有点模糊。如果它们不明确,或者似乎相互冲突,LLM可能会感到困惑,不知道应该关注哪一个,或者如何平衡它们。
其次,指令越多,LLM需要处理的事情就越多。它必须处理和理解提示的每一部分,然后想出如何将所有部分编织成一个连贯的回复。这需要大量的脑力劳动,有时会导致错误或答案偏差。
LLM会按顺序一条一条地阅读说明。因此,你排列这些问题的方式会影响他们对问题的理解以及你得到什么样的答复。
有鉴于此,专业建议是保持简单。与其一次性向LLM抛出一大串问题,不如尝试将它们分解成一系列较小的提示。这就像前后对话,而不是独白。
提示语的说明类型也很多。在接下来的几节中,我们将讨论软件开发中使用的一些主要指令。
3.5.1 小结(Summarization)
小结可以将较长的文本浓缩为较短的版本,同时保留主要观点和要点。这对于快速掌握冗长的文档非常有用。
- 代码文档
对大量文档进行简明概述,突出关键功能、依赖关系和结构。如:"总结以下文档的要点,以提供代码库的快速概览"。
- 错误报告
快速识别用户在大量或冗长的错误报告中报告的主要问题。 如:"总结以下错误报告中报告的常见问题,找出需要解决的主要问题。"
- 研究论文
从冗长的研究论文或技术文章中提取简洁的见解,为用户提供最新的研究或技术信息。如:"提供以下研究论文中讨论的主要发现和技术的摘要"。
- 变更日志
从冗长的更改日志中了解软件库或工具新版本的主要更改。如:"总结以下 1.1.2 版变更日志中的关键变更"。
- 电子邮件线程
从冗长的电子邮件线程中提取讨论或决策的要点。如:"总结以下电子邮件线程中的讨论要点"。
另一种总结类型是主题建模,即通过统计模型发现文档集合中出现的抽象 "主题"。下面是一些供开发人员使用的主题建模提示:
- 提示: 指出以下文本中讨论的主要话题: {文本}
- 提示: 从下面的文字中提取关键词,推断主要话题:{文本}
- 提示: 根据以下文本的内容为其建议标签: {文本}
3.5.2 文本分类
文本分类是指给计算机提供一堆文本,让它学会给这些文本贴标签。情感分析就是其中的一种,例如当你有一个社交媒体帖子列表时,LLM 就会找出哪些帖子具有积极或消极的含义。对于开发人员来说,情感分析是衡量用户对应用程序反馈的有用工具。
一些示例提示包括:
- 提示: 您能否分析这些客户评论,并告诉我情感一般是正面、负面还是中性?{文本}
- 提示: 这是我们用户论坛中讨论最新更新的主题。您能为我总结一下总体情绪吗?{文本}
- 提示: 我从我们的应用程序商店页面上整理了一份反馈列表。您能按情绪对评论进行分类吗?{文本}
- 提示: 评估这些关于我们产品公告的博文评论的情感。共识是什么?{文本}
3.5.3 建议
您可以指示LLM提供建议。开发人员可以利用这些反馈来改进回复的质量,例如消除错误、完善代码或更有效地使用 API。
看看这些可能会用到的提示示例:
- 提示: 当我尝试调用 <Method()> 时,以下代码片段抛出了 NullPointerException。您能帮助找出潜在原因并提出修复建议吗?
- 提示: 这是我编写的一个函数,用于对整数列表进行排序。您能否推荐一些优化方法,使其运行得更快或更具可读性?
- LLM 建议可以成为您工作的强大加速器,大大节省时间,并提供您可能没有想到的想法。在处理复杂或细微的任务时,这种技术尤其有用。
但也有缺点。潜在的问题是,LLM可能会过于简化回答,而忽略了细微差别。此外,请记住,模型的知识是在某个时间点冻结的,因此它可能无法掌握最新的信息或趋势。
如果说推荐是一种启动方式的话。不过,你还是需要自己深入研究,以获得全面的信息。
3.5.4 翻译
本地化本质上是使软件适应特定地区的语言和文化规范。它使您的软件能够使用当地的行话,并理解地区性的怪癖,这种能力是拓展市场和与受众建立更紧密联系的关键。这可能会带来连锁效益:用户会更高兴,因为软件感觉是为他们量身定做的,而用户高兴就意味着您的企业底线更健康。
在竞争激烈的市场中,本地化可以让您在其他替代品无法满足或根本不存在的情况下获得优势。此外,通过使您的软件符合当地的方式,包括遵守地区法规,您的软件不仅是一个选择,而且往往是一个市场的唯一选择。
另一方面,本地化也并非没有挑战。它可能既昂贵又耗时。它需要一丝不苟的质量保证,以保持软件在不同语言中的完整性。此外,软件开发不会停滞不前。它是一个不断更新和增加新功能的循环,其中每一个功能都可能需要进行本地化工作。这种持续的过程增加了项目的复杂性和额外成本。
这正是本地化管理软件可以提供帮助的地方。先进的系统能够在多种语言之间进行翻译。它们可以作为开发人员工具包中的一个强大工具。表 3-2 显示了本地化过程中可能会用到的一些提示。
- 用户界面文本翻译:翻译按钮、菜单项、错误信息、对话框等。 "将以下用户界面文本翻译成法语: 保存、退出、文件、编辑、帮助"。
- 文档翻译翻译:用户指南、帮助文件和其他文档。 "将以下用户手册段落翻译成西班牙语。
- 错误信息翻译:翻译软件可能生成的错误信息。 "将以下错误信息翻译成德语:找不到文件、拒绝访问、网络连接丢失。
- 工具提示翻译:将用户将鼠标悬停在项目上时提供附加信息的工具提示翻译成德文。又如:"将以下工具提示翻译成日语: 单击保存、单击打开新文件、单击打印"。
尽管如此,我们还是应该谨慎对待LLM的多语言能力。它们并非万无一失。这些模型有时可能会忽略语言的细微差别、惯用表达和独特的文化背景。语言的细微差别是复杂的,正确处理这些细微差别不仅仅是直接翻译--而是要以正确的方式传达正确的含义。
处理特定的术语或名称可能很棘手,尤其是在另一种语言中没有明确对应的术语或名称时。还有一个挑战是如何保持正确的语气和风格。这不仅仅是用词的问题,也是如何表达的问题,而这一点在不同的语言或文化中会有很大的不同。
请一位语言专家对输出内容进行检查,可以为您省去一些麻烦。
3.6 输入内容
在制作提示时,使用 #### 或""""等特殊符号将您的指令与您希望LLM处理的内容或信息明确区分开来会很有帮助。这些符号就像边界或标记,让人清楚地知道指令在哪里结束,内容在哪里开始。
考虑这样一种情况:软件开发人员需要帮助从冗长的文档中总结出有关他们正在集成的新 API 的要点。以下是提示的结构:
提示: 从下面的文字中提取API的关键实施步骤:
文档: """{此处为 API 文档文本}."""
使用""""分隔符是一种将指令与API文档文本分割开来的简便方法。它能让LLM更清晰地了解需要做什么,并增加获得清晰的主要步骤摘要的机会。此外,这些分隔符还能整理提示信息,使其更易于阅读,这对于较长或较复杂的文本输入来说是个真正的救星。
3.7 格式
在提示符中,你可以告诉LLM输出的格式。下面是一个例子:
提示: 创建一个Python 函数,接收用户对象列表(每个对象包含一个用户的ID和名称),并返回一个将用户ID映射到名称的JSON对象。将输出格式化为JSON。
ChatGPT:
还有其他格式化输出的方法:
- 表格:
"创建一个表格,比较Python、Java 和 C++ 的语法、性能和使用场景。"
- 列表:
"列出对加载缓慢的网页进行故障排除的步骤"。
- Markdown/HTML
"用Markdown格式解释HTTP GET和 POST 方法的区别。"
- 文本层次结构
"提供软件开发生命周期(SDLC)的结构化大纲,包括其阶段和每个阶段的关键活动。"
- LaTeX格式化
"用 LaTeX 符号表达二进制搜索算法的时间复杂性"。
通过提示,您还可以指定回答的长度。你可以用 "提供一个简短的摘要 "或 "写一个详细的解释 "这样的指示来引导LLM。或者你也可以说得更具体一些,比如说回答不得超过 300 字。LLM可能会超过你提供的字数限制,但至少会在大致范围内。
3.8 最佳实践
接下来,我们将介绍一些编写提示语的最佳实践,这些提示语将有助于得到您想要的答案。但不要把这些当作福音。这些建议更像是一般性建议--可能有些主观,而不是硬性规定。当你花更多时间与法律硕士聊天时,你可能会发现自己的提问方式对你很有帮助。这都是及时工程之旅的一部分。
3.8.1 要有针对性
制作正确的提示语就像在一次愉快的谈话中找到甜蜜点一样,这也许是与这些文本生成系统合作的最关键一步。细节越多越好。您还需要清楚地说明。否则,LLM可能会做出假设,甚至产生幻觉。
首先,让我们来看看一些过于模糊的提示。
- 提示: 开发一项功能以增强数据安全性。
- 提示: 你能构建一个工具来自动完成这一过程吗?
- 提示:优化代码: 优化代码。
- 提示:优化代码: 我们需要一个函数来处理交易。
下面的内容要详细得多,应该能得到更好的结果:
-
提示: 开发一个从字符串解析日期的Python函数。该函数应能处理 YYYY-MM-DD、MM/DD/YYYY 和 Month DD, YYYY 等格式。它应返回一个日期对象。提供一个脚本,演示该函数至少能正确处理每种格式的三个示例,同时提供一份文档,解释任何依赖关系、函数中使用的逻辑以及如何运行该脚本的说明。
-
提示: 开发一个SQL查询,从数据库中检索 2023年最后一个季度购物金额超过500美元的客户名单。查询应返回客户的全名、电子邮件地址、消费总额和最后一次购物的日期。结果应按消费总额降序排序。请确保优化查询性能。
3.8.2 缩略语和技术术语
在起草提示时,明确专业术语和缩略语至关重要。这些专业术语在不同的语境中往往有不同的含义,可能导致无益的回复。因此,最好拼出缩略语,并对使用的任何技术术语给出明确的定义或解释。
例如,假设您正在使用 ChatGPT 帮助解决数据库连接问题。一个拙劣的提示可能是
- 提示: 出现DB连接问题。如何解决?
在这个提示中,"DB "的含义含糊不清,因为它可能指 MySQL、PostgreSQL 或其他不同的数据库系统,而且连接问题的性质也没有明确。
更有效的提示应该是
- 提示: 我在尝试使用JDBC连接PostgreSQL数据库时遇到连接超时问题。如何解决?
该提示清楚地说明了使用的数据库系统、连接方法和遇到的具体问题。
3.8.3 零镜头和少镜头学习
在零镜头学习中,你只需提供一个提示,就能得到你想要的答案。通常情况下,这样做效果很好。但鉴于编程语言和框架的复杂性,有时你需要对LLM进行提示。
你可以通过少量学习来做到这一点。这指的是LLM通过极少的示例或训练数据来理解和执行任务的能力。与传统的机器学习模型相比,这是一个很大的优势,因为传统的机器学习模型可能需要大量的训练数据才能充分完成任务。LLM 的能力主要归功于它在针对特定任务进行微调之前,在各种互联网文本上进行的大量预训练。
让我们来看一个少量学习的例子。假设我们要生成一个函数,对给定的数字列表进行归一化处理。它将把列表中的数值缩放到 [0, 1] 的范围内。在指令中,我们列出了输入和归一化输出的几个示例。
提示:
根据以下示例,将数字列表归一化到 [0, 1] 范围内:
1. 输入: [2, 4, 6, 8] 输出: [0, 0.3333, 0.6667, 1]
2. 输入: [5, 10, 15 5, 10, 15] 输出: [0, 0.5, 1] 3: [0, 0.5, 1]
3. 输入: [1, 3, 2] 输出: [0, 0.5, 1] 3: 1, 3, 2] 输出: [0, 1, 0.5 [0, 1, 0.5]
用Python生成一个函数,将数字列表作为输入,并返回归一化后的数字列表。
3.8.4 引导词
引导词的概念是指特定的关键词或短语,它们可以引导LLM创建特定类型的输出。有时,您只需使用一个代码词就能实现所需的结果。下面是一个例子:
提示:
# 创建一个简单的 Python 函数
# 1. 提示我输入华氏温度
# 2. 将华氏温度转换为摄氏温度
def
使用 def 作为引导词,可以告诉模型它应该开始编写Python函数。下表给出了更多引导词的例子。
3.8.5 思维链
2022年,谷歌的一些研究人员在他们的论文 "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models"中引入了思维链(CoT chain-of-thought )提示。这种方法通过将复杂的问题分解成不同的步骤来增强LLM的推理能力。它实际上类似于"少量学习"(few-shot learning),允许对模型进行点拨。
CoT提示在软件代码生成任务中非常有用。让我们来看一个例子。假设您想使用Python网络框架Flask创建一个具有用户注册和登录功能的网络应用程序。CoT提示步骤如下:
- 理解需求:"我需要使用Flask创建一个网络应用程序。该应用程序应具有用户注册和登录功能。我应该从哪里开始?
- 设置Flask应用程序:"让我们先设置基本的Flask应用程序。我该怎么做?"
- 创建用户模型:"既然Flask应用程序已经建立,我需要创建用户模型来处理注册和登录。我该如何构建这个模型?"
- 实现注册:"有了用户模型,我如何才能实现包含必要字段的注册页面?"
- 实施登录:"现在让我们继续创建登录页面。如何确保登录安全?"
- 会话管理:"用户登录后,我应该如何管理用户会话,使用户在浏览应用程序时保持登录状态?"
- 注销实现:"最后,如何实现注销功能,让用户安全地注销应用程序?"
3.8.6 引导性问题
提示语中的引导性问题往往会引起LLM的反感。最好保持中立和不偏不倚。此外,好的做法是避免做出假设,而是把事情说清楚。
下面提示是一个引导性问题:
- 提示: 迁移到微服务架构不是总能提高系统的可扩展性吗?
更平衡的提示应该是
- 提示: 迁移到微服务架构在系统可扩展性方面有哪些优势和潜在挑战?
3.8.7 要求举例和类比
假设您不知道面向对象编程中的继承概念。请访问ChatGPT并输入以下提示:
- 提示: 解释面向对象编程中使用的继承。
您将得到详细的回复。但您可能希望得到更容易理解的内容。一个很好的方法就是请LLM进行类比:
- 提示: 用一个类比来解释面向对象编程中使用的继承。
参考资料
- 软件测试精品书籍文档下载持续更新 https://github.com/china-testing/python-testing-examples 请点赞,谢谢!
- 本文涉及的python测试开发库 谢谢点赞! https://github.com/china-testing/python_cn_resouce
- python精品书籍下载 https://github.com/china-testing/python_cn_resouce/blob/main/python_good_books.md
- Linux精品书籍下载 https://www.cnblogs.com/testing-/p/17438558.html
3.9 减少幻觉
- 缺乏基本事实验证
LLM根据从训练数据中学到的模式生成回复,而无法验证信息的准确性或真实性。
- 过度拟合和记忆
LLM 可能会记住训练数据集中不正确或误导性的信息,尤其是当这些数据重复或常见时。
- 训练数据中的偏差
如果训练数据中包含偏差、不准确或虚假信息,模型很可能会在其输出中复制这些信息。
- 推断和推测
有时LLM可能会根据他们在数据中看到的模式进行推断,从而生成有关训练数据中未充分涵盖的主题或问题的信息。
- 缺乏背景或误读
LLM可能会曲解或缺乏必要的语境来准确回答某些提示。他们可能无法完全理解某些询问的细微差别或含义。
- 俚语和成语
这些语言可能会产生歧义,从而导致模型曲解原意,尤其是如果模型在训练过程中没有在上下文中看到足够多的俚语或成语示例的话。
那么如何减少幻觉呢?首先,要避免问类似这样的开放式问题:
- 提示:优化数据库有哪些不同的方法?
这种类型的提示会鼓励LLM进行猜测或过度概括。该模型还可能误解问题的意图或所需的回答格式,导致回答偏离主题或包含编造的信息。实际上,可能会出现一连串的幻觉。
一种有效的方法是提供一组预定义的选项,让人工智能从中进行选择。例如,前面的提示可以改写如下:
- 提示: 以下哪项是优化数据库的方法:索引、碎片整理或压缩?
再比如,考虑向 LLM 询问某种类型的结论。下面是一个有效的提示:
- 提示: 在Java中初始化数组时,以下语法是否正确?给出 "是 "或 "否 "的回答。
或者,您也可以在提示中包含多个步骤,以便通过结构化流程更好地引导模型,并缩小偏离航向的可能性:
提示:
- 步骤 1:创建斐波那契数列生成器。
- 步骤 2:使用迭代法。
- 步骤 3:编写名为 generate_fibonacci的Python函数,将整数n作为参数。
- 步骤 4:函数以列表形式返回斐波那契数列中的前n个数字。
3.10 安全和隐私
在制作提示时注意安全和隐私是关键。事实上,采取适当预防措施的责任应该写入公司的规章制度中。关键是要避免在提示中出现任何敏感或个人信息,如个人身份信息 (PII)。下面是一个包含身份识别信息的提示示例:
- 提示: 您将如何解决无名氏在 john.doe@example.com 上报告的登录问题?
更明智的做法是使用类似的提示:
- 提示: 你将如何解决用户报告的登录问题?
这样可以保证私人信息的私密性。在提示中避免泄露任何敏感的系统细节也是明智之举。避免这样做:
- 提示: 如何修复 IP 地址为 192.168.1.1 的生产服务器上的数据库连接错误?
使用更通用的问题更为安全:
- 提示: 如何修复通用数据库连接错误?
此外,请确保您的提示不会意外诱导用户采取不正当的操作。从安全角度来看,这样的提示是没有问题的:
- 提示: 如何检测和防止SQL注入?
但这样的提示可能会激起一些不良意图:
- 提示: 如何利用网站的SQL漏洞?
除了遵守安全和隐私规则外,在制作提示时拥抱多样性和包容性也很重要。牢牢把握偏见是关键,因为偏见往往反映了训练数据。在提示语中使用中性和包容性的语言,避免任何歧视性或排斥性的用语,是一个不错的选择。此外,从不同的人群中获得对提示语制作的反馈也会有所帮助。这不仅能提高与 LLM 互动时的公平性和包容性,还有助于更准确、更全面地理解手头的话题。
3.11 自主人工智能代理
我们已经看到了如何引导LLM绘制流程步骤图。这是代码生成的核心。但是,人工智能代理可以让它更上一层楼。它们不只是按照提示进行操作。它们还能利用Pinecone和Chroma DB等专业数据库。它们还能处理复杂的单词嵌入,这些模型都能理解。自主人工智能代理基于学术研究,通常是开源项目的一部分。它们的真正威力在于自动化。为了了解其工作原理,让我们举个例子。假设你设定的目标如下:
- 提示: 创建带有用户登录系统的基本天气应用程序。
下面显示了自主代理可能经历的过程。
- 创建任务
设计用户界面 (UI)。绘制仪表盘的基本布局草图。选择配色方案和字体,设计图标和其他图形元素。
- 集成天气数据API
在互联网上搜索可靠的天气数据API,确定要显示的数据点。编写获取和更新天气数据的代码。
- 地点选择功能:
创建搜索栏或下拉菜单,供用户选择地点。将其连接到API代码。
- 错误处理
处理API调用失败或位置条目无效等错误。
- 确定任务的优先级
重点关注用户界面、开发位置选择功能和错误处理。
- 迭代
审查生成的代码和天气仪表盘的当前状态。确定剩余任务或执行过程中出现的新任务。重复创建和优先排序步骤。
这项技术处于领先地位,前景广阔。不过,它也并非没有障碍:
- 占用资源
代理会消耗大量的计算能力。这会对处理器和数据库造成挤压,导致等待时间增加、可靠性降低,以及随着时间的推移运行速度下降。
- 陷入无限循环
有时,由于缺乏进展或重复的奖励系统,代理只能在循环中运行。
- 实验性
代理的边缘可能很粗糙。它们可能会有一些错误或意想不到的行为,可能还没准备好进入大联盟,这取决于你需要它们做什么。
- 失忆
代理可能会忘记某些步骤或指令。
- 难以处理大量任务
有一大堆任务要处理?这可能会绊倒这些代理。
- 被无关紧要的细节分心
代理可能会被无关紧要的小事所困扰,这可能会让他们在选择工具时走错路。
支持LLM的另一项创新是检索增强生成(RAG retrieval augmented generation)。通过 RAG,生成式人工智能应用(比如用LangChain这样的框架编写)可以访问外部数据源,通常是矢量数据库。它们为模型提供了更多具体的知识基础,从而增强了LLM的反应能力。
RAG在处理复杂的软件开发任务时尤其有用,例如在这些场景中:
- 处理错误和故障
当开发人员遇到bug或错误时,RAG会从论坛或bug数据库等网络资源中挖掘修复和解决方法。它可以根据你的问题提供一些量身定制的解决方案或代码补丁。
- 为代码审查锦上添花
RAG 可以从公司内部资源中获取所有编码最佳实践、标准和必须遵守的规则。这意味着它可以帮助您简化代码审查,提供技巧和窍门,让您的代码大放异彩。
- 加强测试
当需要对代码进行测试时,RAG 可以充当你的测试人员。它能找到各种测试场景和模式,并根据项目需求进行调整,帮助你更快地推出测试用例或脚本。
在某些情况下,LLM 会指出你的提示有问题。例如,假设您这样写
- 提示: 使用汇编程序编写 REST API。
- ChatGPT: 由于汇编语言的低级特性,使用汇编语言创建 REST API 是非常规和复杂的。这些语言通常用于需要对硬件进行细粒度控制的任务,或者用于性能是关键问题的场景。
3.11 小结
同样,制作完美的提示符需要将科学与创造力相结合。这就需要找到合适的成分--一些创造力、一点直觉和一种结构化的方法--来制作提示语,让 LLM 提供你想要的东西。没有什么神奇的秘方,但如果你思路清晰,举出一些例子,并很好地阐述你的提示,你就会得到更好的答案。
这是一个过程,真的。你要尝试一些东西,看看效果如何,再调整,再尝试。就像任何技能一样,在不同的主题和任务下,你会越做越好。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· 10亿数据,如何做迁移?
· 推荐几款开源且免费的 .NET MAUI 组件库
· c# 半导体/led行业 晶圆片WaferMap实现 map图实现入门篇
2024-01-06 Python手相识别教程1什么是手相术?