<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

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

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

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

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

什么是 LangChain?

LangChain 是一種創新框架,正在徹底改變我們開發由語言模型驅動的應用程序的方式。 通過引入先進的原理,LangChain 正在重新定義傳統 API 所能實現的限制。此外,LangChain 應用程序具有智能代理的特性,使語言模型能夠與環境進行互動和自適應。

LangChain 由多個模塊組成。正如其名稱所示,LangChain 的主要目的是將這些模塊進行鏈式連接 。這意味著我們可以將每個模塊都串聯在一起,并使用這個鏈式結構一次性調用所有模塊。

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

Model

正如介紹中所討論的那樣,模型主要涵蓋大語言模型(LLM)。大語言模型是指具有大量參數并在大規模無標簽文本上進行訓練的神經網絡模型。科技巨頭們推出了各種各樣的大型語言模型,比如:

谷歌的 BERT

OpenAI 的 GPT-3

谷歌 LaMDA

谷歌 PaLM

Meta AI 的 LLaMA

OpenAI 的 GPT-4

……

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

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

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

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

案例 1:

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

#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)是我們向系統提供的輸入,以便根據我們的使用案例對答案進行精確或特定的調整。許多時候,我們希望得到的不僅僅是文本,還需要更結構化的信息。基于對比預訓練和零樣本學習的許多新的目標檢測和分類算法都將提示作為有效的輸入來進行結果預測。 舉例來說,OpenAI 的 CLIP 和 META 的 Grounding DINO 都使用提示作為預測的輸入。

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

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

案例:

fromlangchainimportPromptTemplate

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

#Thistemplatewillactasablueprintforprompt

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

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

Memory

在 LangChain 中,鏈式和代理默認以無狀態模式運行,即它們獨立處理每個傳入的查詢。然而,在某些應用程序(如聊天機器人)中,保留先前的交互記錄對于短期和長期都非常重要。這時就需要引入 “內存” 的概念。

LangChain 提供兩種形式的內存組件。首先,LangChain 提供了輔助工具,用于管理和操作先前的聊天消息,這些工具設計成模塊化的,無論用例如何,都能很好地使用。其次,LangChain 提供了一種簡單的方法將這些工具集成到鏈式結構中,使其非常靈活和適應各種情況。

案例:

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

鏈式(Chain)提供了將各種組件合并成一個統一應用程序的方式。例如,可以創建一個鏈式,它接收用戶的輸入,并使用 PromptTemplate 對其進行格式化,然后將格式化后的回復傳遞給 LLM(大語言模型)。通過將多個鏈式與其他組件集成,可以生成更復雜的鏈式結構。

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

在調用語言模型后,可以按照一系列步驟進行操作,可以進行多個模型調用的序列。這種做法特別有價值,當希望將一個調用的輸出作為另一個調用的輸入時。在這個鏈式序列中,每個鏈式都有一個輸入和一個輸出,一個步驟的輸出作為下一個步驟的輸入。

#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

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

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

接收用戶輸入。

代理根據輸入決定是否使用某個工具,以及該工具的輸入應該是什么。

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

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

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

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

案例:

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?")

讓我們將所有內容總結在下面這張圖中。

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

理解所有模塊和鏈式操作對于使用 LangChain 構建大語言模型的管道應用程序非常重要。這只是對 LangChain 的簡單介紹。

LangChain 的實際應用

廢話少說,讓我們直接使用 LangChain 構建簡單的應用程序。其中最有趣的應用是在自定義數據上創建一個問答機器人。

免責聲明/警告:這段代碼僅用于展示應用程序的構建方式。我并不保證代碼的優化,并且根據具體的問題陳述,可能需要進行進一步改進。

開始導入模塊

導入 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 文件的工具。此外,還有不同類型的內存,例如 ConversationBufferMemory 和 ConversationBufferWindowMemory,它們具有特定的功能。我將在最后一部分詳細介紹有關內存的內容。

設置環境

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

前往 OpenAI API 頁面,

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

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

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

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

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

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

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

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

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

我們無法一次性添加所有數據。我們將數據分成塊并將其發送以創建數據 Embedding。

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

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

這就是 Embedding 的創建方式。

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

通俗地說,Embedding 是將單詞轉化為數字的一種方法。 這是通過在大量文本語料庫上訓練機器學習模型來實現的。模型學會將每個單詞與一個唯一的數字向量相關聯。該向量代表單詞的含義,以及與其他單詞的關系。

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)

在實際情況中,當用戶發起查詢時,將在向量存儲中進行搜索,并檢索出最合適的索引,然后將其傳遞給 LLM。然后,LLM 會重新構建索引中的內容,以向用戶提供格式化的響應。

我建議進一步深入研究向量存儲和 Embedding 的概念,以增強你的理解。

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

嵌入向量直接存儲在一個向量數據庫中。有許多可用的向量數據庫,如 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"]
)

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

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

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

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

#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)

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

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

LangChain 快照

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

LangChain 的 Token 和模型

Token

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

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

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

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

如果你想檢查特定文本的 Token 數量,可以直接在 OpenAI 的 Tokenizer 上進行檢查。

另一種計算 Token 數量的方法是使用 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

最后,使用上述函數:

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 數量的影響。

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

讓我們先了解基本模型。

Model

GPT 之所以強大,是因為它是在大規模數據集上進行訓練的。 然而,強大的功能也伴隨著一定的代價,因此 OpenAI 提供了多個可供選擇的模型,也被稱為引擎。

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

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

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

截圖自 OpenAI 官方模型頁面

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

GPT-3

GPT-3.5

GPT-4

然而,目前我們無法直接使用 GPT-4,因為 GPT-4 目前僅限于有限的測試階段,只有特定授權用戶才能使用。我們需要加入等待列表并等待授權。因此,現在我們只剩下兩個選擇,即 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 的不同版本。

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

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

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

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

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

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

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

5000 個單詞約等于 6667 個 Token。

現在,對于 1000 個 Token,我們需要 0.002 美元。

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

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

現在,你可以理解 Token 的重要性了吧。這就是為什么我們必須進行非常干凈和適當的預處理,以減少文檔中的噪聲,同時也減少處理 Token 的成本。因此,正確清理文本非常重要,例如消除噪聲。甚至刪除多余的空格也可以為你的 API 密鑰節省費用。

讓我們在一個內存圖中查看所有模型。

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

總結

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





審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器人
    +關注

    關注

    207

    文章

    27315

    瀏覽量

    202145
  • OpenAI
    +關注

    關注

    9

    文章

    898

    瀏覽量

    6034

原文標題:一文搞懂LangChain

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

收藏 人收藏

    評論

    相關推薦

    深入了解示波器

    深入了解示波器
    發表于 11-14 22:32

    深入了解u-boot該看什么書?

    深入了解u-boot 有哪些書推薦一下!
    發表于 08-15 01:44

    如何能深入的學習一下arduino?

    請問一下如何能深入的學習一下arduino,感覺按照教程學習只不過是在連接東西,學不到東西
    發表于 06-10 09:28

    了解一下STM32的時鐘樹

    的時鐘頻率又是如何確定的呢?帶著這個問題,我們起詳細了解一下STM32的時鐘樹。時鐘樹是了解STM32時鐘的靈魂,ST...
    發表于 08-06 07:11

    采用抓取波形的方式對SPI進行一下深入了解

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

    LangChain:為你定制一個專屬的GPT

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

    LangChain簡介

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

    LangChain跑起來的3個方法

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

    基于Redis Enterprise,LangChain,OpenAI 構建一個電子商務聊天機器人

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

    深度對談:廣告創意領域中AIGC的應用

    隨著 AI 能力的提升,人們需要深入使用并掌握它。像 fine-tuning、LangChain 等我不會推薦,我會鼓勵周圍的人去深入使用 AIGC,重點在于使用,好的 AGI 只需要被編譯一次。
    的頭像 發表于 11-29 17:14 ?712次閱讀

    如何利用OpenVINO加速LangChain中LLM任務

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

    LangChain 0.1版本正式發布

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

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

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

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

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

    探索LangChain:構建專屬LLM應用的基石

    LangChain通過Loader加載外部的文檔,轉化為標準的Document類型。Document類型主要包含兩個屬性:page_content 包含該文檔的內容。meta_data 為文檔相關的描述性數據,類似文檔所在的路徑等。
    發表于 01-30 10:33 ?347次閱讀
    探索<b class='flag-5'>LangChain</b>:構建專屬LLM應用的基石
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>