优化提示词改善答疑机器人回答质量

1.通过优化提示词来调整大模型的回答

1.1使用场景

默认提示词无法满足业务要求。
回答的内容太简单/困难,输出内容/格式/语气达不到要求等

1.2llama-index 的提示词模版

1.2.1llama-index 的默认模板

from llama_index.llms.dashscope import DashScope
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex
from llama_index.embeddings.dashscope import DashScopeEmbedding, DashScopeTextEmbeddingModels

import os
os.chdir(os.path.dirname(os.path.abspath(__file__)))

from config.load_key import load_key
load_key()

# 创建索引
documents = SimpleDirectoryReader("./chatbot/docs").load_data()
index = VectorStoreIndex.from_documents(
    documents,
    embed_model=DashScopeEmbedding(
        model_name=DashScopeTextEmbeddingModels.TEXT_EMBEDDING_V2
    )
)

# 创建查询引擎
query_engine = index.as_query_engine(
    streaming=True,
    llm=DashScope(
        model_name="qwen-plus",
        api_key=os.getenv("DASHSCOPE_API_KEY")
    )
)
# print(query_engine.get_prompts())

# 打印prompt模板
print(f"LlamaIndex原始prompt模板为:\n{query_engine.get_prompts()['response_synthesizer:text_qa_template'].default_template.template}")

在这里插入图片描述

1.2.2使用自定义模板

from chatbot import rag

from config.load_key import load_key
load_key()


# 加载索引
index = rag.load_index()
# 设置query engine
query_engine = rag.create_query_engine(index=index)


# 自定义prompt模板
from llama_index.core import PromptTemplate

prompt_template_string = (
    "你是贾维斯,你回答问题时,需要在回答前加上贾维斯说:"
    "注意事项:\n"
    "1. 根据上下文信息而非先验知识来回答问题。\n"
    "2. 如果是工具咨询类问题,请务必给出下载地址链接。\n"
    "以下是参考信息。"
    "---------------------\n"
    "{context_str}\n"
    "---------------------\n"
    "问题:{query_str}\n。"
    "回答:贾维斯说:<answer>"
)

prompt_template = PromptTemplate(prompt_template_string)
query_engine.update_prompts({"response_synthesizer:text_qa_template": prompt_template})


def qa_v2(question, query_engine):
    """执行问答"""
    streaming_response = query_engine.query(question)
    streaming_response.print_response_stream()

if __name__ == "__main__":
    qa_v2('我们公司项目管理应该用什么工具', query_engine=query_engine)

在这里插入图片描述

2.如何改进提示词

提示词工程(Prompt Engineering)
在这里插入图片描述

2.1 提示词框架

1.直接提问,也称为零样本提示(Zero-Shot Prompting),即不给大语言模型提供案例,完全依靠 LLM 理解和处理能力完成任务。适用于目标明确、问题简单、答案确定且唯一等场景。
2.在提示词中提供少量(通常几个或几十个)示例,也称为少样本提示(Few-Shot Prompting),以帮助模型更好地理解任务要求和期望输出。
3.赋予模型一个具体的角色或身份,来引导模型在特定角色视角下生成回答。如:专业知识、特定视角、特定语言风格等
4.把一个复杂的任务,拆解成多个稍微简单的任务,让大语言模型分步来思考问题,称为思维链(Chain-of-Thought Prompting, CoT)提示,这种方式可让大语言模型像人类一样逐步解释或进行推理,从而极大地提升 LLM 的能力。
5.提示词分隔符(如 # - ,等)在复杂场景中的应用,确保多角色、多段落提示时的上下文管理和信息隔离。
6.构建第一个提示词框架:“背景信息”+“指令”+“输出指示”

扩展成更加通用的框架:
在这里插入图片描述

2.2 其他常用的提示词框架

框架具体应用领域(举例子)内容含义
CRISPE项目管理、团队协作、客户服务能力 (Capabilities) 角色 (Roles) 洞察 (Insights) 陈述 (Statement) 个性 (Personality) 实验 (Experiment)
ROSES软件开发、产品设计、市场营销策略规划角色 (Role) 客观 (Objective) 场景 (Setting) 预期解决方案 (Expected Solution) 步骤 (Steps)
TRACE市场研究、业务分析、教学设计任务 (Task) 请求 (Request) 操作 (Action) 上下文 (Context) 示例 (Examples)
三幕剧的机制剧情触发/冲突/解决

2.3 提示词技巧

路径:应用组件 - Prompt 工程
提示词自动优化工具

通用技巧: 提示词工程指南
少量样本提示((Few-Shot Prompting)
链式思考(Chain-of-Thought Prompting)
ReACT框架(Reason-Act)

3.为答疑机器人扩展问题分类与路由功能

3.1 意图识别

在这里插入图片描述

3.2 构建路由模块

优化策略:

明确输出格式:指定输出格式,使分类结果规范且易于解析。
Few-shot 示例:提供示例,帮助大模型理解每个类别的特征和分类规则。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/950901.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HTML5 手风琴(Accordion)详解

HTML5 手风琴&#xff08;Accordion&#xff09;详解 手风琴&#xff08;Accordion&#xff09;是一种常用的用户界面控件&#xff0c;允许用户通过点击标题来展开或收起内容&#xff0c;适合用于显示大量信息而不占用太多空间。以下是手风琴的详细介绍及实现示例。 1. 手风…

maven如何从外部导包

1.找到你项目的文件位置&#xff0c;将外部要导入的包复制粘贴进你当前要导入的项目下。 2.从你的项目目录下选中要导入的包的pom文件即可导包成功 注意一定是选中对应的pom文件 导入成功之后对应的pom.xml文件就会被点亮

Eclipse配置Tomcat服务器(最全图文详解)

前言&#xff1a; 本章使用图文讲解如何在Eclipse开发工具中配置Tomcat服务器、如何创建和启动JavaWeb工程&#xff0c;欢迎童鞋们互相交流。觉得不错可以三连订阅喔。 目标&#xff1a; 一、配置Tomcat服务器 1. 切换Eclipse视图 2. 打开菜单 3. 找到服务选项 4. 选择…

汽车供应链关键节点:物流采购成本管理全解析

在汽车行业&#xff0c;供应链管理是一项至关重要的任务。汽车制造从零部件的生产到整车的交付&#xff0c;涉及多个环节&#xff0c;其中物流、采购与成本管理是核心节点。本文将深入分析这些关键环节&#xff0c;探讨如何通过供应商管理系统及相关工具优化供应链管理。 一、…

软件工程期末整理(二)

快速原型开发模型是&#xff08;适用于客户需求难以清楚定义、规模较小的系统&#xff09;。(编写系统实施计划)不是系统设计阶段的主要活动 解释&#xff1a;系统实施计划”更侧重于后续的实施与部署阶段&#xff0c;属于项目管理层面的内容 协作性不属于构件的特性在类图中…

STM32-笔记35-DMA(直接存储器访问)

一、什么叫DMA&#xff1f; DMA&#xff08;Direct Memory Access&#xff0c;直接存储器访问&#xff09;提供在外设与内存、存储器和存储器之间的高速数据传输使用。它允许不同速度的硬件装置来沟通&#xff0c;而不需要依赖于CPU&#xff0c;在这个时间中&#xff0c;CPU对于…

代码管理助手-Git

前言 Git 是一个版本控制系统&#xff0c;可以帮助你记录文件的每一次修改。这样&#xff0c;如果你在编程时不小心把代码写错了&#xff0c;可以很容易地回退到之前的版本。最重要的是&#xff0c;Git 是完全免费的&#xff0c;用户可以在自己的计算机上安装和使用 Git&#x…

蓝耘:GPU算力云服务的技术探索与AIGC应用支持

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、蓝耘的核心优势 1. 行业领先的基础设施 …

Kubernetes Gateway API-4-TCPRoute和GRPCRoute

1 TCPRoute 目前 TCP routing 还处于实验阶段。 Gateway API 被设计为与多个协议一起工作&#xff0c;TCPRoute 就是这样一个允许管理TCP流量的路由。 在这个例子中&#xff0c;我们有一个 Gateway 资源和两个 TCPRoute 资源&#xff0c;它们按照以下规则分配流量&#xff1…

在不到 5 分钟的时间内将威胁情报 PDF 添加为 AI 助手的自定义知识

作者&#xff1a;来自 Elastic jamesspi 安全运营团队通常会维护威胁情报报告的存储库&#xff0c;这些报告包含由报告提供商生成的大量知识。然而&#xff0c;挑战在于&#xff0c;这些报告的内容通常以 PDF 格式存在&#xff0c;使得在处理安全事件或调查时难以检索和引用相关…

Unity学习之UGUI进阶

一、事件监听接口 1、作用 用于实现类型长按、双击、拖拽等基础控件无法实现的功能 所有控件都能够添加更多的事件监听来处理对应的逻辑 2、事件监听接口类型 &#xff08;1&#xff09;常用事件接口 &#xff08;2&#xff09;不常用事件接口 3、使用事件监听接口 &#…

Redis为 List/Set/Hash 的元素设置单独的过期时间

一.业务简介 我们知道&#xff0c;Redis 里面暂时没有接口给 List、Set 或者 Hash 的 field 单独设置过期时间&#xff0c;只能给整个列表、集合或者 Hash 设置过期时间。 这样&#xff0c;当 List/Set/Hash 过期时&#xff0c;里面的所有 field 元素就全部过期了。但这样并不…

【Notepad++】Notepad++如何删除包含某个字符串所在的行

Notepad如何删除包含某个字符串所在的行 一&#xff0c;简介二&#xff0c;操作方法三&#xff0c;总结 一&#xff0c;简介 在使用beyoundcompare软件进行对比的时候&#xff0c;常常会出现一些无关紧要的地方&#xff0c;且所在行的内容是变化的&#xff0c;不方便进行比较&…

APP上架之Android 证书 MD5 指纹

Android 证书 MD5 指纹 1. 什么是 Android 证书 MD5 指纹&#xff1f; Android 证书 MD5 指纹是对证书数据进行 MD5 哈希运算后得到的 128 位字符串。在 Android 开发中&#xff0c;每个证书在理论上都有一个唯一的 MD5 指纹&#xff0c;用于识别和验证证书的有效性。证书指纹…

软件安全性测试有哪些测试方法?

随着数字化进程的加速&#xff0c;软件在各个领域扮演着越来越重要的角色。软件的安全性测试作为保证软件质量和安全的重要环节&#xff0c;逐渐成为企业在开发和部署过程中不可或缺的一部分。 一、软件安全性测试的测试方法   1、静态分析法&#xff1a;通过分析源代码或二…

LabVIEW轴承性能测试系统

本文介绍了基于LabVIEW的高效轴承性能测试系统的设计与开发。系统通过双端驱动技术实现高精度同步控制&#xff0c;针对轴承性能进行全面的测试与分析&#xff0c;以提高轴承的可靠性和寿命。 项目背景 随着工业自动化程度的提高&#xff0c;对轴承的性能要求越来越高。传统的…

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景

57. Three.js案例-创建一个带有聚光灯和旋转立方体的3D场景 实现效果 该案例实现了使用Three.js创建一个带有聚光灯和旋转立方体的3D场景。 知识点 WebGLRenderer&#xff08;WebGL渲染器&#xff09; THREE.WebGLRenderer 是 Three.js 中用于将场景渲染为 WebGL 内容的核…

如何使用vue引入three.js

在 Vue.js 项目中引入和使用 Three.js 是一个常见的需求&#xff0c;Three.js 是一个用于在浏览器中创建和显示动画 3D 计算机图形的 JavaScript 库。以下是一个基本的示例&#xff0c;展示如何在 Vue 项目中引入和使用 Three.js。 1. 创建 Vue 项目 如果你还没有一个 Vue 项…

9.4 visualStudio 2022 配置 cuda 和 torch (c++)

一、配置torch 1.Libtorch下载 该内容看了【Libtorch 一】libtorchwin10环境配置_vsixtorch-CSDN博客的博客&#xff0c;作为笔记用。我自己搭建后可以正常运行。 下载地址为windows系统下各种LibTorch下载地址_libtorch 百度云-CSDN博客 下载解压后的目录为&#xff1a; 2.vs…

【JavaEE进阶】获取Cookie/Session

&#x1f340;Cookie简介 HTTP协议自身是属于 "⽆状态"协议. "⽆状态"的含义指的是: 默认情况下 HTTP 协议的客⼾端和服务器之间的这次通信,和下次通信之间没有直接的联系.但是实际开发中,我们很多时候是需要知道请求之间的关联关系的. 例如登陆⽹站成…