LLM最佳实践
--- title: "LLM最佳实践" description: "掌握大语言模型应用开发的核心最佳实践,提升模型性能和用户体验" tags: ["LLM", "最佳实践", "提示工程", "应用开发"] category: "llm" icon: "🧠"
LLM最佳实践
概述
大语言模型(LLM)的应用开发需要遵循一系列最佳实践,以确保模型性能最优、响应质量最高、用户体验最佳。本文将介绍在实际项目中经过验证的核心实践方法。
提示工程最佳实践
1. 明确的指令
清晰、具体的指令是获得高质量输出的基础。避免模糊的描述,提供明确的任务要求。
# 不好的示例
prompt = "帮我写一段文字"
# 好的示例
prompt = """请为电商平台撰写一段产品描述,要求:
1. 字数控制在100-150字
2. 突出产品的三个核心卖点
3. 使用轻松活泼的语言风格
4. 包含一个行动号召(CTA)
产品信息:智能手表,支持心率监测、GPS定位、7天续航"""
2. 结构化输出
使用JSON、Markdown等格式化输出,便于程序解析和处理。
import json
system_prompt = """你是一个数据分析助手。请以JSON格式返回分析结果:
{
"summary": "一句话总结",
"key_findings": ["发现1", "发现2", "发现3"],
"confidence_score": 0.85,
"recommendations": ["建议1", "建议2"]
}"""
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_query}
],
response_format={"type": "json_object"}
)
3. 分步骤推理
对于复杂任务,引导模型进行分步骤思考,可以显著提升输出质量。
reasoning_prompt = """请按以下步骤分析这个问题:
步骤1:理解问题核心
步骤2:收集相关背景信息
步骤3:分析可能的解决方案
步骤4:评估每个方案的优缺点
步骤5:给出最终建议和理由
问题:如何优化电商平台的搜索功能?"""
API调用最佳实践
1. 错误处理与重试
实现健壮的错误处理机制,确保服务稳定性。
import time
from openai import OpenAI, APIError, RateLimitError
def call_llm_with_retry(prompt, max_retries=3, base_delay=1):
client = OpenAI()
for attempt in range(max_retries):
try:
response = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}]
)
return response.choices[0].message.content
except RateLimitError:
delay = base_delay * (2 ** attempt)
print(f"速率限制,{delay}秒后重试...")
time.sleep(delay)
except APIError as e:
print(f"API错误: {e}")
if attempt < max_retries - 1:
time.sleep(1)
else:
raise
return None
2. Token优化
合理控制输入输出的token数量,降低成本并提高响应速度。
import tiktoken
def count_tokens(text, model="gpt-4"):
encoding = tiktoken.encoding_for_model(model)
return len(encoding.encode(text))
def truncate_to_limit(text, max_tokens=3000):
tokens = tiktoken.encoding_for_model("gpt-4").encode(text)
if len(tokens) > max_tokens:
tokens = tokens[:max_tokens]
text = tiktoken.encoding_for_model("gpt-4").decode(tokens)
return text
3. 流式响应
使用流式响应改善用户体验,特别是在生成较长内容时。
from openai import OpenAI
def stream_response(prompt):
client = OpenAI()
stream = client.chat.completions.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
stream=True
)
full_response = []
for chunk in stream:
if chunk.choices[0].delta.content:
content = chunk.choices[0].delta.content
print(content, end="", flush=True)
full_response.append(content)
return "".join(full_response)
安全与合规
1. 输入验证
对用户输入进行严格验证,防止提示注入攻击。
def sanitize_input(user_input):
# 移除潜在的提示注入模式
dangerous_patterns = [
"忽略之前的指令",
"ignore previous instructions",
"你现在是一个",
"system prompt"
]
sanitized = user_input
for pattern in dangerous_patterns:
if pattern.lower() in sanitized.lower():
return None, "输入包含不允许的内容"
return sanitized, None
# 使用示例
user_input = "请帮我写一篇文章"
safe_input, error = sanitize_input(user_input)
if error:
print(f"输入验证失败: {error}")
2. 输出过滤
对模型输出进行后处理,确保内容符合规范。
def filter_output(response, banned_words=None):
if banned_words is None:
banned_words = ["暴力", "色情", "政治敏感"]
for word in banned_words:
if word in response:
return "抱歉,我无法生成包含此类内容的回答。"
return response
性能优化
1. 缓存机制
实现语义缓存,减少重复API调用。
import hashlib
import json
from datetime import datetime, timedelta
class SemanticCache:
def __init__(self, ttl_hours=24):
self.cache = {}
self.ttl = timedelta(hours=ttl_hours)
def _get_key(self, prompt):
return hashlib.md5(prompt.encode()).hexdigest()
def get(self, prompt):
key = self._get_key(prompt)
if key in self.cache:
entry = self.cache[key]
if datetime.now() - entry['timestamp'] < self.ttl:
return entry['response']
else:
del self.cache[key]
return None
def set(self, prompt, response):
key = self._get_key(prompt)
self.cache[key] = {
'response': response,
'timestamp': datetime.now()
}
2. 批量处理
对于非实时场景,使用批量API降低成本。
def batch_process(prompts, batch_size=10):
results = []
for i in range(0, len(prompts), batch_size):
batch = prompts[i:i+batch_size]
batch_results = []
for prompt in batch:
result = call_llm(prompt)
batch_results.append(result)
results.extend(batch_results)
print(f"已完成批次 {i//batch_size + 1}/{(len(prompts)-1)//batch_size + 1}")
return results
总结
遵循这些最佳实践,可以帮助你构建更可靠、高效、安全的LLM应用。关键要点包括:使用清晰的指令、实现健壮的错误处理、优化token使用、确保安全合规,以及利用缓存和批量处理提升性能。持续学习和实践这些原则,将帮助你在LLM应用开发中取得更好的成果。