偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

LangChain應(yīng)用開發(fā)指南-TruLens用量化對(duì)抗幻覺(jué) 精華

發(fā)布于 2024-10-16 15:56
瀏覽
0收藏

LangChain應(yīng)用開發(fā)指南-TruLens用量化對(duì)抗幻覺(jué)-AI.x社區(qū)

在AI的發(fā)展中,大規(guī)模語(yǔ)言模型已經(jīng)取得了令人矚目的成果,然而,隨之而來(lái)的是模型質(zhì)量和不確定性的問(wèn)題。如何衡量和改進(jìn)模型的質(zhì)量,一直是我們面臨的一個(gè)挑戰(zhàn)。

為了解決這些問(wèn)題,我們將在這篇文章中,介紹LangChain框架和TruLens工具,它們將幫助我們?cè)u(píng)估模型的質(zhì)量,提高模型質(zhì)量,并能夠用量化的方法對(duì)抗不確定。

什么是TruLens

TruLens是面向神經(jīng)網(wǎng)絡(luò)應(yīng)用的質(zhì)量評(píng)估工具,它可以幫助你使用反饋函數(shù)來(lái)客觀地評(píng)估你的基于LLM(語(yǔ)言模型)的應(yīng)用的質(zhì)量和效果。反饋函數(shù)可以幫助你以編程的方式評(píng)估輸入、輸出和中間結(jié)果的質(zhì)量,從而加快和擴(kuò)大實(shí)驗(yàn)評(píng)估的范圍。你可以將它用于各種各樣的用例,包括問(wèn)答、檢索增強(qiáng)生成和基于代理的應(yīng)用。

TruLens的核心思想是,你可以為你的應(yīng)用定義一些反饋函數(shù),這些函數(shù)可以根據(jù)你的應(yīng)用的目標(biāo)和期望,對(duì)你的應(yīng)用的表現(xiàn)進(jìn)行打分或分類。例如:

  • 定義一個(gè)反饋函數(shù)來(lái)評(píng)估你的問(wèn)答應(yīng)用的輸出是否與問(wèn)題相關(guān),是否有依據(jù),是否有用。
  • 定義一個(gè)反饋函數(shù)來(lái)評(píng)估你的檢索增強(qiáng)生成應(yīng)用的輸出是否符合語(yǔ)法規(guī)則,是否有創(chuàng)造性,是否有邏輯性。
  • 定義一個(gè)反饋函數(shù)來(lái)評(píng)估你的基于代理的應(yīng)用的輸出是否符合道德標(biāo)準(zhǔn),是否有友好性,是否有誠(chéng)實(shí)性。

TruLens可以讓你在開發(fā)和測(cè)試你的應(yīng)用的過(guò)程中,實(shí)時(shí)地收集和分析你的應(yīng)用的反饋數(shù)據(jù),從而幫助你發(fā)現(xiàn)和解決你的應(yīng)用的問(wèn)題,提高你的應(yīng)用的質(zhì)量和效果。你可以使用TruLens提供的易用的用戶界面,來(lái)查看和比較你的應(yīng)用的不同版本的反饋數(shù)據(jù),從而找出你的應(yīng)用的優(yōu)勢(shì)和劣勢(shì),以及改進(jìn)的方向。

如何在LangChain中使用TruLens來(lái)評(píng)估模型輸出和檢索質(zhì)量

LangChain應(yīng)用開發(fā)指南-TruLens用量化對(duì)抗幻覺(jué)-AI.x社區(qū)

LangChain作為一種新的語(yǔ)言模型框架,它提供了一種有效的部署和管理大規(guī)模語(yǔ)言模型的框架。使用LangChain管理模型,不僅可以輕松部署和執(zhí)行模型,還可以方便地觀察模型的內(nèi)部狀態(tài)。再結(jié)合TruLens的評(píng)估工具,我們就可以對(duì)模型的質(zhì)量進(jìn)行深入理解和改進(jìn)。

要在LangChain中使用TruLens來(lái)評(píng)估你的應(yīng)用,你只需要做兩件事:

  1. 在你的LangChain代碼中,導(dǎo)入TruLens,并使用TruChain類來(lái)包裝你的LangChain對(duì)象。TruChain類是一個(gè)裝飾器,它可以讓你的LangChain對(duì)象在運(yùn)行時(shí),自動(dòng)地調(diào)用TruLens的反饋函數(shù),并記錄反饋數(shù)據(jù)。
  2. 在你的TruLens代碼中,指定你想要使用的反饋函數(shù),以及你想要給你的應(yīng)用的ID。你可以使用TruLens提供的內(nèi)置的反饋函數(shù),也可以自定義你自己的反饋函數(shù)。你可以為你的應(yīng)用指定一個(gè)唯一的ID,這樣你就可以在TruLens的用戶界面中,根據(jù)ID來(lái)查找和比較你的應(yīng)用的反饋數(shù)據(jù)。

下面是一個(gè)簡(jiǎn)單的示例,展示了如何在LangChain中使用TruLens來(lái)評(píng)估一個(gè)問(wèn)答應(yīng)用:

pip install trulens_eval

復(fù)制

# 導(dǎo)入LangChain和TruLens
from langchain.chains import LLMChain
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.prompts.chat import ChatPromptTemplate,HumanMessagePromptTemplate
from trulens_eval import TruChain,Feedback, Huggingface, Tru, OpenAI as TruOpenAI
from trulens_eval.feedback.provider.langchain import Langchain

tru = Tru()

# 定義一個(gè)問(wèn)答應(yīng)用的提示模板
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])



# 創(chuàng)建一個(gè)LLMChain對(duì)象,使用llm和chat_prompt_template作為參數(shù)
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類來(lái)包裝chain對(duì)象,指定反饋函數(shù)和應(yīng)用ID
tru_recorder = TruChain(
    chain,
    app_id='Chain1_QAApplication',
    feedbacks=[f_lang_match,f_qa_relevance])


# 使用with語(yǔ)句來(lái)運(yùn)行chain對(duì)象,并記錄反饋數(shù)據(jù)
with tru_recorder as recording:
    # 輸入一個(gè)問(wèn)題,得到一個(gè)回答
    chain("What is langchain?")
    # 查看反饋數(shù)據(jù)
    tru_record = recording.records[0]
    # 打印反饋數(shù)據(jù)
    print("tru_record:",tru_record)
# 啟動(dòng)tru展示控制臺(tái)
tru.run_dashboard()

復(fù)制

以RAG為例看看TruLens的評(píng)估結(jié)果

LangChain應(yīng)用開發(fā)指南-TruLens用量化對(duì)抗幻覺(jué)-AI.x社區(qū)

RAG(Retrieval-Augmented Generation)是一種基于LLM的應(yīng)用,它可以利用檢索系統(tǒng)來(lái)增強(qiáng)LLM的生成能力。RAG的工作原理是,當(dāng)給定一個(gè)輸入時(shí),它會(huì)先從一個(gè)大規(guī)模的知識(shí)庫(kù)中檢索出一些相關(guān)的文檔,然后將這些文檔作為L(zhǎng)LM的上下文,再使用LLM來(lái)生成一個(gè)輸出。RAG可以用于各種生成任務(wù),例如問(wèn)答、摘要、對(duì)話等。

RAG的優(yōu)點(diǎn)是,它可以利用檢索系統(tǒng)來(lái)提供LLM所缺乏的知識(shí)和信息,從而提高LLM的生成質(zhì)量和多樣性。RAG的缺點(diǎn)是,它也可能引入一些錯(cuò)誤和幻覺(jué),例如檢索出不相關(guān)或不準(zhǔn)確的文檔,或者生成與輸入或文檔不一致的輸出。

為了評(píng)估RAG的質(zhì)量和效果,我們可以使用TruLens提供的RAG三角形(RAG Triad)的評(píng)估方法。RAG三角形是由三個(gè)評(píng)估指標(biāo)組成的,分別是:

LangChain應(yīng)用開發(fā)指南-TruLens用量化對(duì)抗幻覺(jué)-AI.x社區(qū)

  • 上下文相關(guān)性(Context Relevance):評(píng)估輸入和檢索出的文檔之間的相關(guān)性,以及文檔之間的一致性。上下文相關(guān)性越高,說(shuō)明檢索系統(tǒng)越能找到與輸入匹配的知識(shí)和信息,從而為L(zhǎng)LM提供更好的上下文。
  • 有根據(jù)性(Groundedness):評(píng)估輸出和檢索出的文檔之間的一致性,以及輸出的可信度。有根據(jù)性越高,說(shuō)明LLM越能利用檢索出的文檔來(lái)生成有依據(jù)的輸出,從而避免產(chǎn)生幻覺(jué)或錯(cuò)誤。
  • 答案相關(guān)性(Answer Relevance):評(píng)估輸出和輸入之間的相關(guān)性,以及輸出的有用性。答案相關(guān)性越高,說(shuō)明LLM越能理解輸入的意圖和需求,從而生成有用的輸出,滿足用戶的目的。

RAG三角形的評(píng)估方法可以讓我們從不同的角度來(lái)檢驗(yàn)RAG的質(zhì)量和效果,從而發(fā)現(xiàn)和改進(jìn)RAG的問(wèn)題。我們可以使用TruLens來(lái)實(shí)現(xiàn)RAG三角形的評(píng)估方法,具體步驟如下:

  1. 在LangChain中,創(chuàng)建一個(gè)RAG對(duì)象,使用RAGPromptTemplate作為提示模板,指定檢索系統(tǒng)和知識(shí)庫(kù)的參數(shù)。
  2. 在TruLens中,創(chuàng)建一個(gè)TruChain對(duì)象,包裝RAG對(duì)象,指定反饋函數(shù)和應(yīng)用ID。反饋函數(shù)可以使用TruLens提供的f_context_relevance, f_groundness, f_answer_relevance,也可以自定義。
  3. 使用with語(yǔ)句來(lái)運(yùn)行RAG對(duì)象,并記錄反饋數(shù)據(jù)。輸入一個(gè)問(wèn)題,得到一個(gè)回答,以及檢索出的文檔。
  4. 查看和分析反饋數(shù)據(jù),根據(jù)RAG三角形的評(píng)估指標(biāo),評(píng)價(jià)RAG的表現(xiàn)。

下面是一個(gè)簡(jiǎn)單的示例,展示了如何在LangChain中使用TruLens來(lái)評(píng)估一個(gè)RAG問(wèn)答應(yīng)用:

# 導(dǎo)入LangChain和TruLens
from IPython.display import JSON

# Imports main tools:
from trulens_eval import TruChain, Feedback, Huggingface, Tru
from trulens_eval.schema import FeedbackResult
tru = Tru()
tru.reset_database()

# Imports from langchain to build app
import bs4
from langchain import hub
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import WebBaseLoader
from langchain.embeddings import OpenAIEmbeddings
from langchain.schema import StrOutputParser
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain_core.runnables import RunnablePassthrough
from trulens_eval.feedback.provider import OpenAI
import numpy as np
from trulens_eval.app import App
from 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)
# 存入到向量數(shù)據(jù)庫(kù)
vectorstore = Chroma.from_documents(documents=splits, embedding=OpenAIEmbeddings(
))
# 定義一個(gè)RAG Chain

retriever = 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類來(lái)包裝rag對(duì)象,指定反饋函數(shù)和應(yīng)用ID
# Initialize provider class
provider = 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 定義反饋函數(shù)
# Define a groundedness feedback function
f_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語(yǔ)句來(lái)運(yùn)行rag對(duì)象,并記錄反饋數(shù)據(jù)
tru_recorder = TruChain(rag_chain,
    app_id='Chain1_ChatApplication',
    feedbacks=[f_qa_relevance, f_context_relevance, f_groundedness])

with tru_recorder as recording:
    # 輸入一個(gè)問(wèn)題,得到一個(gè)回答,以及檢索出的文檔
    llm_response = rag_chain.invoke("What is Task Decomposition?")
    # 查看反饋數(shù)據(jù)
    rec = recording.get() # use .get if only one record
    # 打印反饋數(shù)據(jù)
    print(rec)
# 啟動(dòng)tru展示控制臺(tái)
tru.run_dashboard()

復(fù)制

結(jié)論

在本文中,我們介紹了如何在LangChain中使用TruLens來(lái)對(duì)LLM進(jìn)行評(píng)估和優(yōu)化,以及如何利用TruLens的結(jié)果來(lái)量化和對(duì)抗模型的不確定性。我們通過(guò)一個(gè)文本生成的任務(wù)為例,演示了如何使用TruLens來(lái)對(duì)模型的輸出進(jìn)行測(cè)量和量化,以及對(duì)模型的行為進(jìn)行分析和解釋。我們還分享了一個(gè)RAG案例代碼,用實(shí)際指標(biāo)說(shuō)明了TruLens的評(píng)估結(jié)果。

我們也期待,未來(lái)有更多的工具和方法,可以對(duì)LLM進(jìn)行更有效的評(píng)估和優(yōu)化,以及更好地量化和對(duì)抗模型的不確定性。我們相信,這將有助于推動(dòng)LLM的發(fā)展和應(yīng)用,以及提升AI語(yǔ)言的水平和價(jià)值。

本文轉(zhuǎn)載自 ??AI小智??,作者: AI小智

收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦