AI Prompt Engineering · 课时

诊断意外输出

对失败模式进行分类:答案错误、格式错误、偏离主题和幻觉

第 1 / 4 课13 个步骤

诊断意外输出 是 CoddyKit 上的免费 AI Prompt Engineering 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Prompt Engineering 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Prompt Engineering 课程共包含 4 节课。

提示词失效时

即使经过精心设计的提示词也可能产生错误结果。诊断失败需要一套分类体系,用于判断发生了哪种类型的失败。没有分类,调试就只能靠猜测。四种主要失败类别是:答案错误、格式错误、偏离主题的响应和幻觉。

失败类型 1:答案错误

答案错误是事实性错误——模型以正确的格式回答了正确的主题,但内容不正确。

示例包括:日期、统计数据、姓名,以及存在逻辑错误的代码。这是最难自动检测的失败类型,因为输出表面上看起来是正确的。

  • 原因:训练数据截止时间、罕见事实或多步骤推理错误
  • 检测:与标准答案比较、人工审核或使用验证用的 LLM 调用
# Example: wrong answer failure
prompt = 'What year was Python first released?'
response = 'Python was first released in 1994.'  # Wrong — it was 1991

# Ground truth check
GROUND_TRUTH = '1991'
correct = GROUND_TRUTH in response
print(f'Correct: {correct}')  # False

失败类型 2:格式错误

当模型使用正确的信息回答了正确的问题,却忽略了格式要求时,就会发生格式错误。

示例包括:要求返回 JSON 时却返回纯文本,要求纯文本时却添加了 Markdown,以及要求单个值时却返回了列表。

  • 原因:格式要求隐藏在较长的提示词中、指令相互冲突,或模型忽略了低优先级指令
  • 检测:JSON 解析错误、正则表达式不匹配或模式验证失败
import json

response_text = 'Sure! Here is the result: {"name": "Alice", "age": 30}'

try:
    data = json.loads(response_text)
    print('Format OK:', data)
except json.JSONDecodeError as e:
    print(f'FORMAT FAILURE: {e}')
    # 'Sure! Here is the result:' prefix broke JSON parsing

失败类型 3:偏离主题的响应

偏离主题意味着模型回答的是另一个问题,而不是用户提出的问题。响应可能在事实和格式上都正确,但没有回应用户的真实意图。

示例包括:要求编写 Python 函数,却收到 JavaScript 函数;要求一行回答,却收到一篇完整的文章;要求修复错误,却收到对错误的解释,而不是修复方案。

  • 原因:指令含糊、上下文冲突,以及长对话中的任务漂移
# Off-topic example
prompt = 'Write a Python function that reverses a list.'
response = '''
In JavaScript, you can reverse an array like this:
const reversed = arr.reverse();
'''

# Detection: check that output contains the correct language keyword
def check_language(response, expected_lang='def '):
    if expected_lang not in response:
        print(f'OFF-TOPIC FAILURE: expected {expected_lang} in response')
        return False
    return True

check_language(response)  # False — no Python def

失败类型 4:幻觉

幻觉是最危险的失败类型:模型编造了并不存在的事实。这些内容看起来合理且语气自信,因此很难被发现。

示例包括:捏造的引用(论文标题听起来真实,但实际上并不存在)、虚构的应用程序接口端点、虚假的统计数据,以及不存在的人物。

  • 原因:模型通过模式匹配生成看似合理的文本,以填补知识空白
  • 检测:与权威来源进行事实核查、交叉核对引用,以及测试应用程序接口调用
# Hallucination detection via external verification
import requests

def verify_doi(doi):
    url = f'https://doi.org/{doi}'
    resp = requests.head(url, allow_redirects=True, timeout=5)
    return resp.status_code == 200

# Model claimed this paper exists:
fabricated_doi = '10.1234/fake.paper.2023.99999'
if not verify_doi(fabricated_doi):
    print('HALLUCINATION DETECTED: DOI does not exist')

实际应用中的失败分类体系

发现失败时,请先进行分类,再尝试修复。失败类型决定修复策略:

  • 答案错误:添加上下文、使用检索,或切换到能力更强的模型
  • 格式错误:强化格式要求、添加输出示例,或使用结构化输出/函数调用
  • 偏离主题:将指令改写得更具体,简化提示词
  • 幻觉:添加有依据的上下文,指示模型说“我不知道”,并启用引用

结构化失败记录

请记录每次失败及其分类。随着时间推移,您会发现其中的规律:提示词中的某个部分导致了大多数格式错误,或者某个特定主题频繁触发幻觉。结构化日志能够支持基于数据的调试。

import json
from datetime import datetime

def log_failure(prompt, response, failure_type, details=''):
    entry = {
        'timestamp': datetime.utcnow().isoformat(),
        'failure_type': failure_type,  # wrong_answer | wrong_format | off_topic | hallucination
        'prompt_hash': hash(prompt),
        'response_snippet': response[:200],
        'details': details
    }
    with open('prompt_failures.jsonl', 'a') as f:
        f.write(json.dumps(entry) + '\n')

log_failure(
    prompt=my_prompt,
    response=bad_response,
    failure_type='wrong_format',
    details='JSON prefix text broke parsing'
)

自动化失败分类

对于大规模测试,请使用分类器 LLM 调用自动为每个响应标注失败类型。这样就能对数百个测试用例进行批量评估。

def classify_failure(prompt, expected, actual):
    classification_prompt = (
        f'You are a QA evaluator for LLM outputs.\n'
        f'Prompt: {prompt}\n'
        f'Expected behavior: {expected}\n'
        f'Actual output: {actual}\n\n'
        'Classify the failure as one of: CORRECT, WRONG_ANSWER, WRONG_FORMAT, OFF_TOPIC, HALLUCINATION.\n'
        'Reply with only the label.'
    )
    resp = client.chat.completions.create(
        model='gpt-4o-mini',
        messages=[{'role': 'user', 'content': classification_prompt}]
    )
    return resp.choices[0].message.content.strip()

严重性矩阵

并非所有失败的影响都相同。严重性矩阵有助于确定修复优先级:

  • 医疗/法律场景中的幻觉:严重——立即修复
  • 内部工具中的格式错误:高——会破坏下游解析
  • 罕见边界情况下的答案错误:中——监控发生频率
  • 含糊输入导致的偏离主题:低——只要发生频率不高即可接受

按失败类型逐周跟踪失败率。任何类别出现激增,都说明发生了需要关注的回归问题。

构建失败仪表盘

一个简单的失败仪表盘会读取失败日志,并按类型和提示词部分报告数量:

import json
from collections import Counter

def failure_report(log_path='prompt_failures.jsonl'):
    entries = []
    with open(log_path) as f:
        for line in f:
            entries.append(json.loads(line))

    counts = Counter(e['failure_type'] for e in entries)
    total = len(entries)

    print(f'Total failures: {total}')
    for ftype, count in counts.most_common():
        pct = 100 * count / total
        print(f'  {ftype}: {count} ({pct:.1f}%)')

failure_report()

主动预防失败

在各类失败发生之前主动减少它们的策略:

  • 答案错误:在提示词中提供参考文本(RAG);要求模型引用来源
  • 格式错误:使用 JSON 模式或函数调用;在提示词中提供格式示例
  • 偏离主题:将任务放在第一句;避免使用会淡化意图的冗长前置说明
  • 幻觉:指示“只能使用下方提供的信息”;添加“如果不确定,请说我不知道”

知识检查

当模型编造并不存在的事实(例如捏造引用或不存在的应用程序接口端点)时,属于哪种失败类型?

回顾:诊断异常输出

LLM 的四种失败类型及其主要特征:

  • 答案错误:格式正确、主题正确,但内容错误——与标准答案进行事实核查
  • 格式错误:内容正确,却忽略了格式要求——模式验证可以检测到这种错误
  • 偏离主题:格式正确,却回答了另一个问题——检查语言与任务是否匹配
  • 幻觉:编造事实——与外部来源进行验证

记录并分类每次失败。随着时间推移,按类型跟踪失败率。下一课:根因分析,用于找出提示词中的哪一部分导致了失败。

免费开始

用 AI 导师学习 AI Prompt Engineering — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
53
课程
199

常见问题解答

「诊断意外输出」课时是免费的吗?

是的 — 「诊断意外输出」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Prompt Engineering 课程的其余内容,请升级到 CoddyKit PRO。 AI Prompt Engineering 课程共包含 4 节课。

「诊断意外输出」这节课中我会学到什么?

对失败模式进行分类:答案错误、格式错误、偏离主题和幻觉 你通过在浏览器中直接运行的动手代码来练习 AI Prompt Engineering,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 AI Prompt Engineering 需要有经验吗?

无需任何先前经验。CoddyKit 上的 AI Prompt Engineering 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「诊断意外输出」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 AI Prompt Engineering 课中编写并运行代码吗?

能。每节 AI Prompt Engineering 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 诊断意外输出
  2. 提示的根因分析
  3. 系统化调试方法
  4. 日志记录与文档策略
← 返回 AI Prompt Engineering