LangChain运行开发指南

在AI的开展中,大规模言语模型曾经取得了令人注目的成绩,但是,随之而来的是模型品质和不确定性的疑问。如何权衡和改良模型的品质,不时是咱们面临的一个应战。

为了处置这些疑问,咱们将在这篇文章中,引见LangChain框架和TruLens工具,它们将协助咱们评价模型的品质,提高模型品质,并能够用量化的方法反抗不确定。

什么是TruLens

TruLens是面向神经网络运行的品质评价工具,它可以协助你经常使用反应函数来主观地评价你的基于LLM(言语模型)的运行的品质和效果。反应函数可以协助你以编程的模式评价输入、输入和两边结果的品质,从而放慢和扩展试验评价的范畴。你可以将它用于各种各样的用例,包含问答、检索增强生成和基于代理的运行。

TruLens的外围现实是,你可认为你的运行定义一些反应函数,这些函数可以依据你的运行的目的和希冀,对你的运行的体现启动打分或分类。例如:

TruLens可以让你在开发和测试你的运行的环节中,实时地搜集和剖析你的运行的反应数据,从而协助你发现和处置你的运行的疑问,提高你的运行的品质和效果。你可以经常使用TruLens提供的易用的用户界面,来检查和比拟你的运行的不同版本的反应数据,从而找出你的运行的好处和劣势,以及改良的方向。

如何在LangChain中经常使用TruLens来评价模型输入和检索品质

LangChain作为一种新的言语模型框架,它提供了一种有效的部署和治理大规模言语模型的框架。经常使用LangChain治理模型,不只可以轻松部署和口头模型,还可以繁难地观察模型的外部形态。再联合TruLens的评价工具,咱们就可以对模型的品质启动深化了解和改良。

要在LangChain中经常使用TruLens来评价你的运行,你只有要做两件事:

上方是一个繁难的示例,展现了如何在LangChain中经常使用TruLens来评价一个问答运行:

pip install trulens_eval
# 导入LangChain和TruLensfrom langchain.chains import LLMChainfrom langchain.llms import OpenAIfrom langchain.prompts import PromptTemplatefrom langchain.prompts.chat import ChatPromptTemplate,HumanMessagePromptTemplatefrom trulens_eval import TruChain,Feedback, Huggingface, Tru, OpenAI as TruOpenAIfrom trulens_eval.feedback.provider.langchain import Langchaintru = Tru()# 定义一个问答运行的提醒模板full_prompt = HumanMessagePromptTemplate(prompt=PromptTemplate(template="Provide a helpful response with relevant background information for the following: {prompt}",input_variables=["prompt"],))chat_prompt_template = ChatPromptTemplate.from_messages([full_prompt])# 创立一个LLMChain对象,经常使用llm和chat_prompt_template作为参数llm = OpenAI()chain = LLMChain(llm=llm, prompt=chat_prompt_template, verbose=True)# Initialize Huggingface-based feedback function collection class:# Define a language match feedback function using HuggingFace.hugs = Huggingface()f_lang_match = Feedback(hugs.language_match).on_input_output()# Question/answer relevance between overall question and answer.provider = TruOpenAI()f_qa_relevance = Feedback(provider.relevance).on_input_output()# 经常使用TruChain类来包装chain对象,指定反应函数和运行IDtru_recorder = TruChain(chain,app_id='Chain1_QAApplication',feedbacks=[f_lang_match,f_qa_relevance])# 经常使用with语句来运转chain对象,并记载反应数据with tru_recorder as recording:# 输入一个疑问,获取一个回答chain("What is langchain?")# 检查反应数据tru_record = recording.records[0]# 打印反应数据print("tru_record:",tru_record)# 启动tru展现控制台tru.run_dashboard()

以RAG为例看看TruLens的评价结果

RAG(Retrieval-Augmented Generation)是一种基于LLM的运行,它可以应用检索系统来增强LLM的生成才干。RAG的上班原理是,当给定一个输入时,它会先从一个大规模的常识库中检索出一些关系的文档,而后将这些文档作为LLM的高低文,再经常使用LLM来生成一个输入。RAG可以用于各种生成义务,例如问答、摘要、对话等。

RAG的好处是,它可以应用检索系统来提供LLM所不足的常识和消息,从而提高LLM的生成品质和多样性。RAG的缺陷是,它也或许引入一些失误和幻觉,例如检索出不关系或不准确的文档,或许生成与输入或文档不分歧的输入。

为了评价RAG的品质和效果,咱们可以经常使用TruLens提供的RAG三角形(RAG Triad)的评价方法。RAG三角形是由三个评价目的组成的,区分是:

RAG三角形的评价方法可以让咱们从不同的角度来测验RAG的品质和效果,从而发现和改良RAG的疑问。咱们可以经常使用TruLens来成功RAG三角形的评价方法,详细步骤如下:

上方是一个繁难的示例,展现了如何在LangChain中经常使用TruLens来评价一个RAG问答运行:

# 导入LangChain和TruLensfrom IPython.display import JSON# Imports main tools:from trulens_eval import TruChain, Feedback, Huggingface, Trufrom trulens_eval.schema import FeedbackResulttru = Tru()tru.reset_database()# Imports from langchain to build appimport bs4from langchain import hubfrom langchain.chat_models import ChatOpenAIfrom langchain.document_loaders import WebBaseLoaderfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.schema import StrOutputParserfrom langchain.text_splitter import RecursiveCharacterTextSplitterfrom langchain.vectorstores import Chromafrom langchain_core.runnables import RunnablePassthroughfrom trulens_eval.feedback.provider import OpenAIimport numpy as npfrom trulens_eval.app import Appfrom trulens_eval.feedback import Groundedness# 加载文件loader = WebBaseLoader(web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",),bs_kwargs=dict(parse_notallow=bs4.SoupStrainer(class_=("post-content", "post-title", "post-header"))),)docs = loader.load()# 分词text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)splits = text_splitter.split_documents(docs)# 存入到向量数据库vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings())# 定义一个RAG Chainretriever = vectorstore.as_retriever()prompt = hub.pull("rlm/rag-prompt")llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)def format_docs(docs):return "\n\n".join(doc.page_content for doc in docs)rag_chain = ({"context": retriever | format_docs, "question": RunnablePassthrough()}| prompt| llm| StrOutputParser())# 经常使用TruChain类来包装rag对象,指定反应函数和运行ID# Initialize provider classprovider = OpenAI()# select context to be used in feedback. the location of context is app specific.context = App.select_context(rag_chain)grounded = Groundedness(groundedness_provider=provider)# f_context_relevance, f_groundness, f_answer_relevance 定义反应函数# Define a groundedness feedback functionf_groundedness = (Feedback(grounded.groundedness_measure_with_cot_reasons).on(context.collect()) # collect context chunks into a list.on_output().aggregate(grounded.grounded_statements_aggregator))# Question/answer relevance between overall question and answer.f_qa_relevance = Feedback(provider.relevance).on_input_output()# Question/statement relevance between question and each context chunk.f_context_relevance = (Feedback(provider.qs_relevance).on_input().on(context).aggregate(np.mean))# 经常使用with语句来运转rag对象,并记载反应数据tru_recorder = TruChain(rag_chain,app_id='Chain1_ChatApplication',feedbacks=[f_qa_relevance, f_context_relevance, f_groundedness])with tru_recorder as recording:# 输入一个疑问,获取一个回答,以及检索出的文档llm_response = rag_chain.invoke("What is Task Decomposition?")# 检查反应数据rec = recording.get() # use .get if only one record# 打印反应数据print(rec)# 启动tru展现控制台tru.run_dashboard()

论断

在本文中,咱们引见了如何在LangChain中经常使用TruLens来对LLM启动评价和优化,以及如何应用TruLens的结果来量化和反抗模型的不确定性。咱们经过一个文本生成的义务为例,演示了如何经常使用TruLens来对模型的输入启动测量和量化,以及对模型的行为启动剖析和解释。咱们还分享了一个RAG案例代码,用实践目的说明了TruLens的评价结果。

咱们也等候,未来有更多的工具和方法,可以对LLM启动更有效的评价和优化,以及更好地量化和反抗模型的不确定性。咱们置信,这将有助于推进LLM的开展和运行,以及优化AI言语的水温和价值。

本文转载自​​,作者:

您可能还会对下面的文章感兴趣: