在AI助手应用落地开发过程中,参数配置失误、上下文管理疏漏、输入校验缺失、prompt硬编码等问题是高频踩坑点,极易引发越权问答、上下文溢出、敏感内容输出、接口资源超限等故障。本文结合实战代码,梳理四类典型开发陷阱,给出错误示例与优化落地代码,帮助研发规避项目隐患。
未对用户输入做关键词、格式校验,恶意诱导类提问可绕过规则限制,触发AI违规回复,是上线最常见安全漏洞。
# 错误写法:无输入校验,直接透传用户提问
def get_ai_reply(user_input):
prompt = f"根据用户问题作答:{user_input}"
# 调用大模型接口(模拟)
res = llm_api(prompt)
return res坑点分析:用户输入构造诱导话术即可突破内容风控,产生不合规内容。
# 增加敏感词拦截+输入长度校验
SENSITIVE_WORDS = ["违规关键词1","违规关键词2"]
def get_ai_reply_safe(user_input):
# 长度限制
if len(user_input) > 500:
return "输入内容过长,请精简提问"
# 敏感词拦截
for word in SENSITIVE_WORDS:
if word in user_input:
return "问题包含受限内容,无法解答"
prompt = f"根据用户问题作答:{user_input}"
res = llm_api(prompt)
return res多轮对话场景下,持续拼接历史对话不做截断,超出大模型上下文token上限,引发接口报错、模型回答错乱、计费成本飙升。
# 错误:无截断,对话无限累积
chat_history = []
def chat_loop(user_msg):
global chat_history
chat_history.append({"user":user_msg})
prompt = str(chat_history)
return llm_api(prompt)chat_history = []
MAX_CHAT_COUNT = 6 # 仅保留最近6轮对话
def chat_loop_safe(user_msg):
global chat_history
chat_history.append({"user":user_msg})
# 超出轮次自动丢弃最早记录
if len(chat_history) > MAX_CHAT_COUNT:
chat_history = chat_history[-MAX_CHAT_COUNT:]
prompt = str(chat_history)
return llm_api(prompt)系统提示词直接写死在代码内,上线后如需调整AI人设、回答规范,必须修改代码、重新发布版本,迭代效率极低。
# 硬编码prompt,修改需改代码
BASE_PROMPT = "你是通用AI助手,客观回答用户所有问题"
def build_prompt(question):
return BASE_PROMPT + questionimport json
# 从配置文件读取系统prompt,线上改配置即可生效
def get_base_prompt():
with open("prompt_config.json","r",encoding="utf-8") as f:
cfg = json.load(f)
return cfg["base_prompt"]
def build_prompt_safe(question):
base = get_base_prompt()
return f"{base}\n用户问题:{question}"配置文件prompt_config.json示例:
{"base_prompt":"你是合规AI助手,拒绝回答违规、涉密相关问题"}未做访问频率限制,恶意高频调用接口,快速消耗API调用额度,造成服务不可用。
from collections import defaultdict
import time
user_req_record = defaultdict(list)
LIMIT_COUNT = 10 # 单用户1分钟最多10次请求
LIMIT_TIME = 60
def req_limit_check(user_id):
now = time.time()
records = user_req_record[user_id]
# 清理超时记录
valid_records = [t for t in records if now - t < LIMIT_TIME]
user_req_record[user_id] = valid_records
if len(valid_records) >= LIMIT_COUNT:
return False,"请求过于频繁,请稍后重试"
user_req_record[user_id].append(now)
return True,""AI助手开发核心避坑要点:输入安全校验、上下文配额管控、提示词配置化、接口访问限流。四类优化方案可覆盖80%上线初期故障,开发阶段提前接入规范代码,大幅降低线上运维与安全风险,后续可结合Redis分布式限流、分词敏感检测做进阶优化。