日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

構(gòu)建 LLM 應(yīng)用程序:清晰的分步指南

 mrjiangkai 2024-08-25 發(fā)布于上海

大型語言模型 (LLM) 正在迅速成為現(xiàn)代人工智能的基石。然而,目前還沒有既定的最佳實(shí)踐,而且先驅(qū)者往往沒有明確的路線圖,需要重新發(fā)明輪子或陷入困境。

本指南提供了清晰的路線圖,幫助您應(yīng)對 LLM 原生開發(fā)的復(fù)雜環(huán)境。您將學(xué)習(xí)如何從構(gòu)思轉(zhuǎn)向?qū)嶒?yàn)、評估和產(chǎn)品化,釋放您創(chuàng)造突破性應(yīng)用程序的潛力。

圖片

為什么標(biāo)準(zhǔn)化流程至關(guān)重要

LLM 領(lǐng)域非?;钴S,有時我們每天都會聽到新的突破性創(chuàng)新。這令人興奮,但也非?;靵y——你可能會發(fā)現(xiàn)自己迷失在這個過程中,不知道該做什么或如何將你的新想法變成現(xiàn)實(shí)。
長話短說,如果您是一位想要有效構(gòu)建 LLM 原生應(yīng)用程序的AI 創(chuàng)新者(經(jīng)理或從業(yè)者),那么這適合您。
實(shí)施標(biāo)準(zhǔn)化流程有助于啟動新項(xiàng)目并帶來幾個主要好處:
  1. 標(biāo)準(zhǔn)化流程——標(biāo)準(zhǔn)化流程有助于協(xié)調(diào)團(tuán)隊(duì)成員并確保新成員入職流程順利進(jìn)行(尤其是在這種混亂的情況下)。

  2. 定義明確的里程碑——一種直接的方式來跟蹤你的工作,衡量它,并確保你在正確的道路上

  3. 確定決策點(diǎn)— LLM 本土開發(fā)充滿未知數(shù)和“小實(shí)驗(yàn)”[見下文]。明確的決策點(diǎn)讓我們能夠輕松降低風(fēng)險,并始終保持開發(fā)工作的精簡。

法學(xué)碩士工程師的基本技能

與軟件研發(fā)領(lǐng)域中任何其他既定角色不同,LLM 本土開發(fā)絕對需要一個新的角色:LLM 工程師AI 工程師。
LLM 工程師是一個獨(dú)特的混合體,涉及不同(既定)角色的技能:
  • 軟件工程技能——與大多數(shù) SWE 一樣,大部分工作涉及將樂高積木拼在一起并將所有東西粘合在一起。

  • 研究技能— 正確理解 LLM 本土的實(shí)驗(yàn)性質(zhì)至關(guān)重要。雖然構(gòu)建“酷炫的演示應(yīng)用程序”相當(dāng)容易,但“酷炫的演示”與實(shí)際解決方案之間的距離需要實(shí)驗(yàn)和敏捷性。

  • 深入理解業(yè)務(wù)/產(chǎn)品 —由于模型的脆弱性,了解業(yè)務(wù)目標(biāo)和流程至關(guān)重要,而不是堅持我們定義的架構(gòu)。對 LLM 工程師來說,對手動流程進(jìn)行建模的能力是一項(xiàng)黃金技能。

在撰寫本文時,LLM 工程仍然是一個新興領(lǐng)域,招聘可能非常具有挑戰(zhàn)性。尋找具有后端/數(shù)據(jù)工程或數(shù)據(jù)科學(xué)背景的候選人可能是一個好主意。
軟件工程師可能希望過渡得更順利,因?yàn)閷?shí)驗(yàn)過程“工程化”而不是“科學(xué)化”(與傳統(tǒng)的數(shù)據(jù)科學(xué)工作相比)。話雖如此,我也看到許多數(shù)據(jù)科學(xué)家也經(jīng)歷了這種轉(zhuǎn)變。只要你能接受必須接受新軟技能的事實(shí),你就走在了正確的道路上!

LLM 本土發(fā)展的關(guān)鍵要素

與傳統(tǒng)的后端應(yīng)用程序(例如 CRUD)不同,這里沒有循序漸進(jìn)的配方。與“AI”中的其他一切一樣,LLM 原生應(yīng)用程序需要研究和實(shí)驗(yàn)的心態(tài)。
為了馴服這頭野獸,你必須分而治之,將你的工作分成幾個較小的實(shí)驗(yàn),嘗試其中一些,然后選擇最有希望的實(shí)驗(yàn)。
我再怎么強(qiáng)調(diào)研究心態(tài)的重要性都不為過。 這意味著你可能會花時間探索一個研究方向,然后發(fā)現(xiàn)它“不可能”、“不夠好”或“不值得”。這完全沒問題——這意味著你走在正確的道路上。

圖片

擁抱實(shí)驗(yàn):過程的核心

有時,你的“實(shí)驗(yàn)”會失敗,然后你稍微調(diào)整一下工作,另一個實(shí)驗(yàn)就會取得更大的成功。
這就是為什么在設(shè)計最終解決方案之前,我們必須從簡單開始并對沖風(fēng)險。
  1. 定義“預(yù)算”或時間范圍。讓我們看看在 X 周內(nèi)可以做什么,然后決定如何或是否繼續(xù)。通常,2-4 周的時間來了解基本的 PoC 就足夠了。如果它看起來很有希望 — 繼續(xù)投入資源來改進(jìn)它。

  2. 實(shí)驗(yàn)——無論您選擇自下而上還是自上而下的方法進(jìn)行實(shí)驗(yàn),您的目標(biāo)都是最大化結(jié)果連續(xù)率。在第一次實(shí)驗(yàn)迭代結(jié)束時,您應(yīng)該有一些 PoC(利益相關(guān)者可以使用)和您實(shí)現(xiàn)的基準(zhǔn)。

  3. 回顧——在研究階段結(jié)束時,我們可以了解構(gòu)建此類應(yīng)用的可行性、局限性和成本。這有助于我們決定是否將其投入生產(chǎn)以及如何設(shè)計最終產(chǎn)品及其用戶體驗(yàn)。

  4. 產(chǎn)品化——遵循標(biāo)準(zhǔn) SWE 最佳實(shí)踐并實(shí)施反饋和數(shù)據(jù)收集機(jī)制,開發(fā)項(xiàng)目的生產(chǎn)就緒版本并將其與其余解決方案集成。

                圖片

為了更好地實(shí)施面向?qū)嶒?yàn)的過程,我們必須對如何進(jìn)行和構(gòu)建這些實(shí)驗(yàn)做出明智的決定:

開始精益:自下而上的方法

雖然許多早期采用者很快就進(jìn)入了具有成熟的 Langchain 或類似產(chǎn)品的“最先進(jìn)的”多鏈代理系統(tǒng),但我發(fā)現(xiàn)“自下而上的方法”通常會產(chǎn)生更好的結(jié)果。
從精益開始,秉承“一個提示統(tǒng)治一切”的理念。雖然這種策略可能看起來不合常規(guī),一開始可能會產(chǎn)生不良結(jié)果,但它為您的系統(tǒng)建立了基線。
從那里開始,不斷迭代和改進(jìn)您的提示,采用提示工程技術(shù)來優(yōu)化結(jié)果。當(dāng)您確定精益解決方案中的弱點(diǎn)時,通過添加分支來解決這些缺點(diǎn),從而拆分流程。
遵循LLM 三角原則來確定在何時何地切割樹枝、劈開樹枝或加粗根部(通過使用快速工程技術(shù))并榨出更多的檸檬。

圖片

例如,為了以自下而上的方法實(shí)現(xiàn)“本機(jī)語言 SQL 查詢”,我們首先將模式發(fā)送到 LLM 并要求它生成查詢。

圖片

通常,這并不與“自上而下的方法”相矛盾,而是作為其前一步。這使我們能夠展示快速的成果并吸引更多的項(xiàng)目投資。

大局在前:自上而下的策略

們知道 LLM 工作流程并不容易,為了實(shí)現(xiàn)我們的目標(biāo),我們可能會采用一些工作流程或 LLM 原生架構(gòu)

自上而下的方法認(rèn)識到一點(diǎn),并從第一天開始設(shè)計 LLM 原生架構(gòu),并從一開始就實(shí)現(xiàn)其不同的步驟/鏈。

這樣,您可以測試整個工作流架構(gòu)并擠壓整個檸檬,而不是單獨(dú)精煉每片葉子。

圖片

例如,為了以自上而下的方法實(shí)現(xiàn)“本機(jī)語言 SQL 查詢”,我們將在開始編碼之前開始設(shè)計架構(gòu),然后跳到完整實(shí)現(xiàn):

圖片

找到正確的平衡

當(dāng)你開始嘗試攻讀法學(xué)碩士時,你可能會從極端之一開始(過于復(fù)雜的自上而下或極其簡單的一次性課程)。事實(shí)上,沒有這樣的贏家。
理想情況下,你會定義一個好的 SoP1 并建模專家,然后再對模型進(jìn)行編碼和實(shí)驗(yàn)。實(shí)際上,建模非常困難;有時,你可能無法接觸到這樣的專家。
我發(fā)現(xiàn),第一次嘗試就找到一個好的架構(gòu)/SoP1 很有挑戰(zhàn)性,因此在開始大干一場之前,值得先進(jìn)行一些簡單的實(shí)驗(yàn)。然而,這并不意味著一切都必須太精簡。如果你已經(jīng)事先明白,某件事必須分解成更小的部分——那就這么做吧。
您應(yīng)該利用LLM 三角原則并在設(shè)計解決方案時正確模擬手動流程。

優(yōu)化解決方案:擠檸檬

在實(shí)驗(yàn)階段,我們不斷擠壓檸檬并添加更多“復(fù)雜性層次”:

  • 及時工程技術(shù)——例如 Few Shots、角色分配,甚至動態(tài)少樣本

  • 將上下文窗口從簡單的變量信息擴(kuò)展到復(fù)雜的 RAG 流可以幫助改善結(jié)果。

  • 嘗試不同的模型— 不同的模型在不同的任務(wù)上表現(xiàn)不同。此外,大型 LLM 通常不太劃算,值得嘗試更多針對特定任務(wù)的模型。

  • 及時節(jié)食 —我了解到,對 SOP1(具體來說,提示和所要求的輸出)進(jìn)行“節(jié)食”通??梢愿纳蒲舆t。
    通過減少提示大小和模型需要經(jīng)歷的步驟,我們可以減少模型需要生成的輸入和輸出。您可能會感到驚訝,但及時節(jié)食有時甚至可以提高質(zhì)量!

    請注意,節(jié)食也可能導(dǎo)致質(zhì)量下降,因此在這樣做之前設(shè)置健全性測試非常重要。

  • 將流程拆分成更小的步驟也非常有益,使優(yōu)化 SOP1 的子流程變得更容易、更可行。

    請注意,這可能會增加解決方案的復(fù)雜性或損害性能(例如,增加處理的令牌數(shù)量)。為了緩解這種情況,請盡量使用簡潔的提示和更小的模型。

    根據(jù)經(jīng)驗(yàn),當(dāng)系統(tǒng)提示的重大變化為 SOP1 流程的這一部分帶來更好的結(jié)果時,拆分通常是一個好主意。

    圖片

LLM 實(shí)驗(yàn)的剖析

就我個人而言,我更喜歡使用 Python、Pydantic 和 Jinja2 通過簡單的 Jupyter Notebook開始精益開發(fā):

  1. 使用 Pydantic從模型中定義我的輸出模式。

  2. 使用Jinja2編寫提示模板。

  3. 定義結(jié)構(gòu)化的輸出格式(以YAML2為單位)。這將確保模型遵循“思考步驟”并以我的 SOP 為指導(dǎo)。

  4. 通過 Pydantic 驗(yàn)證確保此輸出;如果需要 — — 重試。

  5. 穩(wěn)定您的工作——使用 Python 文件和包將您的代碼構(gòu)建為功能單元。

在更廣泛的范圍內(nèi),您可以使用不同的工具,例如openai-streaming來輕松利用流(和工具)LiteLLM來跨不同提供商獲得標(biāo)準(zhǔn)化的 LLM SDK ,或使用vLLM提供開源 LLM。

通過健全性測試和評估確保質(zhì)量

健全性測試會評估您的項(xiàng)目質(zhì)量,并確保您不會降低您定義的某個成功率基線。
將您的解決方案/提示視為一條短毯子 - 如果您將其拉得太長,它可能會突然無法覆蓋以前覆蓋的一些用例。
為此,請定義一組您已經(jīng)成功覆蓋的案例,并確保保持這種狀態(tài)(或至少值得這樣做)。將其視為表驅(qū)動測試可能會有所幫助。
評估“生成式”解決方案(例如,編寫文本)的成功程度比使用 LLM 執(zhí)行其他任務(wù)(例如分類、實(shí)體提取等)要復(fù)雜得多。對于這些類型的任務(wù),您可能需要使用更智能的模型(例如 GPT4、Claude Opus 或 LLAMA3–70B)來充當(dāng)“裁判”。
嘗試讓輸出在“生成式”輸出之前包含“確定性部分”也可能是一個好主意,因?yàn)檫@些類型的輸出更容易測試。
有一些尖端的、 有前途的解決方案值得研究。我發(fā)現(xiàn)它們在評估基于 RAG 的解決方案時特別有用:看看DeepChecks、RagasArizeAI。

做出明智的決定:回顧的重要性

在每次重大/時間框架的實(shí)驗(yàn)或里程碑之后,我們應(yīng)該停下來并做出明智的決定,考慮如何以及是否繼續(xù)這種方法。
此時,您的實(shí)驗(yàn)將有一個明確的成功率基線,并且您將知道需要改進(jìn)的地方。
這也是開始討論此解決方案的產(chǎn)品化含義并從“產(chǎn)品工作”開始的好時機(jī):
  1. 這在產(chǎn)品中會是什么樣子?

  2. 有哪些限制/挑戰(zhàn)?您將如何緩解這些限制/挑戰(zhàn)?

  3. 您當(dāng)前的延遲是多少?夠好嗎?

  4. 用戶體驗(yàn)應(yīng)該是什么樣子?您可以使用哪些 UI 技巧?流媒體能有所幫助嗎?

  5. 代幣的預(yù)計支出是多少?我們可以使用較小的模型來減少支出嗎?

  6. 優(yōu)先事項(xiàng)是什么?有哪些挑戰(zhàn)是棘手的?

假設(shè)我們達(dá)到的基準(zhǔn)“足夠好”,并且我們相信我們可以緩解我們提出的問題。在這種情況下,我們將繼續(xù)投資和改進(jìn)項(xiàng)目,同時確保它永遠(yuǎn)不會退化并使用健全性測試。

圖片

從實(shí)驗(yàn)到產(chǎn)品:將您的解決方案變?yōu)楝F(xiàn)實(shí)

最后但同樣重要的是,我們必須將我們的工作產(chǎn)品化。與任何其他生產(chǎn)級解決方案一樣,我們必須實(shí)現(xiàn)生產(chǎn)工程概念,如日志記錄、監(jiān)控、依賴管理、容器化、緩存等。
這是一個巨大的世界,但幸運(yùn)的是,我們可以借鑒經(jīng)典生產(chǎn)工程的許多機(jī)制,甚至采用許多現(xiàn)有的工具。

話雖如此,特別注意涉及 LLM 原生應(yīng)用程序的細(xì)微差別非常重要:

  • 反饋循環(huán)——我們?nèi)绾魏饬砍晒??它只是一種“贊成/反對”機(jī)制,還是考慮采用我們的解決方案的更復(fù)雜的機(jī)制?收集這些數(shù)據(jù)也很重要;將來,這可以幫助我們重新定義我們的理智“基線”或通過動態(tài)少量鏡頭
    微調(diào)我們的結(jié)果或微調(diào)模型。

  • 緩存— 與傳統(tǒng) SWE 不同,當(dāng)我們在解決方案中涉及生成方面時,緩存可能非常具有挑戰(zhàn)性。為了緩解這種情況,請?zhí)剿骶彺骖愃平Y(jié)果的選項(xiàng)(例如,使用 RAG)和/或減少生成輸出(通過采用嚴(yán)格的輸出模式)

  • 成本跟蹤——許多公司發(fā)現(xiàn)從“強(qiáng)模型”(例如 GPT-4 或 Opus)開始非常誘人,然而,在生產(chǎn)中,成本可能會迅速上升。避免對最終賬單感到驚訝,并確保測量輸入/輸出令牌并跟蹤工作流程的影響(如果沒有這些做法——以后分析它時就不好了)

  • 可調(diào)試性和跟蹤— 確保您已設(shè)置正確的工具來跟蹤“有缺陷的”輸入并在整個過程中對其進(jìn)行跟蹤。這通常涉及保留用戶輸入以供日后調(diào)查并設(shè)置跟蹤系統(tǒng)。請記?。骸芭c傳統(tǒng)軟件不同,AI 的失敗是悄無聲息的!”

結(jié)束語:推動 LLM 本土技術(shù)發(fā)展中發(fā)揮的作用

這可能是本文的結(jié)尾,但肯定不是我們工作的結(jié)束。LLM 原生開發(fā)是一個迭代過程,涵蓋更多用例、挑戰(zhàn)和功能,并不斷改進(jìn)我們的 LLM 原生產(chǎn)品。
在您繼續(xù) AI 開發(fā)之旅時,請保持敏捷、大膽嘗試,并牢記最終用戶。與社區(qū)分享您的經(jīng)驗(yàn)和見解,我們可以共同突破 LLM 原生應(yīng)用的極限。繼續(xù)探索、學(xué)習(xí)和構(gòu)建 — 可能性無窮無盡。

我希望本指南能成為您 LLM 本土開發(fā)之旅的寶貴伴侶!我很想聽聽你的故事 — 在下面的評論中分享你的成功和挑戰(zhàn)。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多