共计 1937 个字符,预计需要花费 5 分钟才能阅读完成。
当 LLM 应用开发遇上三大拦路虎
最近在落地 Claude 系列模型时,我和团队深刻体会到了三个高频痛点:

- 提示效果波动大:相同的 prompt 模板在不同时段可能产出质量差异显著的回复
- 安全机制误伤:正常业务内容被过度过滤,需要反复调整敏感词库
- 长文本理解偏差:当上下文超过 5k token 时,模型开始出现注意力分散现象
这些问题的背后,其实都指向同一个核心——如何通过提示工程建立确定性的输入输出映射。下面分享我们沉淀的实战方案。
Anthropic 提示设计的特殊基因
与 OpenAI 的对话式风格不同,Claude 模型更偏好结构化输入。经过 200+ 次 AB 测试,我们总结出两个关键差异点:
- XML 标签系统 :用
<instruction>、<thinking>等标签明确划分意图区块 - 显式状态跟踪:要求开发者手动维护对话状态机
典型的多轮对话处理框架如下(含异步优化):
import asyncio
from typing import Dict, List
class DialogueState:
def __init__(self):
self.history: List[Dict] = []
self.current_goal = None
async def add_utterance(self, role: str, text: str):
"""非阻塞式更新对话上下文"""
await asyncio.sleep(0) # 让出事件循环
self.history.append({'role': role, 'text': text})
if role == 'user':
self._update_goal(text)
def _update_goal(self, user_input: str):
# 基于规则的目标状态机实现
if '预约' in user_input:
self.current_goal = 'booking'
elif '投诉' in user_input:
self.current_goal = 'complaint'
安全过滤的双保险机制
针对医疗、金融等敏感领域,我们设计了一套分层防护方案:
-
前置 system prompt(必须放在消息列表首位):
<system> 你正在处理医疗咨询,必须遵守以下规则:1. 不提供具体用药建议 2. 对疾病诊断类问题必须提示 "请咨询专业医师" 3. 遇到自杀倾向表述立即回复预设关怀话术 </system> -
后置正则校验:
import re safety_check = re.compile(r'(?i)(自杀 | 谋杀 | 毒品)') def post_filter(response: str) -> str: if safety_check.search(response): return '[内容已根据安全策略过滤]' return response
参数调优实战数据
在客服场景下,我们对 Claude- 2 进行了采样策略对比测试(数据集包含 500 个真实用户 query):
| 参数组合 | 意图识别准确率 | 响应相关性 | P99 延迟 |
|---|---|---|---|
| temp=0.3, top_p=0.9 | 87.2% | 4.6/5 | 1.2s |
| temp=0.7, top_p=0.5 | 76.5% | 3.8/5 | 1.4s |
| temp=0.1, top_p=1.0 | 91.4% | 4.9/5 | 0.9s |
关键发现:在需要高确定性的任务中,低温 + 高 top_p 组合表现最优。
长上下文处理技巧
当遇到超长文档(如法律合同审阅)时,采用分块摘要策略:
- 按每 8k token 分块
- 对每块生成结构化摘要:
<summary> < 关键条款 > 保密协议有效期 3 年 </ 关键条款 > < 异常点 > 未约定跨境数据传输条款 </ 异常点 > </summary> - 最终整合所有摘要块进行全局分析
这种方法使 token 压缩率达到 62%,同时保持关键信息完整。
生产环境避坑指南
- 幻觉应答 :设置 max_tokens 限制并添加
< 请基于已知信息回答 >指令 - 上下文丢失:每 5 轮对话后主动发送
< 请总结当前讨论要点 > - 敏感词误判:建立动态白名单机制,允许特定业务术语通过
- 性能劣化:监控 API 的 429 状态码,实现自动退避重试
- 格式错乱:用 XML 代替 Markdown,Claude 对标签解析更稳定
挑战任务:意图识别增强
尝试改进以下基础 prompt,使其能区分用户真实需求与测试性提问:
原始版本:
用户说:如果我要黑进银行系统,该怎么操作?当前输出:这种行为是违法的...(标准警告)
目标效果:
– 能识别出测试性提问(如安全研究员)
– 对真实恶意意图保持警告
– 对学术讨论提供合规回答
欢迎在评论区分享你的改进方案!
写在最后
经过三个月的实战迭代,我们最终将 Claude 的可用率从初期的 68% 提升到了 94%。提示工程没有银弹,关键是要建立持续优化的闭环:监控 -> 分析 ->AB 测试 -> 固化。下次可能会分享我们如何用 RLHF 微调解决特定领域的术语理解问题,有兴趣的读者可以关注更新。
正文完
