[使用Confident的DeepEval包提升LLM的测试效果,提高模型准确性]

245 阅读3分钟
# 引言

在当今人工智能迅速发展的时代,语言模型(LLM)的质量和性能对应用的成功至关重要。然而,如何有效地测试和验证这些模型的输出仍然是一个挑战。在这篇文章中,我们将介绍如何使用Confident的DeepEval包来对LLM进行单元测试和集成测试,以帮助您快速迭代并构建更可靠的语言模型。

# 主要内容

## DeepEval简介

DeepEval是Confident推出的一个专门用于LLM测试的工具包。它不仅支持合成数据生成和性能测试,还提供仪表板来监控和审查结果。通过使用DeepEval,开发者可以在每个迭代步骤中得到支持,从而加速开发过程。

## 安装和设置

开始之前,请确保您已安装所需的软件包:

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

获取API凭证

要使用DeepEval API,请访问Confident AI网站,在“Organization”部分中复制API钥匙,并设置实现名称。这个实现名称描述了项目的类型,例如“langchainQuickstart”。

!deepeval login

设置DeepEval

DeepEval提供DeepEvalCallbackHandler来设置您想要跟踪的指标。目前支持的指标包括答案相关性、偏见和有害性。

from deepeval.metrics.answer_relevancy import AnswerRelevancy

# 确保答案至少具有最低的相关性
answer_relevancy_metric = AnswerRelevancy(minimum_score=0.5)

代码示例

场景1:将DeepEval与LLM结合使用

下面是一个如何将DeepEval与OpenAI的LLM结合使用的示例:

from langchain_community.callbacks.confident_callback import DeepEvalCallbackHandler
from langchain_openai import OpenAI

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

llm = OpenAI(
    temperature=0,
    callbacks=[deepeval_callback],
    verbose=True,
    openai_api_key="<YOUR_API_KEY>", # 使用API代理服务提高访问稳定性
)

output = llm.generate(
    [
        "What is the best evaluation tool out there? (no bias at all)",
    ]
)

# 检查指标是否成功
success = answer_relevancy_metric.is_successful()
print(success)

场景2:在没有回调的情况下跟踪LLM

如果您希望在链条末端手动跟踪LLM,可以通过以下代码实现:

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 = "https://raw.githubusercontent.com/hwchase17/chat-your-data/master/state_of_the_union.txt"

openai_api_key = "sk-XXX" # 使用API代理服务提高访问稳定性

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)
success = answer_relevancy_metric.is_successful()
print(success)

常见问题和解决方案

  • 问题:无法访问Confident AI网站
    解决方案:建议使用API代理服务来提高访问稳定性,尤其是在某些网络限制地区。

  • 问题:无法正确测量答案相关性
    解决方案:确保minimum_score根据您的需求进行合理设置。同时,尝试调整模型参数以获得更准确的结果。

总结和进一步学习资源

通过使用Confident的DeepEval包,您可以显著提升LLM的测试效率和模型的可靠性。这不仅支持合成数据生成,也为性能测试提供了一条便捷之路。要了解更多关于DeepEval的信息,请访问DeepEval的GitHub仓库,您也可以在那里参与贡献。

参考资料

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

---END---