亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

搜索

如何正確管理Chainlit中LangChain應(yīng)用的會話狀態(tài)

霞舞
發(fā)布: 2025-10-15 13:02:10
原創(chuàng)
344人瀏覽過

如何正確管理chainlit中l(wèi)angchain應(yīng)用的會話狀態(tài)

本文旨在解決LangChain與Chainlit集成時(shí)常見的`input_variables`配置錯(cuò)誤及`cl.user_session`誤用問題。文章將詳細(xì)解釋如何正確定義提示模板的輸入變量,并著重糾正“UserSession.set() missing 1 required positional argument”這一常見錯(cuò)誤,通過提供代碼示例和最佳實(shí)踐,確保開發(fā)者能夠構(gòu)建穩(wěn)定、高效的會話式AI應(yīng)用。

構(gòu)建會話式AI:LangChain與Chainlit的集成挑戰(zhàn)

在開發(fā)基于大型語言模型(LLM)的會話式AI應(yīng)用時(shí),LangChain提供了強(qiáng)大的鏈?zhǔn)教幚砟芰Γ鳦hainlit則提供了一個(gè)直觀的前端界面,兩者結(jié)合能夠快速構(gòu)建功能豐富的聊天機(jī)器人。然而,在集成過程中,開發(fā)者常會遇到一些關(guān)于提示模板(PromptTemplate)的input_variables配置以及Chainlit會話狀態(tài)管理(cl.user_session)的問題。理解并正確處理這些問題是確保應(yīng)用穩(wěn)定運(yùn)行的關(guān)鍵。

常見集成問題分析

在使用LangChain和Chainlit構(gòu)建檢索增強(qiáng)生成(RAG)應(yīng)用時(shí),以下兩個(gè)問題尤為突出:

1. input_variables與提示模板配置

LangChain的PromptTemplate通過input_variables來定義在渲染模板時(shí)需要填充的動(dòng)態(tài)變量。對于RetrievalQA.from_chain_type,特別是當(dāng)chain_type設(shè)置為"stuff"時(shí),它會期望一個(gè)用于填充檢索到文檔的變量名,默認(rèn)通常是"context"。

用戶遇到的問題: 報(bào)告的錯(cuò)誤信息是"1 validation error for StuffDocumentsChain root document_variable_name context was not found in llm_chain input_variables: ['', 'question']"。 雖然用戶提供的custom_prompt_template和set_custom_prompt函數(shù)中,PromptTemplate明確定義了input_variables = ['context', 'question'],并且模板字符串中也包含Context: {},但這個(gè)錯(cuò)誤提示表明在鏈的內(nèi)部,StuffDocumentsChain未能正確識別或接收到'context'變量。這可能發(fā)生在:

  • chain_type_kwargs中的prompt沒有正確傳遞給StuffDocumentsChain。
  • StuffDocumentsChain內(nèi)部的llm_chain在處理輸入時(shí),其input_variables沒有包含'context'。
  • 或者,這可能是由于其他配置問題導(dǎo)致的連鎖反應(yīng),例如Chainlit會話管理錯(cuò)誤。

代碼示例(用戶原始的PromptTemplate定義,這部分本身是正確的):

custom_prompt_template = """Use the following pieces of information to answer the user's question.
If you don't know the answer, please just say that you don't know the answer, don't try to make up
an answer.

Context: {}
Question: {question}

Only returns the helpful answer below and nothing else.
Helpful answer:

"""

def set_custom_prompt():
    prompt = PromptTemplate(template = custom_prompt_template, input_variables = ['context','question'])
    return prompt
登錄后復(fù)制

2. cl.user_session的錯(cuò)誤使用

cl.user_session是Chainlit提供的一種便捷機(jī)制,用于在用戶與機(jī)器人交互的整個(gè)會話生命周期中存儲和檢索用戶特定的數(shù)據(jù)。正確使用set()和get()方法對于維護(hù)會話狀態(tài)至關(guān)重要。

用戶遇到的問題: 報(bào)告的錯(cuò)誤是"UserSession.set() missing 1 required positional argument: 'value'"。 這個(gè)錯(cuò)誤清晰地指出cl.user_session.set()函數(shù)被錯(cuò)誤地調(diào)用了。

用戶原始的@cl.on_message函數(shù)中的問題代碼:

@cl.on_message
async def main(message):
    chain = cl.user_session.set("chain") # <-- 問題所在
    # ... 后續(xù)代碼
登錄后復(fù)制

在@cl.on_chat_start函數(shù)中,cl.user_session.set('chain', chain)已經(jīng)將chain對象存儲到了會話中。當(dāng)用戶發(fā)送消息時(shí),@cl.on_message函數(shù)需要從會話中獲取這個(gè)已存儲的chain對象,而不是嘗試再次設(shè)置它。cl.user_session.set("chain")只提供了一個(gè)鍵,缺少了要存儲的值,因此導(dǎo)致了missing 1 required positional argument: 'value'的錯(cuò)誤。

解決方案:糾正cl.user_session操作與輸入處理

針對上述問題,核心解決方案在于正確使用cl.user_session以及確保傳遞給LangChain鏈的輸入格式正確。

1. 修正cl.user_session的用法

將@cl.on_message函數(shù)中錯(cuò)誤的set操作改為正確的get操作:

AppMall應(yīng)用商店
AppMall應(yīng)用商店

AI應(yīng)用商店,提供即時(shí)交付、按需付費(fèi)的人工智能應(yīng)用服務(wù)

AppMall應(yīng)用商店56
查看詳情 AppMall應(yīng)用商店

原代碼:

chain = cl.user_session.set("chain")
登錄后復(fù)制

修正后:

chain = cl.user_session.get("chain")
登錄后復(fù)制

通過cl.user_session.get("chain"),我們可以從當(dāng)前用戶的會話中檢索到在@cl.on_chat_start時(shí)已經(jīng)初始化并存儲的LangChain chain對象。

2. 確保傳遞給LangChain鏈的輸入正確

當(dāng)用戶在Chainlit界面輸入消息時(shí),@cl.on_message裝飾器會將用戶消息封裝成一個(gè)cl.Message對象傳遞給main函數(shù)。LangChain鏈通常期望接收一個(gè)字符串作為查詢輸入,而不是整個(gè)cl.Message對象。

原代碼:

res = await chain.acall(message, callbacks = [cb])
登錄后復(fù)制

修正后:

res = await chain.acall(message.content, callbacks = [cb])
登錄后復(fù)制

通過message.content,我們提取了用戶輸入的實(shí)際文本內(nèi)容,并將其傳遞給LangChain鏈進(jìn)行處理。

完整修正后的@cl.on_message函數(shù)

結(jié)合上述兩點(diǎn)修正,@cl.on_message函數(shù)應(yīng)更新為:

import chainlit as cl
# ... 其他導(dǎo)入和函數(shù)定義保持不變 ...

@cl.on_chat_start
async def start():
    chain = qa_bot()
    msg = cl.Message(content="Starting the bot......")    
    await msg.send()
    msg.content = "Hi, Welcome to the Medical Bot. What is your query?"
    await msg.update()
    cl.user_session.set('chain', chain) # 正確設(shè)置chain

@cl.on_message
async def main(message: cl.Message): # 建議明確類型提示
    chain = cl.user_session.get("chain") # 正確獲取chain
    cb = cl.AsyncLangchainCallbackHandler(
        stream_final_answer = True, answer_prefix_tokens = ["FINAL", "ANSWER"]
        )
    cb.answer_reached = True
    # 確保將消息內(nèi)容傳遞給鏈
    res = await chain.acall(message.content, callbacks = [cb]) 
    answer = res["result"]
    sources = res["source_documents"]

    if sources:
        answer += f"\nSources:" + str(sources)
    else:
        answer += f"\nNo Sources Found"

    await cl.Message(content = answer).send()
登錄后復(fù)制

注意事項(xiàng)與最佳實(shí)踐

  1. cl.user_session的生命周期: cl.user_session中的數(shù)據(jù)在單個(gè)用戶會話期間保持不變。當(dāng)用戶關(guān)閉或刷新頁面時(shí),會話結(jié)束,數(shù)據(jù)也會被清除。
  2. input_variables的匹配: 始終確保你的PromptTemplate中的input_variables與LangChain鏈(特別是RetrievalQA這類封裝了多個(gè)組件的鏈)所期望的變量名和數(shù)量完全匹配。對于RAG應(yīng)用,'context'和'question'是常見的必要變量。
  3. 錯(cuò)誤信息解讀: 仔細(xì)閱讀錯(cuò)誤信息是調(diào)試的關(guān)鍵。“missing positional argument”通常指向函數(shù)調(diào)用參數(shù)不匹配;“validation error”則可能與數(shù)據(jù)結(jié)構(gòu)或類型不符有關(guān)。
  4. 逐步調(diào)試: 在集成復(fù)雜系統(tǒng)時(shí),建議分模塊進(jìn)行測試。例如,先確保LangChain鏈本身在沒有Chainlit的情況下能正常工作,然后再集成到Chainlit中。
  5. 類型提示: 在Python函數(shù)中添加類型提示(如message: cl.Message)可以提高代碼的可讀性,并幫助IDE在開發(fā)階段捕獲潛在的類型錯(cuò)誤。

總結(jié)

通過正確區(qū)分cl.user_session.set()和cl.user_session.get()的用途,并確保將cl.Message對象的content屬性傳遞給LangChain鏈,我們可以有效解決在LangChain與Chainlit集成過程中常見的會話管理和輸入處理問題。這些修正不僅能消除運(yùn)行時(shí)錯(cuò)誤,還能使你的會話式AI應(yīng)用更加健壯和用戶友好。

以上就是如何正確管理Chainlit中LangChain應(yīng)用的會話狀態(tài)的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!

最佳 Windows 性能的頂級免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進(jìn)程會占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費(fèi)商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長!
關(guān)注服務(wù)號 技術(shù)交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號