關于大模型格式化輸出問題的深入研究 原創
“ 大模型格式化輸出的原理,第一步告訴大模型我們需要什么樣的格式,第二步按照我們的格式要求去解析大模型的輸出;大模型的輸入與輸出只有一種,那就是文本數據包括格式化的文本數據。”
今天在開發時遇到一個格式化輸出的問題,開發框架使用的是Langchain的格式化解析器PydanticOutputParser;關于Langchain的格式化解析器就不多做介紹了,為了兼容不同的數據格式,Langchain提供了多種不同的解析器,包括StructuredOutputParser(配合ResponseSchema使用),JSONOutputParser,StrOutputParser解析器等。
但輸出解析器的原理也很簡單,首先在提示詞中約束模型的輸出格式,然后獲取模型輸出之后,再把輸出數據轉換成我們所需要的數據。
注意:大模型只接受一種輸入和輸出,那就是文本字符串;我們需要什么格式的數據,需要把這些文本轉換成對應的數據格式。
數據解析器——OutputParser
在上面我們介紹說,大模型只接受一種輸入和輸出,那就是文本格式;雖然大模型的輸出可能看起來很像JSON或XML對象等,但實際山它就是一個字符串。
而我們也都知道,提示詞是一種與大模型交互的手段,但提示詞并不能強制約束大模型要做什么,不要做什么;什么意思呢?
就是說,雖然我們可以在提示詞中要求大模型按照JSON的格式進行輸出,并且指定其輸出的字段;但大模型并不一定會聽你的按照固定的格式,固定的要求進行輸出。
而這就帶來了一個問題,那就是模型沒有按照我們的要求進行輸出,也就是說模型的輸出是錯誤的;這就導致我們無法正常處理輸出數據;這樣也就無法進行下一步處理。

所以,這時我們就需要做一個異常處理,當模型輸出有誤時,我們需要捕獲這個解析異常,注意這里說的是解析異常不是輸出異常;原因就是前面所說的,我們可以要求大模型按照我們需要的格式進行輸出,但大模型并不一定會聽你的;而這時,只有我們解析數據時,才會知道大模型的輸出是否符合我們的標準。
當捕獲這個解析異常之后,我們需要重新調用模型,讓模型再次按照我們要求的格式進行輸出;當然,模型這一次也不一定會聽我們的,因此可能需要幾次重試,才有可能得到我們想要的結果。
為什么這里要專門強調格式化輸出?
原因在于,在構建大模型應用時,我們需要大模型的輸出方便我們的處理,或者讓大模型去自主調用工具,而這些都需要格式化輸出才行;否則,面對完全沒有格式的數據,我們什么都做不了。
而所謂的格式化輸出的原理也很簡單,首先是告訴大模型我們需要什么格式的數據,然后再按照我們的格式要求去解析大模型的輸出。
本文轉載自???AI探索時代??? 作者:DFires

















