小智头像图片
AI教程 2025年01月16日
0 收藏 0 点赞 213 浏览 5287 个字
摘要 :

面向开发者的LLM入门课程-创建LLM应用: 评估 评估是检验语言模型问答质量的关键环节。评估可以检验语言模型在不同文档上的问答效果,找出其弱点。还可以通过比较不同模……

哈喽!伙伴们,我是小智,你们的AI向导。欢迎来到每日的AI学习时间。今天,我们将一起深入AI的奇妙世界,探索“面向开发者的LLM入门课程-创建LLM应用”,并学会本篇文章中所讲的全部知识点。还是那句话“不必远征未知,只需唤醒你的潜能!”跟着小智的步伐,我们终将学有所成,学以致用,并发现自身的更多可能性。话不多说,现在就让我们开始这场激发潜能的AI学习之旅吧。

面向开发者的LLM入门课程-创建LLM应用

面向开发者的LLM入门课程-创建LLM应用:

评估

评估是检验语言模型问答质量的关键环节。评估可以检验语言模型在不同文档上的问答效果,找出其弱点。还可以通过比较不同模型,选择最佳系统。此外,定期评估也可以检查模型质量的衰减。评估通常有两个目的:
· 检验LLM应用是否达到了验收标准
· 分析改动对于LLM应用性能的影响
基本的思路就是利用语言模型本身和链本身,来辅助评估其他的语言模型、链和应用程序。我们还是以上一章节的文档问答应用为例,在本章节中讨论如何在 LangChain 中处理和考虑评估的内容。

创建LLM应用

首先,按照 langchain 链的方式构建一个 LLM 的文档问答应用

from langchain.chains import RetrievalQA #检索QA链,在文档上进行检索
from langchain.chat_models import ChatOpenAI #openai模型
from langchain.document_loaders import CSVLoader #文档加载器,采用csv格式存储
from langchain.indexes import VectorstoreIndexCreator #导入向量存储索引创建器
from langchain.vectorstores import DocArrayInMemorySearch #向量存储
#加载中文数据
file = ‘../data/product_data.csv’
loader = CSVLoader(file_path=file)
data = loader.load()

#查看数据
import pandas as pd
test_data = pd.read_csv(file,skiprows=0)
display(test_data.head())

面向开发者的LLM入门课程-创建LLM应用

# 将指定向量存储类,创建完成后,我们将从加载器中调用,通过文档记载器列表加载

index = VectorstoreIndexCreator(
vectorstore_cls=DocArrayInMemorySearch
).from_loaders([loader])

#通过指定语言模型、链类型、检索器和我们要打印的详细程度来创建检索QA链
llm = ChatOpenAI(temperature = 0.0)
qa = RetrievalQA.from_chain_type(
llm=llm,
chain_type=”stuff”,
retriever=index.vectorstore.as_retriever(),
verbose=True,
chain_type_kwargs = {
“document_separator”: “<<<<>>>>>”
}
)

上述代码的主要功能及作用在上一章节中都已说明,这里不再赘述

1.设置测试的数据

我们查看一下经过档加载器 CSVLoad 加载后生成的 data 内的信息,这里我们抽取 data 中的第九条和第十条数据,看看它们的主要内容:

第九条数据:

data[10]

Document(page_content=”product_name: 高清电视机ndescription: 规格:n尺寸:50”。nn
为什么我们热爱它:n我们的高清电视机拥有出色的画质和强大的音效,带来沉浸式的观看体验。nn材质与
护理:n使用干布清洁。nn构造:n由塑料、金属和电子元件制成。nn其他特性:n支持网络连接,可以
在线观看视频。n配备遥控器。n在韩国制造。nn有问题?请随时联系我们的客户服务团队,他们会解答您
的所有问题。”, metadata={‘source’: ‘../data/product_data.csv’, ‘row’: 10})

第十条数据:

data[11]

Document(page_content=”product_name: 旅行背包ndescription: 规格:n尺寸:18” x 12”
x 6”。nn为什么我们热爱它:n我们的旅行背包拥有多个实用的内外袋,轻松装下您的必需品,是短途旅
行的理想选择。nn材质与护理:n可以手洗,自然晾干。nn构造:n由防水尼龙制成。nn其他特性:n
附带可调节背带和安全锁。n在中国制造。nn有问题?请随时联系我们的客户服务团队,他们会解答您的所
有问题。”, metadata={‘source’: ‘../data/product_data.csv’, ‘row’: 11})

看上面的第一个文档中有高清电视机,第二个文档中有旅行背包,从这些细节中,我们可以创建一些例子查询和答案

2.手动创建测试数据

需要说明的是这里我们的文档是 csv 文件,所以我们使用的是文档加载器是 CSVLoader ,CSVLoader 会对 csv 文件中的每一行数据进行分割,所以这里看到的 data[10], data[11]的内容则是 csv 文件中的第10条,第11条数据的内容。下面我们根据这两条数据手动设置两条“问答对”,每一个“问答对”中包含一个query ,一个 answer :

examples = [
{
“query”: “高清电视机怎么进行护理?”,
“answer”: “使用干布清洁。”
},
{
“query”: “旅行背包有内外袋吗?”,
“answer”: “有。”
}
]

3.通过LLM生成测试用例

在前面的内容中,我们使用的方法都是通过手动的方法来构建测试数据集,比如说我们手动创建10个问题和10个答案,然后让 LLM 回答这10个问题,再将 LLM 给出的答案与我们准备好的答案做比较,最后再给 LLM 打分,评估的流程大概就是这样。但是这里有一个问题,就是我们需要手动去创建所有的问题集和答案集,那会是一个非常耗费时间和人力的成本。那有没有一种可以自动创建大量问答测试集的方法呢?那当然是有的,今天我们就来介绍 Langchain 提供的方法: QAGenerateChain ,我们可以通过QAGenerateChain 来为我们的文档自动创建问答集:

由于 QAGenerateChain 类中使用的 PROMPT 是英文,故我们继承 QAGenerateChain 类,将 PROMPT 加上“请使用中文输出”。下面是 generate_chain.py 文件中的 QAGenerateChain 类的源码

from langchain.evaluation.qa import QAGenerateChain #导入QA生成链,它将接收文档,并从
每个文档中创建一个问题答案对

# 下面是langchain.evaluation.qa.generate_prompt中的源码,在template的最后加上“请使用中文输出”
from langchain.output_parsers.regex import RegexParser
from langchain.prompts import PromptTemplate
from langchain.base_language import BaseLanguageModel
from typing import Any

template = “””You are a teacher coming up with questions to ask on a quiz.
Given the following document, please generate a question and answer based on that document.

Example Format:


QUESTION: question here
ANSWER: answer here

These questions should be detailed and be based explicitly on information in the document. Begin!


{doc}

请使用中文输出
“””
output_parser = RegexParser(
regex=r”QUESTION: (.*?)nANSWER: (.*)”, output_keys=[“query”, “answer”]
)
PROMPT = PromptTemplate(
input_variables=[“doc”], template=template, output_parser=output_parser
)

# 继承QAGenerateChain
class ChineseQAGenerateChain(QAGenerateChain):
“””LLM Chain specifically for generating examples for question answering.”””

@classmethod
def from_llm(cls, llm: BaseLanguageModel, **kwargs: Any) -> QAGenerateChain:
“””Load QA Generate Chain from LLM.”””
return cls(llm=llm, prompt=PROMPT, **kwargs)

example_gen_chain = ChineseQAGenerateChain.from_llm(ChatOpenAI())#通过传递chat
open AI语言模型来创建这个链
new_examples = example_gen_chain.apply([{“doc”: t} for t in data[:5]])

#查看用例数据
new_examples

[{‘qa_pairs’: {‘query’: ‘这款全自动咖啡机的尺寸是多少?’,
‘answer’: “大型尺寸为13.8” x 17.3”,中型尺寸为11.5” x 15.2”。”}},
{‘qa_pairs’: {‘query’: ‘这款电动牙刷的规格是什么?’, ‘answer’: “一般大小 – 高度:
9.5”,宽度:1”。”}},
{‘qa_pairs’: {‘query’: ‘这种产品的名称是什么?’, ‘answer’: ‘这种产品的名称是橙味维生素C
泡腾片。’}},
{‘qa_pairs’: {‘query’: ‘这款无线蓝牙耳机的尺寸是多少?’,
‘answer’: “该无线蓝牙耳机的尺寸为1.5” x 1.3”。”}},
{‘qa_pairs’: {‘query’: ‘这款瑜伽垫的尺寸是多少?’, ‘answer’: “这款瑜伽垫的尺寸是24” x
68”。”}}]

在上面的代码中,我们创建了一个 QAGenerateChain ,然后我们应用了 QAGenerateChain 的 apply 方法对 data 中的前5条数据创建了5个“问答对”,由于创建问答集是由 LLM 来自动完成的,因此会涉及到token 成本的问题,所以我们这里出于演示的目的,只对 data 中的前5条数据创建问答集。

new_examples[0]

{‘qa_pairs’: {‘query’: ‘这款全自动咖啡机的尺寸是多少?’, ‘answer’: “大型尺寸为13.8” x 17.3”,中型尺寸为11.5” x 15.2”。”}}

源数据:

data[0]

Document(page_content=”product_name: 全自动咖啡机ndescription: 规格:n大型 – 尺寸:
13.8” x 17.3”。n中型 – 尺寸:11.5” x 15.2”。nn为什么我们热爱它:n这款全自动咖啡机
是爱好者的理想选择。 一键操作,即可研磨豆子并沏制出您喜爱的咖啡。它的耐用性和一致性使它成为家庭和
办公室的理想选择。nn材质与护理:n清洁时只需轻擦。nn构造:n由高品质不锈钢制成。nn其他特
性:n内置研磨器和滤网。n预设多种咖啡模式。n在中国制造。nn有问题? 请随时联系我们的客户服务
团队,他们会解答您的所有问题。”, metadata={‘source’: ‘../data/product_data.csv’,
‘row’: 0})

4.整合测试集

还记得我们前面手动创建的两个问答集吗?现在我们需要将之前手动创建的问答集合并到QAGenerateChain 创建的问答集中,这样在答集中既有手动创建的例子又有 llm 自动创建的例子,这会使我们的测试集更加完善。

接下来我们就需要让之前创建的文档问答链 qa 来回答这个测试集里的问题,来看看 LLM 是怎么回答的吧:

examples += [ v for item in new_examples for k,v in item.items()]
qa.run(examples[0][“query”])

> Entering new RetrievalQA chain…
> Finished chain.

‘高清电视机的护理非常简单。您只需要使用干布清洁即可。避免使用湿布或化学清洁剂,以免损坏电视机的表面。’

这里我们看到 qa 回答了第0个问题:”高清电视机怎么进行护理?” ,这里的第0个问题就是先前我们手动创建的第一个问题,并且我们手动创建的 answer 是:”使用干布清洁。” 这里我们发现问答链 qa 回答的也是“您只需要使用干布清洁即可”,只是它比我们的答案还多了一段说明:“高清电视机的护理非常简单。您只需要使用干布清洁即可。避免使用湿布或化学清洁剂,以免损坏电视机的表面。”

面向开发者的LLM入门课程-人工评估
面向开发者的LLM入门课程-人工评估:人工评估 你想知道 qa 是怎么找到问题的答案的吗?下面让我们打开 debug ,看看 qa 是如何找到问...

嘿,伙伴们,今天我们的AI探索之旅已经圆满结束。关于“面向开发者的LLM入门课程-创建LLM应用”的内容已经分享给大家了。感谢你们的陪伴,希望这次旅程让你对AI能够更了解、更喜欢。谨记,精准提问是解锁AI潜能的钥匙哦!如果有小伙伴想要了解学习更多的AI知识,请关注我们的官网“AI智研社”,保证让你收获满满呦!

微信打赏二维码 微信扫一扫

支付宝打赏二维码 支付宝扫一扫

版权: 转载请注明出处:https://www.ai-blog.cn/2712.html

相关推荐

AI视频-Vidu提示词指南之Prompt关键词(2): 电影风格 以下是整理好的电影风格提示词生成的视频案…

小智头像图片
46

AI视频-Vidu提示词指南之Prompt关键词(1): Vidu Prompt 关键词​ ​ 以“Teddy bear/泰迪熊”为主角…

小智头像图片
213

AI视频-Vidu提示词指南之Prompt基本构成(3): 3.效果示例​ 3.1 概述​ 当提示词遵循主体/场景(主…

小智头像图片
213

AI视频-Vidu提示词指南之Prompt基本构成(2): 2、提示词与画面联想程度的说明​ 为了帮助你更好的…

小智头像图片
213

AI视频-Vidu提示词指南之Prompt基本构成(1): Vidu Prompt 基本构成​ 1、提示词基础架构​ ​ 主体…

小智头像图片
213

AI绘画-即梦ai风格词之基于特定艺术家或流派分类: 基于特定艺术家或流派分类:致敬大师风采​ 想要…

小智头像图片
52

AI绘画-即梦ai风格词之基于视觉风格特征分类: 基于视觉风格特征分类:打造独特的视觉语言​ 通过视…

小智头像图片
213

AI绘画-即梦ai风格词之基于应用场景分类: 基于应用场景分类:为你的创作找到完美定位​ 根据应用场…

小智头像图片
213
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力原创内容

快速提升站内名气成为大牛

扫描二维码

手机访问本站

二维码
vip弹窗图片