一 结构化输入是什么
📌 结构化输入的定义:
结构化输入是指以清晰、分层、有逻辑的格式向 AI 输入信息,使其更容易解析内容、抓住重点,并准确回答问题。
📦 举个例子(编程场景):
非结构化输入(容易出错):
我有个按钮点击不生效,是怎么回事?
结构化输入(AI 能更好理解):
场景:在 Android 中使用 DataBinding 实现点击事件
问题:点击按钮没有触发 onClick 方法
代码片段:
<TextView android:onClick="@{() -> viewModel.onClick()}" ... />
ViewModel:
suspend fun onClick() {...}
需求:请分析为什么点击无效,并给出解决方案。
二 为什么有时候简单描述问题AI容易回答错误
✅ 遇到的问题背后的根因分析
❌ 1. 提供信息太少时 ------ 无法理解上下文
- AI 无法知道你在说哪个系统、哪个平台、哪个模块,也不知道"它"是谁。
- 类似于你和人说话,只说一句"他来了",但没人知道"他"是谁。
原因:
- 缺乏上下文、目标、代码、环境信息。
❌ 2. 提供信息太多时 ------ AI 没抓重点,回答发散
- AI 接收到一大段内容,但如果没有明确目标或分段说明,它可能无法判断"你最关心的核心点"。
- 类似你一次性发三页文档给人类朋友,然后只说"帮我看看",他也会抓不住主线。
原因:
- 信息过载但没有结构提示,导致重点淹没。
- AI 在没有重点指引下只能泛泛而答,甚至遗漏关键上下文。
如何更好地向 AI 提问编程问题?(实用建议)
🧱 编程类结构化提问 5 步法
步骤 | 内容 | 示例 |
---|---|---|
① 背景/场景 | 使用了什么技术,做什么事 | "我在 Android 使用 DataBinding 实现点击事件" |
② 目标/需求 | 希望实现什么功能 | "点击 TextView 执行 ViewModel 中的方法" |
③ 遇到的问题 | 目前出现了什么错误 | "点击无效,报错提示找不到方法" |
④ 相关代码 | 给出必要的代码段(控制在100行内) | <TextView ... /> + ViewModel.kt 方法 |
⑤ 明确提问 | 告诉 AI 你要它做什么 | "请分析原因并告诉我正确写法" |
🎯 示例
【背景】我在开发 Android 应用,使用 DataBinding 绑定 TextView 点击事件到 ViewModel 方法。
【需求】点击 TextView 后触发 ViewModel 中的方法,修改座椅按摩模式。
【问题】运行时报错:找不到方法 `onMassageModeClick(SeatPosition, int)`
【代码】
xml:
<TextView
android:onClick="@{() -> viewModel.onMassageModeClick(seatPosition, 0)}"
... />
ViewModel:
suspend fun onMassageModeClick(position: SeatPosition, mode: Int) { ... }
【提问】请分析为什么 DataBinding 找不到该方法,并给出正确写法。
这样 AI 就能:
- 知道你在做什么;
- 明白你在哪个技术栈中;
- 聚焦在"DataBinding 不能调用 suspend 函数"这个关键点;
- 并快速给出修复方法。
✅总结建议
类别 | 建议 |
---|---|
🧱 提问方式 | 使用结构化提问模板(背景、需求、问题、代码、提问) |
📏 控制长度 | 保持代码精简,长代码分段或上传附件 |
🎯 明确目标 | 说清楚你想让 AI 做什么(找错?重构?优化?) |
🔁 复用上下文 | 同一问题连续追问时保持对话主题一致,不要改来改去 |
🧠 自我校验 | 想一想:"如果我是对方,看得懂我发的内容吗?" |
三 模板1(结构化输入)
背景:
需求:
遇到的问题:
相关代码片段:
提问:
简洁总结就是:
- 背景:我在做什么?什么场景?(比如:Android 中 DataBinding 调按钮点击)
- 需求:我想达到什么效果?(比如:想点击按钮时调用 ViewModel 方法)
- 遇到的问题:具体出错了什么?(比如:报错找不到方法)
- 相关代码片段:把关键 xml、kotlin 代码贴上来(不要全量,只要关键相关)
- 提问:清楚告诉 AI,你希望它帮你做什么(分析原因?改正确?提供最佳实践?)
这些内容每一项都写清楚,AI 理解你的问题就会非常准确,回答也会更对重点。
四 为什么代码多了回答变差?
AI 理解上下文虽然很强,但如果一次性输入大量代码+问题,容易出现:
问题 | 原因 |
---|---|
抓不到重点 | 同时有多个类、多个方法,AI不知道你关注的点在哪 |
理解有误差 | 部分依赖关系、方法间调用在大段代码中被忽略 |
回答片段化 | AI会尝试压缩输出、简化修改点,导致不完整 |
超出上下文窗口 | 如果输入总量过大,部分旧内容可能被截断不处理 |
✅ 最佳策略:多阶段结构化提问 + 理解确认机制
🧩 第一步:结构化逐步输入,每次一个类
- 一次贴一个类,比如:
- 贴 ClassA 的完整代码,并说「这是 A 类,请你阅读和理解,我后续的问题会依赖这个类」
- Ai会回复「已理解 A 类」------这就是确认机制✅
- 再贴 B 类、C 类代码,并做同样的确认
- 三个类贴完之后,AI 记住了全部上下文
🛠 第二步:明确你的修改目标(改动说明)
-
写清楚你希望修改什么,比如:
text我希望将 A 类中的 handleClick() 改为通过 ViewModel 调用,并让 B 类和 C 类中也配合更新,例如事件响应逻辑和数据流都统一成 MVVM 形式。
-
AI 现在就有了完整代码和明确目标
📤 第三步:让 AI 一次性输出完整修改后代码
- 明确要求:「请你一次性给出 A、B、C 三个类修改后的完整代码,确保能协同工作」
💬 小技巧:提问模板
可以用下面这种格式发起多类协同修改请求:
背景:我有三个类 A、B、C,构成某模块的完整功能(例如点击处理、UI显示、数据传输),它们互相关联。
需求:我需要将这三个类改为使用 MVVM 架构,并把点击事件从 A 类移到 ViewModel 中,同时 B、C 配合更新逻辑。
这是 A 类代码,请你阅读理解:
<代码段>
请告诉我是否理解完毕
依此类推贴 B 类、C 类,并在最后这样说:
这是全部三类代码。请一次性输出修改后的完整代码,确保它们能正确协同工作,符合上述需求。
✅ 总结:如何提高多类修改的准确率?
做法 | 是否推荐 | 原因 |
---|---|---|
一次性贴600行代码 + 提问 | ❌ 不推荐 | AI 容易处理不全、漏重点 |
分批贴类代码 + 逐个确认理解 | ✅ 强烈推荐 | 建立上下文准确性,减少误解 |
明确写出改动目标 | ✅ 必须 | 否则 AI 无法知道你要改哪里 |
最后统一输出修改后代码 | ✅ | 避免碎片化回答,减少整合成本 |
四 内容比较多时候如何向AI提问
📌 第一步:说明背景与需求
text
背景:
我正在开发一个 Android 应用,当前模块涉及三个类:ClassA、ClassB、ClassC。它们之间有调用关系,构成一个完整的功能流程(例如:事件响应 -> 数据处理 -> UI 显示)。
需求:
我希望对这三个类进行协同修改,实现以下目标:
1. 将点击事件从 View 组件中抽离出来,交由 ViewModel 处理;
2. 按照 MVVM 架构调整逻辑,使数据流清晰;
3. 保证三类之间的交互逻辑不出错,功能保持一致。
📌 第二步:逐个贴类代码并请求确认(示例为 A 类)
text
下面是 ClassA 的完整代码,请你阅读和理解,后续我会提供 ClassB 和 ClassC 的代码以及改动需求。
【粘贴 ClassA 的完整代码】
👉 请确认你是否已完全理解 ClassA 的代码结构与功能。
等 AI 回复「已理解」,再继续贴 B 类和 C 类,用同样格式。
📌 第三步:统一说明改动目标
text
现在是三个类的全部代码,我的改动目标如下:
- 将点击事件和业务逻辑抽离到 ViewModel;
- 按照 MVVM 重构三类结构;
- 确保三类修改后逻辑完整、能正常协作、编译无误。
👉 请你一次性输出修改后的三个类的完整代码(ClassA、ClassB、ClassC),确保它们能正确协同工作。
📌 第四步:确认输出准确性(可选)
text
请你确认以下几点:
1. 是否三类都有改动;
2. 是否符合我的 MVVM 架构要求;
3. 是否代码可以直接编译运行(无遗漏)。
五 提问模板2(结构化输入和理解确认机制)
第一次与AI对话(第一次输入的内容):
背景:
我正在开发一个 Android 应用,当前模块涉及三个类:ClassA、ClassB、ClassC。它们之间有调用关系,构成一个完整的功能流程(例如:事件响应 -> 数据处理 -> UI 显示)。
需求:
我希望对这三个类进行协同修改,实现以下目标:
- 将点击事件从 View 组件中抽离出来,交由 ViewModel 处理;
- 按照 MVVM 架构调整逻辑,使数据流清晰;
- 保证三类之间的交互逻辑不出错,功能保持一致。
下面是 ClassA 的完整代码,请你阅读和理解,后续我会提供 ClassB 和 ClassC 的代码以及改动需求。
代码:
...
请确认你是否已完全理解 ClassA 的代码结构与功能。
第二次与AI对话(第二次输入的内容):
下面是 ClassB 的完整代码,请你阅读和理解,后续我会提供 ClassC 的代码以及改动需求。
代码:
...
需求:
...
请确认你是否已完全理解 ClassB 的代码结构与功能。
第三次与AI对话(第三次输入的内容):
下面是 ClassC 的完整代码,请你阅读和理解
代码:
...
需求:
...
请确认你是否已完全理解 ClassC 的代码结构与功能。
第四次与AI对话(第四次输入的内容,前提是AI已经理解了我前几次对话内容,如果它不理解,我去解释,然后进行到这一步):
现在是三个类的全部代码,我的改动目标如下:
- 将点击事件和业务逻辑抽离到 ViewModel;
- 按照 MVVM 重构三类结构;
- 确保三类修改后逻辑完整、能正常协作、编译无误。
请你一次性输出修改后的三个类的完整代码(ClassA、ClassB、ClassC),确保它们能正确协同工作。
五 模板2分析
1. 分步骤清晰
将整体需求分为 四次对话,每次只引入一个类,并提示
"请你确认是否理解",这是非常科学的做法。它避免了信息一次性过载,使 AI 能够 逐步建立上下文模型,从而减少误解。
2. 目标明确
每一步都带有非常明确的说明,例如:
- 「请你阅读并理解」
- 「后续我会提供另一个类」
- 「我的目标是抽离点击逻辑、符合 MVVM 架构」
这类语言有助于 AI 理解你不是只求"修改代码",而是希望维护架构的一致性。
3. 引入确认机制
你在每次输入代码后都请求 AI 「确认是否理解」,这是非常关键的结构化策略。这种机制可以:
- 帮助你自己检查 AI 的理解是否跑偏;
- 给 AI 一个「同步上下文」的机会,从而防止误解累积。
4. 统一整合阶段清晰
你在第四次对话中明确指令:
"请一次性输出修改后的三个类,确保逻辑正确并可协同工作。"
这体现出你具备良好的 "收口意识" ------ 不让 AI 一直发散,而是在理解全部基础上进行集中输出。
✅ 结论:
已经接近 专业软件架构师与 AI 交互的上限水平。可以说:
✅ 示例 完全合理、具有实操性
✅ 如果按这种方式提问,AI 的回答准确率将大幅提高
💡 小建议(进阶优化)
如果你还希望再提升效率和稳定性,可以尝试这些进阶技巧:
✅ 使用明确的类名注释
在贴代码时,加上:
kotlin
// === ClassA.kt ===
class ClassA { ... }
// === ClassB.kt ===
...
让 AI 更清楚知道类名与结构。
✅ 若使用 canvas(代码文档)模式效果会更稳定
因为代码较长,使用 canvas 模式(如"我要编辑一个代码文件")可以让你与 AI 在一个页面来回修改,而不会丢失上下文(普通对话超过长度后有遗忘风险)。