1.背景說明
? ? ? ? 公司在新的一年規劃中突然提出要搞生成式AI(GenAI)的相關東西,在公司分享的參考資料中了解到了一些相關的信息,之所以想到使用LangChain,是因為在應用中遇到了瓶頸問題,除了已經了解和研究過的OpenAI的ChatGpt,基本再沒有別的生成AI的相關應用落地。一方面,gpt的目前使用僅限于通過接口秘鑰去調用將結果返回到頁面上,而公司希望能夠通過代碼接口的方式傳入數據調用不同的開源大語言模型,然后實時返回解析結果。另一方面,OpenAI的所有預訓練模型及使用都是收費的,盡管每個token的收費為$0.002~$0.005,但如果輸入和輸出的內容較多,特別在調試階段,需要反復測試不同情況下系統的響應,這樣積累下來的花費是非常大的。因此決定嘗試使用其它的LLM模型代替OpenAI模型,例如Meta于2月份推出的LLaMa模型以及Google的flan-t5-xxl模型。而不管要使用別的任意開源模型,都需要依賴一個訪問接口才可以。
2.LangChain
? ? ? ? 介紹
????????LangChain是一個圍繞大型語言模型(Large Language Models,?LLMs)建立的開源框架。LangChain不是LLM的提供者,而是提供了一個標準接口,它簡化了提示(prompt)管理和優化,通過這個接口,用戶可以與各種LLM進行交互,并包括與LLM一起工作的通用工具。LangChain為鏈(chains)提供了一個標準接口,使開發者能夠創建超越單一LLM調用的調用序列。此外,它能夠對長篇文字進行總結和對特定數據源的提問進行回答。
????????特性
????????大型語言模型 (LLMs) 是一種日益變革的技術,使開發者能夠建立以前無法想象的應用程序。然而,孤立地使用LLM往往不足以創建真正強大的應用程序,LLMs的真正力量在于它們與其他計算或知識來源的整合。Langchain是一個尖端的開源Python庫,專門提供先進的LLM鏈、代理、工具和索引,它以創新的面向對象的方式創建提示 (prompts),并將工具的輸出鏈化。LangChain和Llama-index正試圖準確地解決這些挑戰。LangChain為開發者提供了以下功能,其復雜程度依次遞增:
(1)?LLMs and Prompts
(2)?Chains
(3)?Data Augmented Generation
(4)?Agents
(5)?Memory
(6)?Evaluation
LangChain的其他一些特點包括它對數據增強生成、代理、內存和評估的支持。它為鏈提供了一個標準的接口,并與其他工具進行了大量的整合。LangChain還提供了一個標準的代理(agents)接口,提供了一些可供選擇的代理,以及端到端的代理實例。這些代理可用于更接地氣的問題回答、與API的互動,甚至采取行動。在LangChain中,代理是使用語言模型與其他工具互動的系統。這些代理可以用來為下一代個人助理提供動力--這些系統可以智能地理解用戶的意思,然后采取行動來幫助完成目標。內存是LangChain的另一個特點,它允許在鏈或代理的調用之間持久保存狀態。
3 測試
????????為了取代OpenAI,首先想到的是HuggingFace庫中的模型,在GPT-2時代,我們一直使用該庫中的模型,本公眾號在2021年寫了大量這方面的文章,下面是一個簡單應用例子,在這個例子中,共使用了3個類:PromptTemplate用來創建創建提示行的格式prompt,HuggingFaceHub用來建立預訓練模型hub_llm,LLMChain用來產生模型鏈llm_chain。在本例中,使用了google/flan-t5-xxl模型,該模型是在T5【生成摘要(Summarization)的新方法】的基礎上發展而來的。
from langchain import PromptTemplate, HuggingFaceHub, LLMChaintemplate = """Question: {question}Answer: Let's think step by step."""prompt = PromptTemplate(template=template, input_variables = ["question"])hub_llm?=?HuggingFaceHub( repo_id = model_id, model_kwargs={"temperature":1, "max_length":364})
llm_chain?=?LLMChain(prompt=prompt,?llm=hub_llm)
question = "What is mining engineering?"
print(llm_chain.run(question))
問題:What is mining engineering?
回答:Mining engineering is the engineering discipline that applies science and technology to the extraction of minerals from the earth.(采礦工程是將科學和技術應用于從地球上提取礦物的工程學科)?[first.py]
4?結束語
????????本文討論了LangChain的使用,LangChain是一個圍繞大型語言模型(LLM)建立的開源框架,是為了解決成本問題預先訓練好的模型。LangChain簡化了提示管理和優化,允許用戶與各種LLM互動,并創建調用鏈以超越單一的LLM。該框架還支持數據生成文章。提供了一個使用LangChain的例子,用HuggingFace庫中的模型作為預訓練模型,用LLMChain生成一個模型鏈。這個例子的應用成功地回答了"什么是采礦工程"的問題。