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

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

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 示例:提供示例,帮助大模型理解每个类别的特征和分类规则。


http://www.kler.cn/a/473211.html

相关文章:

  • Docker 使用Dockerfile创建镜像
  • 解读若依框架中的 @Xss 注解
  • [读书日志]从零开始学习Chisel 第七篇:Scala的包和导入(敏捷硬件开发语言Chisel与数字系统设计)
  • Linux运维中常用的命令总结
  • 一文学会基于 Redis 的分布式锁实现
  • fnm教程
  • docker中使用Dockerfile设置Volume挂载点
  • 手写@MapperScan
  • 【Linux系列】如何使用 nohup 命令在后台运行脚本
  • PostgreSQL学习笔记(二):PostgreSQL基本操作
  • 算法5--位运算
  • 网络安全-kail linux 网络配置(基础篇)
  • NRF24L01模块STM32通信-发送端
  • OA系统如何做好DDOS防护
  • 【Spring Boot】Spring AOP 快速上手指南:开启面向切面编程新旅程
  • 解决Docker冲突问题
  • RabbitMQ高级篇之MQ可靠性 数据持久化
  • 模式识别-Ch2-高斯下判别函数
  • vue.js 路由的基本使用
  • ChatGPT API快速搭建自己的第一个应用—文章摘要(单轮对话应用)