想象你刚拿到驾照,副驾驶上坐着一位二十年驾龄的教练。他从不抢方向盘,但会在你犹豫时轻声讲解路况规则,会在你即将压线时及时提醒刹车的时机,还会在训练场摆好锥桶,设计模拟考试让你反复练习。这位教练,就是 GitHub Copilot Chat——一个能读懂你代码仓库的 AI 助手。你只需选中一段代码问“这段代码在做什么”,他就能像讲解路况一样把逻辑拆开;当代码报错时,他能定位问题并给出修复建议;写完功能后,他还能像出模拟考题一样生成测试用例。这篇文章以“副驾驶教练”为线索,带你掌握解释、修复、生成测试这三项基本功,并学会让它与内联补全配合,把 AI 变成你的贴身陪练。

岗位关联

掌握 Copilot Chat 的解释、修复与测试生成能力,等于给日常开发配了一位随叫随到的代码评审与测试搭档,能显著提升前端开发的效率与代码质量。

目录
  1. 可视化演示
  2. 代码解释能力
  3. 自动修复建议
  4. 测试用例生成
  5. 重构建议
  6. 内联补全配合
  7. 前端应用实战
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示Copilot Chat的代码解释、自动修复建议与测试用例生成三大功能,交互切换理解AI对话式编程助手的工作流程。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Copilot Chat代码解释 自然语言解释选中代码片段 根据上下文动态生成解释 Explain 覆盖函数逻辑变量作用域调用关系

代码解释能力

新手上路最怕遇到复杂的路口标线:三条车道、两个信号灯、还有行人优先区。此时副驾驶的教练会指着前方说:“这条路是主路优先,右侧车辆必须让行,你走中间车道最稳妥。”Copilot Chat 的代码解释能力,扮演的就是这个角色。你不需要把整个文件读一遍,只要选中那段让你犯晕的代码,它就能把“路况”翻译成人话。

在 VS Code 中,选中代码后可以点击 Chat 面板里的“解释”按钮,或者直接输入自然语言问题:“这段代码在做什么?”Chat 会结合你选中的代码、当前打开的文件以及工作区的索引信息,给出结构化的回答,比如“这是一个防抖函数,内部维护了一个定时器,每次调用会先清除上一次的计时”。这相当于教练不仅看到眼前的路口,还知道整条街的布局,因为这段时间它早就把城市地图(工作区)看熟了。

技术层面上,解释能力依赖“上下文相关性”:AI 会把用户的问题拆成若干知识点,再和代码上下文做匹配。匹配越充分,解释越准确。我们可以用一个相关度公式来理解这个过程。

教练讲路况时,也会挑重点:先讲最影响安全的标志,再讲次要的标线。你用 Chat 解释代码时,同样可以追问“那这个变量的作用域呢?”——一次没讲透,就继续追问,直到把每条“路标”都弄清。代码越复杂,越值得先解释再动手改。

Relevance=Ncoveredmax⁡(Nasked, k)\mathrm{Relevance} = \frac{N_{\text{covered}}}{\max(N_{\text{asked}},\ k)}
这个公式描述的是:Copilot Chat 的回答覆盖了多少你真正想问的点。覆盖的越多,分母越贴近实际提问规模,解释就越“对路”。
  1. 分子 N_covered表示回答中覆盖到的知识点数量,例如函数用途、参数含义、返回值。
    NcoveredN_{\text{covered}}
  2. 分母 N_asked表示提问中隐含的知识点总数,比如“这段代码为什么用闭包?”至少涉及闭包和变量生命周期两个点。
    NaskedN_{\text{asked}}
  3. 常数 k一个防止除零的最小基准值,提问太模糊时兜底使用。
    kk
  4. 取最大值 max分母取 N_asked 与 k 的较大者,避免“什么都没问就得到满分”的失真。
    max⁡(Nasked,k)\max(N_{\text{asked}}, k)

自动修复建议

学员开车时,最怕教练在旁边突然喊“踩刹车!”。但真正的好教练会在你即将压线的两秒前,冷静地说:“先松油门,再看左后视镜。”Copilot Chat 的自动修复建议,就是这种提前预警式的提醒。当你编辑器里出现红色波浪线——可能是语法错误、类型不匹配或 ESLint 规则冲突——Chat 会先帮你定位到问题所在行,再解释错误原因并给出修复方案。

这个过程通常分为三步:第一,Chat 读取编辑器的诊断信息(如 TypeScript 的类型报错);第二,它结合报错位置前后的代码,推理出根因;第三,给出一个或多个修复补丁,你可以点击“应用”让修改直接落到代码里。很多前端开发者的习惯是:遇到报错先复制错误信息到 Chat,问一句“为什么会这样?”,再顺手把修复建议应用掉。

修复建议的可靠性,可以用“接受率”来衡量——这也是团队引入 AI 助手时最关心的指标之一。

教练纠正你动作时,你也会想一想“为什么他让我看左后视镜”。同理,不要盲目信任修复建议——应用之前,扫一眼改动,确认它没有破坏其他逻辑,再跑一遍测试。聪明的学员不只接受纠正,还会理解纠正背后的原理。

AcceptRate=NacceptedNsuggested\mathrm{AcceptRate} = \frac{N_{\text{accepted}}}{N_{\text{suggested}}}
这是“教练的建议被采纳的比例”。如果 AI 给出 10 条修复建议,你有 7 条确认没问题并应用了,那么接受率就是 70%。接受率越高,说明 AI 对项目代码的理解越准。
  1. 分子 N_accepted表示你真正接受并应用的修复建议数量。
    NacceptedN_{\text{accepted}}
  2. 分母 N_suggested表示 Chat 给出的建议总数,包括你拒绝的那些。
    NsuggestedN_{\text{suggested}}
  3. 比值求解两者相除,得到 0 到 1 之间的比例,反映建议的可用程度。
    NacceptedNsuggested\frac{N_{\text{accepted}}}{N_{\text{suggested}}}

测试用例生成

科目二训练场里,教练不会只让你在平路上开直线,他会摆好一排锥桶让你练习侧方停车,还在急弯处划上醒目的标记。这些模拟场景,对应到开发中就是测试用例。Copilot Chat 可以根据你选中的函数或组件,直接生成单元测试代码:它分析函数的参数、返回值、条件分支,然后覆盖正常情况、边界情况和异常情况。

比如你写了一个 formatPrice 函数,Chat 可能帮你生成三组测试:传 99.5 验证保留两位小数,传 0 验证零值处理,传 -1 验证负数格式化。它还会自动适配你项目里的测试框架——Vue 项目配 Vitest,React 项目配 Jest。这就是“教练知道你的考场规定”。

测试做得好不好,最经典的量化指标是覆盖率:被测试执行到的代码行数占总行数的比例。

教练设计的模拟题再多,最终坐上考场的还是你。Chat 生成的测试代码帮你搭好了骨架,但“预期值”是否正确,仍需要你根据业务需求来判断。它出的卷子你要批改一遍,把断言参数改成符合真实业务的数字,再提交到流水线里反复跑。

Coverage=LexecutedLtotal\mathrm{Coverage} = \frac{L_{\text{executed}}}{L_{\text{total}}}
覆盖率像是你的训练范围:教练安排的练习路线覆盖了多少种路况。覆盖越全,考试时遇到新情况的概率就越低。
  1. 分子 L_executed表示测试运行时真正执行到的代码行数。
    LexecutedL_{\text{executed}}
  2. 分母 L_total表示被测文件的总代码行数。
    LtotalL_{\text{total}}
  3. 比值求解两者相除得到覆盖率。50% 覆盖率意味着有一半代码从未被测试触碰。
    LexecutedLtotal\frac{L_{\text{executed}}}{L_{\text{total}}}

重构建议

开了几个月车后,你发现一条更顺畅的上班路线:少两次左转,避开早高峰拥堵路段。教练点点头:“这就是老司机的走法。”重构建议正是如此。Copilot Chat 不只会修 Bug,它会审视你的代码质量,提出“这个函数太长了,可以拆成三个小函数”“这里重复的逻辑可以提取成公共组件”“用 Map 替代 switch 分支更高效”等优化方案。

对前端开发者来说,常见的重构对象包括:过长的组件方法、重复的样式逻辑、硬编码的配置项,以及可以被自定义 Hook 抽取的公共状态逻辑。Chat 给出的重构建议通常会附带前后对比,让你看清改动范围,这就像教练在地图上同时画出“旧路线”和“新路线”。

圈复杂度是判断代码是否需要重构的重要指标,它衡量函数中独立路径的多少。

教练从不会让你一次改完整个驾驶习惯,而是“这个星期先练好变道,下个星期再练倒库”。重构也应小步进行:每次让 Chat 提出一个小范围改动,应用后立刻跑测试回归确认,再继续下一步。小步重构,是对代码库最温柔的改造方式。

M=E−N+2PM = E - N + 2P
圈复杂度像路口的岔路数:岔路越多,走错的可能性越大。当 M 超过 10,教练就会建议你换一条更简单的路线,也就是拆函数。
  1. E(边数)表示函数控制流图中边的数量,每条边是一次可能的执行跳转。
    EE
  2. N(节点数)表示控制流图中节点的数量,每个节点是一段顺序执行的代码。
    NN
  3. P(连通分量)表示控制流图中独立部分的个数,通常为 1。
    PP
  4. 组合求解E 减 N 加 2P,得到独立路径总数。值越大,代码分支越复杂,越需要重构。
    E−N+2PE - N + 2P

内联补全配合

副驾驶教练有两种指导方式:一种是你正常开车时,他轻声碎碎念“前方 300 米右转”“注意限速 60”;另一种是当你主动问“教练,这里的掉头规则是什么?”时,他停下来详细讲解。内联补全(Inline Completion)就是前者,Copilot Chat 就是后者。内联补全在你打字时实时预测下一段代码,而 Chat 通过对话解答更深层的问题。

组合工作流的正确姿势是:先用内联补全快速写出模板代码和常规逻辑,遇到不确定的设计决策时,选中相关代码切换到 Chat 里提问:“这个状态放在父组件还是子组件?”听完解释后,如果决定换一种实现,再回到编辑器里让内联补全继续跟进。两者一快一慢,配合默契。

我们可以用贝叶斯公式理解这种配合的增益:在“同时使用两种工具”的前提下,代码成功交付的概率会明显提升。

教练的实时提示不是让你无脑照抄,Chat 的讲解也不是让你只看不动。正确的姿态是:内联补全负责“快”,Chat 负责“稳”,你负责最后的判断。当补全建议与 Chat 解释出现矛盾时,优先以 Chat 给出的上下文分析为准。

P(A∣B)=P(B∣A)×P(A)P(B)P(A\mid B) = \frac{P(B\mid A) \times P(A)}{P(B)}
这里的含义是:当你养成了“内联补全 + Chat 追问”的组合工作流(事件 B),代码合并交付(事件 A)的可能性会被放大。教练既实时提点,又停下来讲解,学员自然进步更快。
  1. 先验概率 P(A)表示不使用 AI 组合时,代码顺利交付的基准概率。
    P(A)P(A)
  2. 似然概率 P(B|A)表示在成功交付的项目里,使用了组合工作流的概率。
    P(B∣A)P(B\mid A)
  3. 证据概率 P(B)表示所有项目中组合工作流出现的总体比例。
    P(B)P(B)
  4. 后验概率 P(A|B)表示使用了组合工作流后,代码顺利交付的概率。
    P(A∣B)P(A\mid B)

前端应用实战

终于到了路考那天。教练坐在副驾,你独自面对真实的路况。前端项目里,这套“解释 → 修复 → 测试 → 重构”的组合拳,就是你通过路考的完整流程。比如接手一个 Vue 项目里的老旧组件,你可以先选中组件代码让 Chat 解释它的 props 和数据流,再根据控制台报错让 Chat 定位 Bug 并修复,接着让它生成组件测试用例,最后请它给出拆分组件的重构建议。

一个典型的实战循环是这样:遇到陌生组件,用 Chat 解释功能;改动后出现报错,用 Chat 定位修复;功能稳定后,用 Chat 补测试;合入 PR 前,用 Chat 做一轮代码质量审查。每次循环都在提升代码质量,而这个质量可以用一个加权分数来衡量。

教练教你的不是某一条固定路线,而是一套面对任何路况的决策方法。Copilot Chat 也一样——解释、修复、测试、重构并非四个孤立按钮,而是一条完整的工作流。形成肌肉记忆之后,你会发现:AI 不再只是辅助工具,而是你驾驶座上最可靠的副驾驶。

Q=w1E+w2C−w3MQ = w_1 E + w_2 C - w_3 M
代码质量分数 = 可读性得分 × 权重 + 覆盖率得分 × 权重 − 复杂度 × 惩罚权重。教练的评分标准:开得清楚、训练覆盖全、路线不绕弯。
  1. 可读性 E表示代码可读性得分,越高代表越容易理解。
    EE
  2. 覆盖率 C表示测试覆盖率,越高代表越不容易回归。
    CC
  3. 复杂度 M表示圈复杂度,越高的复杂度会被扣分。
    MM
  4. 权重组合用 w1、w2 给正向指标加权,用 w3 对复杂度做惩罚,最终得到综合质量分。
    w1E+w2C−w3Mw_1 E + w_2 C - w_3 M

AI 应用场景

新人接手遗留前端项目

阶段:代码理解与知识传递

解决的问题:传统方式下,新人接手老项目要先翻几天代码才能理清业务逻辑,碰到没有文档的组件只能靠猜。Copilot Chat 把“阅读代码”变成“对话式提问”,选中组件就问它的职责、数据流和设计原因,理解成本大幅降低。

具体案例:某公司新入职的前端工程师接手一个 Vue 2 老项目,面对一个 800 行的 OrderList.vue 无从下手。他用 Chat 依次选中模板、script 和样式块,提问“每个区块的职责是什么”“这段订单状态判断的逻辑是什么”,几分钟内就对组件结构有了全局认识,再结合 Chat 建议逐步拆分组件。

CI 流水线中的自动化修复建议

阶段:持续集成与缺陷修复

解决的问题:传统 CI 失败后,开发者要反复翻日志、本地复现才能定位问题,沟通成本高。Copilot Chat 结合编辑器诊断信息,能直接给出修复补丁,开发者确认后一键应用,缩短了从报错到修复的反馈回路。

具体案例:某团队的 CI 在运行 ESLint 和 TypeScript 检查时频繁报错,开发者在 Chat 里粘贴报错信息,Chat 指出是某个接口返回类型不兼容,并给出修改 interface 定义的补丁。开发者点击应用后,重新提交,CI 顺利通过。

前端组件测试批量生成

阶段:测试编写与质量保障

解决的问题:传统测试编写耗时且容易遗漏边界情况。Copilot Chat 能根据组件的 props 和事件逻辑,批量生成覆盖正常、边界、异常场景的单元测试,配合覆盖率公式,让团队用最少的时间把测试覆盖率提上去。

具体案例:一个 React 团队为 20 个通用组件编写测试,过去需要 3 天。现在通过 Chat 为每个组件生成初始测试模板,开发人员只需调整断言值和 Mock 数据,1 天即完成,测试覆盖率从 35% 提升到 80%。

Python 演示

python57 行
"""mini_copilot_chat.py: simulate Copilot Chat explain/fix/test flow.""" import re  class MiniCopilotChat:    def __init__(self):        self.explain_count = 0        self.fix_count = 0        self.test_count = 0     def explain(self, code):        # explain: extract function name, params and return statement        self.explain_count += 1        func = re.search(r"function\s+(\w+)\s*\((.*?)\)", code)        name = func.group(1) if func else "anonymous"        params = func.group(2) if func else ""        return_lines = [ln.strip() for ln in code.splitlines() if "return" in ln]        action = "returns " + return_lines[0][7:] if return_lines else "runs internal logic"        return "The function {} takes ({}) and {}.".format(name, params, action)     def detect_bug(self, code):        # fix: find division by a variable that may be zero        self.fix_count += 1        dividers = re.findall(r"/\s*([A-Za-z_]\w*)", code)        risky = [d for d in dividers if d not in ("1", "2")]        if risky:            return ["add a zero guard before division",                    "check whether {} is zero".format(", ".join(risky))]        return ["no obvious risk found"]     def generate_test(self, code):        # test: create a minimal unit test stub        self.test_count += 1        func = re.search(r"function\s+(\w+)", code)        name = func.group(1) if func else "target"        return [            "import { " + name + " } from './" + name + "';",            "test('" + name + " normal input', () => {",            "  expect(" + name + "(2, 1)).toBe(2);",            "});",        ]     def run(self, code):        print("[explain]", self.explain(code))        print("[fix]", " | ".join(self.detect_bug(code)))        for line in self.generate_test(code):            print("[test]", line)  if __name__ == "__main__":    sample_code = """    function divide(a, b) {      return a / b;    }    """    MiniCopilotChat().run(sample_code)
目的:用 Python 模拟 Copilot Chat 的“解释、修复、测试”三段流程,对一段 JavaScript 函数做静态分析并输出结果。
  1. func = re.search(r"function\s+(\w+)\s*\((.*?)\)", code)用正则提取函数名和参数列表,相当于 Chat 先“看”一眼代码结构。
  2. return_lines = [ln.strip() for ln in code.splitlines() if "return" in ln]找出包含返回语句的行,用来推断函数行为。
  3. dividers = re.findall(r"/\s*([A-Za-z_]\w*)", code)找出所有的除数变量,模仿 Chat 对危险运算的敏感。
  4. risky = [d for d in dividers if d not in ("1", "2")]过滤掉常量除数,剩下可能为 0 的变量,对应“修复建议”中的根因定位。
  5. "import { " + name + " } from './" + name + "';"生成测试文件的 import 语句,对应 Chat 适配测试框架的能力。
  6. expect(` + name + `(2, 1)).toBe(2);生成一个最简断言,对应测试用例生成中的“单元测试骨架”。

常见误区

误区我一直以为 Copilot Chat 只能回答通用编程问题,像搜索引擎一样,不知道它能理解我当前打开的文件和整个项目结构,所以问问题总是把代码复制粘贴一大段进去。

正解Copilot Chat 通过工作区索引、当前打开文件和编辑器上下文感知项目内容。你选中代码直接提问,它就能结合项目里的其他文件给出更贴切的解释和修复建议。就像副驾驶教练不仅看到眼前的马路,还记住了你常走的几条路线。

为何常见:很多初学者把 Chat 类比成浏览器里的聊天机器人,忽略了它在编辑器里天然拥有“读取代码上下文”的特权。

误区AI 给的修复方案看起来都很专业,我每次都是点击“应用所有修复”,省时省力,就算报错消失了我也不细看改了什么。

正解修复建议本质是基于概率的生成结果,不是经过编译验证的补丁。正确做法是像批改作业一样:先读一遍改动逻辑,确认没有影响其他分支,再运行测试回归。接受率高不代表可以盲目全收——教练让你打方向盘,你也要看前方有没有车。

为何常见:人天生信任权威且图省事,AI 的专业语气容易让人觉得“它一定是对的”,而忽略了代码风格和业务语义的差异。

误区我以为 Chat 会在后台直接执行我的函数,然后把运行结果告诉我,这样我就不用自己写测试了。

正解Chat 生成的是测试代码,而不是执行结果。它根据代码逻辑推断应该覆盖的输入和预期值,但业务上的“正确输出”只有你说了算。比如 formatPrice 应该保留几位小数,AI 只能猜,你要根据需求文档修正断言。

为何常见:混淆了“静态代码分析”和“动态执行”两个概念,AI 更像出卷老师,而不是帮你考试的同学。

误区反正都是 AI 帮我写代码,内联补全和 Chat 应该只是入口不同,实际能力一样,随便用一个就行。

正解两者差异很大。内联补全是无对话的实时续写,跟着光标走,适合快速生成模板和常规逻辑;Chat 是带上下文的问答,可以解释、修复、生成测试、讨论设计。真正高效的方式是按需切换:打字靠补全提速,困惑靠 Chat 解惑。

为何常见:二者都由同一个底层模型驱动,界面上也常常同时出现,初学者容易把它们混为一谈。

面试题

Q1. 想快速理解一段别人写的复杂函数,最合适的 Copilot Chat 用法是?

单选题 · easy

  • A.直接问“这段代码在做什么”← 正确答案
  • B.让 AI 直接重写整个文件
  • C.把文件删掉让 AI 重新补全
  • D.在终端里运行打包命令查看

答案:A。选中代码后用自然语言提问,是最直接的解释方式。A 利用选区上下文,Copilot 能精准分析函数逻辑;B、C 是重写而非解释,容易改变原有行为;D 的运行命令只暴露构建结果,不解释代码意图。

Q2. Copilot Chat 给出修复建议后,最稳妥的处理方式是?

单选题 · mid

  • A.全选代码直接应用所有修改
  • B.先理解原因再逐条确认应用← 正确答案
  • C.忽略建议因为 AI 不太可靠
  • D.只修复报错信息对应的那一行

答案:B。修复建议需要像批改作业一样核对。B 在理解根因的基础上逐条应用,降低了引新 Bug 的风险;A 的“全选应用”容易覆盖合理代码;C 因噎废食;D 只治标不治本,报错的根因可能在别的模块。

Q3. 生成测试用例时,Copilot Chat 主要依据什么来设计用例?

单选题 · easy

  • A.仅凭函数名称猜测功能
  • B.只覆盖正常调用的路径
  • C.分析代码逻辑与边界条件← 正确答案
  • D.随机生成一批断言语句

答案:C。Chat 会结合函数参数、条件分支和返回语句来设计用例,覆盖正常、边界和异常场景。C 符合这个机制;A 只看名字容易猜错;B 遗漏边界情况;D 的随机断言没有针对性。

Q4. “内联补全”与“Chat 对话”最主要的区别是?

单选题 · mid

  • A.内联补全实时跟随光标给出提示← 正确答案
  • B.Chat 对话不需要读取任何上下文
  • C.内联补全不能接受用户的自然语言
  • D.Chat 对话只能用来解释报错现象

答案:A。内联补全是无对话的实时续写,光标移动时即时出现建议;Chat 则是有来有回的深聊。A 准确描述了这个核心差异;B 错误,Chat 同样依赖上下文;C 错误,它可以直接用自然语言引导补全;D 错误,Chat 还能重构和生成测试。

Q5. “小步重构”的核心含义是什么?

单选题 · mid

  • A.每次重构只允许修改一行代码
  • B.每次改动后都运行测试做回归验证← 正确答案
  • C.重构必须一次性完成所有变更
  • D.只能在代码提交之前进行重构

答案:B。小步重构强调“短周期修改 + 频繁验证”,每次改动范围可控,回归测试通过后再继续。B 正确;A 过于机械,有时一次改动涉及多行;C 与“小步”矛盾;D 重构可以在开发的任何阶段进行。

Q6. 关于测试覆盖率公式的正确理解是?

单选题 · hard

  • A.覆盖率越高代码一定越安全
  • B.覆盖率只统计函数的数量
  • C.覆盖率是执行行数占总行数的比例← 正确答案
  • D.覆盖率高低与分支判断完全无关

答案:C。覆盖率 = 被测试执行到的代码行数 ÷ 总代码行数,C 正确。A 过于绝对,高覆盖率不代表断言有效;B 错误,它以行或分支为统计单位;D 错误,分支覆盖正是覆盖率的重要维度。

Q7. 想让 Copilot Chat 解释一个 Vue 组件,最佳操作方式是?

单选题 · easy

  • A.选中组件代码后在 Chat 中提问← 正确答案
  • B.在全局搜索面板里输入问题
  • C.打开浏览器控制台查看日志分析
  • D.重新安装项目依赖再观察效果

答案:A。选中代码发起对话,Chat 能结合文件内容和项目上下文给出解释。A 是最优操作;B 的全局搜索是检索代码而非解释代码;C 只能看到运行期日志,无法解释源码意图;D 与理解组件逻辑无关。

Q8. 以下哪些能力属于 Copilot Chat 的典型功能?()

多选题 · mid

  • A.解释代码逻辑与用途← 正确答案
  • B.定位错误并给出修复建议← 正确答案
  • C.生成单元测试与边界用例← 正确答案
  • D.直接部署应用到生产服务器

答案:ABC。解释、修复建议、测试生成是 Chat 在编辑器里的三大基础能力。D 属于 CI/CD 工具链的职责,Chat 只输出代码和方案,不执行部署动作。

Q9. 将内联补全与 Chat 配合使用的正确姿势有哪些?()

多选题 · mid

  • A.先用内联补全写主体再让 Chat 检查← 正确答案
  • B.让 Chat 解释完方案后继续追问细节← 正确答案
  • C.两者功能重复只能固定选择其一
  • D.接受修复建议后运行测试加以验证← 正确答案

答案:ABD。A 补全提速、Chat 把关,是典型组合;B 追问细节能加深理解,符合对话式工作流;D 验证修复是必要的闭环。C 错误,两者互补而非互斥。

Q10. 以下哪些做法能提升 Copilot Chat 的输出质量?()

多选题 · hard

  • A.提供清晰的指令与代码选区范围← 正确答案
  • B.让 AI 输出后再追问细化解释← 正确答案
  • C.删掉代码里所有注释让信息更少
  • D.结合项目上下文一起提问← 正确答案

答案:ABD。清晰的指令 + 明确的选区 + 项目上下文,能让模型更准地理解意图;追问可以逐步逼近正确答案。A、B、D 都对。C 错误,注释是重要的上下文线索,删除反而降低回答质量。