【引子】感謝圖靈出版社英子老師贈書——《大模型應(yīng)用開發(fā)極簡入門》,讀過之后,正好和自己的大模型系列文章相互印證,于是將讀后感匯成此文。 如今,大模型應(yīng)用已經(jīng)滲透到各個領(lǐng)域,從自然語言處理到計算機(jī)視覺,再到推薦系統(tǒng)。這些復(fù)雜而強(qiáng)大的模型,如 GPT-3.5/4、文心一言 和 Claude3,成為科技領(lǐng)域的瑰寶,引領(lǐng)著人工智能的浪潮。然而,對于許多初學(xué)者來說,這些大模型應(yīng)用似乎充滿神秘色彩,仿佛只有少數(shù)專家才能參與其中。事實(shí)上,深入了解這些模型的原理和應(yīng)用,并付諸實(shí)踐,并不遙不可及。 類比一下, 對于程序員而言,如果學(xué)習(xí)前端開發(fā),應(yīng)該怎么做?可能,我們要先學(xué)習(xí)HTML/Javascript/CSS 的基本原理,然后動手跟著教程寫一些例子,最后在實(shí)際的前端應(yīng)用中去不斷實(shí)踐,形成循環(huán)迭代,進(jìn)而真正掌握這門技術(shù)。面向大模型的應(yīng)用開發(fā)也是一樣的,理解大模型的基本原理,實(shí)際動手實(shí)踐,在具體應(yīng)用中對大模型進(jìn)行微調(diào),同樣是一個循環(huán)迭代的過程。 雙手沾泥,探索大模型應(yīng)用的世界,將為我們揭示更多的樂趣。 1. 大模型的基本原理談到大模型一般會從AI 說起,什么是程序員視角中的AI呢?可以參見《老碼農(nóng)的AI漫談》和《老碼農(nóng)眼中的簡明AI》。 人工智能在一定程度上是可以通過自然語言體現(xiàn)的,可以追溯到圖靈測試。而通過大模型通常是指大型語言模型,確切地說,大概應(yīng)該叫大型基礎(chǔ)模型,是參數(shù)規(guī)模龐大、擁有深層結(jié)構(gòu)的神經(jīng)網(wǎng)絡(luò),能夠處理復(fù)雜的任務(wù)。關(guān)于大模型的更多理解可以參考《老碼農(nóng)眼中的大模型(LLM)》。GPT-3/4、Claude3等類似的大模型與AI、機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的關(guān)系如下圖所示: 大模型的以 GPT-3 為例,這是一個由數(shù)十億個參數(shù)組成的深度神經(jīng)網(wǎng)絡(luò),通過無監(jiān)督學(xué)習(xí)在大規(guī)模文本數(shù)據(jù)上進(jìn)行預(yù)訓(xùn)練,從而具備了驚人的語言生成能力。這主要?dú)w功于Transformer架構(gòu),它能夠處理長文本序列并記住上下文。Transformer的核心支柱是自注意力機(jī)制,即關(guān)注一句話中最相關(guān)的詞,交叉注意力和自注意力是其中兩個廣泛使用的模塊。其中,自注意力機(jī)制的示意圖如下: GPT-X等大模型充分利用了Transformer架構(gòu)的潛力,而chatGPT可以看作融入了對話管理的大模型應(yīng)用,背后的模型應(yīng)該是gpt-3.5-turbo,它根據(jù)制定的輸入提示詞逐個預(yù)測下一個詞,進(jìn)而生成問答。另外,GPT-4同時支持插件功能。 OpenAI 提供的很多模型都會不斷更新,但都是涉及到一些基本概念,例如提示詞、token和嵌入。其中,提示詞可以參考《解讀提示工程(Prompt Engineering)》,進(jìn)一步,還可以參考《Agent 應(yīng)用于提示工程》;token 可以參考《解讀大模型(LLM)的token》,同時注意token和tokenization的區(qū)別;嵌入可以參考《《深入淺出Embedding》隨筆》。 2.動手體驗要想真正掌握大模型應(yīng)用,光有理論知識是不夠的。我們必須深入實(shí)踐,通過親手操作、不斷嘗試,才能真正理解其內(nèi)在的邏輯和規(guī)律。這就像農(nóng)民種地一樣,只有雙手沾泥,親身感受土地的溫暖和濕潤,才能種出豐收的莊稼。同樣,只有我們親手搭建模型、調(diào)整參數(shù)、處理數(shù)據(jù),才能真正掌握大模型應(yīng)用的精髓。 對于大模型在各種任務(wù)上的表現(xiàn), 可以在其廠商提供的控制臺直接體驗。例如, OpenAI Playground 就是一個很好的體驗途徑。 對程序員而言, 新技術(shù)的學(xué)習(xí)一般都會始于“永遠(yuǎn)的hello world”,大模型應(yīng)用也不例外,只不過是基于Python這種編程語言而已,關(guān)于Python 的一些基礎(chǔ)用法可以參考《全棧Python 編程必備》。 安裝環(huán)境的命令
當(dāng)然,這里默認(rèn)設(shè)置了OPEN_API_KEY的環(huán)境變量。 GPT-3.5-turbo可能是最便宜且功能最多的模型,可以作為大模型應(yīng)用開發(fā)的初始選擇。 在廣泛聯(lián)系之前,要考慮一下成本和數(shù)據(jù)隱私。例如,OpenAI 是以每千個token定價的,且每個模型的定價不同。gpt-4模型的窗口大小是gpt-3.5-turbo的兩倍,但成本會更高。另外,OpenAI會保留30天的用戶輸入,注意敏感信息的保護(hù),管理好密鑰。 3.嘗試應(yīng)用開發(fā)基于大模型的應(yīng)用,核心是將大模型與其提供的API結(jié)合起來,需要注意的是,應(yīng)用要與模型解耦,綁定會帶來緊耦合,不利于系統(tǒng)擴(kuò)展。一個典型使用OpenAI API的web程序如下圖所示: 需要注意的是,大模型應(yīng)用無法避免提示詞注入,提示詞的這一功能特性帶來了安全風(fēng)險。一般的應(yīng)對策略包括:
提示工程專注于以最佳實(shí)踐的方式來構(gòu)建LLM的最佳輸入,從而盡可能以程序化方式生成目標(biāo)結(jié)果。 由于大模型將數(shù)字視為token,所以缺乏真正的數(shù)學(xué)邏輯和類似的推理能力??梢栽谔崾驹~末尾添加“讓我們逐步思考”這樣的話,這種技術(shù)被稱為“零樣本思維鏈”。思維鏈?zhǔn)侵甘褂锰崾驹~鼓勵模型逐步思考的技術(shù),one-shot 和 few-shot也是常見技術(shù)手段,總之,提示工程是一個反復(fù)試錯的迭代過程。 另外,面向特定任務(wù), 我們還需要微調(diào)大模型,示意圖如下: 大多數(shù)時候,預(yù)訓(xùn)練的大模型需要在特定任務(wù)上進(jìn)行微調(diào),以適應(yīng)具體應(yīng)用場景。微調(diào)過程包括調(diào)整模型的超參數(shù)、選擇合適的數(shù)據(jù)增強(qiáng)方法,以及解決過擬合等問題。微調(diào)要使用基礎(chǔ)模型,而不能使用像InstructGPT系列中的模型。而且,微調(diào)通常也需要大量的數(shù)據(jù),成本也不低。 通過深入研究微調(diào)的技術(shù)細(xì)節(jié),我們能夠更好地將大模型應(yīng)用到實(shí)際問題中,提高模型的性能和泛化能力,更多有關(guān)微調(diào)的理解和思考可以參考《解讀大模型的微調(diào)》。 《大模型應(yīng)用開發(fā)極簡入門》一書中給了一些不錯的練手項目,都可以動手嘗試。 4. 大模型應(yīng)用框架的使用站在巨人的肩膀上, 從零構(gòu)建一個成熟且復(fù)雜的大模型應(yīng)用并不是一件輕松的事。和web應(yīng)用的開發(fā)類似, 是類似Spring 這樣的應(yīng)用框架, 給我們帶來了極大的便利。對大模型應(yīng)用而言也是如此,langchain就是一個當(dāng)前看來還不錯的應(yīng)用框架。 關(guān)于Langchain的進(jìn)一步了解,可以參考《解讀LangChain》。Agent 及相關(guān)工具是LangChain框架提供的關(guān)鍵功能之一,讓大模型能夠執(zhí)行各種操作并與各種功能集成,從而解決復(fù)雜的問題。在LangChain中使用Agent 的示意如下: 關(guān)于Agent 的更多理解,可以參考《基于大模型(LLM)的Agent 應(yīng)用開發(fā)》。 document_loaders 是Langchain中的一個重要模塊,通過這個模塊,可以快速將文本數(shù)據(jù)從不同的數(shù)據(jù)源加載到應(yīng)用程序中,然后,對文本實(shí)現(xiàn)向量化,例如使用 OpenAIEmbeddings 模塊,從而使搜索更加容易。這是RAG的典型應(yīng)用模式,關(guān)于RAG的更多理解可以參考《大模型系列——解讀RAG》。LangChain 以向量數(shù)據(jù)庫為核心,有多種向量數(shù)據(jù)庫可以選擇,關(guān)于向量數(shù)據(jù)庫可以參考《解讀向量數(shù)據(jù)庫》。 另外,GPT-4的插件功能重新定義了我們與大模型的交互方式,我們可以自行開發(fā)插件,進(jìn)而提供更為廣泛的功能。 5. 小結(jié)當(dāng)然,通過一本書實(shí)現(xiàn)大模型應(yīng)用開發(fā)入門是可能的, 但和傳統(tǒng)軟件開發(fā)一樣,如果要掌握大模型應(yīng)用的開發(fā)技能, 實(shí)踐仍然是不二的法門。
雙手沾泥,大模型應(yīng)用并不神秘。選擇一個熟悉的任務(wù),讓我們開始構(gòu)建相應(yīng)的大模型應(yīng)用吧。 |
|