- 大家好,我是同学小张,日常分享AI知识和实战案例,欢迎 点赞 + 关注 👏,持续学习 ,持续干货输出。
今天是LangSimth平台实战的第二篇文章。
上篇文章我们介绍了该平台的Tracing部分,它为程序提供了每一步的运行日志及监控,提供了快速调试能力以及测试数据标注和收集能力。
本文介绍该平台的数据集和测试评估部分。数据集的建立和测试评估是软件开发过程中必不可少的一部分,也是保证软件质量的重要一环。
0. 导入本地数据集
该平台上,对于数据集的收集过程,除了上篇文章中介绍的在线标注和收集方式,还可以通过导入本地数据集的方式批量上传数据集。
以AGI课堂中的数据集例子给大家做演示。
数据集格式如下( .jsonl文件 ):outlines、user_input 以及 label字段,其中label为标注,也就是输出结果。
python
{"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 实现代码
python
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
函数。
python
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
在这里定义你的待评估的主要数据处理流程程序,也就是你的大模型应用。
python
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:评估标准
python
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())
再加一些需要的包:
python
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 一起交流💬,一起进步💪。
- 微信公众号也可搜【同学小张】 🙏
本站文章一览: