2023-08-11 | 阿尤什·米塔爾
大型語言模型 (LLM) 的一個重要方面是這些模型用於學習的參數數量。 模型擁有的參數越多,它就能更好地理解單詞和短語之間的關係。 這意味著具有數十億個參數的模型有能力生成各種創造性的文本格式,並以信息豐富的方式回答開放式和挑戰性的問題。
ChatGPT 等法學碩士利用 Transformer 模型,精通理解和生成人類語言,這使得它們對於需要自然語言理解的應用程序非常有用。 然而,它們並非沒有局限性,其中包括過時的知識、無法與外部系統交互、缺乏上下文理解,有時會產生聽起來合理但不正確或無意義的響應等。
解決這些限制需要將法學碩士與外部數據源和功能集成,這可能會帶來複雜性並需要廣泛的編碼和數據處理技能。 再加上理解人工智能概念和復雜算法的挑戰,導致了與使用法學碩士開發應用程序相關的學習曲線。
儘管如此,將法學碩士與其他工具集成以形成法學碩士支持的應用程序可以重新定義我們的數字景觀。 此類應用程序的潛力是巨大的,包括提高效率和生產力、簡化任務、增強決策以及提供個性化體驗。
在本文中,我們將深入研究這些問題,探索使用 Langchain 進行即時工程的先進技術,提供清晰的解釋、實際示例以及如何實現它們的分步說明。
Langchain 是一個最先進的庫,為設計、實現和調整提示帶來了便利和靈活性。 當我們解開即時工程的原理和實踐時,您將學習如何利用 Langchain 的強大功能來發揮 GPT-4 等 SOTA 生成式 AI 模型的優勢。
了解提示
在深入了解提示工程的技術細節之前,有必要了解提示的概念及其意義。
一個 ‘提示‘ 是一個標記序列,用作語言模型的輸入,指示它生成特定類型的響應。 提示在引導模型的行為方面起著至關重要的作用。 它們可以影響生成文本的質量,並且如果正確製作,可以幫助模型提供富有洞察力、準確且針對特定上下文的結果。
提示工程是設計有效提示的藝術和科學。 目標是從語言模型中得出所需的輸出。 通過仔細選擇和構建提示,可以引導模型生成更準確和相關的響應。 在實踐中,這涉及微調輸入短語以適應模型的訓練和結構偏差。
提示工程的複雜性包括從簡單的技術(例如向模型提供相關關鍵字)到更高級的方法,包括設計複雜的結構化提示,利用模型的內部機制來發揮其優勢。
Langchain:增長最快的提示工具
LangChain,於2022年XNUMX月推出 哈里森蔡斯,已成為其中之一 評價最高的開源框架 將於 2023 年在 GitHub 上發布。它提供了一個簡化且標準化的界面,用於將大型語言模型 (LLM) 合併到應用程序中。 它還為快速工程提供了功能豐富的界面,允許開發人員嘗試不同的策略並評估其結果。 通過使用Langchain,您可以更有效、更直觀地執行快速的工程任務。
語言流作為一個用戶界面,用於將 LangChain 組件編排成可執行流程圖,從而實現快速原型設計和實驗。
浪鏈填補了大眾人工智能發展的關鍵空白。 它支持一系列 NLP 應用程序(例如虛擬助手、內容生成器、問答系統等)來解決一系列現實問題。
LangChain 不是一個獨立的模型或提供者,而是簡化了與不同模型的交互,將 LLM 應用程序的功能擴展到簡單 API 調用的限制之外。
浪鏈架構
LangChain的主要組件包括模型I/O、提示模板、內存、代理和鏈。
模型輸入/輸出
LangChain 通過使用稱為模型 I/O 的標準化接口來封裝各種語言模型,從而促進與各種語言模型的無縫連接。 這有助於輕鬆進行模型切換,以實現優化或更好的性能。 LangChain支持多種語言模型提供者,包括 OpenAI, hugging face, 天藍, 煙花爆竹,等等。
提示模板
這些用於通過提供簡潔的說明或示例來管理和優化與法學碩士的互動。 優化提示可增強模型性能,其靈活性對輸入過程有顯著貢獻。
隨著複雜性的提高,我們在 LangChain 中遇到了更複雜的模式,例如理性和行動(ReAct)模式。 ReAct 是操作執行的重要模式,其中代理將任務分配給適當的工具,為其自定義輸入,並解析其輸出以完成任務。 下面的 Python 示例展示了 ReAct 模式。 它演示了浪鏈中的提示是如何構造的,使用一系列的想法和行動來推理問題並產生最終答案
記憶體應用
內存是 LangChain 中的一個關鍵概念,它使法學碩士和工具能夠隨著時間的推移保留信息。 這種有狀態行為通過存儲先前的響應、用戶交互、環境狀態和代理的目標來提高LangChain應用程序的性能。 ConversationBufferMemory 和 ConversationBufferWindowMemory 策略分別幫助跟踪對話的完整部分或最近部分。 對於更複雜的方法,ConversationKGMemory 策略允許將對話編碼為知識圖,該知識圖可以反饋到提示中或用於預測響應,而無需調用 LLM。
代理
代理通過執行操作和任務與世界交互。 在LangChain中,代理結合了工具和鏈來執行任務。 它可以建立與外界的信息檢索連接,以擴充LLM知識,從而克服其固有的局限性。 他們可以根據情況決定將計算傳遞給計算器或 Python 解釋器。
代理配備了子組件:
- 工具:這些是功能組件。
- 工具包:工具集合。
- 代理執行人:這是允許在工具之間進行選擇的執行機制。
LangChain中的代理也遵循零樣本ReAct模式,其中決策僅基於工具的描述。 該機制可以通過內存進行擴展,以便考慮完整的對話歷史記錄。 借助 ReAct,您可以提示法學碩士在思想/行動/觀察循環中做出響應,而不是要求法學碩士自動完成您的文本。
鏈
鏈,顧名思義,是允許 LangChain 庫無縫處理語言模型輸入和輸出的操作序列。 LangChain 的這些組成部分基本上是由鏈接組成的,這些鏈接可以是其他鏈,也可以是提示、語言模型或實用程序等原語。
將鏈條想像為工廠中的傳送帶。 這條帶上的每一步都代表一個特定的操作,可以調用語言模型,將 Python 函數應用於文本,甚至以特定方式提示模型。
LangChain將其鏈分為三種類型:實用鏈、通用鍊和組合文檔鏈。 我們將深入討論實用鍊和通用鏈。
- 實用鏈 專門設計用於從語言模型中提取狹義任務的精確答案。 例如,讓我們看一下 LLMMathChain。 該實用程序鏈使語言模型能夠執行數學計算。 它接受自然語言的問題,語言模型反過來生成一個 Python 代碼片段,然後執行該代碼片段以產生答案。
- 通用鏈另一方面,作為其他鏈的構建塊,但不能直接獨立使用。 這些鏈(例如 LLMChain)是基礎鏈,通常與其他鏈結合來完成複雜的任務。 例如,LLMChain 經常用於查詢語言模型對象,方法是根據提供的提示模板格式化輸入,然後將其傳遞到語言模型。
使用 Langchain 逐步實施即時工程
我們將引導您完成使用 Langchain 實施即時工程的過程。 在繼續之前,請確保您已安裝必要的軟件和軟件包。
您可以利用 Docker、Conda、Pip 和 Poetry 等流行工具來設置 LangChain。 這些方法的相關安裝文件可以在 LangChain 存儲庫中找到: https://github.com/benman1/generative_ai_with_langchain. 這包括一個 Dockerfile 對於 Docker 來說,一個 requirements.txt 對於皮普來說, pyproject.toml 對於詩歌,以及 langchain_ai.yml 康達文件。
在我們的文章中,我們將使用Python的標準包管理器Pip來方便第三方庫的安裝和管理。 如果您的 Python 發行版中未包含它,您可以按照以下網址的說明安裝 Pip: https://pip.pypa.io/.
要使用 Pip 安裝庫,請使用以下命令 pip install library_name
.
但是,Pip 本身並不管理環境。 為了處理不同的環境,我們使用該工具 的virtualenv.
在下一節中,我們將討論模型集成。
第1步:設置Langchain
首先,您需要安裝 Langchain 軟件包。 我們使用的是Windows操作系統。 在終端中運行以下命令來安裝它:

第二步:導入Langchain及其他必要模塊
接下來,導入 Langchain 以及其他必要的模塊。 在這裡,我們還導入了 Transformers 庫,該庫廣泛用於 NLP 任務。

第 3 步:加載預訓練模型
開放式人工智能
OpenAI 模型可以方便地與LangChain庫或OpenAI Python客戶端庫對接。 值得注意的是,OpenAI 為文本嵌入模型提供了 Embedding 類。 兩個關鍵的 LLM 模型是 GPT-3.5 和 GPT-4,主要區別在於令牌長度。 每種型號的定價可以在 OpenAI 的網站上找到。 雖然還有更多 複雜型號,如 GPT-4-32K 具有更高的令牌接受度,它們通過 API 的可用性是 並不總是有保證.

訪問這些模型需要 OpenAI API 密鑰。 這可以通過在 OpenAI 平台上創建帳戶、設置計費信息並生成新密鑰來完成。

成功創建密鑰後,您可以將其設置為環境變量 (OPENAI_API_KEY) 或在 OpenAI 調用的類實例化期間將其作為參數傳遞。
考慮一個 LangChain 腳本來展示與 OpenAI 模型的交互:

在此示例中,代理被初始化以執行計算。 該代理接受一個輸入(一個簡單的加法任務),使用提供的 OpenAI 模型對其進行處理並返回結果。
Hugging Face
Hugging Face 免費使用 Transformers Python 庫,與 PyTorch、TensorFlow 和 JAX 兼容,並包含以下模型的實現 BERT, T5等等。
Hugging Face 還提供 Hugging Face Hub,一個用於託管代碼存儲庫的平台, 機器學習 模型、數據集和 Web 應用程序。
要將 Hugging Face 用作模型的提供者,您需要一個帳戶和 API 密鑰(可以從其網站獲取)。 該令牌可以在您的環境中以 HUGGINGFACEHUB_API_TOKEN 的形式提供。
考慮以下 Python 代碼片段,它利用了 Google 開發的開源模型,即 Flan-T5-XXL 模型:

該腳本以問題作為輸入並返回答案,展示模型的知識和預測能力。
第 4 步:基本快速工程
首先,我們將生成一個簡單的提示並查看模型如何響應。

在上面的代碼片段中,我們提供了將英語文本翻譯成法語的提示。 然後,語言模型嘗試根據提示翻譯給定的文本。
第 5 步:高級快速工程
雖然上述方法效果很好,但它沒有充分利用即時工程的力量。 讓我們通過引入一些更複雜的提示結構來改進它。

在此代碼片段中,我們修改提示以表明翻譯是由“高度熟練的法語翻譯人員”完成的。 提示的變化可以改進翻譯,因為模型現在假設了專家的角色。
與Langchain一起構建學術文獻問答系統
我們將使用LangChain來建立學術文獻問答系統,可以回答有關最近發表的學術論文的問題。
首先,為了設置我們的環境,我們安裝必要的依賴項。
1 | pip install langchain arxiv openai transformers faiss - cpu |
安裝完成後,我們創建一個新的 Python 筆記本並導入必要的庫:

我們問答系統的核心是能夠獲取與某個領域相關的相關學術論文,這裡我們考慮自然語言處理(NLP),使用arXiv學術數據庫。 為了執行此操作,我們定義一個函數 get_arxiv_data(max_results=10)
。 該函數從 arXiv 收集最新的 NLP 論文摘要,並將其封裝到 LangChain Document 對像中,以摘要作為內容,以唯一的條目 id 作為來源。
我們將使用 arXiv API 來獲取與 NLP 相關的最新論文:

該函數從 arXiv 檢索最新 NLP 論文的摘要,並將其轉換為 LangChain Document 對象。 我們使用論文的摘要及其唯一的條目 ID(論文的 URL)分別作為內容和來源。

讓我們定義我們的語料庫並設置 LangChain:
1 2 | sources =get_arxiv_data(2) chain =load_qa_with_sources_chain(OpenAI(temperature=0)) |
我們的學術問答系統現已準備就緒,我們可以通過提出問題來測試它:
1 | print_answer( "What are the recent advancements in NLP?" ) |
輸出將是您問題的答案,並引用提取信息的來源。 例如:
Recent advancements in NLP include Retriever-augmented instruction-following models and a novel computational framework for solving alternating current optimal power flow (ACOPF) problems using graphics processing units (GPUs).SOURCES: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1 |
您可以根據需要輕鬆切換型號或更改系統。 例如,我們在這裡更改為 GPT-4,這最終為我們提供了更好、更詳細的響應。
12 | sources = get_arxiv_data( 2 ) chain = load_qa_with_sources_chain(OpenAI(model_name = "gpt-4" ,temperature = 0 )) |
Recent advancements in Natural Language Processing (NLP) include the development of retriever-augmented instruction-following models for information-seeking tasks such as question answering (QA). These models can be adapted to various information domains and tasks without additional fine-tuning. However, they often struggle to stick to the provided knowledge and may hallucinate in their responses. Another advancement is the introduction of a computational framework for solving alternating current optimal power flow (ACOPF) problems using graphics processing units (GPUs). This approach utilizes a single-instruction, multiple-data (SIMD) abstraction of nonlinear programs (NLP) and employs a condensed-space interior-point method (IPM) with an inequality relaxation strategy. This strategy allows for the factorization of the KKT matrix without numerical pivoting, which has previously hampered the parallelization of the IPM algorithm.SOURCES: http://arxiv.org/abs/2307.16877v1, http://arxiv.org/abs/2307.16830v1 |
GPT-4 中的令牌可以短至一個字符,也可以長至一個單詞。 例如,GPT-4-32K 在一次運行中最多可以處理 32,000 個令牌,而 GPT-4-8K 和 GPT-3.5-turbo 分別支持 8,000 個和 4,000 個令牌。 然而,值得注意的是,與這些模型的每次交互都會產生成本,該成本與處理的令牌數量(無論是輸入還是輸出)成正比。
在我們的問答系統中,如果一篇學術文獻超過了最大令牌限制,系統將無法完整處理它,從而影響響應的質量和完整性。 要解決此問題,可以將文本分解為符合令牌限制的較小部分。
FAISS(Facebook 人工智能相似性搜索) 有助於快速找到與用戶查詢相關的最相關的文本塊。 它創建每個文本塊的向量表示,並使用這些向量來識別和檢索與給定問題的向量表示最相似的塊。
重要的是要記住,即使使用 FAISS 這樣的工具,由於標記限製而必須將文本分成更小的塊有時會導致上下文丟失,從而影響答案的質量。 因此,在使用這些大型語言模型時,仔細管理和優化令牌使用至關重要。
1 | pip install faiss-cpu langchain CharacterTextSplitter |
確保安裝了上述庫後,運行

代碼完成後,我們現在就有了一個查詢NLP領域最新學術文獻的強大工具。
Recent advancements in NLP include the use of deep neural networks (DNNs) for automatic text analysis and natural language processing (NLP) tasks such as spell checking, language detection, entity extraction, author detection, question answering, and other tasks. SOURCES: http://arxiv.org/abs/2307.10652v1, http://arxiv.org/abs/2307.07002v1, http://arxiv.org/abs/2307.12114v1, http://arxiv.org/abs/2307.16217v1 |
結論
將大型語言模型 (LLM) 集成到應用程序中加速了多個領域的採用,包括語言翻譯、情感分析和信息檢索。 快速工程是最大限度發揮這些模型潛力的強大工具,而 Langchain 在簡化這一複雜任務方面處於領先地位。 其標準化界面、靈活的提示模板、強大的模型集成以及代理和鏈的創新使用確保了法學碩士的最佳表現。
然而,儘管取得了這些進步,但仍有一些提示需要牢記。 當您使用 Langchain 時,必須了解輸出的質量在很大程度上取決於提示的措辭。 嘗試不同的提示樣式和結構可以產生更好的結果。 另外,請記住,雖然 Langchain 支持多種語言模型,但每種語言模型都有其優點和缺點。 為您的特定任務選擇合適的產品至關重要。 最後,重要的是要記住,使用這些模型需要考慮成本,因為令牌處理直接影響交互成本。
正如分步指南中所演示的,Langchain 可以為強大的應用程序提供支持,例如學術文獻問答系統。 隨著用戶社區的不斷壯大以及在開源領域的日益突出,Langchain 有望成為充分利用 GPT-4 等 LLM 潛力的關鍵工具。