当前位置: 首页 > news >正文

FastGPT 源码:基于 LLM 实现 Rerank (含Prompt)

文章目录

    • 基于 LLM 实现 Rerank
      • 函数定义
      • 预期输出
      • 实现说明
      • 使用建议
      • 完整 Prompt

基于 LLM 实现 Rerank

下边通过设计 Prompt 让 LLM 实现重排序的功能。

函数定义

class LLMReranker:def __init__(self, llm_client):self.llm = llm_clientdef rerank(self, query: str, documents: list[dict]) -> list[dict]:# 构建 promptprompt = self._build_rerank_prompt(query, documents)# 调用 LLMresponse = self.llm.chat.completions.create(model="gpt-3.5-turbo",temperature=0,  # 降低随机性messages=[{"role": "system", "content": """你是一个专业的搜索结果重排序专家。
你的任务是:
1. 评估每个文档与用户查询的相关性
2. 给出0-1之间的相关性分数
3. 解释评分理由
4. 按相关性从高到低排序评分标准:
- 0.8-1.0: 完全相关,直接回答问题
- 0.6-0.8: 高度相关,包含大部分所需信息
- 0.4-0.6: 部分相关,包含一些相关信息
- 0.0-0.4: 基本不相关请以JSON格式返回结果。"""},{"role": "user", "content": prompt}])# 解析响应try:results = eval(response.choices[0].message.content)return resultsexcept:return []def _build_rerank_prompt(self, query: str, documents: list[dict]) -> str:prompt = f"""请对以下文档进行重排序:用户查询: {query}待排序文档:
"""for i, doc in enumerate(documents, 1):prompt += f"""
文档{i}:
ID: {doc['id']}
内容: {doc['text']}
"""prompt += """
请以如下JSON格式返回重排序结果:
[{"id": "文档ID","score": 相关性分数,"reason": "评分理由"},...
]
"""return prompt# 使用示例
def main():# 初始化查询和文档query = "Python如何处理JSON数据?"documents = [{"id": "doc1","text": "Python提供了json模块来处理JSON数据。使用json.loads()可以将JSON字符串转换为Python对象,使用json.dumps()可以将Python对象转换为JSON字符串。",},{"id": "doc2", "text": "在Python中,字典(dict)是一种常用的数据结构,它的格式与JSON非常相似。你可以使用字典来存储键值对数据。",},{"id": "doc3","text": "Python是一种面向对象的编程语言,支持类和对象的概念。你可以创建自定义类来组织数据和行为。",}]# 初始化 LLM client (这里以 OpenAI 为例)from openai import OpenAIclient = OpenAI()# 执行重排序reranker = LLMReranker(client)results = reranker.rerank(query, documents)# 打印结果print("\n查询:", query)print("\n重排序结果:")for i, result in enumerate(results, 1):print(f"\n{i}. 文档ID: {result['id']}")print(f"   相关性分数: {result['score']}")print(f"   评分理由: {result['reason']}")

预期输出

[{"id": "doc1","score": 0.95,"reason": "文档直接回答了如何处理JSON数据的问题,提供了具体的json模块使用方法(loads和dumps函数),信息完整且准确。"},{"id": "doc2","score": 0.65,"reason": "文档提到了Python字典与JSON的关系,对理解JSON处理有帮助,但没有直接说明处理方法。"},{"id": "doc3","score": 0.2,"reason": "文档只介绍了Python的面向对象特性,与JSON数据处理无直接关系。"}
]

实现说明

  1. 简单易用:

    • 不需要额外的模型
    • 只依赖LLM API
    • 实现逻辑清晰
  2. 灵活性强:

    • 可以通过修改prompt调整评分标准
    • 可以获取评分理由
    • 支持多维度评估
  3. 可解释性好:

    • 每个分数都有明确的理由
    • 评分标准透明
    • 便于调试和优化
  4. 适应性强:

    • 可处理各种领域的问题
    • 不需要领域特定训练
    • 支持多语言

使用建议

  1. Prompt优化:
# 可以添加更多评分维度
"""
评分维度:
1. 相关性: 内容与查询的关联程度
2. 完整性: 信息的完整程度
3. 准确性: 信息的准确程度
4. 时效性: 信息的新旧程度
"""
  1. 批量处理:
# 对于大量文档,可以分批处理
def batch_rerank(self, query: str, documents: list, batch_size: int = 5):results = []for i in range(0, len(documents), batch_size):batch = documents[i:i + batch_size]batch_results = self.rerank(query, batch)results.extend(batch_results)return sorted(results, key=lambda x: x['score'], reverse=True)
  1. 错误处理:
try:response = self.llm.chat.completions.create(...)results = eval(response.choices[0].message.content)
except Exception as e:print(f"重排序错误: {str(e)}")# 返回原始顺序return [{"id": doc["id"], "score": 0.5} for doc in documents]
  1. 缓存结果:
from functools import lru_cache@lru_cache(maxsize=1000)
def cached_rerank(self, query: str, doc_key: str):# 实现缓存逻辑pass

这种基于LLM的重排序方案特别适合:

  1. 快速原型验证
  2. 小规模应用
  3. 需要高可解释性的场景
  4. 多语言或跨领域应用

完整 Prompt

你是一个专业的搜索结果重排序专家。你的任务是评估每个文档与用户查询的相关性,并给出排序。评分标准:
1. 相关性分数范围: 0.0-1.0
- 0.8-1.0: 完全相关,直接回答问题
- 0.6-0.8: 高度相关,包含大部分所需信息
- 0.4-0.6: 部分相关,包含一些相关信息
- 0.0-0.4: 基本不相关2. 评分维度:
- 相关性: 文档内容是否直接回答查询问题
- 完整性: 回答的信息是否完整
- 准确性: 信息是否准确专业
- 直接性: 是否需要用户进一步推理或处理用户查询: Python如何处理JSON数据?待评估文档:
文档1:
ID: doc1
内容: Python提供了json模块来处理JSON数据。使用json.loads()可以将JSON字符串转换为Python对象,使用json.dumps()可以将Python对象转换为JSON字符串。文档2:
ID: doc2
内容: 在Python中,字典(dict)是一种常用的数据结构,它的格式与JSON非常相似。你可以使用字典来存储键值对数据。文档3:
ID: doc3
内容: Python是一种面向对象的编程语言,支持类和对象的概念。你可以创建自定义类来组织数据和行为。请按以下JSON格式返回重排序结果,必须包含id字段:
[
"文档ID",
...
]注意:
1. 结果必须按score从高到低排序
2. 结果中只需要给出id字段
3. 返回格式必须是合法的JSON格式,不要做任何解释

相关文章:

FastGPT 源码:基于 LLM 实现 Rerank (含Prompt)

文章目录 基于 LLM 实现 Rerank函数定义预期输出实现说明使用建议完整 Prompt 基于 LLM 实现 Rerank 下边通过设计 Prompt 让 LLM 实现重排序的功能。 函数定义 class LLMReranker:def __init__(self, llm_client):self.llm llm_clientdef rerank(self, query: str, docume…...

字节跳动发布 Trae AI IDE!支持 DeepSeek R1 V3,AI 编程新时代来了!

3 月 3 日,字节跳动重磅发布国内首款 AI 原生集成开发环境(AI IDE)——Trae 国内版! Trae 不只是一个传统的 IDE,它深度融合 AI,搭载 doubao-1.5-pro 大模型,同时支持DeepSeek R1 & V3&…...

windows下安装Open Web UI

windows下安装openwebui有三种方式,docker,pythonnode.js,整合包. 这里我选择的是第二种,非docker. 非Docker方式安装 1. 安装Python: 下载并安装Python 3.11,建议安装路径中不要包含中文字符,并勾选“Add python 3.11 to Path”选项。 安…...

论文阅读 EEG-Inception

EEG-Inception: A Novel Deep Convolutional Neural Network for Assistive ERP-Based Brain-Computer Interfaces EEG-Inception是第一个集成Inception模块进行ERP检测的模型,它有效地结合了轻型架构中的其他结构,提高了我们方法的性能。 本研究的主要目…...

基于opencv消除图片马赛克

以下是一个基于Python的图片马赛克消除函数实现,结合了图像处理和深度学习方法。由于马赛克消除涉及复杂的图像重建任务,建议根据实际需求选择合适的方法: import cv2 import numpy as np from PIL import Imagedef remove_mosaic(image_pat…...

计算机毕业设计SpringBoot+Vue.js陕西民俗网(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

【算法方法总结·三】滑动窗口的一些技巧和注意事项

【算法方法总结三】滑动窗口的一些技巧和注意事项 【算法方法总结一】二分法的一些技巧和注意事项【算法方法总结二】双指针的一些技巧和注意事项【算法方法总结三】滑动窗口的一些技巧和注意事项 【滑动窗口】 数组的和 随着 右边指针 移动一定是 非递减 的,就是 …...

IO的概念和标准IO函数

作业&#xff1a; 1.使用标准IO函数&#xff0c;实现文件的拷贝 #include <stdio.h>int main(int argc, char *argv[]) {// 检查是否提供了源文件和目标文件if (argc ! 3) {printf("Usage: %s <source_file> <destination_file>\n", argv[0]);re…...

tauri2+typescript+vue+vite+leaflet等的简单联合使用(一)

项目目标 主要的目的是学习tauri。 流程 1、搭建项目 2、简单的在项目使用leaflet 3、打包 准备项目 环境准备 废话不多说&#xff0c;直接开始 需要有准备能运行Rust的环境和Node&#xff0c;对于Rust可以参考下面这位大佬的文章&#xff0c;Node不必细说。 Rust 和…...

【流程图】在 .NET (WPF 或 WinForms) 中实现流程图中的连线算法

在 .NET (WPF 或 WinForms) 中实现流程图中的连线算法&#xff0c;通常涉及 图形绘制 和 路径计算。常见的连线方式包括 直线、折线 和 贝塞尔曲线。以下是几种方法的介绍和示例代码。 1. 直线连接&#xff08;最简单&#xff09; 适用场景&#xff1a; 两个节点之间没有障碍…...

IDEA集成DeepSeek,通过离线安装解决无法安装Proxy AI插件问题

文章目录 引言一、安装Proxy AI1.1 在线安装Proxy AI1.2 离线安装Proxy AI 二、Proxy AI中配置DeepSeek2.1 配置本地部署的DeepSeek&#xff08;Ollama方式&#xff09;2.2 通过第三方服务商提供的API进行配置 三、效果测试 引言 许多开发者尝试通过安装Proxy AI等插件将AI能力…...

【流行病学】Melodi-Presto因果关联工具

title: “[流行病学] Melodi Presto因果关联工具” date: 2022-12-08 lastmod: 2022-12-08 draft: false tags: [“流行病学”,“因果关联工具”] toc: true autoCollapseToc: true 阅读介绍 Melodi-Presto: A fast and agile tool to explore semantic triples derived from …...

详细分析KeepAlive的基本知识 并缓存路由(附Demo)

目录 前言1. 基本知识2. Demo2.1 基本2.2 拓展2.3 终极 3. 实战 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 基本知识推荐阅读&#xff1a;KeepAlive知识点 从实战中学习&#xff0c;源自实战中vue路由的…...

【Go】Go viper 配置模块

1. 配置相关概念 在项目开发过程中&#xff0c;一旦涉及到与第三方中间件打交道就不可避免的需要填写一些配置信息&#xff0c;例如 MySQL 的连接信息、Redis 的连接信息。如果这些配置都采用硬编码的方式无疑是一种不优雅的做法&#xff0c;有以下缺陷&#xff1a; 不同环境…...

zabbix“专家坐诊”第277期问答

在线答疑:乐维社区 问题一 Q&#xff1a;这个怎么解决呢&#xff1f; A&#xff1a;缺少这个依赖。 Q&#xff1a;就一直装不上。 A&#xff1a;装 zabbix-agent2-7.0.0-releasel.el7.x86 64 需要前面提示的那个依赖才可以装。 问题二 Q&#xff1a;大佬&#xff0c;如果agen…...

大模型工程师学习日记(十一):FAISS 高效相似度搜索和密集向量聚类的库

Facebook AI Similarity Search (Faiss /Fez/) 是一个用于高效相似度搜索和密集向量聚类的库。它包含了在任意大小的向量集合中进行搜索的算法&#xff0c;甚至可以处理可能无法完全放入内存的向量集合。它还包含用于评估和参数调整的支持代码。 Faiss 官方文档&#xff1a;We…...

python学习第三天

条件判断 条件判断使用if、elif和else关键字。它们用于根据条件执行不同的代码块。 # 条件判断 age 18 if age < 18:print("你还是个孩子&#xff01;") elif age 18:print("永远十八岁&#xff01;") else:print("你还年轻&#xff01;")…...

深入解析 Svelte:下一代前端框架的革命

深入解析 Svelte&#xff1a;下一代前端框架的革命 1. Svelte 简介 Svelte 是一款前端框架&#xff0c;与 React、Vue 等传统框架不同&#xff0c;它采用 编译时&#xff08;Compile-time&#xff09; 方式来优化前端应用。它不像 React 或 Vue 依赖虚拟 DOM&#xff0c;而是…...

C++20 中位移位运算符的统一行为:深入解析与实践指南

文章目录 1. 位移位运算符的基础1.1 左移运算符&#xff08;<<&#xff09;1.2 右移运算符&#xff08;>>&#xff09; 2. C20 对位移位运算符的统一2.1 移位数量超出操作数位宽2.2 负数移位 3. 实践中的注意事项4. 示例代码5. 总结 在 C 的发展历程中&#xff0c;…...

Linux——基本指令

我们今天学习Linux最基础的指令 ls 指令 语法&#xff1a; ls [选项] [⽬录或⽂件] 功能&#xff1a;对于⽬录&#xff0c;该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件&#xff0c;将列出⽂件名以及其他信 息。 命令中的选项&#xff0c;一次可以传递多个 &#xff0c…...

深度学习编译器优化:CNN与MHA块的性能差异与实践指南

1. 深度学习编译器优化概述在深度学习模型部署的实际场景中&#xff0c;我们常常面临一个关键矛盾&#xff1a;训练框架&#xff08;如PyTorch&#xff09;的动态图特性虽然灵活&#xff0c;但在推理时会产生显著的性能开销。这正是深度学习编译器技术大显身手的领域——通过静…...

华硕笔记本性能革命:G-Helper轻量控制工具深度评测

华硕笔记本性能革命&#xff1a;G-Helper轻量控制工具深度评测 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, Exper…...

深入解析Token(原生代币):从原理到未来,开发者必读指南

深入解析Token&#xff08;原生代币&#xff09;&#xff1a;从原理到未来&#xff0c;开发者必读指南 引言 在Web3的世界里&#xff0c;Token&#xff08;代币&#xff09;不仅是价值的载体&#xff0c;更是构建去中心化应用的基石。从引爆DeFi夏天的流动性挖矿&#xff0c;到…...

AI微型赛车:从车道线检测到PID控制,手把手实现端侧自动驾驶

1. 项目概述&#xff1a;当AI遇见指尖上的速度与激情最近在创客圈和AI应用领域&#xff0c;一个结合了硬件、软件与智能算法的项目正悄然兴起&#xff0c;那就是“AI驱动的自动微型赛车”。这听起来像是科幻电影里的场景&#xff0c;但如今&#xff0c;借助开源硬件和成熟的机器…...

告别手动操作:用Python自动化COMSOL仿真的3个关键突破

告别手动操作&#xff1a;用Python自动化COMSOL仿真的3个关键突破 【免费下载链接】MPh Pythonic scripting interface for Comsol Multiphysics 项目地址: https://gitcode.com/gh_mirrors/mp/MPh 你是否也曾为COMSOL的重复性仿真任务感到疲惫&#xff1f;每天花费数小…...

天龙八部单机版GM工具:5分钟快速上手指南与完整功能解析

天龙八部单机版GM工具&#xff1a;5分钟快速上手指南与完整功能解析 【免费下载链接】TlbbGmTool 某网络游戏的单机版本GM工具 项目地址: https://gitcode.com/gh_mirrors/tl/TlbbGmTool 还在为《天龙八部》单机版的数据管理而烦恼吗&#xff1f;TlbbGmTool是一款专为天…...

忆阻器混沌电路设计与储层计算应用

1. 忆阻器混沌电路的设计原理与实现1.1 忆阻器的非线性特性基础忆阻器&#xff08;Memristor&#xff09;作为第四种基本电路元件&#xff0c;其核心特性在于电阻值会随通过它的电荷量历史而变化。这种"记忆"特性来源于器件内部导电细丝的形成与断裂过程。在Pt/HfO2/…...

别再只用差速轮了!手把手教你为Navigation2仿真打造专属阿克曼底盘模型(附完整URDF/SDF文件)

从差速轮到阿克曼&#xff1a;打造高仿真Navigation2底盘模型的完整指南 在机器人仿真领域&#xff0c;差速轮底盘因其简单可靠而广受欢迎&#xff0c;但真实世界的车辆大多采用阿克曼转向机制。本文将带您深入理解两种模型的本质差异&#xff0c;并手把手指导如何从零构建或改…...

Egg.js重构Controller最佳实践:自定义核心组件与架构优化指南

Egg.js重构Controller最佳实践&#xff1a;自定义核心组件与架构优化指南 【免费下载链接】examples Store all egg examples in one place 项目地址: https://gitcode.com/gh_mirrors/examples109/examples Egg.js作为企业级Node.js框架&#xff0c;其Controller层是业…...

ComfyUI Portrait Master中文版:终极AI肖像提示词生成指南

ComfyUI Portrait Master中文版&#xff1a;终极AI肖像提示词生成指南 【免费下载链接】comfyui-portrait-master-zh-cn 肖像大师 中文版 comfyui-portrait-master 项目地址: https://gitcode.com/gh_mirrors/co/comfyui-portrait-master-zh-cn ComfyUI Portrait Master…...