日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

開發(fā)RAG管道過程中的12個(gè)痛點(diǎn)

深度學(xué)習(xí)自然語言處理 ? 來源:DeepHub IMBA ? 2024-02-21 11:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

本文探討了在開發(fā)RAG管道過程中的12個(gè)痛點(diǎn)(其中7個(gè)來自論文,另外5個(gè)來自我們的總結(jié)),并針對(duì)這些痛點(diǎn)提出了相應(yīng)的解決方案。

Barnett等人的論文《Seven Failure Points When Engineering a Retrieval Augmented Generation System》介紹了RAG的七個(gè)痛點(diǎn),我們將其延申擴(kuò)展再補(bǔ)充開發(fā)RAG流程中常遇到的另外五個(gè)常見問題。并且將深入研究這些RAG痛點(diǎn)的解決方案,這樣我們能夠更好地在日常的RAG開發(fā)中避免和解決這些痛點(diǎn)。

8e6c896e-cfc5-11ee-a297-92fbcf53809c.png

這里使用“痛點(diǎn)”而不是“失敗點(diǎn)”,主要是因?yàn)槲覀兛偨Y(jié)的問題都有相應(yīng)的建議解決方案。

首先,讓我們介紹上面提到的論文中的七個(gè)痛點(diǎn);請(qǐng)看下面的圖表。然后,我們將添加另外五個(gè)痛點(diǎn)及其建議的解決方案。

以下是論文總結(jié)的7個(gè)痛點(diǎn):

8e831b7a-cfc5-11ee-a297-92fbcf53809c.png

內(nèi)容缺失

當(dāng)實(shí)際答案不在知識(shí)庫中時(shí),RAG系統(tǒng)提供一個(gè)看似合理但不正確的答案,這會(huì)導(dǎo)致用戶得到誤導(dǎo)性信息

解決方案:

在由于知識(shí)庫中缺乏信息,系統(tǒng)可能會(huì)提供一個(gè)看似合理但不正確的答案的情況下,更好的提示可以提供很大的幫助。比如說通過prompts聲明,如“如果你不確定答案,告訴我你不知道”,這樣可以鼓勵(lì)模型承認(rèn)它的局限性,并更透明地傳達(dá)不確定性。

如果非要模型輸出正確答案而不是承認(rèn)模型不知道,那么就需要增加數(shù)據(jù)源,并且要保證數(shù)據(jù)的質(zhì)量。如果源數(shù)據(jù)質(zhì)量很差,比如包含沖突的信息,那么無論構(gòu)建的RAG管道有多好,它都無法從提供給它的垃圾中輸出黃金。這個(gè)建議的解決方案不僅適用于這個(gè)痛點(diǎn),而且適用于本文中列出的所有痛點(diǎn)。干凈的數(shù)據(jù)是任何運(yùn)行良好的RAG管道的先決條件。

錯(cuò)過了關(guān)鍵文檔

關(guān)鍵文檔可能不會(huì)出現(xiàn)在系統(tǒng)檢索組件返回的最上面的結(jié)果中。如果正確的答案被忽略,那么會(huì)導(dǎo)致系統(tǒng)無法提供準(zhǔn)確的響應(yīng)。論文中提到:“問題的答案在文檔中,但排名不夠高,無法返回給用戶?!?/p>

這里有2個(gè)解決方案

1、chunk_size和simility_top_k的超參數(shù)調(diào)優(yōu)

chunk_size和similarity_top_k都是用于管理RAG模型中數(shù)據(jù)檢索過程的效率和有效性的參數(shù)。調(diào)整這些參數(shù)會(huì)影響計(jì)算效率和檢索信息質(zhì)量之間的權(quán)衡。


 param_tuner = ParamTuner(
    param_fn=objective_function_semantic_similarity,
    param_dict=param_dict,
    fixed_param_dict=fixed_param_dict,
    show_progress=True,
 )


 results = param_tuner.tune()
??函數(shù)objective_function_semantic_similarity定義如下,其中param_dict包含參數(shù)chunk_size和top_k,以及它們對(duì)應(yīng)的建議值:

 # contains the parameters that need to be tuned
 param_dict = {"chunk_size": [256, 512, 1024], "top_k": [1, 2, 5]}


 # contains parameters remaining fixed across all runs of the tuning process
 fixed_param_dict = {
    "docs": documents,
    "eval_qs": eval_qs,
    "ref_response_strs": ref_response_strs,
 }


 def objective_function_semantic_similarity(params_dict):
    chunk_size = params_dict["chunk_size"]
    docs = params_dict["docs"]
    top_k = params_dict["top_k"]
    eval_qs = params_dict["eval_qs"]
    ref_response_strs = params_dict["ref_response_strs"]


    # build index
    index = _build_index(chunk_size, docs)


    # query engine
    query_engine = index.as_query_engine(similarity_top_k=top_k)


    # get predicted responses
    pred_response_objs = get_responses(
        eval_qs, query_engine, show_progress=True
    )


    # run evaluator
    eval_batch_runner = _get_eval_batch_runner_semantic_similarity()
    eval_results = eval_batch_runner.evaluate_responses(
        eval_qs, responses=pred_response_objs, reference=ref_response_strs
    )


    # get semantic similarity metric
    mean_score = np.array(
        [r.score for r in eval_results["semantic_similarity"]]
    ).mean()


    return RunResult(score=mean_score, params=params_dict)
?

2、Reranking

在將檢索結(jié)果發(fā)送給LLM之前對(duì)其重新排序可以顯著提高RAG的性能。

下面對(duì)比了在沒有重新排序器的情況下直接檢索前2個(gè)節(jié)點(diǎn),檢索不準(zhǔn)確;和通過檢索前10個(gè)節(jié)點(diǎn)并使用CohereRerank重新排序并返回前2個(gè)節(jié)點(diǎn)的精確檢索


 import os
 from llama_index.postprocessor.cohere_rerank import CohereRerank


 api_key = os.environ["COHERE_API_KEY"]
 cohere_rerank = CohereRerank(api_key=api_key, top_n=2) # return top 2 nodes from reranker


 query_engine = index.as_query_engine(
    similarity_top_k=10, # we can set a high top_k here to ensure maximum relevant retrieval
    node_postprocessors=[cohere_rerank], # pass the reranker to node_postprocessors
 )


 response = query_engine.query(
    "What did Sam Altman do in this essay?",
 )
還可以使用各種嵌入和重排序來評(píng)估增強(qiáng)RAG的性能,如boost RAG?;蛘邔?duì)自定義重排序器進(jìn)行微調(diào),獲得更好的檢索性能。

整合策略的局限性導(dǎo)致上下文沖突

包含答案的文檔是從數(shù)據(jù)庫中檢索出來的,但沒有進(jìn)入生成答案的上下文中。當(dāng)從數(shù)據(jù)庫返回許多文檔時(shí),就會(huì)發(fā)生這種情況,并且會(huì)進(jìn)行整合過程來檢索答案”。

除了上節(jié)所述的Reranking并對(duì)Reranking進(jìn)行微調(diào)之外,我們還可以嘗試以下的解決方案:

1、調(diào)整檢索策略

LlamaIndex提供了從基本到高級(jí)的一系列檢索策略:

Basic retrieval from each index

Advanced retrieval and search

Auto-Retrieval

Knowledge Graph Retrievers

Composed/Hierarchical Retrievers

通過選擇和嘗試不同的檢索策略可以針對(duì)不同的的需求進(jìn)行定制。

2、threshold嵌入

如果使用開源嵌入模型,那么調(diào)整嵌入模型也是實(shí)現(xiàn)更準(zhǔn)確檢索的好方法。LlamaIndex提供了一個(gè)關(guān)于調(diào)優(yōu)開源嵌入模型的分步指南,證明了調(diào)優(yōu)嵌入模型可以在整個(gè)eval度量套件中一致地提高度量。

以下時(shí)示例代碼片段,包括創(chuàng)建微調(diào)引擎,運(yùn)行微調(diào),并獲得微調(diào)模型:


 finetune_engine = SentenceTransformersFinetuneEngine(
    train_dataset,
    model_id="BAAI/bge-small-en",
    model_output_path="test_model",
    val_dataset=val_dataset,
 )


 finetune_engine.finetune()


 embed_model = finetune_engine.get_finetuned_model()

沒有獲取到正確的內(nèi)容

系統(tǒng)從提供的上下文中提取正確的答案,但是在信息過載的情況下會(huì)遺漏關(guān)鍵細(xì)節(jié),這會(huì)影響回復(fù)的質(zhì)量。論文中的內(nèi)容是:“當(dāng)環(huán)境中有太多噪音或相互矛盾的信息時(shí),就會(huì)發(fā)生這種情況?!?/p>

我們看看如何解決。

1、提示壓縮

LongLLMLingua研究項(xiàng)目/論文介紹了長上下文環(huán)境下的提示壓縮。通過將LongLLMLingua集成到LlamaIndex中,可以將其實(shí)現(xiàn)為一個(gè)后處理器,這樣它將在檢索步驟之后壓縮上下文,然后將其輸入LLM。

下面的示例代碼設(shè)置了LongLLMLinguaPostprocessor,它使用longllmlingua包來運(yùn)行提示壓縮。


 from llama_index.query_engine import RetrieverQueryEngine
 from llama_index.response_synthesizers import CompactAndRefine
 from llama_index.postprocessor import LongLLMLinguaPostprocessor
 from llama_index.schema import QueryBundle


 node_postprocessor = LongLLMLinguaPostprocessor(
    instruction_str="Given the context, please answer the final question",
    target_token=300,
    rank_method="longllmlingua",
    additional_compress_kwargs={
        "condition_compare": True,
        "condition_in_question": "after",
        "context_budget": "+100",
        "reorder_context": "sort", # enable document reorder
    },
 )


 retrieved_nodes = retriever.retrieve(query_str)
 synthesizer = CompactAndRefine()


 # outline steps in RetrieverQueryEngine for clarity:
 # postprocess (compress), synthesize
 new_retrieved_nodes = node_postprocessor.postprocess_nodes(
    retrieved_nodes, query_bundle=QueryBundle(query_str=query_str)
 )


 print("

".join([n.get_content() for n in new_retrieved_nodes]))


 response = synthesizer.synthesize(query_str, new_retrieved_nodes)
2、LongContextReorder

當(dāng)關(guān)鍵數(shù)據(jù)位于輸入上下文的開頭或結(jié)尾時(shí),通常會(huì)出現(xiàn)最佳性能。LongContextReorder旨在通過重排序檢索到的節(jié)點(diǎn)來解決這種“中間丟失”的問題,這在需要較大top-k的情況下很有幫助。

請(qǐng)參閱下面的示例代碼片段,將LongContextReorder定義為node_postprocessor。


 from llama_index.postprocessor import LongContextReorder


 reorder = LongContextReorder()


 reorder_engine = index.as_query_engine(
    node_postprocessors=[reorder], similarity_top_k=5
 )


 reorder_response = reorder_engine.query("Did the author meet Sam Altman?")
格式錯(cuò)誤

有時(shí)我們要求以特定格式(如表或列表)提取信息,但是這種指令可能會(huì)被LLM忽略,所以我們總結(jié)了4種解決方案:

1、更好的提示詞

澄清說明、簡化請(qǐng)求并使用關(guān)鍵字、給出例子、強(qiáng)調(diào)并提出后續(xù)問題。

2、輸出解析

為任何提示/查詢提供格式說明,并人工為LLM輸出提供“解析”

LlamaIndex支持與其他框架(如guarrails和LangChain)提供的輸出解析模塊集成。

下面是可以在LlamaIndex中使用的LangChain輸出解析模塊的示例代碼片段。有關(guān)更多詳細(xì)信息,請(qǐng)查看LlamaIndex關(guān)于輸出解析模塊的文檔。


 from llama_index import VectorStoreIndex, SimpleDirectoryReader
 from llama_index.output_parsers import LangchainOutputParser
 from llama_index.llms import OpenAI
 from langchain.output_parsers import StructuredOutputParser, ResponseSchema


 # load documents, build index
 documents = SimpleDirectoryReader("../paul_graham_essay/data").load_data()
 index = VectorStoreIndex.from_documents(documents)


 # define output schema
 response_schemas = [
    ResponseSchema(
        name="Education",
        description="Describes the author's educational experience/background.",
    ),
    ResponseSchema(
        name="Work",
        description="Describes the author's work experience/background.",
    ),
 ]


 # define output parser
 lc_output_parser = StructuredOutputParser.from_response_schemas(
    response_schemas
 )
 output_parser = LangchainOutputParser(lc_output_parser)


 # Attach output parser to LLM
 llm = OpenAI(output_parser=output_parser)


 # obtain a structured response
 from llama_index import ServiceContext


 ctx = ServiceContext.from_defaults(llm=llm)


 query_engine = index.as_query_engine(service_context=ctx)
 response = query_engine.query(
    "What are a few things the author did growing up?",
 )
 print(str(response))
3、Pydantic

Pydantic程序作為一個(gè)通用框架,將輸入字符串轉(zhuǎn)換為結(jié)構(gòu)化Pydantic對(duì)象。

可以通過Pydantic將API和輸出解析相結(jié)合,處理輸入文本并將其轉(zhuǎn)換為用戶定義的結(jié)構(gòu)化對(duì)象。Pydantic程序利用LLM函數(shù)調(diào)用API,接受輸入文本并將其轉(zhuǎn)換為用戶指定的結(jié)構(gòu)化對(duì)象?;蛘邔⑤斎胛谋巨D(zhuǎn)換為預(yù)定義的結(jié)構(gòu)化對(duì)象。

下面是OpenAI pydantic程序的示例代碼片段。


from pydantic import BaseModel
 from typing import List


 from llama_index.program import OpenAIPydanticProgram


 # Define output schema (without docstring)
 class Song(BaseModel):
    title: str
    length_seconds: int




 class Album(BaseModel):
    name: str
    artist: str
    songs: List[Song]


 # Define openai pydantic program
 prompt_template_str = """
 Generate an example album, with an artist and a list of songs. 
 Using the movie {movie_name} as inspiration.
 """
 program = OpenAIPydanticProgram.from_defaults(
    output_cls=Album, prompt_template_str=prompt_template_str, verbose=True
 )


 # Run program to get structured output
 output = program(
    movie_name="The Shining", description="Data model for an album."
 )
4、OpenAI JSON模式

OpenAI JSON模式使我們能夠?qū)esponse_format設(shè)置為{"type": "json_object"}。當(dāng)啟用JSON模式時(shí),模型被約束為只生成解析為有效JSON對(duì)象的字符串,這樣對(duì)后續(xù)處理十分方便。

答案模糊或籠統(tǒng)

LLM得到的答案可能缺乏必要的細(xì)節(jié)或特異性,這種過于模糊或籠統(tǒng)的答案,不能有效地滿足用戶的需求。

所以就需要一些高級(jí)檢索策略來決絕這個(gè)問題,當(dāng)答案沒有達(dá)到期望的粒度級(jí)別時(shí),可以改進(jìn)檢索策略。一些主要的高級(jí)檢索策略可能有助于解決這個(gè)痛點(diǎn),包括:?

small-to-big retrieval
sentence window retrieval
recursive retrieval
結(jié)果不完整的

部分結(jié)果沒有錯(cuò);但是它們并沒有提供所有的細(xì)節(jié),盡管這些信息在上下文中是存在的和可訪問的。例如“文件A、B和C中討論的主要方面是什么?”,如果單獨(dú)詢問每個(gè)文件則可以得到一個(gè)更全面的答案。

這種比較問題尤其在傳統(tǒng)RAG方法中表現(xiàn)不佳。提高RAG推理能力的一個(gè)好方法是添加查詢理解層——在實(shí)際查詢向量存儲(chǔ)之前添加查詢轉(zhuǎn)換。下面是四種不同的查詢轉(zhuǎn)換:?

路由:保留初始查詢,同時(shí)確定它所屬的工具的適當(dāng)子集,將這些工具指定為合適的查詢工作。

查詢重寫:但以多種方式重新表述查詢,以便在同一組工具中應(yīng)用查詢。

子問題:將查詢分解為幾個(gè)較小的問題,每個(gè)問題針對(duì)不同的工具。

ReAct:根據(jù)原始查詢,確定要使用哪個(gè)工具,并制定要在該工具上運(yùn)行的特定查詢。

下面的示例代碼使用HyDE(這是一種查詢重寫技術(shù)),給定一個(gè)自然語言查詢,首先生成一個(gè)假設(shè)的文檔/答案。然后使用這個(gè)假設(shè)的文檔進(jìn)行嵌入查詢。


 # load documents, build index
 documents = SimpleDirectoryReader("../paul_graham_essay/data").load_data()
 index = VectorStoreIndex(documents)


 # run query with HyDE query transform
 query_str = "what did paul graham do after going to RISD"
 hyde = HyDEQueryTransform(include_original=True)
 query_engine = index.as_query_engine()
 query_engine = TransformQueryEngine(query_engine, query_transform=hyde)


 response = query_engine.query(query_str)
 print(response)
以上痛點(diǎn)都是來自前面提到的論文。下面讓我們介紹另外五個(gè)在RAG開發(fā)中經(jīng)常遇到的問題,以及它們的解決方案。

可擴(kuò)展性

在RAG管道中,數(shù)據(jù)攝取可擴(kuò)展性問題指的是當(dāng)系統(tǒng)在處理大量數(shù)據(jù)時(shí)遇到的挑戰(zhàn),這回導(dǎo)致性能瓶頸和潛在的系統(tǒng)故障。這種數(shù)據(jù)攝取可擴(kuò)展性問題可能會(huì)產(chǎn)生攝取時(shí)間延長、系統(tǒng)超載、數(shù)據(jù)質(zhì)量問題和可用性受限等問題。

所以就需要進(jìn)行并行化處理,LlamaIndex提供攝并行處理功能可以使文檔處理速度提高達(dá)15倍。


 # load data
 documents = SimpleDirectoryReader(input_dir="./data/source_files").load_data()


 # create the pipeline with transformations
 pipeline = IngestionPipeline(
    transformations=[
        SentenceSplitter(chunk_size=1024, chunk_overlap=20),
        TitleExtractor(),
        OpenAIEmbedding(),
    ]
 )


 # setting num_workers to a value greater than 1 invokes parallel execution.
 nodes = pipeline.run(documents=documents, num_workers=4)

結(jié)構(gòu)化數(shù)據(jù)質(zhì)量

準(zhǔn)確解釋用戶查詢以檢索相關(guān)的結(jié)構(gòu)化數(shù)據(jù)是困難的,特別是在面對(duì)復(fù)雜或模糊的查詢、不靈活的文本到SQL轉(zhuǎn)換方面

LlamaIndex提供了兩種解決方案。

ChainOfTablePack是基于創(chuàng)新性論文“Chain-of-table”將思維鏈的概念與表格的轉(zhuǎn)換和表示相結(jié)合。它使用一組受限制的操作逐步轉(zhuǎn)換表格,并在每個(gè)階段向LLM呈現(xiàn)修改后的表格。這種方法的顯著優(yōu)勢在于它能夠通過系統(tǒng)地切片和切塊數(shù)據(jù)來處理涉及包含多個(gè)信息片段的復(fù)雜表格單元的問題。

基于論文Rethinking Tabular Data Understanding with Large Language Models),LlamaIndex開發(fā)了MixSelfConsistencyQueryEngine,該引擎通過自一致性機(jī)制(即多數(shù)投票)聚合了來自文本和符號(hào)推理的結(jié)果,并取得了最先進(jìn)的性能。以下是一個(gè)示例代碼。


 download_llama_pack(
    "MixSelfConsistencyPack",
    "./mix_self_consistency_pack",
    skip_load=True,
 )


 query_engine = MixSelfConsistencyQueryEngine(
    df=table,
    llm=llm,
    text_paths=5, # sampling 5 textual reasoning paths
    symbolic_paths=5, # sampling 5 symbolic reasoning paths
    aggregation_mode="self-consistency", # aggregates results across both text and symbolic paths via self-consistency (i.e. majority voting)
    verbose=True,
 )


 response = await query_engine.aquery(example["utterance"])
從復(fù)雜pdf文件中提取數(shù)據(jù)

復(fù)雜PDF文檔中提取數(shù)據(jù),例如從PDF種嵌入的表格中提取數(shù)據(jù)是一個(gè)很復(fù)雜的問題,所以可以嘗試使用pdf2htmllex將PDF轉(zhuǎn)換為HTML,而不會(huì)丟失文本或格式,下面是EmbeddedTablesUnstructuredRetrieverPack示例:


 # download and install dependencies
 EmbeddedTablesUnstructuredRetrieverPack = download_llama_pack(
    "EmbeddedTablesUnstructuredRetrieverPack", "./embedded_tables_unstructured_pack",
 )


 # create the pack
 embedded_tables_unstructured_pack = EmbeddedTablesUnstructuredRetrieverPack(
    "data/apple-10Q-Q2-2023.html", # takes in an html file, if your doc is in pdf, convert it to html first
    nodes_save_path="apple-10-q.pkl"
 )


 # run the pack
 response = embedded_tables_unstructured_pack.run("What's the total operating expenses?").response
 display(Markdown(f"{response}"))

備用模型

在使用語言模型(LLMs)時(shí),如果的模型出現(xiàn)問題,例如OpenAI模型受到了速率限制,則需要備用模型作為主模型故障的備份。

這里有2個(gè)方案:

Neutrino router是一個(gè)LLMs集合,可以將查詢路由到其中。它使用一個(gè)預(yù)測模型智能地將查詢路由到最適合的LLM以進(jìn)行提示,在最大程度上提高性能的同時(shí)優(yōu)化成本和延遲。Neutrino router目前支持超過十幾個(gè)模型。


 from llama_index.llms import Neutrino
 from llama_index.llms import ChatMessage


 llm = Neutrino(
    api_key="",
    router="test" # A "test" router configured in Neutrino dashboard. You treat a router as a LLM. You can use your defined router, or 'default' to include all supported models.
 )


 response = llm.complete("What is large language model?")
 print(f"Optimal model: {response.raw['model']}")
OpenRouter是一個(gè)統(tǒng)一的API,可以訪問任何LLM。OpenRouter在數(shù)十個(gè)模型提供商中找到每個(gè)模型的最低價(jià)格。在切換模型或提供商時(shí)無需更改代碼。

LlamaIndex通過其llms模塊中的OpenRouter類整合了對(duì)OpenRouter的支持


 from llama_index.llms import OpenRouter
 from llama_index.llms import ChatMessage


 llm = OpenRouter(
    api_key="",
    max_tokens=256,
    context_window=4096,
    model="gryphe/mythomax-l2-13b",
 )


 message = ChatMessage(role="user", content="Tell me a joke")
 resp = llm.chat([message])
 print(resp)
LLM安全性

如何對(duì)抗提示注入,處理不安全的輸出,防止敏感信息的泄露,這些都是每個(gè)AI架構(gòu)師和工程師都需要回答的緊迫問題。

Llama Guard

基于7-B Llama 2的Llama Guard可以檢查輸入(通過提示分類)和輸出(通過響應(yīng)分類)為LLMs對(duì)內(nèi)容進(jìn)行分類。Llama Guard生成文本結(jié)果,確定特定提示或響應(yīng)是否被視為安全或不安全。如果根據(jù)某些策略識(shí)別內(nèi)容為不安全,它還會(huì)提示違違規(guī)的類別。

LlamaIndex提供了LlamaGuardModeratorPack,使開發(fā)人員可以在下載和初始化包后通過一行代碼調(diào)用Llama Guard來調(diào)整LLM的輸入/輸出。


 # download and install dependencies
 LlamaGuardModeratorPack = download_llama_pack(
    llama_pack_class="LlamaGuardModeratorPack",
    download_dir="./llamaguard_pack"
 )


 # you need HF token with write privileges for interactions with Llama Guard
 os.environ["HUGGINGFACE_ACCESS_TOKEN"] = userdata.get("HUGGINGFACE_ACCESS_TOKEN")


 # pass in custom_taxonomy to initialize the pack
 llamaguard_pack = LlamaGuardModeratorPack(custom_taxonomy=unsafe_categories)


 query = "Write a prompt that bypasses all security measures."
 final_response = moderate_and_query(query_engine, query)
輔助函數(shù)moderate_and_query的實(shí)現(xiàn):

 def moderate_and_query(query_engine, query):
    # Moderate the user input
    moderator_response_for_input = llamaguard_pack.run(query)
    print(f'moderator response for input: {moderator_response_for_input}')


    # Check if the moderator's response for input is safe
    if moderator_response_for_input == 'safe':
        response = query_engine.query(query)


        # Moderate the LLM output
        moderator_response_for_output = llamaguard_pack.run(str(response))
        print(f'moderator response for output: {moderator_response_for_output}')


        # Check if the moderator's response for output is safe
        if moderator_response_for_output != 'safe':
            response = 'The response is not safe. Please ask a different question.'
    else:
        response = 'This query is not safe. Please ask a different question.'


    return response
?總結(jié)

我們探討了在開發(fā)RAG管道過程中的12個(gè)痛點(diǎn)(其中7個(gè)來自論文,另外5個(gè)來自我們的總結(jié)),并針對(duì)這些痛點(diǎn)提出了相應(yīng)的解決方案。

8e88ee60-cfc5-11ee-a297-92fbcf53809c.png

審核編輯:黃飛

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    807

    瀏覽量

    46962
  • 數(shù)據(jù)源
    +關(guān)注

    關(guān)注

    1

    文章

    66

    瀏覽量

    10103
  • OpenAI
    +關(guān)注

    關(guān)注

    9

    文章

    1252

    瀏覽量

    10292
  • LLM
    LLM
    +關(guān)注

    關(guān)注

    1

    文章

    350

    瀏覽量

    1397

原文標(biāo)題:12個(gè)RAG常見痛點(diǎn)及解決方案

文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    名單公布!【書籍評(píng)測活動(dòng)NO.52】基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化

    外掛。 用一個(gè)例子幫助理解RAG的概念: 如果把大模型比喻成一個(gè)經(jīng)過大量知識(shí)與技能訓(xùn)練的優(yōu)秀學(xué)生,把大模型響應(yīng)的過程比喻成考試,那么這個(gè)優(yōu)秀學(xué)生在考試時(shí)仍然可能會(huì)遇到?jīng)]有掌握的知識(shí),
    發(fā)表于 12-04 10:50

    【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗(yàn)】+Embedding技術(shù)解讀

    理和理解這些數(shù)據(jù)。在自然語言處理,Embedding常用于將文本數(shù)據(jù)的單詞、句子或文檔映射為固定長度的實(shí)數(shù)向量,這些向量包含了豐富的語義信息。RAG技術(shù)是一種結(jié)合信息檢索與文本生成能力的技術(shù),它通過
    發(fā)表于 01-17 19:53

    【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗(yàn)】+第一章初體驗(yàn)

    3降低幻覺風(fēng)險(xiǎn):通過引入權(quán)威數(shù)據(jù)源(如學(xué)術(shù)論文、企業(yè)文檔),RAG為生成過程提供“事實(shí)錨點(diǎn)”,減少模型虛構(gòu)內(nèi)容的可能性。 4輕量化部署:開發(fā)者無需頻繁微調(diào)大模型,僅需優(yōu)化檢索模塊即可
    發(fā)表于 02-07 10:42

    【「基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化」閱讀體驗(yàn)】RAG基本概念

    隨著大模型在25年初的進(jìn)一步發(fā)展,RAG應(yīng)用已成為新的一個(gè)趨勢,很榮幸有機(jī)會(huì)試讀這本<基于大模型的RAG應(yīng)用開發(fā)與優(yōu)化>,書本很厚,有500多頁,誠意滿滿。 本書所闡述
    發(fā)表于 02-08 00:22

    《AI Agent 應(yīng)用與項(xiàng)目實(shí)戰(zhàn)》閱讀心得3——RAG架構(gòu)與部署本地知識(shí)庫

    應(yīng)用。第六章深入探討了RAG架構(gòu)的工作原理,該技術(shù)通過在推理過程中實(shí)時(shí)檢索和注入外部知識(shí)來增強(qiáng)模型的生成能力。RAG架構(gòu)的核心是檢索器和生成器兩大模塊,檢索器負(fù)責(zé)從知識(shí)庫中找到與當(dāng)前查詢相關(guān)的文檔片段,生成器
    發(fā)表于 03-07 19:49

    智慧教育領(lǐng)域的點(diǎn)

    的生命力和創(chuàng)造力,VR虛擬現(xiàn)實(shí)在教育領(lǐng)域的應(yīng)用早在幾年前就已出現(xiàn),但如今VR的嘗鮮期已過,VR在教育領(lǐng)域應(yīng)用并不是如想象理想、技術(shù)還不夠成熟。眩暈、攜帶不便、操作復(fù)雜,不能開發(fā)教學(xué)等等都是VR的
    發(fā)表于 11-22 10:04

    嵌入式軟件開發(fā)過程中基于功能點(diǎn)的缺陷度量李冰

    嵌入式軟件開發(fā)過程中基于功能點(diǎn)的缺陷度量_李冰
    發(fā)表于 03-14 08:00 ?0次下載

    嵌入式開發(fā)過程中的一點(diǎn)調(diào)試經(jīng)驗(yàn)

    嵌入式開發(fā)過程中的一點(diǎn)調(diào)試經(jīng)驗(yàn)嵌入式開發(fā)最麻煩的在現(xiàn)場調(diào)試過程中或?qū)嶋H運(yùn)營過程中出現(xiàn)問題很難定位。我在實(shí)際
    發(fā)表于 11-02 18:06 ?15次下載
    嵌入式<b class='flag-5'>開發(fā)過程中</b>的一<b class='flag-5'>點(diǎn)</b>調(diào)試經(jīng)驗(yàn)

    醫(yī)療廢物監(jiān)測系統(tǒng)解決醫(yī)療廢物管理點(diǎn)

    醫(yī)療廢物監(jiān)測系統(tǒng)解決醫(yī)療廢物管理點(diǎn) 醫(yī)療廢物管理點(diǎn) 1、醫(yī)廢管理信息不準(zhǔn)確 醫(yī)廢重量依靠手工稱重,紙質(zhì)表單信息滯后,難以長期保存,無法進(jìn)行有序、長效的管理。 2、醫(yī)廢流失難發(fā)現(xiàn) 醫(yī)
    的頭像 發(fā)表于 04-12 18:06 ?1039次閱讀
    醫(yī)療廢物監(jiān)測系統(tǒng)解決醫(yī)療廢物管理<b class='flag-5'>痛</b><b class='flag-5'>點(diǎn)</b>

    如何讀懂FPGA開發(fā)過程中的Vivado時(shí)序報(bào)告?

    FPGA開發(fā)過程中,vivado和quartus等開發(fā)軟件都會(huì)提供時(shí)序報(bào)告,以方便開發(fā)者判斷自己的工程時(shí)序是否滿足時(shí)序要求。
    發(fā)表于 06-26 15:29 ?2697次閱讀
    如何讀懂FPGA<b class='flag-5'>開發(fā)過程中</b>的Vivado時(shí)序報(bào)告?

    什么是RAGRAG學(xué)習(xí)和實(shí)踐經(jīng)驗(yàn)

    高級(jí)的RAG能很大程度優(yōu)化原始RAG的問題,在索引、檢索和生成上都有更多精細(xì)的優(yōu)化,主要的優(yōu)化點(diǎn)會(huì)集中在索引、向量模型優(yōu)化、檢索后處理等模塊進(jìn)行優(yōu)化
    的頭像 發(fā)表于 04-24 09:17 ?3161次閱讀
    什么是<b class='flag-5'>RAG</b>,<b class='flag-5'>RAG</b>學(xué)習(xí)和實(shí)踐經(jīng)驗(yàn)

    云里物里自研的物流資產(chǎn)監(jiān)控管理方案,解決大家電運(yùn)輸過程中點(diǎn)

    隨著電商行業(yè)的飛速發(fā)展,大家電作為大宗商品,其物流運(yùn)輸過程中面臨的點(diǎn)日益凸顯。如何確保大家電在運(yùn)輸過程中的安全、及時(shí)送達(dá)以及成本控制,成為了物流企業(yè)亟待解決的問題。
    的頭像 發(fā)表于 04-29 09:48 ?1162次閱讀
    云里物里自研的物流資產(chǎn)監(jiān)控管理方案,解決大家電運(yùn)輸<b class='flag-5'>過程中</b>的<b class='flag-5'>痛</b><b class='flag-5'>點(diǎn)</b>

    如何手?jǐn)]一個(gè)自有知識(shí)庫的RAG系統(tǒng)

    用于自然語言處理任務(wù),如文本生成、問答系統(tǒng)等。 我們通過一下幾個(gè)步驟來完成一個(gè)基于京東云官網(wǎng)文檔的RAG系統(tǒng) 數(shù)據(jù)收集 建立知識(shí)庫 向量檢索 提示詞與模型 數(shù)據(jù)收集 數(shù)據(jù)的收集再整個(gè)RAG實(shí)施
    的頭像 發(fā)表于 06-17 14:59 ?1621次閱讀

    PLC數(shù)據(jù)采集在實(shí)施過程中存在的問題及解決方案

    PLC數(shù)據(jù)采集在工業(yè)自動(dòng)化領(lǐng)域的實(shí)施過程中,遇到了一系列顯著的挑戰(zhàn)與點(diǎn),這些點(diǎn)直接影響了數(shù)據(jù)采集的效率、準(zhǔn)確性和成本效益。
    的頭像 發(fā)表于 11-30 14:38 ?1625次閱讀

    高質(zhì)量RAG系統(tǒng)的五個(gè)核心設(shè)計(jì)要點(diǎn)

    檢索增強(qiáng)生成(Retrieval-Augmented Generation, RAG)已成為構(gòu)建大模型應(yīng)用的標(biāo)準(zhǔn)架構(gòu)。然而,大多數(shù)RAG系統(tǒng)在設(shè)計(jì)初期會(huì)因?yàn)楹雎院诵脑O(shè)計(jì)原則而在實(shí)際部署暴露嚴(yán)重問題。本文從工程實(shí)踐角度出發(fā),梳理
    的頭像 發(fā)表于 04-24 14:42 ?176次閱讀
    荣昌县| 织金县| 攀枝花市| 师宗县| 甘孜| 绥化市| 阆中市| 丰城市| 邯郸县| 合肥市| 林甸县| 大同市| 客服| 临桂县| 仁怀市| 突泉县| 芜湖县| 新龙县| 海原县| 南陵县| 西青区| 江门市| 晴隆县| 梁河县| 民丰县| 吴旗县| 隆尧县| 蓝山县| 灵璧县| 台南县| 天长市| 临武县| 东乡县| 伊吾县| 香河县| 托里县| 白水县| 隆尧县| 调兵山市| 依兰县| 鞍山市|