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

这里写目录标题

设置评估前的准备工作

先决条件

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

python 复制代码
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的表现,首先需要根据用户的查询获取一个响应:

python 复制代码
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对查询的响应后,继续根据评估标准对其进行评估:

python 复制代码
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响应,因此我们将创建一些示例数据来展示如何使用上述函数:

python 复制代码
# 示例测试数据
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的响应并提取分数和反馈。以上代码示例仅供参考,实际应用中需要根据具体情况调整和完善。

相关推荐
野蛮的大西瓜19 分钟前
开源呼叫中心中,如何将ASR与IVR菜单结合,实现动态的IVR交互
人工智能·机器人·自动化·音视频·信息与通信
CountingStars61944 分钟前
目标检测常用评估指标(metrics)
人工智能·目标检测·目标跟踪
tangjunjun-owen1 小时前
第四节:GLM-4v-9b模型的tokenizer源码解读
人工智能·glm-4v-9b·多模态大模型教程
冰蓝蓝1 小时前
深度学习中的注意力机制:解锁智能模型的新视角
人工智能·深度学习
橙子小哥的代码世界1 小时前
【计算机视觉基础CV-图像分类】01- 从历史源头到深度时代:一文读懂计算机视觉的进化脉络、核心任务与产业蓝图
人工智能·计算机视觉
新加坡内哥谈技术2 小时前
苏黎世联邦理工学院与加州大学伯克利分校推出MaxInfoRL:平衡内在与外在探索的全新强化学习框架
大数据·人工智能·语言模型
fanstuck2 小时前
Prompt提示工程上手指南(七)Prompt编写实战-基于智能客服问答系统下的Prompt编写
人工智能·数据挖掘·openai
lovelin+v175030409662 小时前
安全性升级:API接口在零信任架构下的安全防护策略
大数据·数据库·人工智能·爬虫·数据分析
唐小旭3 小时前
python3.6搭建pytorch环境
人工智能·pytorch·python
洛阳泰山3 小时前
MaxKB基于大语言模型和 RAG的开源知识库问答系统的快速部署教程
人工智能·语言模型·开源·rag·maxkb