新的網(wǎng)站建設(shè)技術(shù)方案東莞企業(yè)網(wǎng)站設(shè)計公司
一、說明
????????在日常生活中,我們主要致力于構(gòu)建端到端的應(yīng)用程序。我們可以使用許多自動 ML 平臺和 CI/CD 管道來自動化 ml 管道。我們還有像Roboflow和Andrew N.G.的登陸AI這樣的工具來自動化或創(chuàng)建端到端的計算機視覺應(yīng)用程序。
????????如果我們想在OpenAI或擁抱臉的幫助下創(chuàng)建一個LLM應(yīng)用程序,那么以前,我們想手動完成。出于同樣的目的,我們有兩個最著名的庫,Haystack?和?LangChain,它們幫助我們?yōu)?LLM 模型創(chuàng)建端到端的應(yīng)用程序或管道。讓我們更多地了解Langchain。
二、什么是LangChain鏈?
????????LangChain 是一個創(chuàng)新的框架,它正在徹底改變我們開發(fā)由語言模型驅(qū)動的應(yīng)用程序的方式。通過結(jié)合先進的原則,LangChain正在重新定義通過傳統(tǒng)API可以實現(xiàn)的極限。此外,LangChain應(yīng)用程序是代理的,使語言模型能夠輕松交互并適應(yīng)其環(huán)境。
????????Langchain由幾個模塊組成。顧名思義,將不同的模塊鏈接在一起是Langchain的主要目的。這里的想法是將每個模塊鏈接在一個鏈中,最后使用該鏈一次調(diào)用所有模塊。
????????這些模塊包括以下內(nèi)容:
- 型
- 提示
- 記憶
- 鏈
- 代理
- 回調(diào)
- 指標
讓我們從,
2.1 模型?
????????如簡介中所述,模型主要涵蓋大型語言模型。相當大的大型語言模型是由具有眾多參數(shù)的神經(jīng)網(wǎng)絡(luò)組成的模型,并在大量未標記的文本上進行訓(xùn)練??萍季揞^有各種各樣的LLM,比如,
- 谷歌的伯特
- OpenAI 的 GPT-3
- 谷歌的拉MDA
- PaLM by Google
- LLaMA by Meta AI
- OpenAI 的 GPT-4
- 還有更多...
????????在語言鏈的幫助下,與大型語言模型的交互變得更加容易。Langchain提供的界面和功能有助于輕松地將LLM的強大功能集成到您的工作應(yīng)用程序中。LangChain通過利用asyncio庫為LLM提供異步支持。
????????還有?Langchain 提供的異步支持[通過釋放處理請求的線程,服務(wù)器可以將其分配給其他任務(wù),直到準備好響應(yīng),從而最大限度地提高資源利用率。目前、、、 和 受支持,但對其他 LLM 的異步支持已在路線圖上。您可以使用該方法異步調(diào)用 OpenAI LLM。您還可以編寫自定義 LLM?包裝器,而不是 LangChain 中支持的包裝器。OpenAI
PromptLayerOpenAI
ChatOpenAI
Anthropic
agenerate
????????我在應(yīng)用程序中使用了OpenAI,并且主要使用Davinci,Babbage,Curie和Ada模型來陳述問題。每個模型都有自己的優(yōu)點、令牌使用計數(shù)和用例。您可以在此處閱讀有關(guān)這些模型的更多信息。
2.1.1 示例 1?
# Importing modules
from langchain.llms import OpenAI#Here we are using text-ada-001 but you can change it
llm = OpenAI(model_name="text-ada-001", n=2, best_of=2)#Ask anything
llm("Tell me a joke")
2.1.2 產(chǎn)出1:
'\n\nWhy did the chicken cross the road?\n\nTo get to the other side.'
示例 2:
llm_result = llm.generate(["Tell me a poem"]*15)
產(chǎn)出2:
[Generation(text="\n\nWhat if love neverspeech\n\nWhat if love never ended\n\nWhat if love was only a feeling\n\nI'll never know this love\n\nIt's not a feeling\n\nBut it's what we have for each other\n\nWe just know that love is something strong\n\nAnd we can't help but be happy\n\nWe just feel what love is for us\n\nAnd we love each other with all our heart\n\nWe just don't know how\n\nHow it will go\n\nBut we know that love is something strong\n\nAnd we'll always have each other\n\nIn our lives."),Generation(text='\n\nOnce upon a time\n\nThere was a love so pure and true\n\nIt lasted for centuries\n\nAnd never became stale or dry\n\nIt was moving and alive\n\nAnd the heart of the love-ick\n\nIs still beating strong and true.')]
2.2 提示?
????????我們都知道,提示是我們提供給任何系統(tǒng)的輸入,以根據(jù)我們的用例完善我們的答案,使其更準確或更具體。很多時候,您可能希望獲得更多結(jié)構(gòu)化的信息,而不僅僅是文本回復(fù)。許多新的目標檢測和基于對比預(yù)訓(xùn)練和零鏡頭學(xué)習(xí)的分類算法包括提示作為結(jié)果的有效輸入。舉個例子,OpenAI的CLIP和META的Grounding DINO使用提示作為預(yù)測的輸入。
????????在 Langchain 中,我們可以根據(jù)自己想要的答案設(shè)置一個提示模板,然后將其鏈接到主鏈進行輸出預(yù)測。輸出分析器還有一個工具來優(yōu)化結(jié)果。輸出解析器負責 (1) 指示模型應(yīng)如何格式化輸出,以及 (2) 將輸出解析為所需的格式(包括在必要時重試)。
在 Langchain 中,我們可以提供提示作為模板。模板是指提示的藍圖或我們想要答案的特定格式。LangChain提供預(yù)先設(shè)計的提示模板,可以為不同類型的任務(wù)生成提示。但是,在某些情況下,默認模板可能無法滿足您的要求。默認情況下,我們可以使用自定義提示模板。
2.2.1?例?
from langchain import PromptTemplate
# This template will act as a blue print for prompttemplate = """
I want you to act as a naming consultant for new companies.
What is a good name for a company that makes {product}?
"""prompt = PromptTemplate(input_variables=["product"],template=template,
)
prompt.format(product="colorful socks")
# -> I want you to act as a naming consultant for new companies.
# -> What is a good name for a company that makes colorful socks?
2.3 記憶:
????????默認情況下,LangChain 中的鏈和代理以無狀態(tài)模式運行,這意味著它們獨立處理每個傳入的查詢。但是,在某些應(yīng)用程序中,例如聊天機器人,在短期和長期內(nèi)保留以前的交互非常重要。這就是“記憶”概念發(fā)揮作用的地方。
LangChain以兩種形式提供內(nèi)存組件。首先,LangChain 提供了用于管理和操作以前的聊天消息的輔助實用程序,這些消息被設(shè)計為模塊化且有用,無論其用例如何。其次,LangChain提供了一種將這些實用程序集成到鏈中的簡單方法。這使得它們具有高度的通用性和適應(yīng)任何情況。
2.3.1 例?
from langchain.memory import ChatMessageHistoryhistory = ChatMessageHistory()
history.add_user_message("hi!")history.add_ai_message("whats up?")
history.messages
2.3.2 輸出?
<span style="color:rgba(0, 0, 0, 0.8)"><span style="background-color:#ffffff"><span style="background-color:#f9f9f9"><span style="color:#242424">[HumanMessage(content='<span style="color:#c41a16">hi!</span>', additional_kwargs={}),AIMessage(content='<span style="color:#c41a16">whats up?'</span>, additional_kwargs={})]</span></span></span></span>
2.4 鏈:
????????鏈提供了一種將各種組件合并到統(tǒng)一應(yīng)用程序中的方法。例如,可以創(chuàng)建一個鏈,該鏈接收來自用戶的輸入,使用提示模板對其進行格式化,然后將格式化的回復(fù)傳輸?shù)絃LM。通過將多個鏈與其他組件集成,可以生成更復(fù)雜的鏈。
???LLMChain
被認為是查詢 LLM 對象使用最廣泛的方法之一。它根據(jù)提示模板格式化提供的輸入鍵值以及內(nèi)存鍵值(如果存在),然后將格式化的字符串發(fā)送到 LLM,然后生成返回的輸出。
????????在調(diào)用語言模型之后,可以采取一系列步驟,其中可以對模型進行一系列調(diào)用。當希望將一個調(diào)用的輸出用作另一個調(diào)用的輸入時,這種做法特別有價值。在這一系列鏈中,每個單獨的鏈都有一個輸入和一個輸出,一個步驟的輸出用作下一個步驟的輸入。
#Here we are chaining everything
from langchain.chat_models import ChatOpenAI
from langchain.prompts.chat import (ChatPromptTemplate,HumanMessagePromptTemplate,
)
human_message_prompt = HumanMessagePromptTemplate(prompt=PromptTemplate(template="What is a good name for a company that makes {product}?",input_variables=["product"],))
chat_prompt_template = ChatPromptTemplate.from_messages([human_message_prompt])
chat = ChatOpenAI(temperature=0.9)
# Temperature is about randomness in answer more the temp, random the answer
#Final Chainchain = LLMChain(llm=chat, prompt=chat_prompt_template)
print(chain.run("colorful socks"))
2.5 代理:
????????某些應(yīng)用程序可能不僅需要預(yù)先確定的LLM /其他工具調(diào)用序列,還需要依賴于用戶輸入的不確定序列。這些類型的序列包括可以訪問一系列工具的“代理”。根據(jù)用戶輸入,代理可以確定應(yīng)調(diào)用哪些工具(如果有)。
根據(jù)文檔,代理的高級偽代碼如下所示:
收到一些用戶輸入
代理決定使用哪個工具(如果有),以及該工具的輸入應(yīng)該是什么
然后使用該工具輸入調(diào)用該工具,并記錄觀察結(jié)果(這只是使用該工具輸入調(diào)用該工具的輸出。
工具、工具輸入和觀察的歷史記錄將傳遞回代理,并決定下一步要執(zhí)行的步驟
重復(fù)此操作,直到代理決定不再需要使用工具,然后直接響應(yīng)用戶。
2.5.1 例:
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAIllm = OpenAI(temperature=0)tools = load_tools(["serpapi", "llm-math"], llm=llm)agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)agent.run("Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?")
????????讓我們在下面附的一個快照中總結(jié)所有內(nèi)容。
LangChain的高級思想[圖片來源:作者]
????????了解所有模塊和鏈接對于使用 Lang-Chain 為大型語言模型構(gòu)建管道應(yīng)用程序非常重要。這只是對 LangChain 的簡單介紹,在本系列的下一部分,我們將研究真正的管道,例如制作 pdfGPT、制作對話機器人、回答文檔和其他應(yīng)用程序。這種基于應(yīng)用程序的工作將使這些概念更加清晰。LangChain 的文檔很好理解,但我添加了我自己的想法以使其更清晰。你可以在這里找到LangChain的文檔。
[編輯:我在下面添加了LangChain系列的下一部分,這樣你就不需要在我的個人資料中搜索它]
其它參考:
了解語言鏈🦜?🔗:第2部分
實際實施 LangChain 以構(gòu)建自定義數(shù)據(jù)機器人涉及合并內(nèi)存、提示模板和...
代幣和模型:了解語言鏈 🦜?🔗 部分:3
了解令牌以及如何為您的用例選擇 OpenAI 模型,API 密鑰定價的工作原理