关于 llm-debugger
llm-debugger 是用于诊断和处理 LLM 输出问题的技能,面向调试 LLM 应用的开发者,涵盖根因分析、修复建议与回归测试。
主要功能
- 01分类常见输出故障
- 02分析故障根因
- 03提供提示词修改建议
- 04建议调整工具架构
- 05生成回归测试用例
- 06提供交互式调试流程
适用场景
- 01排查无效 JSON 或格式错误
- 02追踪幻觉与推理错误
- 03通过明确架构减少工具误用
- 04根据失败输出创建测试
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ patricio0312rev/ skills --skill llm-debugger安装后在 Claude Code 中输入/llm-debugger确认已加载。
详细介绍
LLM 调试器
系统地诊断和修复 LLM 输出问题。
故障分类
class FailureType(Enum):
HALLUCINATION = "hallucination"
FORMAT_VIOLATION = "format_violation"
CONSTRAINT_BREAK = "constraint_break"
REASONING_ERROR = "reasoning_error"
TOOL_MISUSE = "tool_misuse"
REFUSAL = "unexpected_refusal"
INCOMPLETE = "incomplete_output"
根因分析
def diagnose_failure(input: str, output: str, expected: dict) -> dict:
"""Identify why LLM output failed"""
issues = []
# Check format
if expected.get("format") == "json":
try:
json.loads(output)
except:
issues.append({
"type": FailureType.FORMAT_VIOLATION,
"details": "Invalid JSON output"
})
# Check required fields
if expected.get("required_fields"):
for field in expected["required_fields"]:
if field not in output:
issues.append({
"type": FailureType.INCOMPLETE,
"details": f"Missing required field: {field}"
})
# Check constraints
if expected.get("max_length"):
if len(output) > expected["max_length"]:
issues.append({
"type": FailureType.CONSTRAINT_BREAK,
"details": f"Output too long: {len(output)} > {expected['max_length']}"
})
# Check for hallucination indicators
if contains_hallucination_markers(output):
issues.append({
"type": FailureType.HALLUCINATION,
"details": "Contains fabricated information"
})
return {
"has_issues": len(issues) > 0,
"issues": issues,
"primary_issue": issues[0] if issues else None
}
def contains_hallucination_markers(output: str) -> bool:
"""Detect common hallucination patterns"""
markers = [
r'According to.*that doesn\'t exist',
r'In \d{4}.*before that year',
r'contradicts itself',
]
return any(re.search(marker, output, re.IGNORECASE) for marker in markers)
提示词修复
PROMPT_FIXES = {
FailureType.FORMAT_VIOLATION: """
Add strict format instructions:
"Output MUST be valid JSON with this exact structure:
```json
{{"field1": "value", "field2": 123}}
请勿在 JSON 前后添加任何文本。” """,
FailureType.HALLUCINATION: """
添加依据上下文的指令: “仅根据提供的上下文作答。 如果上下文中没有相关信息,请说‘我没有这方面的信息。’ 切勿编造事实或细节。” """,
FailureType.CONSTRAINT_BREAK: """
添加明确的约束: “你的回答必须满足以下要求:
- 最多 200 个词
- 不提供代码示例
- 仅使用专业语气” """, FailureType.REASONING_ERROR: """ 添加逐步推理: “请逐步思考:
- 首先,确定……
- 然后,考虑……
- 最后,得出结论……” """, }
def suggest_prompt_fix(diagnosis: dict, current_prompt: str) -> str: """根据诊断结果生成改进后的提示词""" primary_issue = diagnosis["primary_issue"] if not primary_issue: return current_prompt
fix = PROMPT_FIXES[primary_issue["type"]]
return f"""{current_prompt}
重要指令: {fix} """
## Tool Improvements
```python
def suggest_tool_fixes(diagnosis: dict, tool_schema: dict) -> dict:
"""Improve tool schema to prevent misuse"""
fixes = {}
for issue in diagnosis["issues"]:
if issue["type"] == FailureType.TOOL_MISUSE:
# Make required parameters more explicit
fixes["parameters"] = {
**tool_schema["parameters"],
"description": "REQUIRED: " + tool_schema["parameters"].get("description", "")
}
# Add examples
fixes["examples"] = [
{
"params": {"query": "example search"},
"description": "Use for finding information"
}
]
return {**tool_schema, **fixes}
测试用例生成
def generate_test_cases(diagnosis: dict, failed_input: str, failed_output: str) -> List[dict]:
"""Create regression test cases from failures"""
test_cases = []
# Test case for the specific failure
test_cases.append({
"input": failed_input,
"expected_behavior": "Should not " + diagnosis["primary_issue"]["details"],
"validation": lambda output: not has_same_issue(output, diagnosis),
})
# Edge cases based on failure type
if diagnosis["primary_issue"]["type"] == FailureType.FORMAT_VIOLATION:
test_cases.append({
"input": failed_input,
"validation": lambda output: is_valid_json(output),
"description": "Output must be valid JSON"
})
# Similar inputs that might trigger same issue
similar_inputs = generate_similar_inputs(failed_input)
for inp in similar_inputs:
test_cases.append({
"input": inp,
"validation": lambda output: not has_same_issue(output, diagnosis),
})
return test_cases
调试工作流
def debug_llm_output(
prompt: str,
output: str,
expected: dict,
context: dict = {}
) -> dict:
"""Complete debugging workflow"""
# 1. Diagnose issue
diagnosis = diagnose_failure(prompt, output, expected)
if not diagnosis["has_issues"]:
return {"status": "ok", "diagnosis": diagnosis}
# 2. Generate fixes
fixed_prompt = suggest_prompt_fix(diagnosis, prompt)
# 3. Create test cases
test_cases = generate_test_cases(diagnosis, prompt, output)
# 4. Test fix
test_output = llm(fixed_prompt)
fix_works = diagnose_failure(fixed_prompt, test_output, expected)["has_issues"] == False
return {
"status": "issues_found",
"diagnosis": diagnosis,
"fixes": {
"prompt": fixed_prompt,
"fix_verified": fix_works,
},
"test_cases": test_cases,
"recommendations": generate_recommendations(diagnosis, context)
}
交互式调试
def interactive_debug():
"""Interactive debugging session"""
print("LLM Debugger - Interactive Mode")
prompt = input("Enter prompt: ")
expected_output = input("Expected output format (json/text): ")
output = llm(prompt)
print(f"\nGenerated output:\n{output}\n")
if input("Does this look correct? (y/n): ").lower() == 'n':
diagnosis = diagnose_failure(prompt, output, {"format": expected_output})
print("\nDiagnosis:")
for issue in diagnosis["issues"]:
print(f"- {issue['type'].value}: {issue['details']}")
print("\nSuggested fix:")
print(suggest_prompt_fix(diagnosis, prompt))
最佳实践
- 稳定复现:运行多次
- 隔离变量:每次只测试一项提示词更改
- 检查示例:少样本示例是否清晰?
- 验证约束:约束是否足够明确?
- 测试边界情况:边界条件
- 记录所有信息:输入、输出和问题
- 系统地迭代:跟踪哪些修复有效
输出检查清单
- 定义故障分类
- 根因分析器
- 提示词修复建议
- 工具架构改进
- 测试用例生成器
- 修复验证
- 调试工作流
- 建议引擎
- 交互式调试器
- 日志系统
评论
支持 Markdown