Мульты-агентны Сэльф-РАГ: адзынак, перадумаць, зноў выкарыстоўваць
Мульты-агентны Сэльф-RAG: агенты-оценяльнікі і агенты-запітчыкі пераглядаюць отрыманы кантэкст, і калі ён слабы, яны перапісваюць запіт і зноў атрымляюць інфармацыю перад тым, як адпаведзець.
Простыя сістэмы RAG адзначаюць даныя ўсёраз і спакульнуюць. Сістэмы у стылі Self-RAG дадаюць цыклы: адначынаюць, чыя дакументы ўжытковы, ствараюць лепшыя запіты, калі гэта немагчыма, зноў адзначаюць даныя і толькі пасля чаго даюць адказ. Модэль на базе калькуляцыі ролей адкрывае гэтыя цыклы як саўместную працу ролей, а не як адну незрозумелую ланцюговую структуру.
Чаму метод адзначэння даныя ўсёраз не работае ў рэальных сценарыях
Разглянем запіт падтрымкі, у яком сумешаны назвы продуктаў, версіі і нечыткія сімптамы. Першы рэзультат адбору можа быць старым запісам з логу змян. Генератор, які паверыць у гэты рэзультат, будзе звучаць впевнена, але ўсё рав будзе крытычны. Адначынальнік, які можа адхіліць слабы кантэкст, і планавальнік, які можа задаць болей точны дапаможны запіт, ператвараюць RAG у ітэратыўны пошук, а не ў віпадковасць.
Шлях ітэрацый
1-я ітэрацыя — просты RAG. Адборуецца запіт, выбіраюць топ-к элементаў, даёцца адказ. Гэта корыстная базовая модэль; але яна нестойкая пад нечыткасцю.
2-я ітэрацыя — атрыбутаванне дакументаў. Агент, які атрыбутавае, оцінюе кожны фрагмент за ступенем рэлевантнасці і наявнасцю падтрымкі. Нерэлевантны контэнт адхоўваецца до моменту генеравання.
3-я ітэрацыя — стварэнне новых запітоў. Калі атрыбутаванне ёсць слабым, агент запітоў пропонуе альтэрнатывныя запіты, якія нацэлены на нехватную інфармацыю (версія, код кашталку, компонент).
Фінальная ітэрацыя — адзысканне інфармацыі з новымі запітамі. Працюецца знову з расшырэным наборам запітоў, адзыскваецца доказавая інфармацыя, пасля чаго даўаецца адказ з цітатамі.
Эскіз рэалізацыі
Стан
Автэнтычны запіт, кандыдатскія дакументы, атрыбутаванні, дадатковыя запіты і фінальны адказ зберагаюцца ў спяльнай об’екты разам, які чытаюць і запішуць вузлы графа:
- - - - - - - - - - - - - - - - - - - - - - - - -
Overview of US Flight Compensation Policies To get compensation for delayed flights, you should contact your airline via their customer service or go to the customer service desk. At the same time, you should bear in mind that you will only receive compensation if the delay is not weather-related and is within the carrier`s control. According to the US Department of Transportation, US airlines are not required to compensate you if a flight is cancelled or delayed. You can be compensated if you are bumped or moved from an overbooked flight. If your provider cancels your flight less than two weeks before departure and you decide to cancel your trip entirely, you can receive a refund of both pre-paid baggage fees and your plane ticket. There will be no refund if you choose to continue your journey. In the case of a delayed flight, the airline will rebook you on a different flight. According to federal law, you will not be provided with money or other compensation. Comparative Analysis of EU vs. US Flight Compensation Policies
- - - - - - - - - - - - - - - - - - - - - - - - -
(AUTHOR-ADDED NOTE: IMPORTANT, PAY ATTENTION TO THIS)
Short-distance flight delays - if it is up to 1,500 km, you are due 250 Euro compensation.
Medium distance flight delays - for all the flights between 1,500 and 3,500 km, the compensation should be 400 Euro.
Long-distance flight delays - if it is over 3,500 km, you are due 600 Euro compensation. To receive this kind of compensation, the following conditions must be met; Your flight starts in a non-EU member state or in an EU member state and finishes in an EU member state and is organised by an EU airline. Your flight reaches the final destination with a delay that exceeds three hours. There is no force majeure.
- - - - - - - - - - - - - - - - - - - - - - - - -
Compensation policies in the EU and US are not the same, which implies that it is worth knowing more about them. While you can always count on Skycop flight cancellation compensation, you should still get acquainted with the information below.
- - - - - - - - - - - - - - - - - - - - - - - - -
Compensation for flight regulations EU: The EU does regulate flight delay compensation, which is known as EU261. US: According to the US Department of Transportation, every airline has its own policies about what should be done for delayed passengers. Compensation for flight delays EU: Just like in the United States, compensation is not provided when the flight is delayed due to uncontrollable reasons. However, there is a clear approach to compensation calculation based on distance. For example, if your flight was up to 1,500 km, you can receive 250 euros. US: There are no federal requirements. That is why every airline sets its own limits for compensation in terms of length. However, it is usually set at three hours. Overbooking EU: In the EU, they call for volunteers if the flight is overbooked. These people are entitled to a choice of: Re-routing to their final destination at the earliest opportunity. Refund of their ticket cost within a week if not travelling. Re-routing at a later date at the person`s convenience.
Апісанне графа
Вузлы для адаптавання, ацэнкавання, перапісву, паўтарачага адаптавання і стварэння, з умовнымі рэшткамі, якія прыпіняюць перапісв, калі ацэнкі ужо перасяглі заданы порог:
from typing import List, Annotated
from typing_extensions import TypedDict
def append_to_list(original: list, new: list) -> list:
original.append(new)
return original
def combine_list(original: list, new: list) -> list:
return original + new
class GraphState(TypedDict):
"""
Represents the state of our graph.
Attributes:
question: question
generation: LLM generation
new_documents: newly retrieved documents for the current iteration
useful_documents: documents that are considered useful
graded_documents: documents that have been graded
new_queries: newly generated questions
hypothesis: hypothesis
"""
question: str
generation: str
new_documents: List[str]
useful_documents: Annotated[List[str], combine_list]
graded_documents: List[str]
new_queries: Annotated[List[str], append_to_list]
hypothesis: str
from langgraph.graph import END, StateGraph, START
from langgraph.checkpoint.memory import MemorySaver
from IPython.display import Image, display
workflow = StateGraph(GraphState)
# Define the nodes
workflow.add_node("retrieve", retrieve) # retrieve
workflow.add_node("grade_documents", grade_documents) # grade documents
workflow.add_node("generate", generate) # generatae
workflow.add_node("transform_query", transform_query) # transform_query
# Build graph
workflow.add_edge(START, "retrieve")
workflow.add_edge("retrieve", "grade_documents")
workflow.add_conditional_edges(
"grade_documents",
decide_to_generate,
{
"transform_query": "transform_query",
"generate": "generate",
},
)
workflow.add_edge("transform_query", "retrieve")
workflow.add_conditional_edges(
"generate",
grade_generation_v_documents_and_question,
{
"useful": END,
"not supported": "transform_query",
"not useful": "transform_query",
},
)
# Compile
memory = MemorySaver()
app = workflow.compile(checkpointer=memory)
display(Image(app.get_graph(xray=True).draw_mermaid_png()))
Вузлы адаптавання і ацэнкавання застаюцца простымі і практычнымі для тэставання:
from pprint import pprint
config = {"configurable": {"thread_id": str(uuid4())}}
# Run
inputs = {
"question": "how much can I receive if I am denied boarding, for flights from Delhi to Munich?",
}
for output in app.stream(inputs, config):
for key, value in output.items():
# Node
pprint(f"Node '{key}':")
# Optional: print full state at each node
# print(app.get_state(config).values)
pprint("\n---\n")
# Final generation
pprint(value["generation"])
---RETRIEVE---
"Node 'retrieve':"
'\n---\n'
---CHECK DOCUMENT RELEVANCE TO QUESTION---
---GRADE: DOCUMENT NOT RELEVANT---
---GRADE: DOCUMENT RELEVANT---
---GRADE: DOCUMENT NOT RELEVANT---
---GRADE: DOCUMENT NOT RELEVANT---
---ASSESS GRADED DOCUMENTS---
---DECISION: GENERATE---
"Node 'grade_documents':"
'\n---\n'
---GENERATE---
---CHECK HALLUCINATIONS---
'---DECISION: GENERATION IS NOT GROUNDED IN DOCUMENTS, RE-TRY---'
"Node 'generate':"
'\n---\n'
---TRANSFORM QUERY---
"Node 'transform_query':"
'\n---\n'
---RETRIEVE---
"Node 'retrieve':"
'\n---\n'
---CHECK DOCUMENT RELEVANCE TO QUESTION---
---GRADE: DOCUMENT NOT RELEVANT---
---GRADE: DOCUMENT NOT RELEVANT---
---GRADE: DOCUMENT RELEVANT---
---GRADE: DOCUMENT NOT RELEVANT---
---GRADE: DOCUMENT NOT RELEVANT---
---GRADE: DOCUMENT NOT RELEVANT---
---GRADE: DOCUMENT NOT RELEVANT---
---ASSESS GRADED DOCUMENTS---
---DECISION: GENERATE---
"Node 'grade_documents':"
'\n---\n'
---GENERATE---
---CHECK HALLUCINATIONS---
---DECISION: GENERATION IS GROUNDED IN DOCUMENTS---
---GRADE GENERATION vs QUESTION---
---DECISION: GENERATION ADDRESSES QUESTION---
"Node 'generate':"
'\n---\n'
('Based on the context provided, the flight distance from Munich to Delhi is '
'5,931 km, which falls into the long-distance category (over 3,500 km). '
'Therefore, if you are denied boarding on a flight from Delhi to Munich '
'operated by an EU airline, you would be eligible for 600 Euro compensation, '
'provided that:\n'
'1. The flight is operated by an EU airline\n'
'2. There is no force majeure\n'
'3. Other applicable conditions are met\n'
'\n'
"However, it's important to note that this compensation amount is only valid "
'if all the required conditions are met as specified in the regulations.')
Пашырэнне запытанняў і адпрацоўка ў другі раз:
Based on the context provided, the flight distance from Munich to Delhi is
5,931 km, which falls into the long-distance category (over 3,500 km).
Therefore, if you are denied boarding on a flight from Delhi to Munich
operated by an EU airline, you would be eligible for 600 Euro compensation,
provided that:
1. The flight is operated by an EU airline
2. There is no force majeure
3. Other applicable conditions are met
However, it's important to note that this compensation amount is only valid
if all the required conditions are met as specified in the regulations.
print(app.get_state(config).values.get('hypothesis',""))
Фінальная стварэння базуецца толькі на застаўленых дакументах:
--- Output ---
To answer this question accurately, I need to determine:
1. Is this flight operated by an EU airline? (Since Delhi is non-EU and Munich is EU)
2. What is the flight distance between Delhi and Munich? (To determine compensation amount)
3. Are we dealing with a denied boarding situation due to overbooking? (As opposed to delay/cancellation)
From the context, I can find information about compensation amounts based on distance, but I need to verify:
- If the flight meets EU compensation eligibility criteria
- The exact distance between Delhi and Munich to determine which compensation tier applies (250€, 400€, or 600€)
- If denied boarding compensation follows the same amounts as delay compensation
The context doesn't explicitly state compensation amounts specifically for denied boarding, though it mentions overbooking situations in the EU require offering volunteers re-routing or refund options.
Would you like me to proceed with the information available, or would you need additional context about denied boarding compensation specifically?
Компіляцыя і запуск з лімітом рэкурэнцій, каб цыклы не моглі работаць безканечна:
for questions_batch in app.get_state(config).values.get('new_queries',""):
for q in questions_batch:
print(q)
--- Output ---
What is the flight distance between Delhi and Munich?
Does EU denied boarding compensation follow the same amounts as flight delay compensation?
Are there specific compensation rules for denied boarding versus flight delays for flights from non-EU to EU destinations?
What are the compensation rules when flying with non-EU airlines from Delhi to Munich?
What are the specific conditions that qualify as denied boarding under EU regulations?
Вывык
Multi-agent Self-RAG — гэта скорайш адаптаванне, чым магія: адхроніце слабы кантэкст, ставіце лепшыя запітанні, зноў выкарыстоўвайце даны, а пасля толькі гаворыце. Обмежыце колькасць парадоў, фіксуйце рэзультаты і ацэніце, чы не павышае другая спроба адпаведнасць адказу — а не толькі чы дэманстрацыя выглядае актыўней. Храніце фіксатыры ў стабільным стане, мераваце кожны этап окрэма і адмовіцеся ад выпуску на адчуваннях лячна, калі наступны выпуск можа зноў запрацаваць той самы непазначальны спосаб абярэння пад новым назвам. Храніце фіксатыры ў стабільным стане, мераваце кожны этап окрэма і адмовіцеся ад выпуску на адчуваннях лячна, калі наступны выпуск можа зноў запрацаваць той самы непазначальны спосаб абярэння пад новым назвам. Храніце фіксатыры ў стабільным стане, мераваце кожны этап окрэма і адмовіцеся ад выпуску на адчуваннях лячна, калі наступны выпуск можа зноў запрацаваць той самы непазначальны спосаб абярэння пад новым назвам. Храніце фіксатыры ў стабільным стане, мераваце кожны этап окрэма і адмовіцеся ад выпуску на адчуваннях лячна, калі наступны выпуск можа зноў запрацаваць той самы непазначальны спосаб абярэння пад новым назвам.
З’явіцца той самы непазначальны спосаб працявання пад новым назвам. Храніце прыстроі ў стане «зеленага», меравайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на усампэтніх вражэннях, калі наступны выпуск можа знову запрацавіць той самы непазначальны спосаб працявання пад новым назвам. Храніце прыстроі ў стане «зеленага», меравайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на усампэтніх вражэннях, калі наступны выпуск можа знову запрацавіць той самы непазначальны спосаб працявання пад новым назвам. Храніце прыстроі ў стане «зеленага», меравайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на усампэтніх вражэннях, калі наступны выпуск можа знову запрацавіць той самы непазначальны спосаб працявання пад новым назвам. Храніце прыстроі ў стане «зеленага», меравайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на усампэтніх вражэннях, калі наступны выпуск можа знову запрацавіць той самы непазначальны спосаб працявання пад новым назвам. Храніце прыстроі ў стане «зеленага», меравайце кожны этап окрэма і адмовіцеся ад выпуску, спакоюючыся на усампэтніх вражэннях, калі наступны выпуск можа знову запрацавіць той самы непазначальны спосаб працявання пад новым назвам.Зберагачыце прыстроі ў стане „зеленый“, замерайце кожны этап окрэма і адмовіцеся ад выпуску на адной ляхтасе уражання, калі наступны выпуск можа зноў запрацаваць той самы нягласны спосаб працэйнай несправнасці пад новым назвам.Зберагачы трэба заставіць працаваць нормальна, замеры кожнага этапу трэба выканаць окрэма, і не трэба выпускаць продукт на адміністратыўных падставах, калі наступная версія можа зноў стварыць той самы непазначальны спосаб выключэння пад новым назвам.Калібруйце прыстроі, мерайце кожны этап окалечна, і адмовіцеся апрадаваць на адчуваннях лячна, калі наступная версія можа зноў запрацаваць той самы непазначальны спосаб абякання пад новым назвам.Той самы спосаб працявання без адзінаго сігналу працэйскіх нештачакоў, але пад новым назвам. Зберагаюць рэшты прыроднай сілы, вы мераеце кожны этап окалічна і адмовляецеся апускнуць продукт на рынак, спалагаючыся толькі на інтуіцыі, калі наступная версія можа зноў запрацаваць тым самым спосабам без сігналу працэйскіх нештачакоў пад новым назвам. Зберагаюць рэшты прыроднай сілы, вы мераеце кожны этап окалічна і адмовляецеся апускнуць продукт на рынак, спалагаючыся толькі на інтуіцыі, калі наступная версія можа зноў запрацаваць тым самым спосабам без сігналу працэйскіх нештачакоў пад новым назвам. Зберагаюць рэшты прыроднай сілы, вы мераеце кожны этап окалічна і адмовляецеся апускнуць продукт на рынак, спалагаючыся толькі на інтуіцыі, калі наступная версія можа зноў запрацаваць тым самым спосабам без сігналу працэйскіх нештачакоў пад новым назвам. Зберагаюць рэшты прыроднай сілы, вы мераеце кожны этап окалічна і адмовляецеся апускнуць продукт на рынак, спалагаючыся толькі на інтуіцыі, калі наступная версія можа зноў запрацаваць тым самым спосабам без сігналу працэйскіх нештачакоў пад новым назвам. Зберагаюць рэшты прыроднай сілы, вы мераеце кожны этап окалічна і адмовляецеся апускнуць продукт на рынак, спалагаючыся толькі на інтуіцыі, калі наступная версія можа зноў запрацаваць тым самым спосабам без сігналу працэйскіх нештачакоў пад новым назвам. KЗберагаюце прыстроі ў стане «зелены», вы мераеце кожны этап окрэма і адмовляецеся аправляць продукт на адчуваннях лячэнне, калі наступная версія можа зноў запрацаваць той самы безшумны спосаб працявання з багамі пад новым назвам. Зберагаюце прыстроі ў стане «зелены», вы мераеце кожны этап окрэма і адмовляецеся аправляць продукт на адчуваннях лячэнне, калі наступная версія можа зноў запрацаваць той самы безшумны спосаб працявання з багамі пад новым назвам.