让AI为你写Python代码!六步解锁效率的奥秘!
- Rifx.Online
- Programming , Programming/Scripting , Machine Learning
- 01 Jan, 2025
使用INSPIRe框架节省时间并获得竞争优势(ChatGPT-4 — Claude 3 — Gemini)
AI不会取代你,但会取代那些更会写提示的人。
这是我告诉我在数据科学和软件工程领域的朋友们的话。有些人对此不以为然。“AI肯定无法生成多步骤的代码,”他们会说。其他人则大笑。“得了吧,这对初学者才有用!”
但不久之后,他们都开始寻求提示工程的建议。
到2022年底,LLM已经将代码生成从最终目标转变为随时可以使用的廉价资源。交易很简单:输入提示;输出代码。
写每一行代码并检查错误的时代已经过去。如果你学会了如何与AI对话,你可以将大部分代码生成外包出去——而我所说的“大部分”是指90%。
我是一名糟糕的程序员。语法是我最糟糕的敌人,对我来说,通往地狱的道路是用缩进铺成的。像Devin这样的AI解决方案很快就会取代我——除非我找到扭转局面的办法。
这就是我整理INSPIRe框架的原因。这个想法是将AI变成一个盟友,它所做的工作不是替代我,而是为我服务。
每当我需要处理数据集或生成合成数据集时,我都会使用INSPIRe用简单英语编写我的代码。我唯一的干预是更改文件路径、变量名称和管理导入。
但等等,你可能会问,还有什么需要做的?
逻辑。规划。大局。Devin无法做到的事情。
AI模型就像天才实习生:他们在技术上很有天赋,但与现实世界完全脱节。他们缺乏领域专业知识,商业意识几乎不存在。
所有AI模型所做的就是遵循指令——在这方面,他们胜过人类。然而,没有目标的指令只是空洞的话语。
正是人类的存在将技术能力与现实世界价值对齐。人们感到害怕,因为AI在执行方面表现出色,而他们应该感到兴奋。
如果你能可靠地外包技术任务,你将腾出时间专注于大局。可是,许多数据工作者还没有跟上这一趋势。这意味着你有一个等待你去获得的竞争优势。
自由时间,更快的行动,学习新技能,创造更多价值。
手动编写所有代码就像是你在车库里停了一艘宇宙飞船,但你每天却坚持乘公交车。
那么问题就变成了:你知道如何驾驶宇宙飞船吗?
什么是INSPIRe框架?
INSPIRe是提示工程和创意的结合。生成想法,编写提示。编写提示,生成代码。测试并重复。
INSPIRe是一个六步循环,您可以遵循这些步骤生成生产就绪的代码。其核心思想是使用巧妙的提示并将其与明确的流程相结合。
以下是每个步骤的总结:
I — 确定: 您的第一步是确定目标及其要求。您的目标可能是“编写生成合成数据的代码。”要求可能是您的LLM之前未“见过”的特定语法。→ 将您的目标及其要求转化为灵活的提示。
N — 叙述: 您的第二步是将目标分解为用自然语言编写的指令。“叙述”是一个迭代过程,您可以与模型进行对话,以修改或完成代码。→ 始终从简单的代码片段开始,并在其基础上构建。
S — 筛选: 第三步是验证。打开您的Jupyter Notebook或VS Code环境,进行筛选仪式。复制粘贴您的代码,插入文件路径,然后点击“运行”。如果出现错误信息,请尝试修复问题。您也可以咨询LLM以获取帮助。重复此过程,直到您的代码按预期工作。→ 测试并调整您的代码,每次处理一个代码片段。
P — 打磨: 第四步有多种形式。也许您会将代码转化为一组函数。也许您会改善错误处理。如何减少运行时间呢?“打磨”充满智力挑战,因为这是将代码从“好”提升到“惊艳”的阶段。→ 通过迭代改进来优化您的代码。
I — 集成: 第五步是合并旧代码和新代码片段。如果您是从头开始,可能没有任何东西可以集成。真正的挑战和乐趣在于将现有代码与新代码片段结合起来。→ 确保您的代码片段通过更多的反复试验契合在一起。
Re — 重启: 最后一步是回到起点。有时,您会遇到瓶颈,这时您需要从头开始。但更多的时候,您会在开发代码时产生新想法。实现它们。→ 完成一个代码片段后,开始新循环以生成下一个。INSPIRe在短时间内使用效果最佳。
还有两件事:
- 使用INSPIRe时,测试输出必须是您的常伴。运行每一行代码并检查结果。让我们养成这个习惯,好吗?
- 您可以在INSPIRE循环内运行INSPIRe循环。例如,您可以在“打磨”步骤中运行完整循环,将一段代码转化为函数。这个过程有点像《盗梦空间》,但您永远不会迷失,因为您总是回到起点。
INSPIRe不是一种将半成品指令转化为成熟程序的魔法配方。相反,它是一种源于反复试验的方法——而且您不能无思考地应用它。
您需要保持精神参与并亲自动手。
代码生成远比“嘿,LLM,你能完成我的代码吗?”复杂得多。
您需要开发系统,比如编写优雅的提示,将问题分解为更简单的任务,以及在边缘场景中测试代码。
我整理了INSPIRe框架来帮助自己——现在也帮助您——开发这样的系统。它是一个适合初学者的框架,但一旦您将其融入工作流程,您将能够将大部分代码生成外包给AI。
我的代码是90%由AI生成,10%由人类生成。这部分是因为我懒,部分是因为我在提示工程方面比编写代码更擅长。
说到提示工程,如果您对提示艺术不太熟悉,您会在文章末尾找到完整指南。
INSPIRe 是如何工作的?
INSPIRe 的核心在于编写提示和测试输出。
您需要不断与您的 AI 模型互动,告诉它该做什么。您在提示上的投入越多,从长远来看节省的时间就越多。
不过不要指望这会很简单。您的初始尝试将充满错误和过时的语法。但如果您坚持使用 INSPIRe 几天,您将创造编码速度的新纪录。
现在您可能想知道哪些 LLM 与 INSPIRe 最兼容——答案是“许多”。
INSPIRe 是一个灵活的框架,旨在利用迄今为止最强大的 LLM 的能力,例如 ChatGPT-4、Claude 3、Le Chat 和 Gemini Advanced。
这些模型“见过”数百万个代码片段,并记住了其底层模式。此外,它们消耗的大量数据使它们在多种编程语言中变得熟练。
在本文中,我们将选择 Python,因为它是数据相关任务中使用最广泛的语言(也是我现在唯一使用的语言)。
您可以运行 INSPIRe 从头到尾生成一段代码。但如果将项目拆分为多个代码片段并逐个迭代,它的效果更佳。
那么,解释性和错误消息呢?
这也内置在框架中。
如果您对某行代码有疑问,可以向您的模型请求解释。此外,如果您正确地提示您的模型,您将能够引入优雅的错误处理技术。
如果那不起作用,请查阅相关文档,将其粘贴到聊天窗口中,并重新提出您的问题。
我们将应用 INSPIRE 到两个示例:
- 首先,一个简单的示例: 目标是展示如何在单个 INSPIRe 循环中生成代码。可以将其视为“Hello world!”示例。
- 其次,一个复杂的示例: 这个示例要复杂得多。目的是向您展示 INSPIRe 如何处理生成合成文本数据等复杂任务。在这里找到它。
这两个示例都存储在我的 Github 个人资料中的 Jupyter Notebooks 中。您还会找到数据集和更多资源。您需要的所有链接都在文章的末尾提供。
此外,您不需要在第一次阅读时理解每一步的每一个细节。关注整体逻辑,您会做得很好。
准备好了吗?
让我们用一个简单的例子来尝试 INSPIRe
假设你的目标是生成代码,以便处理一个文本数据集。想象一下从电子商务网站抓取的样本。想象产品评论和其他信息,如评分和用户 ID。
你想执行基本的情感分析和探索性数据分析。
你打开一个 LLM 聊天窗口,事情就这样开始了。
1. 确定
首先,写一个初始提示,捕捉您目标的前提以及您需要实现该目标的内容。
让我们将前提分解为三个核心要素:
- 指定LLM的角色和背景: 在这里,您将模型置于特定的背景中,如“数据科学”或“网页开发”。
- 写清晰的指令: 您越精确,LLM的输出就越好。您可以使用的一个技巧是要求模型始终“逐步思考”。
- 添加具体信息: 提供文档和示例,以教导模型特定的语法,例如调用新的API,并指定参数,例如要导入哪些包。
在编写第一个提示时,请记住,最有效的提示技术之一是使用占位符。
占位符使编辑提示变得更容易。它们还允许您将提示转换为可重用的模板。您只需用新值填充占位符,而不是从头开始重写提示。
以下是一个灵活提示的示例。请注意提示中的占位符,如<programming_language>
和<objective>
。
[Step #1 -The IDENTIFY prompt]
* Role:
Act like an expert software engineer who specializes in <programming_language>.
Your role is to help me achieve the following objective: <objective>.
##
* Guidelines:
Write elegant and functional code in <programming_language>.
Reason step by step to make sure you understand the user intentions before you turn them into elegant code.
Make sure the code you write and/or edit is clear and well-commented.
Write code that adheres to the best practices in <programming_language>.
When you first respond, acknowledge the instructions you've been given then ask the user to describe the intentions they want to turn into code.
Refrain from generating code during your first response.
##
* Specifics:
When I indicate specific syntax and functions, make sure to remember the provided syntax and use it for the code you generate.
Assume I always provide the correct syntax but always verify my indentations, symbols, and punctuation.
<more_specifics>.
##
* Format:
Give a clear title to each code snippet you generate.
For example you can title the first code snippet "Snippet #1 version 1.0"
If you edit "Snippet #1 version 1.0" then the output should be called "Snippet#1 version1.1" and so on.
If you move to a new function or piece of code, you should name it "Snippet#2 version 1.0"
When you interact with me in natural language, use line breaks, titles, and elegant formatting to ensure a pleasant reading experience.
##
* Inputs:
<objective> = Write code that takes an Excel file as input and manipulate it.
You'll receive more detailed instructions in a later step.
<programming_language> = Python 3.11.5
<more_specifics> = You'll receive the dataset and the instructions after you acknowledge the instructions.
##
您是否发现<objective>
听起来有多模糊?
“识别”的想法是为您的LLM提供背景,而不提供过多细节。您将在后面的步骤中有足够的空间来添加具体内容。现在,专注于为模型理解手头的任务奠定基础。
实际上,在回应“识别”提示时,您的LLM可能会提出一些问题,以帮助其改善对上下文的理解。
以下是我在运行INSPIRe时经常收到的两个问题:
- “您需要安装任何Python库的帮助吗?”
- “您在使用Python处理Excel文件时是否有特定的库偏好,例如pandas或openpyxl?”
一旦您回答了这些问题,您就能够进入“叙述”步骤。
2. 叙述
在这里,你的任务是将 <objective>
分解为用简单英语编写的详细说明。
旁注: 接受重复。在提示中重复自己不是一个错误,而是一种特性。每次在后续提示中重写说明时,你是在“提醒”模型保持在正轨上。
以下是一个“叙述”提示的示例:
[Step #2 -The NARRATE prompt]
Write a code snippet that takes an Excel file as input and manipulate it using the pandas library.
The Excel file contains a synthetic dataset made of product reviews.
Load the Excel file into a data frame.
Add a column called "Sentiment" and fill it according to the following rule: Ratings from 1 to 3 are considered 'Negative" and ratings of 4 and 5 are considered "Positive."
Add a column called Rating and fill it with random numbers from 1 to 5.
最后一条指令是我这边的一个真实错误。我以为我的示例数据集没有“Rating”列,但我错了。确实有一列叫“Product Rating”。
我在“筛选”步骤中发现了这个错误,稍后我们将看到。
与此同时,这是模型的初始输出:
import pandas as pd
import numpy as np
## Function to load the Excel file and manipulate the data
def process_excel_file(file_path):
# Load the Excel file into a DataFrame
df = pd.read_excel(file_path)
# Add the 'Sentiment' column based on 'Product Rating'
df['Sentiment'] = df['Product Rating'].apply(lambda x: 'Positive' if x >= 4 else 'Negative')
# Add a 'Rating' column with random numbers from 1 to 5
df['Rating'] = np.random.randint(1, 6, df.shape[0])
return df
## Example usage
## Replace 'path_to_your_excel_file.xlsx' with the actual file path
file_path = "path_to_your_excel_file.xlsx"
processed_df = process_excel_file(file_path)
## Display the first few rows of the processed DataFrame
print(processed_df.head())
是时候测试输出了,这意味着是“筛选”时间。
3. 筛选
在这里,您将代码复制粘贴到 Jupyter Notebook 中,替换文件路径并按“运行”。这时您会意识到您引入了一个没有人要求的额外列。
在屏幕步骤中,您可以自己编辑代码或请求模型为您编辑。
在这个例子中,需要进行两个调整:
- 移除不必要的“评分”列;
- 显示数据框(df)的“样本”,而不是它的“头部”。
以下是 LLM 生成的更新代码:
import pandas as pd
import numpy as np
## Function to load the Excel file and manipulate the data
def process_excel_file(file_path):
# Load the Excel file into a DataFrame
df = pd.read_excel(file_path)
# Add the 'Sentiment' column based on 'Product Rating'
df['Sentiment'] = df['Product Rating'].apply(lambda x: 'Positive' if x >= 4 else 'Negative')
return df
## Example usage
## Replace 'path_to_your_excel_file.xlsx' with the actual file path
file_path = "path_to_your_excel_file.xlsx"
processed_df = process_excel_file(file_path)
## Display the first few rows of the processed DataFrame
print(processed_df.sample(5)) #changed from print(processed_df.head()) to print(processed_df.sample(5))
现在替换您的文件路径并运行更新后的代码。
感觉像是既视感吗?
这正是因为 INSPIRe 是围绕测试和调整构建的。您大多数的点击将是复制粘贴,每次都会让多巴胺涌入您的大脑。
即使您的代码正常工作,兴奋感也不会减退,因为您知道自己离完成还有很远。您知道自己可以改进和优化。
这将我们带入“打磨”步骤。
4. 打磨
您在此步骤中的任务是使代码更加健壮、高效和优雅。可以进行“打磨”的可能性与代码行数一样多。
就我们的代码片段而言,容易发现两个改进点:
- 使代码能够处理所需列缺失的情况。在这种情况下显示错误消息。
- 使代码能够处理 Excel 文件和 CSV 文件。如果文件类型不符合要求,则显示错误消息。
谈到错误处理,这里有一个模板提示,您可以用来更好地处理任何代码片段中的错误:
[Step #4 POLISH]
[Sub-task:Error-handling]
[Flexible prompt for error-handling]
*Role:
Act like a software engineer specializing in <programming_language>.
Your task is to enhance <input_code> to handle errors effectively.
##
* Guidelines:
Reason step-by-step to improve <input_code> in <programming_language> to robustly handle errors.
Ensure the code is well-commented, clear, and adheres to error handling best practices.
Start by identifying potential error sources in <input_code> and propose solutions.
##
* Specifics:
Incorporate try-except blocks, error logging, and recovery mechanisms as needed in <input_code>.
Validate syntax and error handling logic meticulously.
##
* Format:
Title modifications as "Error Handling Enhancement vX.Y" where X is the snippet number and Y is the version.
##
* Inputs:
<programming_language> = Python 3.11.5
<input_code> = [insert your code here]
将错误处理作为您“打磨”步骤的重要组成部分。这是一个非常低成本的投资,每次运行代码时都会积累收益。
回到我们的代码,这里是经过错误处理会话后打磨的代码:
import pandas as pd
#Notice how the LLM knew we don't need the NumPy package anymore
## Function to determine the file type and appropriately load the data
def load_data(file_path):
if file_path.endswith('.xlsx'):
return pd.read_excel(file_path)
elif file_path.endswith('.csv'):
return pd.read_csv(file_path)
else:
raise ValueError("Unsupported file format. Please provide an Excel or CSV file.")
## Function to process the file and add the 'Sentiment' column
def process_file(file_path):
# Load the data with the appropriate function based on file type
df = load_data(file_path)
# Check if the 'Product Rating' column exists
if 'Product Rating' not in df.columns:
raise KeyError("'Product Rating' column not found in the provided file.")
# Add the 'Sentiment' column based on 'Product Rating'
df['Sentiment'] = df['Product Rating'].apply(lambda x: 'Positive' if x >= 4 else 'Negative')
return df
## Example usage
## Replace 'path_to_your_file.xlsx' or 'path_to_your_file.csv' with the actual file path
file_path = "path_to_your_excel_file.xlsx / path_to_your_csv_file.csv"
processed_df = process_file(file_path)
## Display a sample of rows taken of the processed DataFrame
print(processed_df.sample(5))
猜猜您的下一个动作是什么?
没错。
复制并粘贴您的更新代码并进行测试。这两个动作是瞬时的,容易被忽视。然而,它们是 INSPIRe 的核心动力。大脑是什么?当然是您和您的提示。
完成验证后,您可以继续进行第五步。
5. 集成
在我们的例子中,我们从头开始编写代码片段,因此我们不需要这一步。
在其他(大多数?)情况下,您需要检查依赖关系和变量名称。确保您的新代码片段与其前面的部分一致,然后再将其附加上去。
是的,“集成”也涉及大量的测试。
我在测试方面非常严格,原因很简单。如果两个或多个累积错误进入您的生成代码,您就会失败。您最终会花费您在使用INSPIRe时节省的时间来调试。
好吧,您可能会说,我会测试每一行代码。那么,接下来呢,光头提示者?
6. 重启
您的第一次 INSPIRe 迭代已经完成。恭喜您。您已经获得了一个可以立即使用的功能代码片段。
不过,您不能就此停下,尤其是考虑到您脑海中有的所有想法。
您决定再写一个代码片段,因此您开始了另一个 INSPIRe 循环。
这一次,您将要求模型为您刚处理的数据框编写一个基本的探索性数据分析(EDA)。
由于您一直在使用 ChatGPT/Claude3/LeChat/Gemini 生成代码,您有两个选择。
- 选项 #1:继续在同一个聊天标签中;
- 选项 #2:与您的模型开始新的讨论。
如果您选择后者,请确保将您最新的代码片段插入到聊天窗口中。这是让它知道这是之前工作的延续。
无论您选择哪个选项,您都将始终回到“识别”步骤并编写新的提示。
以下是一个示例:
[Step #1 - The IDENTIFY prompt]
* Role:
Act like an expert Data Scientist who specializes in <programming_language>.
Your role is to help me achieve the following objective: <objective>.
##
* Guidelines:
Write elegant and functional code in <programming_language>.
Reason step by step to make sure you understand the user intentions before you turn them into elegant code.
Make sure the code you write and/or edit is clear and well-commented.
Write code that adheres to the best practices in <programming_language>.
When you first respond, acknowledge the instructions you've been given then ask the user to describe the intentions they want to turn into code.
Refrain from generating code during your first response.
##
* Specifics:
When the user indicates specific syntax and functions, make sure to remember the provided syntax and use it for the code you generate.
Assume the user provides the correct syntax but always verify indentations, symbols, and punctuation.
<more_specifics>.
##
* Format:
Give a clear title to each code snippet you generate.
For example you can title the first code snippet "Snippet #1 version 1.0"
If you edit "Snippet #1 version 1.0" then the output should be called "Snippet#1 version1.1" and so on.
If you move to a new function or piece of code, you should name it "Snippet#2 version 1.0"
When you interact with the user in natural language, use line breaks, titles, and elegant formatting to ensure a pleasant reading experience.
##
* Inputs:
<objective> = Conduct a basic EDA on the modified dataset to visualize the distribution of product ratings, count of reviews by sentiment, and average product rating by sentiment.
<programming_language> = Python 3.11.5
<more_specifics> = Take into account the dataframe I loaded alongside the prompt.
The code you'll generate is a continuation of the the following code:
[Insert your previous code here]
为了简单起见,让我们快进一点。
想象一下,您在进行了一小时的 INSPIRe 循环后,得到了以下结果:
## Import necessary libraries for EDA and text analysis
import matplotlib.pyplot as plt
import seaborn as sns
from wordcloud import WordCloud, STOPWORDS
## Let's assume 'processed_df' is the DataFrame we obtained from the previous step
## If not, you should load/process your data accordingly
### DISTRIBUTION OF SENTIMENTS AND PRODUCT RATINGS
## 1. Set a visual style for seaborn
sns.set(style="whitegrid")
## 2. Create the figure and axes for a 1x2 grid of plots
fig, ax = plt.subplots(1, 2, figsize=(16, 6))
## 3. Plot the distribution of sentiments
sns.countplot(x='Sentiment', data=processed_df, ax=ax[0], palette="viridis")
ax[0].set_title('Distribution of Sentiments')
ax[0].set_xlabel('Sentiment')
ax[0].set_ylabel('Count')
## 4. Plot the distribution of product ratings
sns.countplot(x='Product Rating', data=processed_df, ax=ax[1], palette="cividis")
ax[1].set_title('Distribution of Product Ratings')
ax[1].set_xlabel('Product Rating')
ax[1].set_ylabel('Count')
plt.tight_layout() # Adjust layout to prevent overlap and ensure everything fits well
### TEXT ANALYSIS
## 1. Combine all comments into a single text string
all_comments = ' '.join(processed_df['Comment'].dropna())
## 2. Text preprocessing - define stopwords to exclude from the analysis
stopwords = set(STOPWORDS)
## 3. Generate the word cloud
wordcloud = WordCloud(width=800, height=400, background_color='white', stopwords=stopwords, max_words=100).generate(all_comments)
## Plot the word cloud
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off') # Hide the axes
plt.show()
瞧,这就是 INSPIRe 框架在实际中的样子。
看起来为几个代码片段做了很多工作。但随着时间的推移和重复,您将学会组合步骤,跳过某些步骤,并对其他步骤进行迭代。
一旦您习惯了 INSPIRe,您将更快地完成工作。您将节省时间,不再被编码所束缚。相反,您将专注于构建解决方案和策略。您可以开始新的项目,或为您想参加的机器学习课程腾出时间。
谈到效率,以下是您在此过程中将(重新)学习的关键点:
- 使用灵活的提示并将其保存为模板。
- 使用元提示以改进您的提示(更多信息请参见此处)。
- 永远不要将专有数据上传到 LLM;使用合成数据样本代替。
- 测试模型给您的每一个代码片段。每一个。单独的。代码。片段。
- 每当您遇到障碍时,从头开始。
INSPIRe的局限性
INSPIRe可以被视为一种“没有失去,只有赢得”的交易。它加快了您的代码生成并帮助您捕捉错误。然而,由于它需要几个小时的练习,很容易就会忽视这个框架。
每个拥有Instagram账号的人都可能为您提供更快的解决方案。但一旦您在现实生活的例子中应用这些“解决方案”,它们就会崩溃。它们不过是半成品的演示。
相反,INSPIRe源于反复试验。它是一系列经过验证的技术,旨在帮助您更快地前进,并在日益激烈的就业市场中保持竞争力。
还要记住,INSPIRe并不是一成不变的。它是一个灵活的框架,您可以根据自己的偏好进行调整。实际上,理想的INSPIRe版本是您为自己微调的版本。
当您将INSPIRe变为自己的工具时,您可能会遇到至少六个局限性——但别担心,您可以克服每一个:
- 缺乏Python知识: 如果您不知道Python能做什么,您的指令就无关紧要。确保掌握基础知识,并跟上新版本的发布。
- 新语法: 每天都有新的包和函数发布。由于代码生成助手可能无法识别这些更新,请养成提供文档和代码示例的习惯,以使您的AI助手熟悉新语法。
- 提示工程: LLM是强大的工具,但它们无法读懂您的心思。学习如何清晰地表达提示,以改善输出结果。
- 构思: INSPIRe需要明确的目标定义和问题解决技巧。我喜欢使用从少到多的推理,但还有许多有用的方法。选择一个并坚持下去。
- 多步骤程序: 一次性要求您的LLM生成一个完整的程序是很诱人的。它往往会失败,因为LLM在规划方面表现不佳。您需要一步一步地引导它们。
- 合规/抵抗: 这两者是同一枚硬币的两个面。您可能会过于依赖LLM而跳过验证。您也可能坚持手动编写代码以感到有用。避免自我陷阱,专注于重要的事情:完成任务。
他们会比 AI 更信任你
INSPIRe 是一种用简单英语编写代码的方法。你只需要有一定的逻辑思维能力和微妙的试错艺术。换句话说,你负责思考,让机器来处理写作。
这可能是大多数技术工作的未来。我们每个人都会拥有一支小型 AI 助手团队为我们工作,而我们将管理他们并验证他们的工作。我们将是环节中的人类。
INSPIRe 让你一窥未来的样子。
当然,像 Cognition AI 这样的公司将继续开发像 Devin 这样的全自动代理。但即便如此,你始终需要人类干预;需要有人来编写提示并将各个部分组合在一起。
不要低估我们这个物种。
我们人类在专业化方面确实不太擅长,但我们拥有一种令人难以置信的天赋,我们常常对此视而不见。我们能够规划。我们可以将大目标分解为一系列小步骤,并在过程中进行调整。
在代码生成的情况下,这涉及到设定方向、调整路线,并确保结果符合我们最好的利益。
机器是强大的工具,但如果没有人类的手来引导它们,它们就是毫无价值的垃圾。正是人类的创造力与机器的能力之间的相互作用推动着世界向前发展。