【大模型从入门到精通8】openAI API 提升机器推理:高级策略2

news2024/10/1 7:42:56

这里写目录标题

      • 示例
      • 定义处理输入的函数
      • 链式思考提示
      • 示例:结构化系统和用户提示
      • 获取并展示模型的回答
      • 实现内心独白
      • 结论与最佳实践

在这里插入图片描述

示例

设置环境
在深入实施之前,设置必要的环境至关重要。这包括加载 OpenAI API 密钥并导入相关的 Python 库。以下代码块展示了如何完成这一设置,确保你的环境准备好执行后续的推理任务。

# 导入必要的库
import os
import openai
from dotenv import load_dotenv, find_dotenv

# 加载环境变量,特别是 OpenAI API 密钥
load_dotenv(find_dotenv())
openai.api_key = os.environ['OPENAI_API_KEY']

定义处理输入的函数

核心函数 get_response_for_queries 根据一系列结构化的提示检索模型的回答。此函数封装了向 OpenAI API 发送查询并解析回答的逻辑。

def get_response_for_queries(query_prompts,
                             model_name="gpt-3.5-turbo",
                             response_temperature=0, max_response_tokens=500):
    """
    根据查询提示获取模型的回答。

    参数:
    - query_prompts: 包含系统和用户提示的列表。
    - model_name: 指定要使用的模型版本。
    - response_temperature: 控制模型回答的随机性。
    - max_response_tokens: 限制模型回答的长度。

    返回:
    模型对用户查询的回答。
    """
    model_response = openai.ChatCompletion.create(
        model=model_name,
        messages=query_prompts,
        temperature=response_temperature,
        max_tokens=max_response_tokens,
    )
    return model_response.choices[0].message["content"]

链式思考提示

链式思考提示是一种引导模型经过结构化的推理过程,最后得出最终答案的技术。此方法特别适用于那些无法直接给出答案的复杂查询。

示例:结构化系统和用户提示

为了说明链式思考提示的应用,考虑提供详细的产品信息以响应客户的询问的任务。以下示例概述了如何结构化系统和用户提示以促进这一过程。

# 定义分隔符以分离推理步骤
step_delimiter = "####"

# 系统提示引导模型完成推理过程
system_prompt = f"""
按照以下步骤回答客户查询,使用 '{step_delimiter}' 来划分每个步骤。

步骤 1:{step_delimiter} 确定查询是否与特定产品相关而非一般类别。

步骤 2:{step_delimiter} 识别产品是否在列出的项目中,包括品牌、特性、价格等细节。

[在此处提供产品列表]

步骤 3:{step_delimiter} 评估客户对产品比较或规格的假设。

步骤 4:{step_delimiter} 根据提供的产品信息验证这些假设的准确性。

步骤 5:{step_delimiter} 纠正任何误解,只参考列出的产品,并以礼貌的方式回答。
"""

# 示例用户查询
example_query_1 = "BlueWave Chromebook 与 TechPro Desktop 在成本方面如何比较?"
example_query_2 = "是否有电视销售?"

# 为模型构造查询提示
query_prompts_1 = [
    {'role': 'system', 'content': system_prompt},
    {'role': 'user', 'content': f"{step_delimiter}{example_query_1}{step_delimiter}"},
]

query_prompts_2 = [
    {'role': 'system', 'content': system_prompt},
    {'role': 'user', 'content': f"{step_delimiter}{example_query_2}{step_delimiter}"},
]

获取并展示模型的回答

构造提示后,下一步涉及查询模型并提取其回答的相关部分。这对于以简洁明了的方式向用户提供最终答案至关重要。

# 获取模型对第一个示例查询的回答
response_to_query_1 = get_response_for_queries(query_prompts_1)
print(response_to_query_1)

# 获取模型对第二个示例查询的回答
response_to_query_2 = get_response_for_queries(query_prompts_2)
print(response_to_query_2)

实现内心独白

内心独白技术选择性地呈现最终答案,同时排除推理过程中的中间步骤。这确保用户得到直接的答案而不必处理模型思维过程的复杂性。

以下代码片段展示了如何从模型输出中提取并处理最终的回答,在模型输出使用特定分隔符来分隔推理步骤的情况下尤其有用。此技术在实现内心独白技术时特别有用,确保用户仅看到模型处理过程的必要结论。让我们详细分解代码及其功能。

# 从模型输出中仅提取最终的回答
try:
    # 假设模型的回答存储在名为 'response_to_query_2' 的变量中
    # 使用 'split' 方法根据 'step_delimiter' 将输出分割成多个段落
    # 通过 '[-1]' 选择最后一个项,即所有推理步骤之后的最终回答
    final_response = response_to_query_2.split(step_delimiter)[-1].strip()
except Exception as error:
    # 如果在过程中发生任何错误(例如 'response_to_query_2' 未定义),
    # 则向 'final_response' 分配默认的错误消息
    final_response = "抱歉,我现在遇到了一些问题,请尝试提出另一个问题。"

try 块尝试执行提取最终回答的代码。模型的回答存储在 response_to_query_2 中,使用 step_delimiter 作为分隔点将输出分割成多个段落。通过访问最后一个段落 [-1],我们确保只捕获模型推理过程的结论。strip() 方法应用于移除任何前导或尾随空格,确保最终回答整洁地格式化。

except 块是一个安全网,捕捉在提取过程中可能发生的任何异常。异常可能会因各种原因发生,例如 response_to_query_2 未定义或字符串不包含分隔符,导致索引错误。在这种情况下,为了避免程序崩溃或向用户暴露原始错误消息,返回预先定义的友好回答,保持流畅的用户体验。

最后,print(final_response) 用于向用户展示最终的回答。这种方法确保用户收到清晰简洁的回答,符合内心独白技术的原则,省略不必要的模型内部思维过程的细节。

这种方法通过确保系统的回答既用户友好又专注于直接提供相关信息,增强了用户界面,避免用背景处理的复杂性压倒用户。

结论与最佳实践

使用 OpenAI 的 API 实现链式思考推理和内心独白增强了模型处理复杂查询的能力,提供了清晰准确的回答。在整合这些技术时:

  • 确保提示结构清晰,有效引导模型。
  • 根据模型的表现定期优化提示以提升回答质量。
  • 考虑用户体验,以直观的方式呈现回答,使用像内心独白这样的技术来简化信息传递。

对于高级模型交互技术和提示工程的进一步探索,请参考 OpenAI 的文档及相关自然语言处理和机器学习领域的学术文献。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chapter 25 面向对象

欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能! 文章目录 前言一、初识对象二、成员方法三、类和对象 前言 面向对象编程(OOP)是Python编程中的一个核心概念,它能帮助程序员更好地组织和管理代码…

01 计算机系统基础-2

操作系统 进程管理 进程管理是操作系统的核心,但如果设计不当,就会出现死锁的问题。如果一个进程在等待一件不可能发生的事,则进程就死锁了。而如果一个或多个进程产生死锁,就会造成系统死锁。基于死锁产生机制及解决方案&#…

LeetCode Hard|【460. LFU 缓存】

力扣题目链接 LFU全称是最不经常使用算法(Least Frequently Used),LFU算法的基本思想和所有的缓存算法一样,一定时期内被访问次数最少的页,在将来被访问到的几率也是最小的。 相较于 LRU 算法,LFU 更加注重…

MATLAB霍夫曼表盘识别系统

MATLAB霍夫曼表盘识别系统 一、介绍 本设计为基于MATLAB的表盘指针识别,算法原理是基于hough变换。可检测压力表,石英手表,电表刻度,气压表等带指针刻度的表盘。通过hough检测直线和圆的关系,得出指针夹角&#xff0…

保形分位数回归(CQR)

目录 简介1 介绍提纲式总结 分位数回归从数据中估计分位数 3 共性预测4 保形分位数回归(CQR)两个定理 6 实验7 结论 简介 保形预测是一种构造在有限样本中获得有效覆盖的预测区间的技术,无需进行分布假设。尽管有这种吸引力,但现有的保形方法可能是不必…

(C题老外游中国)2024年华数杯大学生数学建模竞赛解题思路完整代码论文集合

我是Tina表姐,毕业于中国人民大学,对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在,我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

Open3D 三维重建-Delaunay Triangulation (德劳内三角剖分)

目录 一、概述 1.1原理 1.2实现步骤 1.3应用 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2重建后点云 Open3D点云算法汇总及实战案例汇总的目录地址: Open3D点云算法与点云深度学习案例汇总(长期更新)-CSD…

MySQL--日志管理

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、日志简介 MySQL日志主要分为4类,使用这些日志文件,可以查看MySQL内部发生的事情。这4类日志分别是: 错误日志&#xff1…

程序编译及链接

你好!感谢支持孔乙己的新作,本文就程序的编译及链接与大家分析我的思路。 希望能大佬们多多纠正及支持 !!! 个人主页:爱摸鱼的孔乙己-CSDN博客 ​ ​ 1.翻译译环境与运行环境 当我们进行程序设计时&…

Android Graphics 显示系统 - 计算FPS的原理与探秘Present Fence

“ 最近忙着新房子装修的事情,这篇计划内的文章拖了好久一直没有足够的时间来写作,终于挤出些儿时间来继续研究学习了。” 整了四个晚上终于拼凑出一篇文章,虽说是讲FPS计算原理,但该文涉及的知识点还是蛮多的,特别是对…

webpack的loader机制

webpack的loader机制 loader本质上就是导出函数的JavaScript模块。导出的函数,可以用来实现内容的转换。 /* * param{string|Buffer} content 源文件的内容 * param{object} [map] SourceMap数据 * param{any} [meta] meta数据,可以是任何数据 * */ fu…

黑马头条vue2.0项目实战(五)——首页—频道编辑

目录 1. 使用页面弹出层 1.1 页面弹出层简单使用 1.2 创建频道编辑组件 1.3 页面布局 2. 展示我的频道 3. 展示推荐频道列表 3.1 获取所有频道 3.2 处理展示推荐频道 4. 添加频道 5. 编辑频道 5.1 处理编辑状态 5.2 切换频道 5.3 让激活频道高亮 5.4 删除频道 6.…

K8S Docker搭建RocketMQ Dledger高可用集群

本篇文章回顾在华润基于K8S和Docker云设施搭建初步高可用具备failover的RocketMQ集群。RocketMQ版本是5.0.0。 目前现状 采用Dledger模式部署集群,3台namesrv,3台broker,namesrv每台1g的Docker部署,broker每台2g的Docker部署。测…

Hyper-V创建虚拟机安装OpenEulerOS

文章目录 下载OpenEulerHyper-V创建虚拟机 下载OpenEuler 进入官网下载,我选择的是 openEuler 24.03 LTS ,选择第一个版本即可: Hyper-V创建虚拟机 点击新建->虚拟机: 点击下一步: 输入虚拟机名称&#xff0c…

AMD Product Specifications - AMD 产品规格汇总

AMD Product Specifications - AMD 产品规格汇总 1. Desktop, Laptop and Workstation Processor Specifications (台式处理器、笔记本电脑处理器和工作站处理器规格)2. Server Processor Specifications (服务器处理器规格)3. Embedded Processor Specifications (嵌入式处理器…

element-ui表格1.0.0.1,表格的属性

前言:基于vue2element-ui的理论转实践的使用 第一组:数据显示 利用v-bind:data在table绑定数据源,将数据利用prop的属性传入到table-column,渲染到表格中 正片开始 首先,常用的属性(作者常用&#xff09…

书生大模型_InternLM + LlamaIndex RAG 实践

1.任务要求 基于 LlamaIndex 构建自己的 RAG 知识库,寻找一个问题 A 在使用 LlamaIndex 之前InternLM2-Chat-1.8B模型不会回答,借助 LlamaIndex 后 InternLM2-Chat-1.8B 模型具备回答 A 的能力,截图保存。 来源: https://github.…

鸿蒙媒体开发【媒体会话-提供方】音频和视频

媒体会话-提供方 介绍 本示例主要展示了媒体会话(媒体提供方)的相关功能,使用ohos.multimedia.avsession等接口实现媒体提供方与媒体播控中心自定义信息的交互功能。 注意: 此示例仅展示媒体提供方的相关功能,如果需…

2024 年华数杯全国大学生数学建模竞赛C 题 老外游中国 完整成品文章分享

最近,“city 不 city”这一网络流行语在外国网红的推动下备受关注。随着我国过境免签政策的落实,越来越多外国游客来到中国,通过网络平台展示他们在华旅行的见闻,这不仅推动了中国旅游业的发展,更是在国际舞台上展现了…

大模型学习笔记 - LLM 解码与部署

LLM 解码与部署 LLM 解码与部署 1. 解码策略 1.1 背景 1.1 贪心搜所1.2 概率采样 1.2 贪心搜所改进 1.2.1 束搜索 (保留前n个高概率的句子,最终选取整体概率高的生成)1.2.2 长度惩罚 (估计生成更长句子)1.2.3 重复惩罚…