大模型格式化輸出問題——基于Langchain的格式化輸出 原創
“ 大模型只能輸出文本數據,需要通過轉換才能變成我們需要的數據對象。”
在大模型的應用場景中,格式化輸出是一個非常重要的環節;特別是對Agent智能體來說,沒有格式化輸出,智能體就是空中樓閣。
但從技術的角度來說,文本類模型的輸出只有一種格式,那就是文本數據,json也是文本數據的一種格式;模型本身無法生成類似于json對象,python對象等格式的數據;因此,雖然我們可以約束模型按照json格式進行輸出,但它本質上輸出的只是json字符串,而不是json對象。

大模型的格式化輸出
基于大模型只能輸出字符串的前提,那么我們怎么約束大模型的輸出呢?
在當今的程序開發領域,json格式是主流的數據傳輸格式;因此,一般情況下,我們和大模型的交互也是通過json串的形式來實現;但大模型本身又沒有格式化輸出。
在之前的文章中有提到過,在大模型應用中,唯一能和大模型直接打交道的角色只有一個——那就是提示詞。
因此,一般情況下我們都會在提示詞中約束大模型的輸出格式,也就是告訴大模型要按照什么樣的格式進行輸出;這樣的好處是有助于我們的程序處理;當然,現在的模型為了方便進行開發,部分模型也專門針對json格式進行訓練或微調。

所以,我們現在知道可以通過提示詞的方式告訴模型,可以使用json格式進行通訊;但怎么把大模型輸出的json字符串轉換成我們可以直接使用的對象,以及由于大模型本身的不穩定性,導致偶爾模型的輸出不完全符合我們要求的json格式。這個時候我們應該怎么處理?
所以,這里就涉及到另一個問題——怎么解析大模型的輸出,也就是輸出解析器的問題。輸出解析器的幾個核心目標如下:
核心目標
- 格式化輸出:指導 LLM 按照特定格式(如 JSON、XML)生成文本。
- 解析結果:將 LLM 的文本輸出解析為結構化對象(如 Python 對象)。
- 錯誤處理:提供容錯機制(如重試、自動修復)。
輸出解析器不但扮演著把文本數據解析成結構化對象的橋梁,同時還需要提供怎么格式化模型輸出的問題,也就是指導大模型按照特定的格式進行文本輸出;同時,為了解決模型本身的不確定性,同時還需要提供容錯機制。

所以,怎么實現一個輸出解析器——OutputParse?
1. 通過提示詞約束模型的輸出——格式化輸出
2. 解析輸出——把大模型輸出的文本數據轉換成json或其它結構化對象
3. 容錯機制,當輸出解析失敗時,則嘗試其它解析方式或重新生成
而Langchain中的輸出解析器——OutputParse就是基于這個原理來實現的;如StructuredOutputParser就是通過responseSchema來約束模型的輸出格式,并通過parse方法來把模型輸出的文本數據轉換成json格式的數據。
當然,Langchain還提供了自定義解析的方式,用戶可以根據自己的需求,自定義解析器。
本文轉載自???AI探索時代??? 作者:DFires

















