關于大模型格式化輸出問題——以及Langchain中的輸出解析器BaseOutputParser 原創
“ 格式化輸出并僅僅對人類友好,更重要的是更利于程序處理,這為模型的應用提供了基礎條件。”
在大模型應用開發過程中有很多人可能沒有注意到一個點——格式化輸出;或者說很多人并沒有重視格式化輸出這個問題,因為在現有的開發框架或者使用大模型的過程中,我們只需要告訴模型進行格式化數據,模型就可以給我們格式化數據。
也因此,很多人忽略了大模型格式化輸出的問題,以及它的技術原理;那么,大模型是怎么實現格式化輸出的呢?

大模型格式化輸出問題
從使用者的角度來說,可能絕大部分人都不會在意模型的格式化輸出問題;但作為一個開發者來說,很多人應該都知道數據格式化的重要性。

但大模型的格式化輸出到底是怎么實現的呢?
格式化輸出是屬于大模型自身的能力范疇,還是通過外部手段約束的一種方式?
其實從模型本身來講,語言模型只預測文本序列,自身并沒有主動“格式化”數據的意識;但這并不意味著模型沒有格式化數據的能力。
還用人舉例來說,讓你寫一篇報告你肯定按照常規的寫法來寫,并不會上來就用某種文檔格式來寫;只有在有明確要求的情況下,才會按照某種格式來寫報告;比如說是word文檔還是PPT形式的幻燈片。
對模型來說也是如此,模型一般情況下會按照序列化的方式來輸出內容;而當你在提示詞中明確告訴它用json或其它格式的形式進行輸出,模型才會使用格式化輸出。
當然,隨著大模型應用的發展,很多場景對格式化輸出有了更高的要求,因此很多模型在格式化輸出方面都進行了專門的強化訓練;這就相當于讓模型專門學習一些格式化數據,當它下次再碰到相似的場景時,就會下意識的使用格式化輸出。
既然模型本身能夠進行格式化輸出,那Langchain中的BaseOutputParser解析器的作用是什么呢?
雖然說經過訓練的模型或者通過提示詞來約束模型輸出格式化數據,但從實際情況來看模型即使輸出格式化的數據,也是以字符串的方式進行數據;而不是直接輸出能夠被程序直接處理的格式化數據。

因此,BaseOutputParser充當了負責橋接文本與結構化數據的橋梁,確保輸出可被程序直接使用。
并且,為了應用的健壯性在輸出解析器中還進行了一些異常處理,當模型輸出不符合要求時,解析器可以捕獲其異常,然后讓模型重新輸出規范化數據或者直接拋出異常,告訴開發者模型輸出異常問題,并優化其輸出結構。
并且,為了方便使用,在Langchain的鏈式調用中可以直接把輸出解析器作為最后一個節點;把模型輸出直接轉換成程序可以直接處理的格式化數據,這樣開發者就不需要關心模型的輸出的結構化問題,只需要關心其業務邏輯即可。
結構化輸出是大模型應用的基礎,沒有結構化輸出大模型應用就無從談起。而且很多模型在迭代或發布的時候都會強調,優化了模型格式化輸出能力。
本文轉載自??AI探索時代?? 作者:DFires

















