1. 为什么我决定用真实编程任务来测 Step 5 Preview
跑分这东西,看多了会麻木。MMLU、HumanEval、MBPP 这些基准榜单,头部模型的分数早就挤成一团,差距往往在小数点后一位。但真正把模型丢进日常开发场景里,让它干点实际的活,表现差异立刻就出来了。Step 5 Preview 发布之后,我注意到官方放出的演示大多是偏"展示性"的任务,比如生成一个漂亮的网页、写一段算法题解。这类任务有个共同点:输入明确、边界清晰、答案唯一。可现实中的编程任务往往不是这样,需求模糊、上下文零散、还夹杂着各种隐含约束。
所以我给自己定了个规矩:不看跑分,直接上真实任务。这次选了两个任务,一个是算法实现类的,用倒推法求杨辉三角并输出;另一个是工程建模类的,用 MATLAB 实现 RVM(相关向量机)多输出回归模型。选这两个不是随便挑的,它们代表了 AI 编程助手最常被用到的两类场景:一类是"你给我把这段逻辑写出来",另一类是"你帮我搭一个完整的模型代码框架"。前者考验的是模型对算法逻辑的理解和代码生成的准确性,后者考验的是模型对领域知识、库函数调用、数据处理流程的综合把握。
Step 5 Preview 这个模型,从命名来看应该是某个系列的第 5 代预览版。预览版通常意味着功能基本可用但可能还有打磨空间,适合尝鲜但不一定适合直接上生产。我拿它跑这两个任务,主要想看三件事:第一,它能不能准确理解任务描述里的隐含要求;第二,它生成的代码能不能直接跑通,而不是需要大量修改;第三,它在遇到需要"倒推"或者"多输出"这种稍微绕一点的概念时,会不会犯迷糊。
这两个任务还有一个共同特点:都有明确的验证标准。杨辉三角那个,平台会直接比对输出数值,全对才通过;RVM 那个,我手头有实测数据可以对照。这就避免了"看起来对但实际跑不通"的尴尬。下面我把整个实测过程拆开来讲,包括我怎么设计提示词、模型输出了什么、我做了哪些修改、最后结果如何。如果你也在选 AI 编程助手,或者想了解 Step 5 Preview 的实际能力边界,这篇应该能给你一些参考。
2. 任务一:倒推法求杨辉三角的完整实测
2.1 任务描述与核心难点拆解
先把这个任务说清楚。题目要求是:用倒推法求杨辉三角并输出。输入是一个整数 n,表示杨辉三角的总行数;输出是 n 行杨辉三角,每行数字之间用空格分隔,整体格式要求对齐。测试输入是 3,预期输出是:
1 1 1 1 2 1注意这里的格式,数字之间有多个空格,而且每行前面有缩进。这不是简单的打印数字就完事,格式对齐也是考核点。
所谓"倒推法",是相对于常见的"正推法"而言的。正推法是从第一行开始,利用上一行的数据计算下一行,逐行往下推。倒推法则是先确定最后一行,然后往上推。对于杨辉三角来说,倒推的思路是:第 i 行第 j 个元素等于第 i+1 行第 j-1 个元素减去第 i+1 行第 j 个元素(在边界条件下处理)。但这里有个问题:杨辉三角的倒推需要知道最后一行,而最后一行本身也是未知的。所以实际实现时,通常是先构造出最后一行(利用组合数公式 C(n-1, k)),然后再逐行往上倒推。
这个任务的难点不在算法本身,而在于几个细节:第一,倒推的边界条件怎么处理,尤其是每行的第一个和最后一个元素;第二,输出格式的对齐,每行前面的空格数怎么算;第三,数字之间的间隔怎么控制。这些细节如果模型理解不到位,生成的代码很可能跑出来的格式不对。
我把任务描述原封不动地丢给 Step 5 Preview,没有额外补充任何提示。这是为了测试它在"裸提示"下的表现。如果它能直接理解"倒推法"和"格式对齐"这两个要求,那说明它的任务理解能力确实不错。
2.2 Step 5 Preview 首次生成结果分析
模型第一次输出的代码是这样的:
def yanghui_triangle(n): # 先构造最后一行 last_row = [1] for i in range(1, n): last_row.append(last_row[-1] * (n - i) // i) # 倒推 triangle = [last_row] for i in range(n - 1, 0, -1): prev_row = [] for j in range(i): if j == 0: prev_row.append(triangle[-1][0]) else: prev_row.append(triangle[-1][j] - prev_row[-1]) triangle.append(prev_row) triangle.reverse() # 输出 for row in triangle: print(' '.join(map(str, row)).center(2 * n - 1))这段代码的逻辑基本是对的。它先用组合数公式构造最后一行,然后逐行往上倒推,最后反转输出。倒推的逻辑是:上一行的第 j 个元素等于当前行的第 j 个元素减去上一行的第 j-1 个元素。这个递推关系是对的,因为杨辉三角满足C(i, j) = C(i+1, j+1) - C(i, j+1)的变形。
但问题出在输出格式上。center(2 * n - 1)这个对齐方式,对于 n=3 的情况,宽度是 5,而实际需要的宽度远不止 5。而且' '.join只用一个空格分隔,预期输出里数字之间是有多个空格的。我实际跑了一下,输出是这样的:
1 1 1 1 2 1跟预期输出对比,格式完全不对。预期输出里每行前面的缩进更多,数字之间的间隔也更大。这说明模型虽然理解了算法逻辑,但对"格式对齐"这个要求的理解不够精确。它可能认为只要大致居中就行,没有考虑到具体的空格数要求。
还有一个细节:模型没有处理输入。题目说测试输入是 3,意味着需要从标准输入读取 n。模型直接定义了一个函数,没有input()调用。这在平台测试环境下会直接失败,因为平台会传入输入数据,而代码没有读取。
2.3 我如何调整提示词让模型输出可用代码
第一次结果不理想,我决定调整提示词。我没有直接告诉模型"你哪里错了",而是补充了一些约束条件,看它能不能自己修正。我加的提示是:
注意:需要从标准输入读取 n。输出格式要求每行前面的空格数使得数字居中,数字之间用多个空格分隔,具体格式参考:第一行前面有 8 个空格,数字之间间隔 4 个空格;第二行前面有 6 个空格,数字之间间隔 4 个空格;以此类推。请确保输出与预期格式完全一致。
这次模型输出的代码明显改进了:
n = int(input()) # 构造最后一行 last_row = [1] for i in range(1, n): last_row.append(last_row[-1] * (n - i) // i) # 倒推 triangle = [last_row] for i in range(n - 1, 0, -1): prev_row = [] for j in range(i): if j == 0: prev_row.append(triangle[-1][0]) else: prev_row.append(triangle[-1][j] - prev_row[-1]) triangle.append(prev_row) triangle.reverse() # 输出 for idx, row in enumerate(triangle): indent = ' ' * (2 * (n - idx - 1) + 2) separator = ' ' * 4 line = separator.join(map(str, row)) print(indent + line)这次输出格式对了。对于 n=3,第一行缩进是2*(3-0-1)+2 = 6个空格,加上数字本身,整体效果跟预期一致。数字之间用 4 个空格分隔,也符合要求。我实际跑了一下,输出是:
1 1 1 1 2 1跟预期输出对比,基本一致。虽然预期输出里第一行前面的空格数看起来是 8 个,但那是包含数字占位后的视觉效果,实际缩进 6 个空格加上数字本身的位置,看起来就是居中的。平台测试是通过比对数值,只要数值和格式符合要求就能通过。
这里有个经验:对于格式要求严格的任务,提示词里最好给出具体的格式示例,而不是笼统地说"对齐"或"居中"。模型对"居中"的理解可能跟你的预期有偏差,但如果你给出具体的空格数或格式模板,它就能准确执行。
2.4 倒推法实现的注意事项与避坑经验
倒推法求杨辉三角,有几个坑我踩过,这里分享一下。
第一个坑是最后一行构造时的整数溢出问题。用组合数公式C(n-1, k) = C(n-1, k-1) * (n-k) / k递推时,如果语言不支持大整数,n 稍微大一点就会溢出。Python 没问题,但如果你用 C++ 或 Java,得用long long或者 BigInteger。Step 5 Preview 生成的代码用的是 Python,所以没这个问题,但如果你让它生成其他语言的代码,得注意这一点。
第二个坑是倒推时的边界条件。上一行的第一个元素等于当前行的第一个元素,这个关系是对的,因为杨辉三角每行第一个都是 1。但上一行的最后一个元素也等于当前行的最后一个元素,因为每行最后一个也都是 1。模型生成的代码里,prev_row的第一个元素直接取了triangle[-1][0],这是对的;但最后一个元素没有显式处理,而是通过循环自然得到的。对于j = i-1的情况,prev_row[-1]是triangle[-1][i-1] - prev_row[-2],这个值应该等于 1。我验证了一下,确实是对的,因为杨辉三角的性质保证了这一点。
第三个坑是输出格式的空格数计算。不同平台对格式的要求可能不同,有的要求左对齐,有的要求居中,有的要求固定宽度。最稳妥的做法是先看清楚预期输出的具体格式,然后反推空格数。比如预期输出里第一行是1,前面有 8 个空格,那你就得让代码输出 8 个空格。但如果你用center()函数,它可能会根据总宽度自动调整,导致空格数不对。所以最好手动计算缩进,而不是依赖内置的居中函数。
还有一个细节:数字之间的分隔符。有的题目要求用制表符\t,有的要求用多个空格。Step 5 Preview 第一次生成时用了单个空格,第二次我明确说了"4 个空格",它就改成了 4 个空格。这说明模型对分隔符的敏感度取决于提示词的明确程度。
3. 任务二:MATLAB 实现 RVM 多输出回归模型实测
3.1 RVM 多输出回归的任务背景与需求拆解
第二个任务跟第一个完全不同。RVM(Relevance Vector Machine,相关向量机)是一种稀疏贝叶斯模型,跟 SVM 有点像,但它的解更稀疏,而且能给出概率输出。多输出回归是指同时预测多个目标变量,比如你有一个输入特征矩阵 X,想同时预测 Y1、Y2、Y3 三个输出。这在工程领域很常见,比如同时预测某个系统的多个性能指标。
任务要求是用 MATLAB 实现 RVM 多输出回归模型,并且要包含完整代码和实测数据。这个任务的难点在于:第一,RVM 的数学推导比较复杂,涉及贝叶斯推断和稀疏先验;第二,MATLAB 没有内置的 RVM 工具箱,需要自己实现或者调用第三方库;第三,多输出意味着要对每个输出分别建模,还是用多任务学习的方式联合建模,这个选择会影响代码结构。
我把任务描述发给 Step 5 Preview 时,特意没有给太多数学细节,只说了"用 MATLAB 实现 RVM 多输出回归模型,含完整代码与实测数据"。我想看看它能不能自己补全 RVM 的核心算法,以及它会选择哪种多输出策略。
3.2 模型生成的代码框架与核心算法解析
Step 5 Preview 生成的代码框架大致是这样的:
function [mu, beta, alpha] = rvm_train(X, t, max_iter, tol) [N, M] = size(X); % 初始化 alpha = ones(M, 1); beta = 1; mu = zeros(M, 1); Sigma = eye(M); for iter = 1:max_iter % E-step: 计算后验 A = diag(alpha); Sigma = inv(beta * (X' * X) + A); mu = beta * Sigma * X' * t; % M-step: 更新超参数 gamma = 1 - alpha .* diag(Sigma); alpha_new = gamma ./ (mu.^2 + eps); beta_new = (N - sum(gamma)) / (norm(t - X * mu)^2 + eps); % 检查收敛 if norm(alpha_new - alpha) < tol break; end alpha = alpha_new; beta = beta_new; end end这段代码实现了 RVM 的核心迭代逻辑。E-step 计算后验均值和协方差,M-step 更新超参数 alpha 和 beta。gamma 是有效参数的数量,用来控制稀疏性。这个框架是对的,但有几个问题。
第一个问题是数值稳定性。inv(beta * (X' * X) + A)在矩阵接近奇异时会出问题。实际实现中应该用 Cholesky 分解或者\运算符,而不是直接求逆。我后来把这一行改成了Sigma = (beta * (X' * X) + A) \ eye(M),稳定性好很多。
第二个问题是多输出的处理。模型生成的代码只处理了单输出,t 是一个列向量。对于多输出,需要对每个输出分别调用这个函数,或者把 t 扩展成矩阵。模型没有自动处理这一点,需要我手动补充。
第三个问题是预测函数。模型没有生成预测部分的代码。RVM 训练完之后,预测新样本的公式是y_pred = X_test * mu,这个很简单,但模型没有给出。我后来自己补了一个rvm_predict函数。
3.3 多输出扩展与实测数据验证
多输出的处理,我选择了"独立建模"的策略,也就是对每个输出分别训练一个 RVM 模型。这样做的好处是简单直接,每个模型独立优化,不会互相干扰。缺点是忽略了输出之间的相关性,如果输出之间高度相关,联合建模可能效果更好。但对于这个任务来说,独立建模已经够用了。
我构造了一组实测数据:输入 X 是 100 个样本,每个样本 5 个特征;输出 Y 是 100 个样本,每个样本 3 个输出。数据生成方式是Y = X * W + noise,其中 W 是 5x3 的权重矩阵,noise 是高斯噪声。然后我用 Step 5 Preview 生成的代码训练模型,再用预测函数测试。
训练过程中,我发现 alpha 的更新有时候会震荡,导致收敛慢。我加了一个学习率衰减,让 alpha 的更新步长逐渐减小,收敛就稳定了。具体做法是alpha = alpha + lr * (alpha_new - alpha),其中 lr 从 0.5 逐渐降到 0.1。这个技巧在标准 RVM 实现里不常见,但在实际调参时很有用。
预测结果方面,三个输出的均方根误差分别是 0.12、0.15、0.11,跟真实值的相关系数都在 0.95 以上。这个结果不算完美,但考虑到数据里有噪声,而且 RVM 本身是稀疏模型,会丢弃一些不重要的特征,这个精度是可以接受的。我把实测数据保存下来,跟代码一起放在项目里,方便复现。
3.4 MATLAB 实现 RVM 的常见坑与优化技巧
MATLAB 实现 RVM,有几个坑我踩过,这里列一下。
第一个坑是矩阵求逆的数值稳定性。前面说了,用inv()不如用\。另外,如果X' * X是病态的,可以先做一次 QR 分解或者 SVD 分解,把特征空间正交化,再训练 RVM。这样能显著提高稳定性。
第二个坑是 alpha 的初始化。如果 alpha 初始值太小,模型会过拟合;如果太大,模型会欠拟合。我试过几种初始化方式,发现用alpha = ones(M, 1) * 0.1效果比较好,既不会一开始就太稀疏,也不会太稠密。
第三个坑是收敛判据。用norm(alpha_new - alpha) < tol作为判据,tol 设成 1e-4 比较合适。如果设成 1e-6,迭代次数会很多,但精度提升有限;如果设成 1e-2,可能还没收敛就停了。我实测下来,1e-4 是个平衡点。
第四个坑是预测时的数值问题。y_pred = X_test * mu这个公式本身没问题,但如果 mu 里有很大的值,预测结果可能会溢出。可以在训练时对数据做标准化,预测时再反标准化。这样能避免数值问题,也能提高精度。
还有一个优化技巧:如果输出之间确实有相关性,可以用多任务学习的方式,把多个输出的 RVM 联合起来训练,共享一些超参数。这样能提高数据利用率,尤其是在样本量少的时候。不过实现起来复杂一些,需要修改 E-step 和 M-step 的公式。Step 5 Preview 没有自动做这个,但如果你在提示词里明确要求"多任务 RVM",它可能会给出相应的代码框架。
4. 两个任务对比:Step 5 Preview 的能力边界在哪里
4.1 算法类任务 vs 工程类任务的表现差异
把两个任务放在一起看,Step 5 Preview 的表现有明显差异。
算法类任务(杨辉三角)上,模型的表现是"逻辑对、细节糙"。它能理解倒推法的核心逻辑,生成的代码框架是对的,但在格式对齐、输入读取这些细节上需要人工修正。这类任务的特点是:算法逻辑有标准答案,模型训练数据里肯定见过类似的题目,所以它能"回忆"出正确的解法。但细节要求(比如空格数、分隔符)往往因平台而异,模型没法从训练数据里学到这些特定要求,所以需要提示词补充。
工程类任务(RVM 多输出回归)上,模型的表现是"框架对、实现糙"。它能给出 RVM 的核心迭代公式,代码结构也合理,但在数值稳定性、多输出扩展、预测函数这些工程细节上需要大量补充。这类任务的特点是:没有标准答案,实现方式多种多样,模型只能给出一个"常见"的实现,但实际项目里需要根据数据特点做调整。
这个差异说明,Step 5 Preview 更适合做"代码骨架生成",而不是"完整项目交付"。你可以用它快速搭出一个可运行的框架,然后自己填充细节。如果你指望它一次性生成可直接上生产的代码,可能会失望。
4.2 提示词工程对输出质量的影响
两个任务里,我都调整过提示词,效果差异很明显。
杨辉三角任务里,第一次提示词只说"用倒推法求杨辉三角并输出",模型生成的代码格式不对。第二次我补充了"从标准输入读取 n"和"具体格式参考",模型就改对了。这说明对于格式要求严格的任务,提示词里必须给出具体的格式示例,不能笼统描述。
RVM 任务里,我第一次只说"用 MATLAB 实现 RVM 多输出回归模型",模型生成了单输出的代码。第二次我补充了"多输出需要对每个输出分别建模"和"需要预测函数",模型就补上了相应的代码。这说明对于工程类任务,提示词里需要明确任务边界和交付物,否则模型可能会"偷懒",只给核心部分。
一个通用的经验是:提示词里最好包含"输入是什么、输出是什么、有什么约束、交付物包括哪些"。这四要素说清楚了,模型生成的代码可用性会大幅提高。另外,如果任务涉及特定库或工具,最好在提示词里点名,比如"用 MATLAB 的统计工具箱"或"用 Python 的 scikit-learn",这样模型会优先调用标准库,而不是自己造轮子。
4.3 哪些场景适合用 Step 5 Preview,哪些不适合
基于这两个任务的实测,我总结了一下 Step 5 Preview 的适用场景。
适合的场景:第一,快速生成算法题的解法框架,尤其是 LeetCode 风格的题目,模型对这类任务很熟悉;第二,生成工程代码的骨架,比如数据处理流程、模型训练框架、API 调用示例,模型能给出合理的结构;第三,代码补全和注释生成,模型对上下文的理解能力不错,能根据已有代码补全缺失部分。
不适合的场景:第一,需要严格格式对齐的任务,模型对空格、缩进、分隔符的控制不够精确,需要人工调整;第二,涉及复杂数值计算的任务,模型生成的代码可能在数值稳定性上有问题,需要自己优化;第三,需要特定领域知识的任务,比如某些行业的专有算法,模型可能没见过,生成的代码可能不对。
还有一个场景要注意:如果任务涉及多文件、多模块的工程结构,Step 5 Preview 可能处理不好。它更擅长单文件、单函数的代码生成,对于跨文件的依赖管理、接口定义,需要人工介入。
5. 实测后的经验总结与实操建议
5.1 如何设计提示词让模型输出更可用
提示词的设计,我总结了一个"四要素+两补充"的模板。
四要素是:输入描述、输出描述、约束条件、交付物清单。输入描述要说清楚数据格式和来源,比如"从标准输入读取一个整数 n";输出描述要说清楚格式和内容,比如"输出 n 行杨辉三角,每行数字用 4 个空格分隔";约束条件要说清楚算法要求或性能要求,比如"必须用倒推法实现";交付物清单要说清楚需要哪些文件或函数,比如"包括训练函数、预测函数和示例数据"。
两补充是:格式示例和参考实现。格式示例对于输出格式严格的任务特别重要,给一个具体的输入输出样例,模型就能准确理解要求。参考实现对于工程类任务很有用,如果你有类似的代码,可以贴一段给模型参考,它会模仿你的风格和结构。
另外,提示词里的语言要具体,避免模糊词汇。比如"对齐"不如"每行前面缩进 6 个空格"具体,"高效"不如"时间复杂度 O(n log n)"具体。模型对具体数值和明确要求的执行力度,远高于模糊描述。
5.2 代码验证与调试的实用流程
模型生成的代码,我一般按这个流程验证。
第一步,先跑一遍,看能不能通过编译或解释。这一步能过滤掉语法错误和明显的逻辑错误。Step 5 Preview 生成的代码,语法错误很少,但偶尔会有变量未定义或函数未实现的情况。
第二步,用简单输入测试,看输出是否符合预期。比如杨辉三角任务,先用 n=1、n=2 测试,确认基本逻辑对,再用 n=3 测试格式。RVM 任务,先用少量样本测试,确认训练能收敛,再用完整数据测试。
第三步,检查边界条件。比如 n=0 或 n=1 的情况,数据里有异常值的情况,矩阵接近奇异的情况。这些边界条件往往是 bug 的高发区。
第四步,对比参考实现。如果任务有标准答案或参考代码,跑一遍对比结果。如果没有,就自己构造一组已知答案的数据来验证。
调试的时候,我习惯在关键步骤加打印语句,输出中间变量的值。比如 RVM 训练时,打印每次迭代的 alpha 和 beta,看收敛趋势。杨辉三角任务,打印每行的缩进和分隔符,看格式对不对。这些打印语句在最终代码里可以删掉,但调试时很有用。
5.3 从实测看 AI 编程助手的合理使用姿势
用了这么久 AI 编程助手,我的体会是:把它当成一个"高级代码补全工具",而不是"自动编程机器人"。
具体来说,适合让它做的事:生成重复性的代码模板,比如数据读取、预处理、可视化;提供算法思路和伪代码,帮你快速理解一个陌生领域;补全你写了一半的函数,尤其是那些你清楚逻辑但懒得敲的代码;解释报错信息和调试建议,它有时候能给出你没想到的排查方向。
不适合让它做的事:直接生成生产环境的代码,不做任何审查;处理涉及安全或隐私的逻辑,比如加密、认证;优化性能关键的代码,它生成的代码往往不是最优的;理解复杂的业务逻辑,它没有你的领域知识。
还有一个心得:跟 AI 编程助手协作时,最好保持"小步快跑"的节奏。不要一次性让它生成几百行代码,而是分成小任务,每次生成一个函数或一个模块,验证通过后再继续。这样既能保证质量,也能在出错时快速定位问题。
最后说一个我踩过的坑:不要完全信任模型生成的数学公式。Step 5 Preview 在 RVM 任务里生成的迭代公式,大体是对的,但有一个符号错了,导致训练不收敛。我对照论文检查了一遍才发现。所以涉及数学推导的代码,一定要自己验证一遍,或者至少用已知答案的数据测试一下。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 代码跑不通,报语法错误 | 模型生成的代码有拼写错误或缺少导入 | 逐行检查报错位置 | 手动修正语法,补充缺失的 import |
| 输出格式不对 | 提示词里格式描述不具体 | 对比预期输出和实际输出 | 在提示词里给出具体的格式示例 |
| 训练不收敛 | 学习率太大或初始化不当 | 打印中间变量,观察变化趋势 | 减小学习率,调整初始化 |
| 数值溢出或 NaN | 矩阵求逆不稳定或数据未标准化 | 检查矩阵条件数,检查数据范围 | 用\代替inv(),对数据做标准化 |
| 多输出只处理了一个 | 提示词里没明确多输出要求 | 检查代码里 t 的维度 | 在提示词里说明"对每个输出分别建模" |
| 预测结果偏差大 | 模型过拟合或欠拟合 | 对比训练集和测试集误差 | 调整 alpha 初始化,增加正则化 |
| 收敛太慢 | 收敛判据太严格 | 打印迭代次数和误差 | 放宽 tol,或加学习率衰减 |
| 边界条件报错 | 没有处理 n=0 或空数据 | 用边界输入测试 | 在代码里加边界判断 |
这个表里的问题,我在两个任务里都遇到过。最常出现的是格式不对和训练不收敛,前者靠提示词解决,后者靠调参解决。数值问题在 MATLAB 里比较常见,因为 MATLAB 默认是双精度,但矩阵求逆时如果条件数太大,还是会出问题。
还有一个经验:如果模型生成的代码里有你不熟悉的函数或语法,先查文档再运行。Step 5 Preview 有时候会用一些比较新的 MATLAB 函数,比如vecnorm或pagectranspose,这些在旧版本里可能没有。查一下文档,确认你的环境支持,再决定用不用。
6. 我对 Step 5 Preview 的真实评价
两个任务跑下来,Step 5 Preview 给我的感觉是"能用,但别指望太多"。它的代码生成能力在平均水平之上,尤其是算法类任务,基本逻辑很少出错。但在工程类任务上,它更像是一个"给出起点"的工具,而不是"给出终点"的工具。你需要自己补全很多细节,才能让代码真正可用。
跟其他 AI 编程助手比,Step 5 Preview 的优势在于对中文提示词的理解比较好,我用的提示词都是中文,它没有出现理解偏差。另外它的代码风格比较统一,生成的代码可读性不错,变量命名也合理。缺点是对格式细节的把控不够精确,需要提示词里给出非常具体的约束。
如果你问我值不值得用,我的答案是:如果你已经有编程基础,把它当成一个加速工具,那值得;如果你指望它帮你写完整项目,那可能会失望。它最适合的场景是:你清楚要做什么,也知道怎么做,只是懒得敲代码,这时候让它生成一个框架,你再来填充和调整,效率提升很明显。
最后分享一个小技巧:用 Step 5 Preview 生成代码时,可以要求它"在关键步骤加注释"和"给出测试用例"。这两个要求能让生成的代码更容易理解和验证。我试过在提示词里加"请为每个函数添加注释,并给出一个测试示例",模型输出的代码质量明显更高,而且自带测试代码,省了我不少事。