- 大家好,我是同学小张,日常分享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 一起交流💬,一起进步💪。
- 微信公众号也可搜【同学小张】 🙏
本站文章一览: