0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是LangChain?深入地了解一下LangChain

jf_ro2CN3Fa ? 來源:分布式實驗室 ? 2023-07-14 09:50 ? 次閱讀

在日常生活中,我們通常致力于構(gòu)建端到端的應(yīng)用程序。有許多自動機(jī)器學(xué)習(xí)平臺和持續(xù)集成/持續(xù)交付(CI/CD)流水線可用于自動化我們的機(jī)器學(xué)習(xí)流程。我們還有像 Roboflow 和 Andrew N.G. 的 Landing AI 這樣的工具,可以自動化或創(chuàng)建端到端的計算機(jī)視覺應(yīng)用程序。

如果我們想要借助 OpenAI 或 Hugging Face 創(chuàng)建基于大語言模型的應(yīng)用程序,以前我們可能需要手動完成?,F(xiàn)在,為了實現(xiàn)相同的目標(biāo),我們有兩個最著名的庫,即 Haystack 和 LangChain,它們可以幫助我們創(chuàng)建基于大語言模型的端到端應(yīng)用程序或流程。

下面讓我們深入地了解一下 LangChain。

什么是 LangChain?

LangChain 是一種創(chuàng)新框架,正在徹底改變我們開發(fā)由語言模型驅(qū)動的應(yīng)用程序的方式。 通過引入先進(jìn)的原理,LangChain 正在重新定義傳統(tǒng) API 所能實現(xiàn)的限制。此外,LangChain 應(yīng)用程序具有智能代理的特性,使語言模型能夠與環(huán)境進(jìn)行互動和自適應(yīng)。

LangChain 由多個模塊組成。正如其名稱所示,LangChain 的主要目的是將這些模塊進(jìn)行鏈?zhǔn)竭B接 。這意味著我們可以將每個模塊都串聯(lián)在一起,并使用這個鏈?zhǔn)浇Y(jié)構(gòu)一次性調(diào)用所有模塊。

這些模塊由以下部分組成:

Model

正如介紹中所討論的那樣,模型主要涵蓋大語言模型(LLM)。大語言模型是指具有大量參數(shù)并在大規(guī)模無標(biāo)簽文本上進(jìn)行訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型。科技巨頭們推出了各種各樣的大型語言模型,比如:

谷歌的 BERT

OpenAI 的 GPT-3

谷歌 LaMDA

谷歌 PaLM

Meta AI 的 LLaMA

OpenAI 的 GPT-4

……

借助 LangChain,與大語言模型的交互變得更加便捷。 LangChain 提供的接口和功能有助于將 LLM 的強(qiáng)大能力輕松集成到你的工作應(yīng)用程序中。LangChain 利用 asyncio 庫為 LLM 提供異步支持。

對于需要同時并發(fā)調(diào)用多個 LLM 的網(wǎng)絡(luò)綁定場景,LangChain 還提供了異步支持 。通過釋放處理請求的線程,服務(wù)器可以將其分配給其他任務(wù),直到響應(yīng)準(zhǔn)備就緒,從而最大限度地提高資源利用率。

目前,LangChain 支持 OpenAI、PromptLayerOpenAI、ChatOpenAI 和 Anthropic 等模型的異步支持,但在未來的計劃中將擴(kuò)展對其他 LLM 的異步支持。你可以使用 agenerate 方法來異步調(diào)用 OpenAI LLM。此外,你還可以編寫自定義的 LLM 包裝器,而不僅限于 LangChain 所支持的模型。

我在我的應(yīng)用程序中使用了 OpenAI,并主要使用了 Davinci、Babbage、Curie 和 Ada 模型來解決我的問題。每個模型都有其自身的優(yōu)點、令牌使用量和使用案例。

案例 1:

>基于SpringBoot+MyBatisPlus+Vue&Element實現(xiàn)的后臺管理系統(tǒng)+用戶小程序,支持RBAC動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
>
>*項目地址:
>*視頻教程

#Importingmodules
fromlangchain.llmsimportOpenAI

#Hereweareusingtext-ada-001butyoucanchangeit
llm=OpenAI(model_name="text-ada-001",n=2,best_of=2)

#Askanything
llm("Tellmeajoke")

輸出 1:

'

Whydidthechickencrosstheroad?

Togettotheotherside.'

案例 2:

llm_result=llm.generate(["Tellmeapoem"]*15)

輸出 2:

[Generation(text="

Whatifloveneverspeech

Whatifloveneverended

Whatiflovewasonlyafeeling

I'llneverknowthislove

It'snotafeeling

Butit'swhatwehaveforeachother

Wejustknowthatloveissomethingstrong

Andwecan'thelpbutbehappy

Wejustfeelwhatloveisforus

Andweloveeachotherwithallourheart

Wejustdon'tknowhow

Howitwillgo

Butweknowthatloveissomethingstrong

Andwe'llalwayshaveeachother

Inourlives."),
Generation(text='

Onceuponatime

Therewasalovesopureandtrue

Itlastedforcenturies

Andneverbecamestaleordry

Itwasmovingandalive

Andtheheartofthelove-ick

Isstillbeatingstrongandtrue.')]

Prompt

眾所周知,提示(prompt)是我們向系統(tǒng)提供的輸入,以便根據(jù)我們的使用案例對答案進(jìn)行精確或特定的調(diào)整。許多時候,我們希望得到的不僅僅是文本,還需要更結(jié)構(gòu)化的信息。基于對比預(yù)訓(xùn)練和零樣本學(xué)習(xí)的許多新的目標(biāo)檢測和分類算法都將提示作為有效的輸入來進(jìn)行結(jié)果預(yù)測。 舉例來說,OpenAI 的 CLIP 和 META 的 Grounding DINO 都使用提示作為預(yù)測的輸入。

在 LangChain 中,我們可以根據(jù)需要設(shè)置提示模板,并將其與主鏈相連接以進(jìn)行輸出預(yù)測。 此外,LangChain 還提供了輸出解析器的功能,用于進(jìn)一步精煉結(jié)果。輸出解析器的作用是(1)指導(dǎo)模型輸出的格式化方式,和(2)將輸出解析為所需的格式(包括必要時的重試)。

在 LangChain 中,我們可以提供提示模板作為輸入。 模板指的是我們希望獲得答案的具體格式或藍(lán)圖。LangChain 提供了預(yù)先設(shè)計好的提示模板,可以用于生成不同類型任務(wù)的提示。然而,在某些情況下,預(yù)設(shè)的模板可能無法滿足你的需求。在這種情況下,我們可以使用自定義的提示模板。

案例:

fromlangchainimportPromptTemplate

>基于SpringCloudAlibaba+Gateway+Nacos+RocketMQ+Vue&Element實現(xiàn)的后臺管理系統(tǒng)+用戶小程序,支持RBAC動態(tài)權(quán)限、多租戶、數(shù)據(jù)權(quán)限、工作流、三方登錄、支付、短信、商城等功能
>
>*項目地址:
>*視頻教程

#Thistemplatewillactasablueprintforprompt

template="""
Iwantyoutoactasanamingconsultantfornewcompanies.
Whatisagoodnameforacompanythatmakes{product}?
"""

prompt=PromptTemplate(
input_variables=["product"],
template=template,
)
prompt.format(product="colorfulsocks")
#->Iwantyoutoactasanamingconsultantfornewcompanies.
#->Whatisagoodnameforacompanythatmakescolorfulsocks?

Memory

在 LangChain 中,鏈?zhǔn)胶痛砟J(rèn)以無狀態(tài)模式運行,即它們獨立處理每個傳入的查詢。然而,在某些應(yīng)用程序(如聊天機(jī)器人)中,保留先前的交互記錄對于短期和長期都非常重要。這時就需要引入 “內(nèi)存” 的概念。

LangChain 提供兩種形式的內(nèi)存組件。首先,LangChain 提供了輔助工具,用于管理和操作先前的聊天消息,這些工具設(shè)計成模塊化的,無論用例如何,都能很好地使用。其次,LangChain 提供了一種簡單的方法將這些工具集成到鏈?zhǔn)浇Y(jié)構(gòu)中,使其非常靈活和適應(yīng)各種情況。

案例:

fromlangchain.memoryimportChatMessageHistory

history=ChatMessageHistory()
history.add_user_message("hi!")

history.add_ai_message("whatsup?")
history.messages

輸出:

[HumanMessage(content='hi!',additional_kwargs={}),
AIMessage(content='whatsup?',additional_kwargs={})]

Chain

鏈?zhǔn)剑–hain)提供了將各種組件合并成一個統(tǒng)一應(yīng)用程序的方式。例如,可以創(chuàng)建一個鏈?zhǔn)?,它接收用戶的輸入,并使?PromptTemplate 對其進(jìn)行格式化,然后將格式化后的回復(fù)傳遞給 LLM(大語言模型)。通過將多個鏈?zhǔn)脚c其他組件集成,可以生成更復(fù)雜的鏈?zhǔn)浇Y(jié)構(gòu)。

LLMChain 被認(rèn)為是查詢 LLM 對象最常用的方法之一。 它根據(jù)提示模板將提供的輸入鍵值和內(nèi)存鍵值(如果存在)進(jìn)行格式化,然后將格式化后的字符串發(fā)送給 LLM,LLM 生成并返回輸出結(jié)果。

在調(diào)用語言模型后,可以按照一系列步驟進(jìn)行操作,可以進(jìn)行多個模型調(diào)用的序列。這種做法特別有價值,當(dāng)希望將一個調(diào)用的輸出作為另一個調(diào)用的輸入時。在這個鏈?zhǔn)叫蛄兄校總€鏈?zhǔn)蕉加幸粋€輸入和一個輸出,一個步驟的輸出作為下一個步驟的輸入。

#Herewearechainingeverything
fromlangchain.chat_modelsimportChatOpenAI
fromlangchain.prompts.chatimport(
ChatPromptTemplate,
HumanMessagePromptTemplate,
)
human_message_prompt=HumanMessagePromptTemplate(
prompt=PromptTemplate(
template="Whatisagoodnameforacompanythatmakes{product}?",
input_variables=["product"],
)
)
chat_prompt_template=ChatPromptTemplate.from_messages([human_message_prompt])
chat=ChatOpenAI(temperature=0.9)
#Temperatureisaboutrandomnessinanswermorethetemp,randomtheanswer
#FinalChain

chain=LLMChain(llm=chat,prompt=chat_prompt_template)
print(chain.run("colorfulsocks"))

Agent

某些應(yīng)用可能需要不僅預(yù)定的 LLM(大型語言模型)/其他工具調(diào)用順序,還可能需要根據(jù)用戶的輸入確定不確定的調(diào)用順序。這種情況下涉及到的序列包括一個 “代理(Agent)”,該代理可以訪問多種工具。根據(jù)用戶的輸入,代理可能決定是否調(diào)用這些工具,并確定調(diào)用時的輸入。

根據(jù)文檔,代理的高級偽代碼大致如下:

接收用戶輸入。

代理根據(jù)輸入決定是否使用某個工具,以及該工具的輸入應(yīng)該是什么。

調(diào)用該工具,并記錄觀測結(jié)果(即使用該工具和輸入調(diào)用后得到的輸出)。

將工具、工具輸入和觀測結(jié)果的歷史傳遞回代理,代理決定下一步應(yīng)該采取的步驟。

重復(fù)上述步驟,直到代理決定不再需要使用工具,然后直接向用戶作出回應(yīng)。

這個過程會一直重復(fù),直到代理決定不再需要使用工具,然后直接回應(yīng)用戶。

案例:

fromlangchain.agentsimportload_tools
fromlangchain.agentsimportinitialize_agent
fromlangchain.agentsimportAgentType
fromlangchain.llmsimportOpenAI

llm=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("WhoisLeoDiCaprio'sgirlfriend?Whatishercurrentageraisedtothe0.43power?")

讓我們將所有內(nèi)容總結(jié)在下面這張圖中。

bfe1d1ee-21e6-11ee-962d-dac502259ad0.jpg

理解所有模塊和鏈?zhǔn)讲僮鲗τ谑褂?LangChain 構(gòu)建大語言模型的管道應(yīng)用程序非常重要。這只是對 LangChain 的簡單介紹。

LangChain 的實際應(yīng)用

廢話少說,讓我們直接使用 LangChain 構(gòu)建簡單的應(yīng)用程序。其中最有趣的應(yīng)用是在自定義數(shù)據(jù)上創(chuàng)建一個問答機(jī)器人。

免責(zé)聲明/警告:這段代碼僅用于展示應(yīng)用程序的構(gòu)建方式。我并不保證代碼的優(yōu)化,并且根據(jù)具體的問題陳述,可能需要進(jìn)行進(jìn)一步改進(jìn)。

開始導(dǎo)入模塊

導(dǎo)入 LangChain 和 OpenAI 用于大語言模型部分。如果你還沒有安裝它們,請先安裝。

#IMPORTS
fromlangchain.embeddings.openaiimportOpenAIEmbeddings
fromlangchain.vectorstoresimportChroma
fromlangchain.text_splitterimportCharacterTextSplitter
fromlangchain.chainsimportConversationalRetrievalChain
fromlangchain.vectorstoresimportElasticVectorSearch,Pinecone,Weaviate,FAISS
fromPyPDF2importPdfReader
fromlangchainimportOpenAI,VectorDBQA
fromlangchain.vectorstoresimportChroma
fromlangchain.promptsimportPromptTemplate
fromlangchain.chainsimportConversationChain

fromlangchain.document_loadersimportTextLoader
#fromlangchainimportConversationalRetrievalChain
fromlangchain.chains.question_answeringimportload_qa_chain
fromlangchainimportLLMChain
#fromlangchainimportretrievers
importlangchain
fromlangchain.chains.conversation.memoryimportConversationBufferMemory

py2PDF 是用于讀取和處理 PDF 文件的工具。此外,還有不同類型的內(nèi)存,例如 ConversationBufferMemory 和 ConversationBufferWindowMemory,它們具有特定的功能。我將在最后一部分詳細(xì)介紹有關(guān)內(nèi)存的內(nèi)容。

設(shè)置環(huán)境

我想你知道如何獲取 OpenAI API 密鑰,但是我還是想說明一下:

前往 OpenAI API 頁面,

點擊 “Create new secret key(創(chuàng)建新的密鑰) ”

那將是你的 API 密鑰。請將其粘貼在下方

importos
os.environ["OPENAI_API_KEY"]="sk-YOURAPIKEY"

要使用哪個模型?Davinci、Babbage、Curie 還是 Ada?基于 GPT-3、基于 GPT-3.5、還是基于 GPT-4?關(guān)于模型有很多問題,所有模型都適用于不同的任務(wù)。有些模型價格較低,有些模型更準(zhǔn)確。

為了簡單起見,我們將使用最經(jīng)濟(jì)實惠的模型 “gpt-3.5-turbo”。溫度是一個參數(shù),它影響答案的隨機(jī)性。溫度值越高,我們得到的答案就越隨機(jī)。

llm=ChatOpenAI(temperature=0,model_name="gpt-3.5-turbo")

在這里,你可以添加自己的數(shù)據(jù)。你可以使用任何格式,如 PDF、文本、文檔或 CSV。根據(jù)你的數(shù)據(jù)格式,你可以取消/注釋以下代碼。

#Customdata
fromlangchain.document_loadersimportDirectoryLoader
pdf_loader=PdfReader(r'YourPDFlocation')

#excel_loader=DirectoryLoader('./Reports/',glob="/*.txt")
#word_loader=DirectoryLoader('./Reports/',glob="/*.docx")

我們無法一次性添加所有數(shù)據(jù)。我們將數(shù)據(jù)分成塊并將其發(fā)送以創(chuàng)建數(shù)據(jù) Embedding。

Embedding 是以數(shù)字向量或數(shù)組的形式表示的,它們捕捉了模型處理和生成的標(biāo)記的實質(zhì)和上下文信息。這些嵌入是通過模型的參數(shù)或權(quán)重派生出來的,用于編碼和解碼輸入和輸出文本。

c007294e-21e6-11ee-962d-dac502259ad0.png

這就是 Embedding 的創(chuàng)建方式。

簡單來說,在 LLM 中,Embedding 是將文本表示為數(shù)字向量的一種方式。這使得語言模型能夠理解單詞和短語的含義,并執(zhí)行文本分類、摘要和翻譯等任務(wù)。

通俗地說,Embedding 是將單詞轉(zhuǎn)化為數(shù)字的一種方法。 這是通過在大量文本語料庫上訓(xùn)練機(jī)器學(xué)習(xí)模型來實現(xiàn)的。模型學(xué)會將每個單詞與一個唯一的數(shù)字向量相關(guān)聯(lián)。該向量代表單詞的含義,以及與其他單詞的關(guān)系。

c03b21e0-21e6-11ee-962d-dac502259ad0.jpg

讓我們做與上圖所示完全相同的事情。

#Preprocessingoffile

raw_text=''
fori,pageinenumerate(pdf_loader.pages):
text=page.extract_text()
iftext:
raw_text+=text

#print(raw_text[:100])


text_splitter=CharacterTextSplitter(
separator="
",
chunk_size=1000,
chunk_overlap=200,
length_function=len,
)
texts=text_splitter.split_text(raw_text)

在實際情況中,當(dāng)用戶發(fā)起查詢時,將在向量存儲中進(jìn)行搜索,并檢索出最合適的索引,然后將其傳遞給 LLM。然后,LLM 會重新構(gòu)建索引中的內(nèi)容,以向用戶提供格式化的響應(yīng)。

我建議進(jìn)一步深入研究向量存儲和 Embedding 的概念,以增強(qiáng)你的理解。

embeddings=OpenAIEmbeddings()
#vectorstore=Chroma.from_documents(documents,embeddings)
vectorstore=FAISS.from_texts(texts,embeddings)

嵌入向量直接存儲在一個向量數(shù)據(jù)庫中。有許多可用的向量數(shù)據(jù)庫,如 Pinecone、FAISS 等。在這里,我們將使用 FAISS。

prompt_template="""Usethefollowingpiecesofcontexttoanswerthequestionattheend.Ifyoudon'tknowtheanswer,justsayGTGTGTGTGTGTGTGTGTG,don'ttrytomakeupananswer.
{context}
Question:{question}
HelpfulAnswer:"""
QA_PROMPT=PromptTemplate(
template=prompt_template,input_variables=['context',"question"]
)

你可以使用自己的提示來優(yōu)化查詢和答案。在編寫提示后,讓我們將其與最終的鏈條進(jìn)行鏈接。

讓我們調(diào)用最后的鏈條,其中包括之前鏈接的所有內(nèi)容。我們在這里使用 ConversationalRetrievalChain。它可以幫助我們以人類的方式進(jìn)行對話,并記住之前的聊天記錄。

qa=ConversationalRetrievalChain.from_llm(ChatOpenAI(temperature=0.8),vectorstore.as_retriever(),qa_prompt=QA_PROMPT)

我們將使用簡單的 Gradio 來創(chuàng)建一個 Web 應(yīng)用。你可以選擇使用 Streamlit 或其他前端技術(shù)。此外,還有許多免費的部署選項可供選擇,例如部署到 Hugging Face 或本地主機(jī)上,我們可以在稍后進(jìn)行。

#Frontendwebapp
importgradioasgr
withgr.Blocks()asdemo:
gr.Markdown("##GroundingDINOChatBot")
chatbot=gr.Chatbot()
msg=gr.Textbox()
clear=gr.Button("Clear")
chat_history=[]
defuser(user_message,history)
print("Typeofusemsg:",type(user_message))
#GetresponsefromQAchain
response=qa({"question":user_message,"chat_history":history})
#Appendusermessageandresponsetochathistory
history.append((user_message,response["answer"]))
print(history)
returngr.update(value=""),history
msg.submit(user,[msg,chatbot],[msg,chatbot],queue=False)
clear.click(lambda:None,None,chatbot,queue=False)
############################################

if__name__=="__main__":
demo.launch(debug=True)

這段代碼將在本地創(chuàng)建一個鏈接,你可以直接提出問題并查看回答。同時,在你的集成開發(fā)環(huán)境(IDE)中,你將看到聊天歷史記錄的維護(hù)情況。

bfe1d1ee-21e6-11ee-962d-dac502259ad0.jpg

LangChain 快照

這是一個簡單的介紹,展示了如何通過連接不同的模塊來創(chuàng)建最終的鏈條。通過對模塊和代碼進(jìn)行調(diào)整,你可以實現(xiàn)許多不同的功能。我想說,玩耍是研究的最高形式 !

LangChain 的 Token 和模型

Token

Token 可以被視為單詞的組成部分。 在處理提示信息之前,API 會將輸入拆分成 Token。Token 的切分位置不一定與單詞的開始或結(jié)束位置完全對應(yīng),還可能包括尾隨的空格甚至子詞。

在自然語言處理中,我們通常會進(jìn)行 Tokenizer 的操作,將段落拆分為句子或單詞。在這里,我們也將句子和段落切分成由單詞組成的小塊。

c0803e42-21e6-11ee-962d-dac502259ad0.jpg

上圖顯示了如何將文本分割為 Token。不同顏色表示不同的 Token。一個經(jīng)驗法則是,一個 Token 大約相當(dāng)于常見英語文本中的 4 個字符。這意味著 100 個 Token 大約相當(dāng)于 75 個單詞。

如果你想檢查特定文本的 Token 數(shù)量,可以直接在 OpenAI 的 Tokenizer 上進(jìn)行檢查。

另一種計算 Token 數(shù)量的方法是使用 tiktoken 庫。

importtiktoken
#Writefunctiontotakestringinputandreturnnumberoftokens
defnum_tokens_from_string(string:str,encoding_name:str)->int:
"""Returnsthenumberoftokensinatextstring."""
encoding=tiktoken.encoding_for_model(encoding_name)
num_tokens=len(encoding.encode(string))
returnnum_tokens

最后,使用上述函數(shù):

prompt=[]
foriindata:
prompt.append((num_tokens_from_string(i['prompt'],"davinci")))

completion=[]
forjindata:
completion.append((num_tokens_from_string(j['completion'],"davinci")))

res_list=[]
foriinrange(0,len(prompt)):
res_list.append(prompt[i]+completion[i])

no_of_final_token=0
foriinres_list:
no_of_final_token+=i
print("Numberoffinaltoken",no_of_final_token)

輸出:

Numberoffinaltoken2094

不同模型的選擇受到 Token 數(shù)量的影響。

首先,讓我們了解 OpenAI 提供的不同模型。在本博客中,我專注于 OpenAI 模型。我們也可以使用 hugging faces 和 cohere AI 模型。

讓我們先了解基本模型。

Model

GPT 之所以強(qiáng)大,是因為它是在大規(guī)模數(shù)據(jù)集上進(jìn)行訓(xùn)練的。 然而,強(qiáng)大的功能也伴隨著一定的代價,因此 OpenAI 提供了多個可供選擇的模型,也被稱為引擎。

Davinci 是最大、功能最強(qiáng)大的引擎。它可以執(zhí)行其他引擎可以執(zhí)行的所有任務(wù)。Babbage 是次強(qiáng)大的引擎,它可以執(zhí)行 Curie 和 Ada 能夠執(zhí)行的任務(wù)。Ada 是功能最弱的引擎,但它性能最佳且價格最低。

隨著 GPT 的不斷發(fā)展,還有許多不同版本的模型可供選擇。GPT 系列中大約有 50 多個模型可供使用。

c08ff65c-21e6-11ee-962d-dac502259ad0.jpg

截圖自 OpenAI 官方模型頁面

因此,針對不同的用途,有不同的模型可供選擇,包括生成和編輯圖像、處理音頻和編碼等。對于文本處理和自然語言處理,我們希望選擇能夠準(zhǔn)確執(zhí)行任務(wù)的模型。在上圖中,我們可以看到三個可用的模型:

GPT-3

GPT-3.5

GPT-4

然而,目前我們無法直接使用 GPT-4,因為 GPT-4 目前僅限于有限的測試階段,只有特定授權(quán)用戶才能使用。我們需要加入等待列表并等待授權(quán)。因此,現(xiàn)在我們只剩下兩個選擇,即 GPT-3 和 GPT-3.5。

c0b8e4b8-21e6-11ee-962d-dac502259ad0.jpgc0de1bca-21e6-11ee-962d-dac502259ad0.jpg

截圖自 OpenAI 官方模型頁面

上圖展示了 GPT-3 和 GPT-3.5 可用的模型。你可以看到這些模型都是基于 Davinci、Babbage、Curie 和 Ada 的不同版本。

如果你觀察上面的圖表,會發(fā)現(xiàn)有一個名為 “Max tokens” 的列?!癕ax tokens” 是 OpenAI 模型的一個參數(shù),用于限制單個請求中可以生成的 Token 數(shù)量。該限制包括提示和完成的 Token 數(shù)量。

換句話說,如果你的提示占用了 1,000 個 Token,那么你只能生成最多 3,000 個 Token 的完成文本。此外,“Max tokens” 限制由 OpenAI 服務(wù)器執(zhí)行。如果你嘗試生成超過限制的文本,你的請求將被拒絕。

基于 GPT-3 的模型具有較低的 “Max tokens” 數(shù)值(2049),而基于 GPT-3.5 的模型具有較高的數(shù)值(4096)。因此,使用 GPT-3。5 模型可以處理更多的數(shù)據(jù)量。

接下來,讓我們來了解不同模型的定價。

c106c41c-21e6-11ee-962d-dac502259ad0.jpgc12807e4-21e6-11ee-962d-dac502259ad0.jpgc15711e2-21e6-11ee-962d-dac502259ad0.jpg

我們可以選擇基于 GPT-3.5 的 “gpt-3.5-turbo” 模型。

假設(shè)我有 5000 個單詞,并且我使用 “gpt-3.5-turbo” 模型,那么:

5000 個單詞約等于 6667 個 Token。

現(xiàn)在,對于 1000 個 Token,我們需要 0.002 美元。

因此,對于 6667 個 Token,我們大約需要 0.0133 美元。

我們可以粗略計算需要多少使用量來進(jìn)行處理。同時,迭代次數(shù)是會改變 Token 數(shù)量的一個參數(shù),因此在計算中需要考慮這一點。

現(xiàn)在,你可以理解 Token 的重要性了吧。這就是為什么我們必須進(jìn)行非常干凈和適當(dāng)?shù)念A(yù)處理,以減少文檔中的噪聲,同時也減少處理 Token 的成本。因此,正確清理文本非常重要,例如消除噪聲。甚至刪除多余的空格也可以為你的 API 密鑰節(jié)省費用。

讓我們在一個內(nèi)存圖中查看所有模型。

c16b75a6-21e6-11ee-962d-dac502259ad0.jpg

總結(jié)

Token 對于問題回答或其他 LLM 相關(guān)任務(wù)至關(guān)重要。如何以一種能夠使用更便宜的模型的方式預(yù)處理數(shù)據(jù)是真正的變革因素。模型的選擇取決于你希望做出的權(quán)衡。Davinci 系列將以更高的速度和準(zhǔn)確性提供服務(wù),但成本較高。而基于 GPT-3.5 Turbo 的模型將節(jié)省費用,但速度較慢。





審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    210

    文章

    27835

    瀏覽量

    204565
  • OpenAI
    +關(guān)注

    關(guān)注

    9

    文章

    987

    瀏覽量

    6252

原文標(biāo)題:一文搞懂LangChain

文章出處:【微信號:芋道源碼,微信公眾號:芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何能深入的學(xué)習(xí)一下arduino?

    請問一下如何能深入的學(xué)習(xí)一下arduino,感覺按照教程學(xué)習(xí)只不過是在連接?xùn)|西,學(xué)不到東西
    發(fā)表于 06-10 09:28

    采用抓取波形的方式對SPI進(jìn)行一下深入了解

    SPI分析平時會使用硬件SPI,但是只用于應(yīng)用沒有具體深入了解SPI的執(zhí)行流程,此處我采用抓取波形的方式對SPI進(jìn)行了一下深入了解。STM32配置void SPI1_Init(void
    發(fā)表于 02-17 06:01

    宏碁智能佛珠了解一下

    朋友,最近工作順利嗎?家庭幸福嗎?生活美滿嗎?看你心情復(fù)雜,要不要了解一下宏碁剛發(fā)布的智能佛珠?
    的頭像 發(fā)表于 08-08 16:27 ?3467次閱讀

    LangChain:為你定制個專屬的GPT

    LangChain 可以輕松管理與語言模型的交互,將多個組件鏈接在起,并集成額外的資源,例如 API 和數(shù)據(jù)庫。其組件包括了模型(各類LLM),提示模板(Prompts),索引,代理(Agent),記憶等等。
    的頭像 發(fā)表于 04-24 11:27 ?1258次閱讀
    <b class='flag-5'>LangChain</b>:為你定制<b class='flag-5'>一</b>個專屬的GPT

    LangChain簡介

    對 ChatGPT 等應(yīng)用著迷?想試驗他們背后的模型嗎?甚至開源/免費模型?不要再觀望……LangChain 是必經(jīng)之路……
    的頭像 發(fā)表于 05-22 09:14 ?8389次閱讀
    <b class='flag-5'>LangChain</b>簡介

    大哥!100W移動電源方案,了解一下

    100W移動電源方案,了解一下!
    的頭像 發(fā)表于 06-02 19:03 ?2150次閱讀
    大哥!100W移動電源方案,<b class='flag-5'>了解</b><b class='flag-5'>一下</b>

    LangChain跑起來的3個方法

    使用 LangChain 開發(fā) LLM 應(yīng)用時,需要機(jī)器進(jìn)行 GLM 部署,好多同學(xué)第步就被勸退了,
    的頭像 發(fā)表于 07-05 09:59 ?1153次閱讀
    把<b class='flag-5'>LangChain</b>跑起來的3個方法

    了解一下“薄膜厚度監(jiān)控”

    光學(xué)鍍膜干貨來了!了解一下“薄膜厚度監(jiān)控”
    的頭像 發(fā)表于 07-20 10:11 ?761次閱讀
    <b class='flag-5'>了解</b><b class='flag-5'>一下</b>“薄膜厚度監(jiān)控”

    基于Redis Enterprise,LangChain,OpenAI 構(gòu)建個電子商務(wù)聊天機(jī)器人

    鑒于最近人工智能支持的API和網(wǎng)絡(luò)開發(fā)工具的激增,許多科技公司都在將聊天機(jī)器人集成到他們的應(yīng)用程序中。LangChain種備受歡迎的新框架,近期引起了廣泛關(guān)注。該框架旨在簡化開發(fā)人員與語言模型
    的頭像 發(fā)表于 11-25 08:04 ?368次閱讀
    基于Redis Enterprise,<b class='flag-5'>LangChain</b>,OpenAI 構(gòu)建<b class='flag-5'>一</b>個電子商務(wù)聊天機(jī)器人

    如何利用OpenVINO加速LangChain中LLM任務(wù)

    LangChain個高層級的開源的框架,從字面意義理解,LangChain 可以被用來構(gòu)建 “語言處理任務(wù)的鏈條”,它可以讓AI開發(fā)人員把大型語言模型(LLM)的能力和外部數(shù)據(jù)結(jié)合起來,從而
    的頭像 發(fā)表于 12-05 09:58 ?688次閱讀

    LangChain 0.1版本正式發(fā)布

    LangChain 由 Harrison Chase 于 2022 年 10 月推出,是個開源編排框架,用于使用 LLM 開發(fā)應(yīng)用程序,推出后迅速脫穎而出,截至 2023 年 6 月,它是 GitHub 上增長最快的開源項目。
    的頭像 發(fā)表于 01-10 10:28 ?814次閱讀

    用Redis為LangChain定制AI代理——OpenGPTs

    OpenAI最近推出了OpenAIGPTs——個構(gòu)建定制化AI代理的無代碼“應(yīng)用商店”,隨后LangChain開發(fā)了類似的開源工具OpenGPTs。OpenGPTs是款低代碼的開源框架,專用
    的頭像 發(fā)表于 01-13 08:03 ?732次閱讀
    用Redis為<b class='flag-5'>LangChain</b>定制AI代理——OpenGPTs

    虹科分享 | 用Redis為LangChain定制AI代理——OpenGPTs

    OpenAI最近推出了OpenAI GPTs——個構(gòu)建定制化AI代理的無代碼“應(yīng)用商店”,隨后LangChain開發(fā)了類似的開源工具OpenGPTs。OpenGPTs是款低代碼的開源框架,專用于構(gòu)建定制化的人工智能代理。
    的頭像 發(fā)表于 01-18 10:39 ?273次閱讀
    虹科分享 | 用Redis為<b class='flag-5'>LangChain</b>定制AI代理——OpenGPTs

    探索LangChain:構(gòu)建專屬LLM應(yīng)用的基石

    LangChain通過Loader加載外部的文檔,轉(zhuǎn)化為標(biāo)準(zhǔn)的Document類型。Document類型主要包含兩個屬性:page_content 包含該文檔的內(nèi)容。meta_data 為文檔相關(guān)的描述性數(shù)據(jù),類似文檔所在的路徑等。
    發(fā)表于 01-30 10:33 ?515次閱讀
    探索<b class='flag-5'>LangChain</b>:構(gòu)建專屬LLM應(yīng)用的基石

    LangChain框架關(guān)鍵組件的使用方法

    LangChain個強(qiáng)大的框架,旨在幫助開發(fā)人員使用語言模型構(gòu)建端到端的應(yīng)用程序。它提供了套工具、組件和接口,可簡化創(chuàng)建由大型語言模型 (LLM) 和聊天模型提供支持的應(yīng)用程序的過程。通過
    的頭像 發(fā)表于 08-30 16:55 ?261次閱讀
    <b class='flag-5'>LangChain</b>框架關(guān)鍵組件的使用方法