精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

多階段工作流加持,高級RAG代理如何實現(xiàn)智能對話與精準(zhǔn)回答 原創(chuàng)

發(fā)布于 2025-7-10 09:22
瀏覽
0收藏

多階段工作流加持,高級RAG代理如何實現(xiàn)智能對話與精準(zhǔn)回答-AI.x社區(qū)

在當(dāng)今數(shù)字化時代,智能問答系統(tǒng)已經(jīng)滲透到我們生活的方方面面,從在線客服到智能語音助手,它們都在努力為我們提供便捷的信息獲取方式。然而,傳統(tǒng)的問答系統(tǒng)在面對復(fù)雜的對話場景時,常常顯得力不從心。今天,就讓我們一起探索如何構(gòu)建一個能夠應(yīng)對復(fù)雜對話的高級RAG(Retrieval-Augmented Generation)代理,讓它具備改寫用戶問題、分類、驗證文檔相關(guān)性等強(qiáng)大功能,為用戶提供更加智能、精準(zhǔn)的回答。

一、為什么需要高級RAG代理

傳統(tǒng)的RAG系統(tǒng)在處理簡單問題時表現(xiàn)尚可,但一旦遇到復(fù)雜的對話場景,比如用戶連續(xù)提出多個相關(guān)問題,或者問題涉及多個領(lǐng)域時,就容易出現(xiàn)回答不準(zhǔn)確甚至無法回答的情況。這是因為傳統(tǒng)系統(tǒng)缺乏對話記憶和智能查詢處理能力。例如,當(dāng)用戶在詢問某個產(chǎn)品的功能后,緊接著問“那它的價格是多少呢?”傳統(tǒng)系統(tǒng)可能就無法準(zhǔn)確理解這個問題的上下文,從而給出不準(zhǔn)確的回答。

為了解決這些問題,我們需要構(gòu)建一個更加智能的高級RAG代理。它能夠通過以下幾個關(guān)鍵功能來提升對話的質(zhì)量和準(zhǔn)確性:

  1. 智能問題改寫:將用戶后續(xù)提出的問題轉(zhuǎn)化為獨立的查詢,使其能夠更好地被系統(tǒng)理解和處理。
  2. 智能主題檢測:確保查詢的問題都在我們的知識領(lǐng)域內(nèi),避免回答與主題無關(guān)的內(nèi)容。
  3. 文檔質(zhì)量評估:在生成回答之前,驗證檢索到的內(nèi)容是否準(zhǔn)確、相關(guān),確保回答的質(zhì)量。
  4. 自適應(yīng)查詢增強(qiáng):當(dāng)初始查詢未能成功時,能夠迭代地改進(jìn)搜索策略,提高檢索的成功率。
  5. 持久對話記憶:在多次交流中保持上下文的連貫性,讓對話更加自然流暢。

接下來,讓我們通過一個實際的場景——構(gòu)建一個技術(shù)支援知識庫,來逐步實現(xiàn)這個高級RAG代理系統(tǒng)。

二、系統(tǒng)架構(gòu)設(shè)計

我們的高級RAG代理采用了復(fù)雜的多階段工作流程,主要包括以下幾個核心組件:

  1. 查詢增強(qiáng)器(Query Enhancer):利用對話歷史改寫問題,使其更適合向量搜索。
  2. 主題驗證器(Topic Validator):判斷查詢是否與我們的知識領(lǐng)域相關(guān)。
  3. 內(nèi)容檢索器(Content Retriever):從知識庫中檢索與問題相關(guān)的文檔。
  4. 相關(guān)性評估器(Relevance Assessor):評估檢索到的文檔的質(zhì)量和相關(guān)性。
  5. 回答生成器(Response Generator):根據(jù)對話歷史和相關(guān)文檔生成上下文相關(guān)的回答。
  6. 查詢優(yōu)化器(Query Optimizer):當(dāng)需要時優(yōu)化搜索查詢,提高檢索效率。

這種架構(gòu)使得系統(tǒng)能夠處理復(fù)雜的對話,同時保持回答的質(zhì)量和相關(guān)性,為用戶提供更加準(zhǔn)確、有用的信息。

三、環(huán)境搭建與知識庫構(gòu)建

(一)環(huán)境搭建

為了快速搭建我們的開發(fā)環(huán)境,我們使用了??uv??這個快速的Python包管理器。以下是具體的搭建步驟:

1.創(chuàng)建并激活虛擬環(huán)境

uv venv rag-env
source rag-env/bin/activate

這一步創(chuàng)建了一個名為??rag-env??的虛擬環(huán)境,并將其激活,為后續(xù)的開發(fā)提供了一個獨立的環(huán)境。

2.安裝所需包

uv pip install \
    langchain \
    langgraph \
    langchain-google-genai \
    langchain-community \
    python-dotenv \
    jupyterlab \
    ipykernel

這里安裝了構(gòu)建RAG代理所需的核心依賴包,包括??langchain???、??langgraph??等,為系統(tǒng)的運行提供了必要的支持。

3.將虛擬環(huán)境注冊為Jupyter內(nèi)核

python -m ipykernel install --user --name=rag-env --display-name "RAG Agent (uv)"

通過這一步,我們可以在Jupyter Notebook或JupyterLab中選擇??RAG Agent (uv)??作為內(nèi)核,方便后續(xù)的開發(fā)和調(diào)試。

4.添加LLM API密鑰: 在項目根目錄下創(chuàng)建一個??.env??文件,并添加你的Gemini API密鑰:

GOOGLE_API_KEY=your_google_gemini_api_key_here

這樣,我們就可以在系統(tǒng)中使用Gemini的高級推理能力來處理復(fù)雜的查詢了。

5.加載依賴

from dotenv import load_dotenv
load_dotenv()

# Core LangChain components
from langchain.schema import Document
from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.vectorstores import Chroma
from langchain_core.prompts import ChatPromptTemplate

# Graph and state management
from typing import TypedDict, List
from langchain_core.messages import BaseMessage, HumanMessage, AIMessage, SystemMessage
from pydantic import BaseModel, Field
from langgraph.graph import StateGraph, END
from langgraph.checkpoint.memory import MemorySaver

這里導(dǎo)入了構(gòu)建系統(tǒng)所需的各種模塊和類,為后續(xù)的功能實現(xiàn)提供了基礎(chǔ)。

(二)知識庫構(gòu)建

為了更好地展示系統(tǒng)的功能,我們構(gòu)建了一個名為“TechFlow Solutions”的技術(shù)支援知識庫。以下是構(gòu)建知識庫的代碼:

# 初始化嵌入模型
embedding_model = HuggingFaceEmbeddings(model_name="all-MiniLM-L6-v2")

# 創(chuàng)建全面的技術(shù)支援知識庫
knowledge_documents = [
    Document(
        page_cnotallow="TechFlow Solutions offers three main service tiers: Basic Support ($29/month) includes email support and basic troubleshooting, Professional Support ($79/month) includes priority phone support and advanced diagnostics, Enterprise Support ($199/month) includes 24/7 dedicated support and custom integrations.",
        metadata={"source": "pricing_guide.pdf", "category": "pricing"},
    ),
    Document(
        page_cnotallow="Our cloud infrastructure services include: Virtual Private Servers starting at $15/month, Managed Databases from $45/month, Content Delivery Network at $0.08/GB, and Load Balancing services at $25/month. All services include 99.9% uptime guarantee.",
        metadata={"source": "infrastructure_pricing.pdf", "category": "services"},
    ),
    Document(
        page_cnotallow="TechFlow Solutions was founded in 2018 by Maria Rodriguez, a former Google engineer with 15 years of experience in cloud architecture. The company has grown from 3 employees to over 150 team members across 12 countries, specializing in enterprise cloud solutions.",
        metadata={"source": "company_history.pdf", "category": "company"},
    ),
    Document(
        page_cnotallow="Our technical support team operates 24/7 for Enterprise customers, business hours (9 AM - 6 PM EST) for Professional customers, and email-only support for Basic customers. Average response times: Enterprise (15 minutes), Professional (2 hours), Basic (24 hours).",
        metadata={"source": "support_procedures.pdf", "category": "support"},
    )
]

# 構(gòu)建向量數(shù)據(jù)庫
vector_store = Chroma.from_documents(knowledge_documents, embedding_model)
document_retriever = vector_store.as_retriever(search_kwargs={"k": 2})

這個知識庫涵蓋了定價、服務(wù)、公司信息、支持流程等多個方面,能夠滿足用戶在技術(shù)支援方面的多種查詢需求。同時,通過為每個文檔添加豐富的元數(shù)據(jù),我們可以更好地組織和過濾文檔,提高檢索的效率和準(zhǔn)確性。

四、核心組件實現(xiàn)

(一)查詢增強(qiáng)器——智能問題改寫

查詢增強(qiáng)器的作用是根據(jù)對話歷史改寫用戶的問題,使其成為一個獨立的、適合向量搜索的查詢。以下是其實現(xiàn)代碼:

def enhance_user_query(state: ConversationState):
    """
    根據(jù)對話歷史改寫用戶問題,創(chuàng)建適合向量搜索的獨立查詢。
    """
    print(f"Enhancing query: {state['current_query'].content}")
    
    # 初始化新查詢處理的狀態(tài)
    state["retrieved_documents"] = []
    state["topic_relevance"] = ""
    state["enhanced_query"] = ""
    state["should_generate"] = False
    state["optimization_attempts"] = 0
    
    # 確保存在對話歷史
    if "conversation_history" not in state or state["conversation_history"] is None:
        state["conversation_history"] = []
    
    # 如果當(dāng)前問題不在對話歷史中,則將其添加進(jìn)去
    if state["current_query"] not in state["conversation_history"]:
        state["conversation_history"].append(state["current_query"])
    
    # 檢查是否存在對話上下文
    if len(state["conversation_history"]) > 1:
        # 提取上下文和當(dāng)前問題
        previous_messages = state["conversation_history"][:-1]
        current_question = state["current_query"].content
        
        # 構(gòu)建上下文感知的提示
        context_messages = [
            SystemMessage(
                cnotallow="""You are an expert query reformulator. Transform the user's question into a standalone, 
                search-optimized query that incorporates relevant context from the conversation history.
                
                Guidelines:
                - Make the question self-contained and clear
                - Preserve the user's intent while adding necessary context
                - Optimize for vector database retrieval
                - Keep the reformulated query concise but comprehensive"""
            )
        ]
        context_messages.extend(previous_messages)
        context_messages.append(HumanMessage(cnotallow=f"Current question: {current_question}"))
        
        # 生成增強(qiáng)后的查詢
        enhancement_prompt = ChatPromptTemplate.from_messages(context_messages)
        llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-exp", temperature=0.1)
        
        formatted_prompt = enhancement_prompt.format()
        response = llm.invoke(formatted_prompt)
        enhanced_question = response.content.strip()
        
        print(f"Enhanced query: {enhanced_question}")
        state["enhanced_query"] = enhanced_question
    else:
        # 對話中的第一個問題 - 直接使用原問題
        state["enhanced_query"] = state["current_query"].content
        print(f"First query - using original: {state['enhanced_query']}")
    
    return state

這個組件通過結(jié)合對話歷史和當(dāng)前問題,生成一個更加清晰、獨立的查詢,提高了問題在向量數(shù)據(jù)庫中的檢索效果,同時保留了用戶原始問題的意圖。

(二)主題驗證器——智能領(lǐng)域分類

主題驗證器的作用是判斷用戶的問題是否在我們的知識領(lǐng)域內(nèi)。以下是其實現(xiàn)代碼:

class TopicRelevance(BaseModel):
    """主題分類的結(jié)構(gòu)化輸出"""
    classification: str = Field(
        descriptinotallow="問題是否與TechFlow Solutions的服務(wù)、定價、公司信息等有關(guān)?回答'RELEVANT'或'IRRELEVANT'"
    )
    confidence: str = Field(
        descriptinotallow="置信度:'HIGH'、'MEDIUM'或'LOW'"
    )

def validate_topic_relevance(state: ConversationState):
    """
    判斷用戶問題是否在我們的知識領(lǐng)域內(nèi)。
    使用增強(qiáng)后的查詢以提高分類準(zhǔn)確性。
    """
    print("Validating topic relevance...")
    
    classification_prompt = SystemMessage(
        cnotallow="""You are a topic classifier for TechFlow Solutions support system.
        
        RELEVANT topics include:
        - TechFlow Solutions services (cloud infrastructure, migration, DevOps)
        - Pricing for any TechFlow Solutions products or services
        - Company information (history, team, locations)
        - Support procedures and response times
        - Security and compliance features
        - Technical specifications and capabilities
        
        IRRELEVANT topics include:
        - General technology questions not specific to TechFlow
        - Other companies' products or services
        - Personal questions unrelated to business
        - Weather, news, or general knowledge queries
        
        根據(jù)包含對話上下文的增強(qiáng)查詢進(jìn)行分類。"""
    )
    
    user_question = HumanMessage(
        cnotallow=f"Enhanced query to classify: {state['enhanced_query']}"
    )
    
    # 創(chuàng)建分類鏈
    classification_chain = ChatPromptTemplate.from_messages([classification_prompt, user_question])
    llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-exp", temperature=0)
    
    structured_llm = llm.with_structured_output(TopicRelevance)
    classifier = classification_chain | structured_llm
    
    result = classifier.invoke({})
    state["topic_relevance"] = result.classification.strip()
    
    print(f"Topic classification: {state['topic_relevance']} (Confidence: {result.confidence})")
    return state

這個組件通過明確定義系統(tǒng)能夠處理的問題范圍,并結(jié)合增強(qiáng)后的查詢進(jìn)行分類,提高了分類的準(zhǔn)確性。同時,它還提供了置信度評分,讓我們對分類結(jié)果有更多的了解。

(三)內(nèi)容檢索器——智能文檔檢索

內(nèi)容檢索器的作用是從知識庫中檢索與問題相關(guān)的文檔。以下是其實現(xiàn)代碼:

def fetch_relevant_content(state: ConversationState):
    """
    使用增強(qiáng)后的查詢從知識庫中檢索文檔。
    """
    print("Fetching relevant documents...")
    
    # 使用增強(qiáng)后的查詢進(jìn)行檢索
    retrieved_docs = document_retriever.invoke(state["enhanced_query"])
    
    print(f"Retrieved {len(retrieved_docs)} documents")
    for i, doc in enumerate(retrieved_docs):
        print(f"   Document {i+1}: {doc.page_content[:50]}...")
    
    state["retrieved_documents"] = retrieved_docs
    return state

這個組件通過向量數(shù)據(jù)庫,根據(jù)增強(qiáng)后的查詢快速檢索出與問題相關(guān)的文檔,為后續(xù)的回答生成提供了基礎(chǔ)。

(四)相關(guān)性評估器——文檔質(zhì)量控制

相關(guān)性評估器的作用是評估檢索到的文檔的質(zhì)量和相關(guān)性。以下是其實現(xiàn)代碼:

class DocumentRelevance(BaseModel):
    """文檔相關(guān)性評估的結(jié)構(gòu)化輸出"""
    relevance: str = Field(
        descriptinotallow="該文檔是否與回答問題相關(guān)?回答'RELEVANT'或'IRRELEVANT'"
    )
    reasoning: str = Field(
        descriptinotallow="簡要說明文檔相關(guān)或不相關(guān)的原因"
    )

def assess_document_relevance(state: ConversationState):
    """
    評估每個檢索到的文檔,確定它是否與回答用戶問題相關(guān)。
    """
    print("Assessing document relevance...")
    
    assessment_prompt = SystemMessage(
        cnotallow="""You are a document relevance assessor. Evaluate whether each document 
        contains information that can help answer the user's question.
        
        A document is RELEVANT if it contains:
        - Direct answers to the question
        - Supporting information that contributes to a complete answer
        - Context that helps understand the topic
        
        A document is IRRELEVANT if it:
        - Contains no information related to the question
        - Discusses completely different topics
        - Provides no value for answering the question
        
        在評估時要嚴(yán)格但公正。"""
    )
    
    llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-exp", temperature=0)
    structured_llm = llm.with_structured_output(DocumentRelevance)
    
    relevant_documents = []
    
    for i, doc in enumerate(state["retrieved_documents"]):
        assessment_query = HumanMessage(
            cnotallow=f"""Question: {state['enhanced_query']}
            
            Document to assess:
            {doc.page_content}
            
            Is this document relevant for answering the question?"""
        )
        
        assessment_chain = ChatPromptTemplate.from_messages([assessment_prompt, assessment_query])
        assessor = assessment_chain | structured_llm
        
        result = assessor.invoke({})
        
        print(f"Document {i+1}: {result.relevance} - {result.reasoning}")
        
        if result.relevance.strip().upper() == "RELEVANT":
            relevant_documents.append(doc)
    
    # 更新狀態(tài),保留相關(guān)文檔
    state["retrieved_documents"] = relevant_documents
    state["should_generate"] = len(relevant_documents) > 0
    
    print(f"Final relevant documents: {len(relevant_documents)}")
    return state

這個組件通過嚴(yán)格評估每個文檔的相關(guān)性,過濾掉不相關(guān)的文檔,確保回答的質(zhì)量和準(zhǔn)確性。同時,它還提供了相關(guān)性評估的原因,讓我們對評估結(jié)果有更深入的了解。

(五)回答生成器——上下文感知的回答創(chuàng)建

回答生成器的作用是根據(jù)對話歷史和相關(guān)文檔生成上下文相關(guān)的回答。以下是其實現(xiàn)代碼:

def generate_contextual_response(state: ConversationState):
    """
    根據(jù)對話歷史和相關(guān)文檔生成最終的回答。
    """
    print("Generating contextual response...")
    
    if "conversation_history" not in state or state["conversation_history"] is None:
        raise ValueError("對話歷史是回答生成所必需的")
    
    # 提取回答生成所需的組件
    conversation_context = state["conversation_history"]
    relevant_docs = state["retrieved_documents"]
    enhanced_question = state["enhanced_query"]
    
    # 創(chuàng)建全面的回答模板
    response_template = """You are a knowledgeable TechFlow Solutions support agent. Generate a helpful, 
    accurate response based on the conversation history and retrieved documents.
    
    Guidelines:
    - Use information from the provided documents to answer the question
    - Maintain conversation context and refer to previous exchanges when relevant
    - Be conversational and helpful in tone
    - If the documents don't fully answer the question, acknowledge limitations
    - Provide specific details when available (prices, timeframes, etc.)
    
    Conversation History:
    {conversation_history}
    
    Retrieved Knowledge:
    {document_context}
    
    Current Question: {current_question}
    
    Generate a helpful response:"""
    
    response_prompt = ChatPromptTemplate.from_template(response_template)
    llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-exp", temperature=0.3)
    
    # 創(chuàng)建回答生成鏈
    response_chain = response_prompt | llm
    
    # 生成回答
    response = response_chain.invoke({
        "conversation_history": conversation_context,
        "document_context": relevant_docs,
        "current_question": enhanced_question
    })
    
    generated_response = response.content.strip()
    
    # 將回答添加到對話歷史中
    state["conversation_history"].append(AIMessage(cnotallow=generated_response))
    
    print(f"Generated response: {generated_response[:100]}...")
    return state

這個組件通過結(jié)合對話歷史和相關(guān)文檔,生成一個既符合上下文又準(zhǔn)確的回答,使對話更加自然流暢。

(六)查詢優(yōu)化器——自適應(yīng)搜索改進(jìn)

查詢優(yōu)化器的作用是在初始檢索未能成功時優(yōu)化搜索查詢。以下是其實現(xiàn)代碼:

def optimize_search_query(state: ConversationState):
    """
    當(dāng)初始檢索未能成功時,優(yōu)化搜索查詢。
    包含循環(huán)預(yù)防機(jī)制,避免無限優(yōu)化循環(huán)。
    """
    print("Optimizing search query...")
    
    current_attempts = state.get("optimization_attempts", 0)
    
    # 防止無限優(yōu)化循環(huán)
    if current_attempts >= 2:
        print("?Maximum optimization attempts reached")
        return state
    
    current_query = state["enhanced_query"]
    
    optimization_prompt = SystemMessage(
        cnotallow="""You are a search query optimizer. The current query didn't retrieve relevant documents.
        
        Create an improved version that:
        - Uses different keywords or synonyms
        - Adjusts the query structure for better matching
        - Maintains the original intent while improving searchability
        - Considers alternative ways to express the same concept
        
        只提供優(yōu)化后的查詢,無需解釋。"""
    )
    
    optimization_request = HumanMessage(
        cnotallow=f"Current query that needs optimization: {current_query}"
    )
    
    optimization_chain = ChatPromptTemplate.from_messages([optimization_prompt, optimization_request])
    llm = ChatGoogleGenerativeAI(model="gemini-2.0-flash-exp", temperature=0.2)
    
    formatted_prompt = optimization_chain.format()
    response = llm.invoke(formatted_prompt)
    optimized_query = response.content.strip()
    
    # 更新狀態(tài)
    state["enhanced_query"] = optimized_query
    state["optimization_attempts"] = current_attempts + 1
    
    print(f"Optimized query (attempt {current_attempts + 1}): {optimized_query}")
    return state

這個組件通過優(yōu)化搜索查詢,提高了檢索的成功率,同時通過限制優(yōu)化嘗試次數(shù),避免了無限循環(huán)的問題。

五、工作流編排與智能路由

為了實現(xiàn)系統(tǒng)的整體功能,我們需要將各個組件按照一定的順序連接起來,并根據(jù)不同的情況做出智能的路由決策。以下是工作流的編排代碼:

def route_by_topic(state: ConversationState):
    """根據(jù)主題相關(guān)性分類進(jìn)行路由"""
    print("Routing based on topic relevance...")
    
    relevance = state.get("topic_relevance", "").strip().upper()
    
    if relevance == "RELEVANT":
        print("   → Proceeding to content retrieval")
        return "fetch_content"
    else:
        print("   → Routing to off-topic handler")
        return "handle_off_topic"

def route_by_document_quality(state: ConversationState):
    """根據(jù)文檔相關(guān)性評估進(jìn)行路由"""
    print("Routing based on document quality...")
    
    optimization_attempts = state.get("optimization_attempts", 0)
    
    if state.get("should_generate", False):
        print("   → Generating response with relevant documents")
        return "generate_response"
    elif optimization_attempts >= 2:
        print("   → Maximum optimization attempts reached")
        return "handle_no_results"
    else:
        print("   → Optimizing query for better results")
        return "optimize_query"

# 邊緣情況的輔助函數(shù)
def handle_off_topic_queries(state: ConversationState):
    """處理超出知識領(lǐng)域的問題"""
    print("Handling off-topic query...")
    
    if "conversation_history" not in state or state["conversation_history"] is None:
        state["conversation_history"] = []
    
    off_topic_response = """我專注于幫助解答有關(guān)TechFlow Solutions服務(wù)、定價和公司信息的問題。 
    您的問題似乎超出了我的專業(yè)領(lǐng)域。 
    
    我可以幫助您了解:
    - 我們的云基礎(chǔ)設(shè)施服務(wù)和定價
    - 支持流程和響應(yīng)時間  
    - 公司信息和團(tuán)隊詳情
    - 安全和合規(guī)特性
    
    您是否有關(guān)于TechFlow Solutions的具體問題需要幫助?"""
    
    state["conversation_history"].append(AIMessage(cnotallow=off_topic_response))
    return state

def handle_no_relevant_results(state: ConversationState):
    """處理在優(yōu)化后仍未找到相關(guān)文檔的情況"""
    print("No relevant results found after optimization...")
    
    if "conversation_history" not in state or state["conversation_history"] is None:
        state["conversation_history"] = []
    
    no_results_response = """抱歉,我在當(dāng)前知識庫中未能找到能夠回答您問題的具體信息。 
    
    這可能是因為:
    - 該信息在我們的文檔中不可用
    - 您的問題可能需要進(jìn)一步明確
    - 您可能需要直接聯(lián)系我們的支持團(tuán)隊
    
    如需立即幫助,您可以聯(lián)系我們的支持團(tuán)隊,郵箱為support@techflow.com,或撥打1-800-TECHFLOW。"""
    
    state["conversation_history"].append(AIMessage(cnotallow=no_results_response))
    return state

通過這些路由函數(shù),我們可以根據(jù)問題的主題相關(guān)性和文檔的質(zhì)量,智能地將問題引導(dǎo)到不同的處理流程中,確保系統(tǒng)能夠高效、準(zhǔn)確地處理各種情況。

六、完整工作流組裝

最后,我們將所有的組件和路由邏輯組裝成一個完整的工作流。以下是組裝代碼:

# 初始化對話記憶
conversation_memory = MemorySaver()

# 創(chuàng)建工作流圖
workflow = StateGraph(ConversationState)

# 添加所有處理節(jié)點
workflow.add_node("enhance_query", enhance_user_query)
workflow.add_node("validate_topic", validate_topic_relevance)
workflow.add_node("handle_off_topic", handle_off_topic_queries)
workflow.add_node("fetch_content", fetch_relevant_content)
workflow.add_node("assess_relevance", assess_document_relevance)
workflow.add_node("generate_response", generate_contextual_response)
workflow.add_node("optimize_query", optimize_search_query)
workflow.add_node("handle_no_results", handle_no_relevant_results)

# 定義工作流連接
workflow.add_edge("enhance_query", "validate_topic")

# 根據(jù)主題相關(guān)性進(jìn)行條件路由
workflow.add_conditional_edges(
    "validate_topic",
    route_by_topic,
    {
        "fetch_content": "fetch_content",
        "handle_off_topic": "handle_off_topic",
    },
)

# 內(nèi)容處理流程
workflow.add_edge("fetch_content", "assess_relevance")

# 根據(jù)文檔質(zhì)量進(jìn)行條件路由
workflow.add_conditional_edges(
    "assess_relevance",
    route_by_document_quality,
    {
        "generate_response": "generate_response",
        "optimize_query": "optimize_query", 
        "handle_no_results": "handle_no_results",
    },
)

# 優(yōu)化循環(huán)
workflow.add_edge("optimize_query", "fetch_content")

# 終止節(jié)點
workflow.add_edge("generate_response", END)
workflow.add_edge("handle_no_results", END)
workflow.add_edge("handle_off_topic", END)

# 設(shè)置入口點
workflow.set_entry_point("enhance_query")

# 編譯工作流
advanced_rag_agent = workflow.compile(checkpointer=conversation_memory)

通過這個完整的工作流,我們的高級RAG代理能夠高效地處理各種復(fù)雜的對話場景,為用戶提供準(zhǔn)確、有用的信息。

七、測試我們的高級RAG代理

現(xiàn)在,讓我們通過幾個測試場景來檢驗我們的系統(tǒng)。以下是測試代碼和結(jié)果:

測試1:超出主題范圍的問題

print("?? Testing Advanced RAG Agent\n")

# 測試1:超出主題范圍的問題
print("=== Test 1: Off-Topic Query ===")
test_input = {"current_query": HumanMessage(cnotallow="What's the weather like today?")}
result = advanced_rag_agent.invoke(
    input=test_input, 
    cnotallow={"configurable": {"thread_id": "test_session_1"}}
)
print(f"Response: {result['conversation_history'][-1].content}\n")

輸出結(jié)果:

Testing Advanced RAG Agent

=== Test 1: Off-Topic Query ===
 Enhancing query: What's the weather like today?
 First query - using original: What's the weather like today?
 Validating topic relevance...
 Topic classification: IRRELEVANT (Confidence: HIGH)
 Routing based on topic relevance...
   → Routing to off-topic handler
 Handling off-topic query...
Response: 我專注于幫助解答有關(guān)TechFlow Solutions服務(wù)、定價和公司信息的問題。 
    您的問題似乎超出了我的專業(yè)領(lǐng)域。 
    
    我可以幫助您了解:
    - 我們的云基礎(chǔ)設(shè)施服務(wù)和定價
    - 支持流程和響應(yīng)時間  
    - 公司信息和團(tuán)隊詳情
    - 安全和合規(guī)特性
    
    您是否有關(guān)于TechFlow Solutions的具體問題需要幫助?

測試2:關(guān)于定價的在主題范圍內(nèi)的問題

# 測試2:關(guān)于定價的在主題范圍內(nèi)的問題
print("=== Test 2: Service Pricing Query ===")
test_input = {"current_query": HumanMessage(cnotallow="What are your support service pricing options?")}
result = advanced_rag_agent.invoke(
    input=test_input,
    cnotallow={"configurable": {"thread_id": "test_session_2"}}
)
print(f"Response: {result['conversation_history'][-1].content}\n")

輸出結(jié)果:

=== Test 2: Service Pricing Query ===
 Enhancing query: What are your support service pricing options?
?? First query - using original: What are your support service pricing options?
?? Validating topic relevance...
???  Topic classification: RELEVANT (Confidence: HIGH)
?? Routing based on topic relevance...
   → Proceeding to content retrieval
?? Fetching relevant documents...
?? Retrieved 2 documents
   Document 1: TechFlow Solutions offers three main service tiers...
   Document 2: Our cloud infrastructure services include: Virtual...
?? Assessing document relevance...
?? Document 1: RELEVANT - The document directly answers the question by listing the names, features, and prices of the support service tiers offered by TechFlow Solutions.
?? Document 2: IRRELEVANT - The document describes pricing options for cloud infrastructure services, not support services. Therefore, it's not relevant to the question about support service pricing.
? Final relevant documents: 1
?? Routing based on document quality...
   → Generating response with relevant documents
?? Generating contextual response...
?? Generated response: We have three support service tiers available. Basic Support is $29 per month and includes email sup...
Response: We have three support service tiers available. Basic Support is $29 per month and includes email support and basic troubleshooting. Professional Support is $79 per month, providing priority phone support and advanced diagnostics. Finally, Enterprise Support, at $199 per month, includes 24/7 dedicated support and custom integrations.

通過這兩個測試,我們可以看到我們的高級RAG代理能夠準(zhǔn)確地處理不同類型的用戶問題,無論是超出主題范圍的問題,還是在主題范圍內(nèi)的復(fù)雜問題,都能給出準(zhǔn)確、有用的回答。

八、總結(jié)

我們成功構(gòu)建了一個能夠處理復(fù)雜對話的高級RAG代理。這個系統(tǒng)通過多個AI技術(shù)的協(xié)同工作,實現(xiàn)了更加智能、上下文感知、可靠的對話AI。關(guān)鍵的創(chuàng)新點包括:

  1. 上下文感知的問題改寫:使對話更加自然流暢。
  2. 多層質(zhì)量控制:通過分類和分級確保回答的質(zhì)量。
  3. 迭代改進(jìn)檢索:提高檢索的成功率。
  4. 強(qiáng)大的工作流管理:具備完善的錯誤處理機(jī)制。

這個架構(gòu)為構(gòu)建能夠處理復(fù)雜、多輪對話的生產(chǎn)級RAG應(yīng)用提供了堅實的基礎(chǔ),能夠在保持高質(zhì)量和相關(guān)性的同時,為用戶提供準(zhǔn)確、有用的信息。


本文轉(zhuǎn)載自????Halo咯咯????    作者:基咯咯


?著作權(quán)歸作者所有,如需轉(zhuǎn)載,請注明出處,否則將追究法律責(zé)任
標(biāo)簽
收藏
回復(fù)
舉報
回復(fù)
相關(guān)推薦
久久久9色精品国产一区二区三区| 欧美成人影院| 国产成人三级在线观看| 欧美激情2020午夜免费观看| 91九色蝌蚪porny| 一区二区精品伦理...| 国产人成一区二区三区影院| 91网站在线看| 日韩激情在线播放| 精品久久成人| 欧美日韩激情一区二区三区| 超碰人人爱人人| 天堂av网在线| 狠狠色狠狠色合久久伊人| 欧美国产日韩在线| 丰腴饱满的极品熟妇| 国产精品久久久久久久久久久久久久久| 亚洲综合色噜噜狠狠| 玛丽玛丽电影原版免费观看1977 | 亚洲激情五月婷婷| 久热这里只精品99re8久 | 日韩一级黄色片| 色欲av无码一区二区人妻| 2021av在线| va亚洲va日韩不卡在线观看| 成人精品一区二区三区电影黑人| 国产精品视频久久久久久久| 91精品精品| 亚洲欧美精品一区二区| 中文字幕乱码在线人视频| 美女100%一区| 亚洲成人动漫一区| 韩国黄色一级大片| www日韩tube| 91色.com| 国产在线精品日韩| www.香蕉视频| 久久aⅴ国产欧美74aaa| 日本精品在线视频| 日韩欧美不卡视频| 欧美精品偷拍| 久久精品这里热有精品| 亚洲av熟女国产一区二区性色| 国产精品男女| 欧美日韩中文精品| 男人舔女人下面高潮视频| av在线私库| 亚洲精品久久7777| 中文字幕在线亚洲精品| av免费观看一区二区| 久久新电视剧免费观看| 免费试看一区| 亚州男人的天堂| 成人国产精品免费网站| 96久久精品| 国产成人麻豆精品午夜在线| 韩国av一区二区三区在线观看| 国产97在线亚洲| 人妻 日韩精品 中文字幕| 国产欧美91| 韩日精品中文字幕| 日本三级视频在线| 伊人激情综合| 97精品国产97久久久久久| 国产精品99re| 国产婷婷精品| 日本欧美一级片| 中文字幕高清在线免费播放| 麻豆91精品| 国产精品久久久久av| 国产成人自拍偷拍| 免费在线看成人av| 国产美女被下药99| 国产精品亚洲欧美在线播放| 国产一区二区在线看| 91超碰在线免费观看| 亚洲第一天堂网| 99视频国产精品| 久久久久久久久久久久久久久久av | 欧美成人久久| 欧美激情一区二区三级高清视频| 久久久久久久中文字幕| 亚洲福利免费| 秋霞av国产精品一区| 波多野结衣一区二区三区四区| 日韩成人伦理电影在线观看| 成人欧美一区二区三区在线湿哒哒 | 日批免费观看视频| 天堂成人娱乐在线视频免费播放网站 | 影音先锋亚洲电影| 在线成人直播| 久久成人免费视频| 久久久精品国产sm调教网站| 99国产成+人+综合+亚洲欧美| 欧美中文在线视频| 一起草av在线| 波多野结衣中文字幕一区| 欧洲精品国产| 黄色片网站在线观看| 亚洲成人动漫一区| 最新国产黄色网址| 欧美日韩导航| 久久精品久久久久久| 日韩福利片在线观看| 美女视频一区二区| 国产丝袜不卡| 免费的黄网站在线观看| 午夜久久久影院| 加勒比av中文字幕| 日本欧美三级| 欧美麻豆久久久久久中文| 特级西西444www大精品视频免费看| 蜜臀精品一区二区三区在线观看 | 男人天堂av在线播放| 国产另类ts人妖一区二区| 久久精品国产精品青草色艺 | 国产精品色哟哟| www污在线观看| 精品久久在线| 亚洲精品一区二三区不卡| 亚洲天堂黄色片| 奇米777欧美一区二区| 国产欧美日韩伦理| www视频在线看| 欧美在线观看18| 在线精品视频播放| 911精品美国片911久久久| 国产99在线|中文| 人妻与黑人一区二区三区| 国产精品美女久久久久久久久久久 | 搞黄视频在线观看| 午夜日韩在线电影| 伊人av在线播放| 五月激情综合| 国产玖玖精品视频| 国产免费永久在线观看| 精品日本高清在线播放 | 972aa.com艺术欧美| 91麻豆天美传媒在线| 欧美国产日韩电影| 亚洲精品天天看| 国产成人在线播放视频| 国产成人在线免费| 五月天综合婷婷| 亚洲伊人精品酒店| 色系列之999| 中文字幕+乱码+中文字幕明步| 国产亚洲成aⅴ人片在线观看| 国产二级片在线观看| 粉嫩的18在线观看极品精品| 欧美激情第1页| 亚洲美女综合网| 亚洲综合激情网| 中文字幕1区2区| 欧美午夜一区| 国产精品久久九九| av福利在线导航| 亚洲成人在线网| 日韩av一二三区| ww久久中文字幕| 国产精品-区区久久久狼| 亚洲区小说区| 国产精品高清在线| 成人精品一区二区三区校园激情 | 蜜月aⅴ免费一区二区三区| 国产一区二区三区四区视频| 国产精品传媒入口麻豆| 肉色超薄丝袜脚交| 国户精品久久久久久久久久久不卡| av日韩中文字幕| 九色porny视频在线观看| 日韩精品极品毛片系列视频| 精品成人无码久久久久久| 中文字幕免费观看一区| 国产成年人视频网站| 亚洲精品国产首次亮相| 国产精品av一区| 少妇淫片在线影院| 国产亚洲欧美日韩一区二区| 一区二区不卡视频在线观看| 亚洲精选在线视频| 国产人妻黑人一区二区三区| 免费亚洲视频| 三年中国中文在线观看免费播放| 亚洲国产aⅴ精品一区二区| 97久久伊人激情网| 国产一二在线观看| 91精品国产全国免费观看| 久久露脸国语精品国产91| 久久精品亚洲麻豆av一区二区 | 日韩福利在线| 日韩一区中文| 欧美日本亚洲视频| 日本精品专区| 69堂成人精品免费视频| 国产无遮挡又黄又爽在线观看| 久久网站热最新地址| 亚洲美女性囗交| 亚洲人成人一区二区三区| 日韩视频在线观看国产| 1204国产成人精品视频| 国产成人午夜视频网址| 成人免费网址| 亚洲欧美中文日韩在线v日本| 国产男男gay网站| 日韩欧美福利视频| 日韩在线观看视频一区二区| 久久精品在线免费观看| 中文字幕av一区二区三区人妻少妇 | 国产小视频免费| 欧美精品尤物在线观看| 高清视频在线观看一区| 天堂久久一区| 热久久这里只有| 女人黄色免费在线观看| 色吧影院999| 欧美日韩伦理片| 精品美女一区二区三区| 亚洲综合精品国产一区二区三区 | 日韩在线视频观看| 同心难改在线观看| 日韩欧美一卡二卡| 亚洲视频在线观看免费视频| 欧美视频在线免费| 国产亚洲精品久久久久久无几年桃 | 欧美精选午夜久久久乱码6080| 日本一区二区欧美| 亚洲人成影院在线观看| 亚洲一二三精品| 久久免费偷拍视频| 在线免费观看污视频| 国产成人精品亚洲日本在线桃色| 污污网站在线观看视频| 日本亚洲免费观看| 欧美 日韩精品| 亚洲综合激情| 内射国产内射夫妻免费频道| 欧美日韩国产高清| 国产又大又长又粗又黄| 久久一级电影| 亚洲欧洲国产精品久久| 九九精品在线| 欧美日韩在线精品一区二区三区| 日本在线中文字幕一区| 国产精品一 二 三| 爱爱精品视频| 国产精品一区二区三区在线观| 日韩三级网址| av免费精品一区二区三区| 亚洲精品国产九九九| 9a蜜桃久久久久久免费| 亚洲无线观看| 国产精品久久久久av福利动漫| 亚洲一区二区三区四区电影| 91嫩草在线| 国产成人夜色高潮福利影视| 国产在线精品一区二区中文| 久久九九热re6这里有精品| 国产精品亚洲综合| 校花撩起jk露出白色内裤国产精品 | 丁香花在线影院观看在线播放| 欧美午夜免费影院| 国产96在线 | 亚洲| 亚久久调教视频| 天堂中文视频在线| 久久精品99国产精品| 男女污污视频网站| 国产成人av电影在线| 又色又爽又黄18网站| 99亚偷拍自图区亚洲| 亚洲av无码一区二区三区观看| 久久久蜜桃精品| 影音先锋男人在线| 国产精品国产自产拍高清av| 青花影视在线观看免费高清| 亚洲自拍偷拍欧美| 日韩 欧美 中文| 日本道在线观看一区二区| 中文字幕日韩三级| 日韩一级精品视频在线观看| 婷婷综合激情网| 中文字幕亚洲天堂| 亚洲综合图区| 欧洲中文字幕国产精品| 亚洲国产伊人| 国产精品自拍首页| 不卡av一区二区| 日韩视频一二三| 香蕉久久a毛片| 天天操天天干天天做| eeuss影院一区二区三区| 中文字幕被公侵犯的漂亮人妻| 亚洲欧美怡红院| 日本视频www| 欧美日韩国产综合一区二区三区| 精品人妻一区二区三区日产乱码 | 岛国视频免费在线观看| 欧美成人手机在线| www.成人爱| 99视频免费观看| 精品久久成人| 青青青在线观看视频| 日本伊人精品一区二区三区观看方式| 香蕉网在线视频| 国产女主播一区| 国产精品111| 欧美丰满一区二区免费视频| 成人久久久精品国产乱码一区二区 | 要久久电视剧全集免费 | 亚洲精品护士| 欧美成人三级在线播放| 99精品在线观看视频| 麻豆网址在线观看| 一本色道**综合亚洲精品蜜桃冫| 国产亲伦免费视频播放| 亚洲一级片在线看| caoporn视频在线| 91色琪琪电影亚洲精品久久| 性欧美xxxx免费岛国不卡电影| 欧美日韩午夜爽爽| 美日韩一级片在线观看| 波多野结衣av在线免费观看| 一区二区久久久久久| 一级特黄aa大片| 国产亚洲xxx| 亚洲同志男男gay1069网站| 97se亚洲综合在线| 国产精品毛片久久| 激情五月婷婷久久| 91蝌蚪porny九色| 久久视频免费在线观看| 日韩欧美亚洲一区二区| 午夜在线观看视频| 国产精品美女久久久免费| 国产精品嫩草影院在线看| 欧美,日韩,国产在线| 成人午夜av电影| 久久久综合久久| 日韩视频一区二区| 亚洲91av| 97se在线视频| 国产精品av久久久久久麻豆网| 国产精品久久久久久久99| 中文字幕一区二区三区乱码在线| 国产精品露脸视频| 在线免费看av不卡| 天堂久久午夜av| 午夜精品短视频| 免费成人在线视频观看| 亚洲图片第一页| 欧美日韩aaaaaa| 动漫一区在线| 999视频在线观看| 欧美一区高清| 亚洲国产精品狼友在线观看| 亚洲国产乱码最新视频 | 成人一级黄色片| 国产在线视频99| 亚洲国产三级网| 国产伦精品一区二区三区视频金莲| 欧美高清视频一区二区三区在线观看| 久久国产精品毛片| 欧美 日韩 国产 成人 在线观看| 在线欧美一区二区| 2019中文字幕在线视频| 91网站在线免费观看| 激情欧美亚洲| a级在线观看视频| 欧美又粗又大又爽| 黄网站免费在线播放| 成人在线视频电影| 亚洲一区不卡| 日本美女bbw| 91精品国产综合久久久久久 | 欧美一区亚洲一区| av中文一区| 久久精品一卡二卡| 亚洲h动漫在线| 国产日本在线视频| 成人在线播放av| 亚洲午夜视频| 非洲一级黄色片| 欧美一区二区三区小说| av丝袜在线| 亚洲精品9999| 粉嫩绯色av一区二区在线观看| 欧美另类一区二区| www.美女亚洲精品| av日韩精品| 亚洲性生活网站| 亚洲尤物视频在线| 极品美乳网红视频免费在线观看| 国产日韩av在线| 日韩一级免费| 乱老熟女一区二区三区| 亚洲成色777777女色窝| 欧美啪啪网站| 91好吊色国产欧美日韩在线| 国产精品久久免费看| 午夜视频免费看|