如何更高效判断ChatGPT API是否返回未知或模糊答复?
检测ChatGPT API不确定答复的更优方法
方法1:语义相似度匹配
基于预训练语义模型,计算响应文本与典型“不确定”类表述的语义相似度,能覆盖更多表述变体,比简单字符串匹配更灵活。
示例代码:
from sentence_transformers import SentenceTransformer, util import openai # 初始化语义匹配模型 model = SentenceTransformer('all-MiniLM-L6-v2') # 定义各类不确定表述 uncertain_phrases = ["我不知道", "我不确定", "无法回答", "暂无相关信息", "不太清楚"] # 生成表述的语义嵌入 uncertain_embeddings = model.encode(uncertain_phrases, convert_to_tensor=True) # OpenAI API调用 openai.api_key = 'YOUR_API_KEY' messages = [ {'role': 'system', 'content': '你是一个乐于助人的助手。'}, {'role': 'user', 'content': '法国的首都是哪里?'} ] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages ) generated_message = response['choices'][0]['message']['content'].strip() # 计算语义相似度并判断 message_embedding = model.encode(generated_message, convert_to_tensor=True) cos_scores = util.cos_sim(message_embedding, uncertain_embeddings)[0] max_score = cos_scores.max().item() # 设置相似度阈值(可根据需求调整) if max_score >= 0.6: print("ChatGPT对答案不确定") else: print("ChatGPT给出了明确答复")
方法2:让AI主动输出置信标识
在系统提示词中明确要求AI在回答时附带“是否知晓答案”的固定格式标识,直接提取标识即可,准确率最高。
示例代码:
import openai openai.api_key = 'YOUR_API_KEY' messages = [ {'role': 'system', 'content': '你是一个乐于助人的助手。回答问题时,必须在结尾用固定格式标注状态:[STATUS: KNOWN] 或 [STATUS: UNKNOWN],不确定答案则标注UNKNOWN。'}, {'role': 'user', 'content': 'XX星球的首都是哪里?'} ] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages ) generated_message = response['choices'][0]['message']['content'].strip() # 提取状态标识判断 if "[STATUS: UNKNOWN]" in generated_message: print("ChatGPT对答案不确定") elif "[STATUS: KNOWN]" in generated_message: print("ChatGPT给出了明确答复") else: print("未识别到状态标识,需检查提示词或响应内容")
方法3:扩展正则匹配
针对中文场景下的各类不确定表述编写正则表达式,覆盖更多语言变体,比简单字符串匹配覆盖范围更广。
示例代码:
import re import openai openai.api_key = 'YOUR_API_KEY' messages = [ {'role': 'system', 'content': '你是一个乐于助人的助手。'}, {'role': 'user', 'content': 'XX星球的首都是哪里?'} ] response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=messages ) generated_message = response['choices'][0]['message']['content'].strip() # 定义匹配不确定表述的正则规则 uncertain_pattern = re.compile(r'(我不知道|我不确定|无法回答|暂无相关信息|不太清楚|没有相关知识|无法给出答案)', re.IGNORECASE) if uncertain_pattern.search(generated_message): print("ChatGPT对答案不确定") elif not generated_message: print("ChatGPT未生成有效响应") else: print("ChatGPT给出了明确答复")
内容的提问来源于stack exchange,提问作者TaeWoo
相关产品推荐
相关产品推荐

