【大模型从入门到精通15】openAI API 构建和评估大型语言模型(LLM)应用3

news2024/11/15 17:33:01

这里写目录标题

      • 设置评估前的准备工作
        • 先决条件
        • 获取LLM响应
      • 根据评估标准评估响应
        • 构建详细的评估标准
        • 评估过程
        • 示例评估

在这里插入图片描述

设置评估前的准备工作

先决条件

在开始评估过程之前,请确保必要的工具和配置已经到位:

import os
import openai
from dotenv import load_dotenv

# 从 .env 文件加载 OpenAI API 密钥
load_dotenv()
openai.api_key = os.environ.get('OPENAI_API_KEY')
获取LLM响应

为了评估LLM的表现,首先需要根据用户的查询获取一个响应:

def fetch_llm_response(prompts, model="gpt-3.5-turbo", temperature=0, max_tokens=500):
    """
    根据一系列提示从LLM获取响应。

    参数:
        prompts (list): 消息字典列表,其中每条消息都有一个'role'(系统或用户)和'content'。
        model (str): 要使用的LLM模型标识符。
        temperature (float): 控制输出的随机性,0是最确定性的。
        max_tokens (int): 响应中的最大令牌数。

    返回:
        str: LLM响应的内容。
    """
    response = openai.ChatCompletion.create(
        model=model,
        messages=prompts,
        temperature=temperature, 
        max_tokens=max_tokens
    )
    return response.choices[0].message["content"]

根据评估标准评估响应

构建详细的评估标准

评估标准作为评估LLM答案的指南,关注以下几个关键方面:

  • 上下文相关性和事实准确性
  • 回答的完整性
  • 文本的连贯性和语法正确性
评估过程

在获取到LLM对查询的响应后,继续根据评估标准对其进行评估:

def evaluate_response_against_detailed_rubric(test_data, llm_response):
    """
    根据详细的评估标准评估LLM的响应,考虑响应的各种方面,包括准确性、相关性和完整性,
    基于提供的测试数据。该函数旨在通过在多个标准上给响应打分并提供行动建议的反馈来提供细致的评估。

    参数:
        test_data (dict): 包含'customer_query'(客户查询)、'context'(背景信息)以及可选的
                          'expected_answers'(预期答案),以便进行更细致的评估。
        llm_response (str): LLM对客户查询生成的响应。

    返回:
        dict: 包含总评分、按标准评分及详细反馈的字典。
    """
    # 定义评估标准及其初始化分数
    rubric_criteria = {
        'accuracy': {'weight': 3, 'score': None, 'feedback': ''},
        'relevance': {'weight': 2, 'score': None, 'feedback': ''},
        'completeness': {'weight': 3, 'score': None, 'feedback': ''},
        'coherence': {'weight': 2, 'score': None, 'feedback': ''}
    }
    total_weight = sum(criterion['weight'] for criterion in rubric_criteria.values())

    # 构建评估提示
    system_prompt = "根据提供的背景信息评价客服代表的回答。"
    evaluation_prompt = f"""\
    [问题]: {test_data['customer_query']}
    [背景]: {test_data['context']}
    [预期答案]: {test_data.get('expected_answers', 'N/A')}
    [LLM回答]: {llm_response}

    根据准确性、与问题的相关性、所提供信息的完整性以及文本的连贯性评估回答。
    对每个标准给出评分(0-10)及任何具体的反馈。
    """

    # 假设有一个函数 fetch_llm_evaluation 来处理评估过程
    evaluation_results = fetch_llm_evaluation(system_prompt, evaluation_prompt)

    # 解析评估结果以填充评估标准的分数和反馈
    # 这一步骤假设评估结果是以某种方式结构化,可以被程序化解析
    # 例如,在文本中使用预定义的格式或标记
    parse_evaluation_results(evaluation_results, rubric_criteria)

    # 根据各标准分数的加权平均值计算总评分
    overall_score = sum(criterion['score'] * criterion['weight'] for criterion in rubric_criteria.values()) / total_weight

    # 编译详细的反馈和分数
    detailed_feedback = {criteria: {'score': rubric_criteria[criteria]['score'], 'feedback': rubric_criteria[criteria]['feedback']} for criteria in rubric_criteria}

    return {
        'overall_score': overall_score,
        'detailed_scores': detailed_feedback
    }

def fetch_llm_evaluation(system_prompt, evaluation_prompt):
    """
    模拟获取基于LLM的评估。该函数通常会向LLM服务发送带有评估提示的请求并返回LLM的响应以供处理。
    """
    # 占位符,代表调用LLM
    return "模拟LLM响应"

def parse_evaluation_results(evaluation_text, rubric_criteria):
    """
    解析LLM返回的评估文本,并提取每个标准的分数和反馈,更新rubric_criteria字典。

    参数:
        evaluation_text (str): LLM响应中包含的评估分数和反馈的文本。
        rubric_criteria (dict): 要用分数和反馈更新的评估标准字典。
    """
    # 示例解析逻辑,需要替换为实际解析LLM响应的代码
    for criteria in rubric_criteria:
        rubric_criteria[criteria]['score'] = 8  # 示例分数
        rubric_criteria[criteria]['feedback'] = "在这方面做得不错。"  # 示例反馈
示例评估

使用evaluate_response_against_detailed_rubric函数对一个响应进行评估,以了解它与提供的上下文的匹配程度以及信息的准确性。

这里我们没有实际的测试数据和LLM响应,因此我们将创建一些示例数据来展示如何使用上述函数:

# 示例测试数据
test_data = {
    'customer_query': '我想知道如何重置我的账户密码。',
    'context': '这是一个在线购物平台,客户需要帮助重置密码。',
    'expected_answers': ['请访问我们的帮助中心并遵循重置密码的步骤。']
}

# 获取LLM响应
prompts = [
    {'role': 'system', 'content': '你是一位客服代表。'},
    {'role': 'user', 'content': test_data['customer_query']}
]
llm_response = fetch_llm_response(prompts)

# 评估LLM响应
evaluation_result = evaluate_response_against_detailed_rubric(test_data, llm_response)
print(evaluation_result)

请注意,fetch_llm_evaluationparse_evaluation_results 函数中的逻辑需要根据实际情况进行调整,以便能够正确解析LLM的响应并提取分数和反馈。以上代码示例仅供参考,实际应用中需要根据具体情况调整和完善。

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

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

相关文章

数据结构课程设计:航班订票系统的设计与实现

目录 1 系统功能及要求 2 系统功能框架 3 详细设计 3.1 录入航班信息模块 3.2 客户订票模块 3.3 客户退票模块 3.4 航班查询模块 3.5 订单查询模块 3.6 航班修改模块 参考文献 1 系统功能及要求 (1)录入信息。可以录入航班信息情况,数据存储在一个数据文件中;可以…

靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解+卷积长短期+注意力多元时间序列预测

靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测 目录 靓图!多点创新!CEEMDAN-Kmeans-VMD-CNN-LSTM-Attention双重分解卷积长短期注意力多元时间序列预测效果一览基本介绍程序设计…

了解babel的作用、原理、基本使用,为什么有babel,以及在webpack中的babel-loader

一、为什么有babel? babel是一个工具链,如今大多数的浏览器都支持es6的语法和特性,但难免有些旧版本的浏览器是不支持的,为了兼容这些旧版本的浏览器,有了babel这一个 JavaScript 编译器。它能为我们做一些事情&#…

Linux中针对文件权限的解析

1.文件权限详细解析: -rw-r--r--. 1 root root 114 4月 10 16:32 100.txt 1)-rw-r--r--. 总共11位 第一个“-”和最后一个“.”不用去管,剩下 rw- r-- r-- 属主 属组 其他人 u g o 第一个是“-”表示普通文件 第一个是“d”表示文件目录 …

从BEVDET来学习如何生成trt以及如何去写这些C++内容

0. 简介 对于深度学习而言,通过模型加速来嵌入进C是非常有意义的,因为本身训练出来的pt文件其实效率比较低下,所以这里我们将以BEVDET作为例子,来向读者展示如何去生成trt,并完善engine加速。这里最近受到优刻得的使用…

autoX.js

一. 概述 AutoX.js 使用 JavaScript 作为脚本语言,目前使用 Rhino 1.7.13 作为脚本引擎,支持 ES5 与部分 ES6 特性。 下载地址: https://github.com/kkevsekk1/AutoX/releases 官方文档: AutoX.js 二. 用法 1. 首先在官网下…

如何快速从文本中找到需要的信息,字典和正则灵活运用

import re #打开文本文件 f open("stock_data.txt",encoding"utf-8") #单独读取第一行数据处理进行分割,末尾换行符去掉 headers f.readline().strip().split(,) print(headers) #定义一个字典,以股标代码做为KEY,每个行做为值 st…

嵌入式学习day14(shell脚本)

一丶概念 shell脚本的本质:shell命令的有序集合 shell既是应用程序又是脚本语言,并且是解释型语言,不需要编译,解释一条执行一条。 shell脚本编程:将shell命令结合一些按照一定逻辑集合到一起,写一个.sh文件…

springboot项目配置https证书

前言 springboot项目直接http访问不安全,如何开启https? 如何配置ssl 创建证书 注意:如果你有CA办法的数字证书,可以使用直接使用CA颁发的证书。非可信CA或者私人颁发的证书在浏览器地址栏会显示红色,不安全不受信任。 如果你没…

Mac/iPhone邮件APP绑定武大邮箱

Mac/iPhone邮件APP绑定武大邮箱 一、准备工作二、新增一个互联网账户三、设置收件箱和发件箱服务器 一、准备工作 武大邮箱账户,确保你知道自己的邮箱登陆密码。 下面的步骤是在Mac上操作,iPhone上的设置也是一样的,主要是收件箱和发件箱服…

DC-4 打靶渗透

一、信息收集 1、查看靶机MAC地址: 2、查看靶机的ip地址: nmap 192.168.13.0/24 3、查看靶机开放的端口: nmap -p- -sC -sT -sV -A 192.168.13.161 4、访问靶机的80端口: 5、扫描目录: dirsearch -u "http://192…

Redis远程字典服务器(3)——常用数据结构和单线程模型

目录 一,常用数据结构 1.0 前言 1.1 string 1.2 hash 1.3 list 1.4 set 1.5 zset 1.6 演示 二,关于单线程模型 2.1 关于Redis的单线程 2.2 Redis为什么快 一,常用数据结构 1.0 前言 Redis是采用键值对的方式来存储数据的&#…

pixel 3a 刷机和root 流程

1、下载镜像文件 官方下载出厂镜像刷入 或者直接下载手机本身自带的镜像。 下载地址:https://developers.google.com/android/images 找到对应手机的版本,可以通过指令 adb shell getprop 找到 [ro.bootimage.build.fingerprint]: [google/sargo/sargo:1…

代码随想录算法训练营第九天|151.翻转字符串里的单词 卡码网:55.右旋转字符串

LeetCode 151 翻转字符串里的单词 题目: 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意…

超声波眼镜清洗机哪个品牌比较好用?四大高赞耐用单品全面测评

随着大家对健康卫生的关注不断提升,超声波清洗机逐渐受到佩戴眼镜人士的青睐。超声波清洗机是一种既方便又高效的智能清洁工具。它利用超声波技术,通过在眼镜表面产生高频振动,将污垢和油脂彻底分离,从而实现卓越的清洁效果。下面…

基于PSO-LSTM的多变量多特征数据分类预测

一、数据集 数据特征:12个多分类:4分类 二、PSO-LSTM网络 PSO-LSTM 网络是一种结合粒子群优化算法(Particle Swarm Optimization, PSO)和长短期记忆网络(Long Short-Term Memory, LSTM)的混合模型。它将 …

好领导都会用三招管好下属!

管不住人,你就当不好官,高明领导管人就靠这3大秘诀! 秘诀一:敢于亮剑 身为领导,,有时候需要有勇气面对挑战和问题,勇于做出决策,拿出魄力,勇于亮剑,向一切宣…

【HarmonyOS NEXT星河版开发学习】小型测试案例11-购物车数字框

个人主页→VON 收录专栏→鸿蒙开发小型案例总结​​​​​ 基础语法部分会发布于github 和 gitee上面(暂未发布) 前言 经过一周的学习,我发现还是进行拆分讲解效果会比较好,因为鸿蒙和前端十分的相识。主要就是表达的方式不同罢了…

2024年高教社杯全国大学生数学建模竞赛报名第一次通知!建议收藏!预测类模型及应用场景汇总

对于数学建模而言,算法模型选的对,文章写的顺~其中预测类模型是数模中常用的模型之一,通过预测模型,我们可以对未来的趋势和事件进行合理推测。今天,数模0error给大家汇总一下预测类模型及其应用场景,供大家参考,小伙伴们码住! 2024年高教社杯全大学生数学建模竞赛通知…

docker学习初体验

docker学习初体验 docker是什么 docker 包括三个基本概念: 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 roo…