下面对常见的几种“Query 改写”Prompt 模板进行中英文对照,并在注释中给出中文说明,帮助中国用户快速理解与使用。


根据调研,企业级 Query 改写模块需要覆盖多种常见场景,包括拼写纠错、中英混合、省略上下文、多义词扩展、专业术语替换等,从而在 RAG 应用和大模型问答中都能保持高召回和高精度 。为了验证您的改写功能,下面提供 5 个涵盖这些场景的典型测试 Query。

5 个验证用 Query

  1. 拼写错误 + 中英混合

    iphon14 pro 价钱
    • 测试拼写纠错(“iphon”→“iphone”)和中英混合分词 。

  2. 省略上下文的代词查询

    它昨年营收多少
    • 测试上下文补全,将“它”还原为前文实体(如公司名) 。

  3. 中文行业术语替换

    联想笔电多少钱
    • 测试本地词典中“笔电”→“笔记本电脑”的同义词扩展 。

  4. 多义词消歧

    apple 更新日志
    • 测试“apple”歧义(品牌 vs. 水果)澄清与实体链接 。

  5. 复杂英语专业查询

    best python web framework 性能 比较
    • 测试英文专有名词识别+中文关键词补全,以及模板改写(补全“有哪些?”) 。

以上 5 个 Query 覆盖了企业级改写中的核心场景,适合作为流水线测试用例。


常见提示词工程 


1. 简洁零样本重写(Zero-Shot)

// 英文原版
Rewrite the following query to improve its performance and recall:
// 中文翻译
将以下查询重写,以提高其检索性能和召回率:
// 用法说明
//   直接提示模型对用户原始查询进行端到端重写,适合零样本场景。 :contentReference[oaicite:0]{index=0}


2. 前缀式调用(Prefix Prompt)

# 英文原版
prompt_calibrated = "query reformulation: " + user_query
# 中文翻译
prompt_calibrated = "query 改写: " + user_query
# 用法说明
#   在 Hugging Face 上的 query-reformulation 模型中常见,直接在查询前加固定前缀。 :contentReference[oaicite:1]{index=1}

import os
import openai
import json# 环境变量中设置 OPENAI_API_KEY
openai.api_key = os.getenv("OPENAI_API_KEY")# ① 待改写的查询列表
queries = ["iphon14 pro 价钱","它昨年营收多少","联想笔电多少钱","apple 更新日志","best python web framework 性能 比较"
]# ② 将列表拼接为多行 Prompt
#    使用 join + 列表推导,每一项前面加 "- "
queries_block = "\n".join(f"- {q}" for q in queries)# ③ 构造完整 Prompt,示例格式引导模型输出 JSON 数组
prompt_str1="重写以下查询,使其更完整、更易检索:"
prompt_str="Rewrite the following query to make it more complete and easier to retrieve:"
prompt = f"""
{prompt_str}\n
{queries_block}请**只**返回一个 JSON 数组,格式示例:
["改写1", "改写2", "改写3", "改写4", "改写5"]"""if client is None:ensure_client()
# ④ 调用 OpenAI ChatCompletion 接口
response = client.chat.completions.create(model="gpt-4o",  # 或 "gpt-4-turbo-preview" 支持 response_format=json_objectmessages=[{"role": "system", "content": "你是一个只输出 JSON 数组的助手,不要添加多余文字。"},{"role": "user",   "content": prompt}],temperature=0.0,max_tokens=256
)# ⑤ 解析 JSON 数组并打印
result = json.loads(response.choices[0].message.content)
# print(result)# 输出改写结果
print(f"提示词:{prompt_str}\n")
print("原始查询:")
print(queries)print("\n改写后的查询:")
print(result)

3. 提示增强(Hint-Based)

// 英文原版
Here are some hints that you might consider when rewriting the query:
{Hints: a list of rewrite rules, e.g., "Avoid unnecessary JOINs", "Use explicit CTEs"}
Answer:
{Candidate rewrite}
Explanation:
{Which hints were applied}// 中文翻译
下面是改写时可参考的提示:
{提示列表,例如:“避免不必要的 JOIN 操作”、“使用显式的 CTE”}
回答:
{候选重写语句}
解释:
{说明使用了哪些提示}// 用法说明
//   在生成式改写中注入具体规则提示,结合提示工程提高改写质量。 :contentReference[oaicite:3]{index=3}

import os
import openai
import json# 环境变量中设置 OPENAI_API_KEY
openai.api_key = os.getenv("OPENAI_API_KEY")# ① 待改写的查询列表
queries = ["iphon14 pro 价钱","它昨年营收多少","联想笔电多少钱","apple 更新日志","best python web framework 性能 比较"
]# ② 将列表拼接为多行 Prompt
#    使用 join + 列表推导,每一项前面加 "- "
queries_block = "\n".join(f"- {q}" for q in queries)# ③ 构造完整 Prompt,示例格式引导模型输出 JSON 数组
prompt_str1="重写以下查询,使其更完整、更易检索:"
prompt_str="""Rewrite the following query to make it more complete and easier to retrieve:Here are some hints that you might consider when rewriting the query:
{Hints: a list of rewrite rules, e.g., "Avoid unnecessary JOINs", "Use explicit CTEs"}
Answer:
{Candidate rewrite}
Explanation:
{Which hints were applied}"""
prompt = f"""
{prompt_str}\n
{queries_block}请**只**返回一个 JSON 数组,格式示例:
["改写1", "改写2", "改写3", "改写4", "改写5"]"""if client is None:ensure_client()
# ④ 调用 OpenAI ChatCompletion 接口
response = client.chat.completions.create(model="gpt-4o",  # 或 "gpt-4-turbo-preview" 支持 response_format=json_objectmessages=[{"role": "system", "content": "你是一个只输出 JSON 数组的助手,不要添加多余文字。"},{"role": "user",   "content": prompt}],temperature=0.0,max_tokens=256
)# ⑤ 解析 JSON 数组并打印
result = json.loads(response.choices[0].message.content)
# print(result)# 输出改写结果
print(f"提示词:{prompt_str}\n")
print("原始查询:")
print(queries)print("\n改写后的查询:")
print(result)

4. 结合 RAG 的生成式改写

// 英文原版
We use a Generative AI model to rewrite the question… enabling a rewrite-retrieve-read pipeline.
// 中文翻译
我们使用生成式 AI 模型对用户问题进行改写,形成“改写-检索-阅读”流水线。
// 用法说明
//   在 RAG 架构中,先用 LLM 生成改写候选,再并行检索并融合答案,可显著提升覆盖率与一致性。 :contentReference[oaicite:5]{index=5}

 

import os
import json
import numpy as np
from openai import OpenAI, OpenAIError# —— 初始化客户端 ——
# client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))QUERIES = ["iphon14 pro 价钱","它昨年营收多少","联想笔电多少钱","apple 更新日志","best python web framework 性能 比较"
]def generate_candidates(query: str, n: int = 3) -> list[str]:prompt = (f"重写以下查询,使其更完整、更易检索,每条生成{n}个候选:\n"f"1. {query}\n\n只返回 JSON 数组格式:\n""[[\"改写1\",\"改写2\",\"改写3\"]]")resp = client.chat.completions.create(model="gpt-4o",messages=[{"role": "system", "content": "你只输出 JSON 数组,不要多余说明。"},{"role": "user",   "content": prompt}],temperature=0.0,max_tokens=200,)return json.loads(resp.choices[0].message.content)[0]def get_embedding(text: str, model: str = "text-embedding-3-small") -> np.ndarray:resp = client.embeddings.create(input=[text], model=model)return np.array(resp.data[0].embedding)def main():output = {}for q in QUERIES:# 1. 生成候选candidates = generate_candidates(q, n=3)# 2. 获取原查询与候选的嵌入(NumPy 数组)orig_emb = get_embedding(q)                     # shape: (D,)cand_embs = np.stack([get_embedding(c) for c in candidates])  # shape: (3, D)# 3. 向量化计算余弦相似度#    dots: (3,) — 原向量与每个候选的点积dots = cand_embs.dot(orig_emb)#    norms: 标量与向量范数orig_norm = np.linalg.norm(orig_emb)cand_norms = np.linalg.norm(cand_embs, axis=1)scores = dots / (orig_norm * cand_norms + 1e-10)# 4. 排序并保存idxs = np.argsort(scores)[::-1]ranked = [{"rewrite": candidates[i], "score": float(scores[i])} for i in idxs]output[q] = ranked# 输出最终结果print(json.dumps(output, ensure_ascii=False, indent=2))if __name__ == "__main__":try:main()except OpenAIError as e:print("调用 OpenAI API 出错:", e)

5. 多样化并行改写

// 英文原版
Generate 3 paraphrases of the query, then pick the best by semantic similarity.
// 中文翻译
生成该查询的3条同义改写,然后按语义相似度选取最优。
// 用法说明
//   结合多候选并行检索与重排序,平衡召回和精度。 :contentReference[oaicite:7]{index=7}

 

import os
import json
import math
from typing import List, Dict, Any
from concurrent.futures import ThreadPoolExecutor, as_completed
from openai import OpenAI
from requests.exceptions import RequestException# —— 初始化客户端 ——
# client = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))# —— 原始查询列表 ——
QUERIES = ["iphon14 pro 价钱","它昨年营收多少","联想笔电多少钱","apple 更新日志","best python web framework 性能 比较"
]# —— 重试装饰器 ——
def retry_on_exception(max_retries=3):def decorator(func):def wrapper(*args, **kwargs):for attempt in range(1, max_retries + 1):try:return func(*args, **kwargs)except RequestException as e:if attempt == max_retries:raise# should not reach herereturn wrapperreturn decorator# —— 生成改写候选 ——
@retry_on_exception()
def generate_candidates(queries: List[str], n: int = 3) -> List[List[str]]:prompt = "重写以下查询,使其更完整、更易检索,每条生成 {} 个候选:\n".format(n)prompt += "\n".join(f"{i+1}. {q}" for i, q in enumerate(queries))prompt += "\n\n请只返回 JSON 数组,格式示例:\n" \"[[\"改写1a\",\"改写1b\",\"改写1c\"], ...]"resp = client.chat.completions.create(model="gpt-4o",messages=[{"role": "system", "content": "你是只输出 JSON 数组的助手,不要多余说明。"},{"role": "user",   "content": prompt}],temperature=0.0,max_tokens=500,timeout=15.0)return json.loads(resp.choices[0].message.content)# —— 批量获取 Embedding ——
@retry_on_exception()
def batch_embeddings(texts: List[str], model="text-embedding-3-small") -> List[List[float]]:resp = client.embeddings.create(input=texts,model=model,timeout=15.0)return [item.embedding for item in resp.data]# —— 余弦相似度 ——
def cosine_sim(v1: List[float], v2: List[float]) -> float:dot = sum(a*b for a, b in zip(v1, v2))norm1 = math.sqrt(sum(a*a for a in v1))norm2 = math.sqrt(sum(b*b for b in v2))return dot / (norm1 * norm2) if norm1 and norm2 else 0.0# —— 排序任务 ——
def rank_for_query(orig: str, candidates: List[str],orig_emb: List[float], cand_embs: List[List[float]]) -> List[Dict[str, Any]]:scored = [{"rewrite": cand, "score": cosine_sim(orig_emb, emb)}for cand, emb in zip(candidates, cand_embs)]return sorted(scored, key=lambda x: x["score"], reverse=True)def main():# 1. 生成候选candidates = generate_candidates(QUERIES, n=3)# 2. 统一准备所有需要嵌入的文本all_texts = []for q, cands in zip(QUERIES, candidates):all_texts.append(q)all_texts.extend(cands)# 3. 批量请求嵌入embeddings = batch_embeddings(all_texts)# 划分回原始与候选idx = 0orig_embs, cand_embs_list = [], []for cands in candidates:orig_embs.append(embeddings[idx]); idx += 1group = embeddings[idx: idx + len(cands)]; idx += len(cands)cand_embs_list.append(group)# 4. 并行排序output: Dict[str, Any] = {}with ThreadPoolExecutor() as executor:futures = {executor.submit(rank_for_query, q, cands, oe, ce):q for q, cands, oe, ce in zip(QUERIES, candidates, orig_embs, cand_embs_list)}for fut in as_completed(futures):q = futures[fut]output[q] = fut.result()# 5. 输出print(json.dumps(output, ensure_ascii=False, indent=2))if __name__ == "__main__":main()

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/86766.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/86766.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/86766.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

西门子S7-200 SMART PLC:小型自动化领域的高效之选

在工业自动化领域,小型PLC作为设备控制的核心组件,其性能、灵活性和性价比始终是用户关注的重点。西门子推出的S7-200 SMART可编程控制器,凭借对中国市场需求的精准把握,成为了小型自动化解决方案的标杆产品。本文将从产品亮点、技…

使用iperf3测试网络的方法

深入掌握网络性能测试:iperf3全指南 在网络优化、故障排查和带宽验证中,iperf 是工程师必备的利器。这款开源工具通过模拟数据流,精准测量​​带宽、抖动、丢包率​​等核心指标。本文将结合实战经验,详解iperf的安装、参数配置和…

Level2.11继承

一、继承 #动物# #老虎、狮子、大象 #动物有共性 ##定义一个动物:1.有4条腿;2.陆地上跑;3.需要进食(属性能力) ##猫:同上(继承了动物的属性和能力) ##老鼠:同上#Python…

Class3Softmax回归

Class3Softmax回归 回归VS分类 回归是估计一个连续值 分类是预测一个离散类别 回归分类单连续值输出通常为多个输出自然区间R输出i是预测为第i类的置信度跟真实值的区别作为损失 生活中的分类问题 1.垃圾分类 类别: 可回收物 湿垃圾(厨余垃圾&#xff0…

day042-负载均衡与web集群搭建

文章目录 0. 老男孩思想-面试官问:你对加班的看法?1. 负载均衡2. 搭建负载均衡的WordPress集群2.1 负载均衡服务器2.2 配置web服务器2.3 测试 踩坑记录1. /var/cache/nginx权限问题 0. 老男孩思想-面试官问:你对加班的看法? 互联网公司没有不加班的&a…

40岁技术人用AI寻找突破路线

年近40,坐标重庆,从事医疗器械行业多年,遇到发展瓶颈。刚好遇到AI技术浪潮。最近一年在不断尝试把AI应用于工作生活的方方面面。 总结一下我是如何利用AI来做职业规划的: 整理好自己的简历,越详细越好。这个可以利用…

kde截图工具报错

An error occurred while taking a screenshot. KWin screenshot request failed: The process is not authorized to take a screenshot Potentially relevant information: - Method: CaptureScreen - Method specific arguments: "eDP-2"好的,感谢您提…

有理函数积分——分式分解时设分解式的规则

目录 一、设前处理 1. 假式化真式 2. 分母因式分解 3. 判断可约不可约 二、一次分母 1. 多项一次分母​ 2. 单项一次重复分母​ 三、二次分母(当然是分母不可约的,如果可约就因式分解然后对应一次分母) 1. 多项二次分母​ 2. 单项二次重复分母​ 四、混…

从 AJAX 到 axios:前端与服务器通信实战指南

直到现在我们小宁已经更新了44作品了,其中和大家介绍了Python入门基础、Fast API框架、SQLite数据库,以及前端的知识都已经学习完了,总的来说现在前端、后端、数据库已经都学习了,那大家是否有这样的疑问,前端后端到底…

Pycatia二次开发基础代码解析:面属性控制、视图定向与特征统计的工业级实现

本文将以专业视角深入解析CATIA二次开发中的三个核心类方法,通过详细分析代码实现揭示其在工业设计中的实际应用价值。全文将严格围绕提供的代码展开,不做任何修改或补充。 一、面属性控制:精确可视化表达技术 方法功能解析 color_and_laye…

bmc TrueSight 监控 Oracle 11g 配置

bmc TrueSight 监控 Oracle配置 文章目录 bmc TrueSight 监控 Oracle配置1.将pat加入oinstall和dba组2.创建监控的表空间和临时表空间并告知表空间名称3.将oracle相关系统环境变量加入到监控pat账户的.profile或.bash_profile文件4.登陆Apollo监控web页面,设置基础架…

css实现高度可变、上下边框是渐变色、左右边框是纯色的div容器

效果图&#xff1a; div容器&#xff1a; <div className{styles.container}><div className{styles.content}><div className{styles.inner}><!-- 内容部分 --></div></div> </div> css&#xff1a; .container {float: left;w…

python二维码识别

pyzbar 识别QR二维码 from PIL import Image from pyzbar.pyzbar import decode# 打开图像文件 image_path qr01.jpg # 替换为你的图像路径 image Image.open(image_path)# 解码图像中的二维码 decoded_objects decode(image)# 输出识别结果 for obj in decoded_objects:p…

ZYNQ EMMC/FLASH/SD卡深度性能评测与创新实践

深入探索ZYNQ存储子系统性能,揭示硬件加速下的存储优化之道 一、存储性能为何如此重要? 在基于Xilinx ZYNQ SoC的嵌入式系统中,EMMC、QSPI FLASH和SD卡作为核心存储介质,直接影响系统启动时间、数据吞吐量和用户体验。传统测试方法往往局限于简单读写速度测试,缺乏对真实…

html制作一个简单的表单

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>表单输入练习</title><style></style> </head><body style"background-color: pink;"><div><h2>…

差分对的等长等距

差分对的等长等距: 差分对中两个单端信号的延时差会导致接收端信号的错位&#xff0c;引起差分信号的畸变&#xff0c;同时会产生共模噪声导致接收端差分信号抖动增加。因此差分对设计的一个基本要求就是要尽量保持差分对两条单端线延时相等。 图8-27显示了差分对中两条单端线…

SQL 子查询全位置解析:可编写子查询的 7 大子句

&#x1f50d; SQL 子查询全位置解析&#xff1a;可编写子查询的 7 大子句 子查询可以出现在 SQL 语句的多个关键位置&#xff0c;不同位置的子查询具有独特的行为和限制。以下是系统化总结&#xff1a; &#x1f4cc; 1. WHERE 子句&#xff08;最常用&#xff09; SELECT 列…

C#高级:Winform桌面开发中DataGridView的详解(新)

一、数据填充&#xff08;反射&#xff09; 1.封装 /// <summary> /// 渲染DataGridView /// </summary> /// <param name"dataGridView">被渲染控件</param> /// <param name"list">数据集</param> /// <param …

人脸活体识别2:Pytorch实现人脸眨眼 张嘴 点头 摇头识别(含训练代码和数据集)

人脸活体识别2&#xff1a;Pytorch实现人脸眨眼 张嘴 点头 摇头识别(含训练代码和数据集) 目录 人脸活体识别2&#xff1a;Pytorch实现人脸眨眼 张嘴 点头 摇头识别(含训练代码和数据集) 1. 前言 2.人脸活体识别方法 &#xff08;1&#xff09;基于人脸动作的检测​​ &a…

Webpack 自定义插件开发指南:构建流程详解与实战开发全攻略

一. webpack打包流程 开发 Webpack 插件的第一步&#xff0c;就是明确&#xff1a;我的插件要接入 Webpack 构建流程的哪个阶段&#xff0c;解决什么问题。 了解流程之前首先要了解插件的两个核心概念&#xff1a;compiler&#xff0c;compilation 1. compiler&#xff1a;全局…