關(guān)于大模型窗口大小的思考——上下文工程和提示詞工程 原創(chuàng)
“ 上下文工程是一種復(fù)雜的提示詞方法論,其作用是為了解決模型上下文窗口限制所導(dǎo)致的問題?!?/strong>
最近在優(yōu)化RAG的增強(qiáng)問題,也就是提示詞的封裝,包含系統(tǒng)提示詞,用戶問題,歷史記錄和召回文檔等;然后就發(fā)現(xiàn)一個(gè)平常沒有關(guān)注的問題,那就是模型上下文窗口大小以及其帶來的問題。
我們都知道模型的上下文窗口是有大小限制的,哪怕隨著模型技術(shù)的發(fā)展其窗口大小也越來越大,但總歸有一個(gè)限制;而在這個(gè)窗口中不但包含了用戶問題,還同時(shí)包含了歷史記錄和參考文檔;特別是在多輪對(duì)話中,隨著對(duì)話次數(shù)的增多,很容易就達(dá)到了上下文窗口的限制。

當(dāng)然,可能很有人會(huì)說,我在使用模型的時(shí)候聊天好多輪但都沒有報(bào)超長錯(cuò)誤啊;原因是模型廠商默認(rèn)給你做了上下文裁剪,當(dāng)上下文超過模型窗口時(shí)會(huì)默認(rèn)丟棄之前的對(duì)話,這也是大模型“失憶”的原因。
模型上下文窗口
模型上下文窗口限制,這是一個(gè)客觀存在的事實(shí);但可能很多人到現(xiàn)在都沒搞明白這個(gè)上下文窗口到底是怎么算的,特別是在多輪對(duì)話中,比如說上下文窗口與輸入輸出之間的關(guān)系?
模型上下文窗口因模型不同,其值也不同;但我們要明白一件事,那就是模型上下文窗口是指模型能夠處理的最大數(shù)據(jù)長度,其計(jì)量單位是Token,如果不知道什么是token的,自己去查。
因此,模型上下文窗口包含了輸入和輸出;特別是在多輪對(duì)話中的處理最為顯著。

舉例來說,一個(gè)模型的上下文窗口是1000token;你輸入用了100token(包含問題,系統(tǒng)提示詞,參考文檔等);然后模型回答問題用了兩百token,這時(shí)模型的上下文窗口就還剩700token;然后在第二輪對(duì)話中,假如你的輸入還是用了100token,第二輪回答也是用了200token,那么由于歷史記錄的存在,第二輪對(duì)話消耗了多少token?
100 + 200 + 300(第一輪對(duì)話的輸入和輸出100+200),這時(shí)就用了600token,那么再對(duì)話一次,在第四次對(duì)話的時(shí)候,上下文窗口就超限了。這時(shí)應(yīng)該怎么辦?
默認(rèn)情況下會(huì)對(duì)上下文進(jìn)行截取,丟掉最開始的第一輪對(duì)話內(nèi)容或者前200個(gè)token。

當(dāng)然,以上內(nèi)容都是基于多輪對(duì)話和有記憶功能存在的前提下,如果是單輪對(duì)話或者沒有記憶,那么只要單次沒有超出模型上下文限制,那么就不會(huì)有問題。
由于目前大部分的應(yīng)用場(chǎng)景都是基于多輪對(duì)話,因此基于以上情況就面臨一個(gè)問題,上下文超長是一個(gè)必然的過程;那么,怎么才能讓模型更好地輸入和輸出呢?
這時(shí),提示詞工程和上下文工程的作用就體現(xiàn)出來了;在這里我們要明白一個(gè)前提,不管模型的上下文限制是多少,對(duì)模型來說它接受的最終形式就是一串提示詞。
而這就是提示詞工程要做的事情,但這里為什么又搞出了一個(gè)上下文工程呢?
在大模型應(yīng)用中,提示詞工程一般是指靜態(tài)的提示詞,其作用是為了在單次對(duì)話中,盡可能的引導(dǎo)模型,讓其表現(xiàn)達(dá)到最好;但是,在多輪對(duì)話中,提示詞最終的來源很復(fù)雜,包括用戶問題,系統(tǒng)提示詞,歷史記錄和參考問題;特別是歷史記錄。

上下文工程雖然很多人都認(rèn)為它是一個(gè)新概念,但事實(shí)上我們?cè)陂_發(fā)過程中已經(jīng)在使用它了;比如說在langchain的提示詞模板中拼接歷史記錄和參考文檔就屬于上下文工程的一部分。
上下文工程可以簡(jiǎn)單理解為是提示詞工程的一種復(fù)雜情況,由于歷史記錄和參考文檔的存在;特別是隨著多輪對(duì)話,歷史記錄會(huì)逐漸增多,這時(shí)怎么保證在盡可能不丟失歷史記錄的前提下,還能保證最終的提示詞不會(huì)超出上下文窗口,以及使用什么樣的提示詞結(jié)構(gòu)才能讓大模型更好的理解和輸出,這就是上下文工程所需要解決的問題。
為了解決這個(gè)問題,因此有了歷史記錄壓縮技術(shù),提示詞結(jié)構(gòu)設(shè)計(jì),參考文檔處理等一系列技術(shù)問題。
總之,上下文工程的目的是為了解決在模型上下文有限的情況下,盡可能的讓模型表現(xiàn)的更好,輸出更高質(zhì)量的回答。
本文轉(zhuǎn)載自?????AI探索時(shí)代????? 作者:DFires

















