【AI大模型应用开发】【LangSmith: 生产级AI应用维护平台】1. 快速上手数据集与测试评估过程

简介: 【AI大模型应用开发】【LangSmith: 生产级AI应用维护平台】1. 快速上手数据集与测试评估过程
  • 大家好,我是同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:


今天是LangSimth平台实战的第二篇文章。

上篇文章我们介绍了该平台的Tracing部分,它为程序提供了每一步的运行日志及监控,提供了快速调试能力以及测试数据标注和收集能力。

本文介绍该平台的数据集和测试评估部分。数据集的建立和测试评估是软件开发过程中必不可少的一部分,也是保证软件质量的重要一环。

0. 导入本地数据集

该平台上,对于数据集的收集过程,除了上篇文章中介绍的在线标注和收集方式,还可以通过导入本地数据集的方式批量上传数据集。

以AGI课堂中的数据集例子给大家做演示。

数据集格式如下( .jsonl文件 ):outlines、user_input 以及 label字段,其中label为标注,也就是输出结果。

{"outlines": "Assistants API\n✅1. OpenAI 给了我们更大空间\n✅2. 原生 API、GPTs、Assistants API、国产/开源大模型选型参考\n✅3. Assistants API 的主要能力\n✅4. 做一个自己的 GPT\n  1. 创建 assistant\n  2. 管理 thread\n  3. 添加 message\n  4. 开始 run\n  5. 中控调度\n  6. Function Calling\n  7. Code Interpreter\n  8. RAG", "user_input": "别进reddit的中文话题,那是最没营养的区域", "label": "N"}
{"outlines": "【神秘嘉宾】大模型时代的AI产品新挑战\n1. AI 能力演进路线\n✅2. LLMs 带来的变化\n✅3. 如何将大模型落地到实际场景中\n✅4. LLMs 存在哪些问题\n✅5. LLMs 落地三要素\n✅6. LLMs 短期、中期和长期落地方向", "user_input": "对话式交互也不是所有场景都合适", "label": "N"}

0.1 导入步骤与相关接口

(1)创建dataset,接口:create_dataset

(2)给dataset创建数据集,接口:create_examples

0.2 实现代码

import json
data = []
with open('D:\GitHub\LEARN_LLM\langsmith\my_annotations.jsonl','r',encoding='utf-8') as fp:
    for line in fp:
        example = json.loads(line.strip())
        item = {
            "input": {
                "outlines": example["outlines"],
                "user_input": example["user_input"]
            },
            "expected_output": example["label"]
        }
        data.append(item)
        
from langsmith import Client
client = Client()
dataset_name = "assistant-001"
dataset = client.create_dataset(
    dataset_name, #数据集名称
    description="AGI课堂的标注数据", #数据集描述
)
client.create_examples(
    inputs=[{"input":item["input"]} for item in data[:50]],  # 只是演示,所以只上传了前50条测试数据
    outputs=[{"output":item["expected_output"]} for item in data[:50]], 
    dataset_id=dataset.id
)

以上实现代码其实主要是调用了上述两个接口,创建了数据集和为数据集填充了测试数据。剩下的代码就是解析数据集jsonl文件格式。

0.3 运行结果

打开LangSimth,可以看到上传的数据集了

1. 对数据集进行批量测试和评估

1.1 定义评估函数

定义一个评估函数,判断输出值是否与期望值相等,相等则评分为1,不相等则评分为0。

下面的例子使用了自定义的评估标准,要想自定义一个字符串类型的评估标准,需要继承自StringEvaluator,然后重写_evaluate_strings函数。

from langchain.evaluation import StringEvaluator
from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction
import re
from typing import Optional, Any
class AccuracyEvaluator(StringEvaluator):
    def __init__(self):
        pass
    def _evaluate_strings(
        self,
        prediction: str,
        input: Optional[str] = None,
        reference: Optional[str] = None,
        **kwargs: Any
    ) -> dict:
        return {"score": int(prediction==reference)}
from langchain.evaluation import EvaluatorType
from langchain.smith import RunEvalConfig
evaluation_config = RunEvalConfig(
    # 自定义评估标准
    custom_evaluators=[AccuracyEvaluator()],
)

1.2 定义Chain

在这里定义你的待评估的主要数据处理流程程序,也就是你的大模型应用。

from langchain.prompts import PromptTemplate
need_answer=PromptTemplate.from_template("""
*********
你是AIGC课程的助教,你的工作是从学员的课堂交流中选择出需要老师回答的问题,加以整理以交给老师回答。
 
课程内容:
{outlines}
*********
学员输入:
{user_input}
*********
如果这是一个需要老师答疑的问题,回复Y,否则回复N。
只回复Y或N,不要回复其他内容。""")
model = ChatOpenAI(temperature=0,model_kwargs={"seed":42})
parser = StrOutputParser()
chain_v1 = (
    {
        "outlines":lambda x: x["input"]["outlines"],
        "user_input":lambda x: x["input"]["user_input"],
    }
    | need_answer
    | model
    | parser
)

1.3 运行测试

运行测试的接口:arun_on_dataset,该接口需要的重要参数:

  • dataset_name:要使用的数据集名称
  • llm_or_chain_factory:使用的处理链(你要评估的程序)
  • evaluation:评估标准
from langchain.smith import (
    arun_on_dataset,
    run_on_dataset,
)
from langsmith import Client
client = Client()
async def test_run():
    dataset_name = "assistant-001"
    results = await arun_on_dataset(
        dataset_name=dataset_name,
        llm_or_chain_factory=chain_v1,
        evaluation=evaluation_config,
        verbose=True,
        client=client,
        project_name="test-002",
        tags=[
            "prompt_v1",
        ],  # 可选,自定义的标识
    )
    print(results)
    
asyncio.run(test_run())

再加一些需要的包:

import asyncio
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from langchain.schema.output_parser import StrOutputParser
from langchain.schema.runnable import RunnablePassthrough
from langchain.schema import HumanMessage
from langchain.prompts.chat import HumanMessagePromptTemplate
from langchain.prompts import ChatPromptTemplate
from langchain.evaluation import StringEvaluator
from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction
import re
from typing import Optional, Any

1.4 运行结果

运行日志输出如下:

本次测试的结果示例如下:每一条都有记录,参考结果是什么、本次测试输出结果是什么。

在数据集界面,还可以看到所有针对本数据集的测试信息。

1.5 坑

同一数据集的同一个测试只能跑一次,否则报错。也就是在同一个数据集上跑测试时,project_name参数要不同。

本文到这里就结束了,在本文中,我们实际使用了LangSmith平台的数据集与测试评估的部分:从数据集的创建到建立自己的评估标准,再到实际运行一个测试,得到测试结果。简单的使用,相信大家能对这一部分内容有一个全览性的认识。

如果觉得本文对你有帮助,麻烦点个赞和关注呗 ~~~


  • 大家好,我是同学小张,日常分享AI知识和实战案例
  • 欢迎 点赞 + 关注 👏,持续学习持续干货输出
  • +v: jasper_8017 一起交流💬,一起进步💪。
  • 微信公众号也可搜【同学小张】 🙏

本站文章一览:

相关文章
|
23天前
|
存储 人工智能 分布式计算
Parquet 文件格式详解与实战 | AI应用开发
Parquet 是一种列式存储文件格式,专为大规模数据处理设计,广泛应用于 Hadoop 生态系统及其他大数据平台。本文介绍 Parquet 的特点和作用,并演示如何在 Python 中使用 Pandas 库生成和读取 Parquet 文件,包括环境准备、生成和读取文件的具体步骤。【10月更文挑战第13天】
172 60
|
20天前
|
人工智能 运维 Serverless
【CAP评测有奖】邀您共探 AI 应用开发新趋势,赢取多重好礼!
云应用开发平台 CAP(Cloud Application Platform)是阿里云推出的一站式应用开发和生命周期管理平台。是专为现代开发者打造的一站式解决方案,旨在简化应用开发流程,加速创新步伐。它集成了丰富的 Serverless + AI 应用模板、开源工具链与企业级应用管理功能,让无论是个人还是企业开发者,都能轻松构建云上应用,并实现持续迭代升级。
|
20天前
|
人工智能 API 决策智能
swarm Agent框架入门指南:构建与编排多智能体系统的利器 | AI应用开发
Swarm是OpenAI在2024年10月12日宣布开源的一个实验性质的多智能体编排框架。其核心目标是让智能体之间的协调和执行变得更轻量级、更容易控制和测试。Swarm框架的主要特性包括轻量化、易于使用和高度可定制性,非常适合处理大量独立的功能和指令。【10月更文挑战第15天】
146 6
|
18天前
|
编解码 人工智能 自然语言处理
迈向多语言医疗大模型:大规模预训练语料、开源模型与全面基准测试
【10月更文挑战第23天】Oryx 是一种新型多模态架构,能够灵活处理各种分辨率的图像和视频数据,无需标准化。其核心创新包括任意分辨率编码和动态压缩器模块,适用于从微小图标到长时间视频的多种应用场景。Oryx 在长上下文检索和空间感知数据方面表现出色,并且已开源,为多模态研究提供了强大工具。然而,选择合适的分辨率和压缩率仍需谨慎,以平衡处理效率和识别精度。论文地址:https://www.nature.com/articles/s41467-024-52417-z
40 2
|
21天前
|
存储 人工智能 Java
Neo4j从入门到精通:打造高效知识图谱数据库 | AI应用开发
在大数据和人工智能时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文从入门到精通,详细介绍知识图谱及其存储工具Neo4j,涵盖知识图谱的介绍、Neo4j的特点、安装步骤、使用方法(创建、查询)及Cypher查询语言的详细讲解。通过本文,读者将全面了解如何利用Neo4j处理复杂关系数据。【10月更文挑战第14天】
77 6
|
3天前
|
机器学习/深度学习 人工智能 自然语言处理
当前AI大模型在软件开发中的创新应用与挑战
2024年,AI大模型在软件开发领域的应用正重塑传统流程,从自动化编码、智能协作到代码审查和测试,显著提升了开发效率和代码质量。然而,技术挑战、伦理安全及模型可解释性等问题仍需解决。未来,AI将继续推动软件开发向更高效、智能化方向发展。
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
AI在医疗领域的应用及其挑战
【10月更文挑战第34天】本文将探讨人工智能(AI)在医疗领域的应用及其面临的挑战。我们将从AI技术的基本概念入手,然后详细介绍其在医疗领域的各种应用,如疾病诊断、药物研发、患者护理等。最后,我们将讨论AI在医疗领域面临的主要挑战,包括数据隐私、算法偏见、法规合规等问题。
27 1
|
5天前
|
机器学习/深度学习 人工智能 算法
AI在医疗领域的应用与挑战
本文探讨了人工智能(AI)在医疗领域的应用,包括其在疾病诊断、治疗方案制定、患者管理等方面的优势和潜力。同时,也分析了AI在医疗领域面临的挑战,如数据隐私、伦理问题以及技术局限性等。通过对这些内容的深入分析,旨在为读者提供一个全面了解AI在医疗领域现状和未来发展的视角。
30 10
|
6天前
|
机器学习/深度学习 人工智能 监控
探索AI在医疗领域的应用与挑战
本文深入探讨了人工智能(AI)在医疗领域中的应用现状和面临的挑战。通过分析AI技术如何助力疾病诊断、治疗方案优化、患者管理等方面的创新实践,揭示了AI技术为医疗行业带来的变革潜力。同时,文章也指出了数据隐私、算法透明度、跨学科合作等关键问题,并对未来的发展趋势进行了展望。
|
9天前
|
机器学习/深度学习 人工智能 自然语言处理
当前AI大模型在软件开发中的创新应用与挑战
【10月更文挑战第31天】2024年,AI大模型在软件开发领域的应用取得了显著进展,从自动化代码生成、智能代码审查到智能化测试,极大地提升了开发效率和代码质量。然而,技术挑战、伦理与安全问题以及模型可解释性仍是亟待解决的关键问题。开发者需不断学习和适应,以充分利用AI的优势。