国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用LangChain開源框架實現(xiàn)知識機器人

這篇具有很好參考價值的文章主要介紹了用LangChain開源框架實現(xiàn)知識機器人。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

用LangChain開源框架實現(xiàn)知識機器人,langchain,機器人

前言

Large Language Models (LLMs)在2020年OpenAI 的 GPT-3 的發(fā)布而進入世界舞臺 。從那時起,他們穩(wěn)步增長進入公眾視野。
眾所周知 OpenAI 的 API 無法聯(lián)網(wǎng),所以大家如果想通過它的API實現(xiàn)聯(lián)網(wǎng)搜索并給出回答、總結(jié) PDF 文檔、基于某個 Youtube 視頻進行問答等等的功能肯定是無法實現(xiàn)的。所以,我們來介紹一個非常強大的第三方開源庫:LangChain 。
LangChain 是一個用于開發(fā)由語言模型驅(qū)動的應(yīng)用程序的框架。他主要擁有 2 個能力:可以將 LLM 模型與外部數(shù)據(jù)源進行連接&允許與 LLM 模型進行交互。

項目地址:https://github.com/langchain-ai/langchain
用LangChain開源框架實現(xiàn)知識機器人,langchain,機器人

LangChain 是一個開發(fā)由語言模型驅(qū)動的應(yīng)用程序的框架。

框架是設(shè)計原則:
數(shù)據(jù)感知 : 將語言模型連接到其他數(shù)據(jù)源
具有代理性質(zhì) : 允許語言模型與其環(huán)境交互

Langchain的核心思想

將不同的組件“鏈接”在一起,以圍繞LLM創(chuàng)建更高級的用例。

LangChain 核心模塊支持

模型(models) : LangChain 支持的各種模型類型和模型集成。
提示(prompts) : 包括提示管理、提示優(yōu)化和提示序列化。
內(nèi)存(memory) : 內(nèi)存是在鏈/代理調(diào)用之間保持狀態(tài)的概念。LangChain 提供了一個標(biāo)準(zhǔn)的內(nèi)存接口、一組內(nèi)存實現(xiàn)及使用內(nèi)存的鏈/代理示例。
索引(indexes) : 與您自己的文本數(shù)據(jù)結(jié)合使用時,語言模型往往更加強大——此模塊涵蓋了執(zhí)行此操作的最佳實踐。
鏈(chains) : 鏈不僅僅是單個 LLM 調(diào)用,還包括一系列調(diào)用(無論是調(diào)用 LLM 還是不同的實用工具)。LangChain 提供了一種標(biāo)準(zhǔn)的鏈接口、許多與其他工具的集成。LangChain 提供了用于常見應(yīng)用程序的端到端的鏈調(diào)用。
代理(agents) : 代理涉及 LLM 做出行動決策、執(zhí)行該行動、查看一個觀察結(jié)果,并重復(fù)該過程直到完成。LangChain 提供了一個標(biāo)準(zhǔn)的代理接口,一系列可供選擇的代理,以及端到端代理的示例。

###LangChain工作原理
LangChain就是把大量的數(shù)據(jù)組合起來,讓LLM能夠盡可能少地消耗計算力就能輕松地引用。它的工作原理是把一個大的數(shù)據(jù)源,比如一個50頁的PDF文件,分成一塊一塊的,然后把它們嵌入到一個向量存儲(Vector Store)里。
用LangChain開源框架實現(xiàn)知識機器人,langchain,機器人
創(chuàng)建向量存儲的簡單示意圖

現(xiàn)在我們有了大文檔的向量化表示,我們就可以用它和LLM一起工作,只檢索我們需要引用的信息,來創(chuàng)建一個提示-完成(prompt-completion)對。

當(dāng)我們把一個提示輸入到我們新的聊天機器人里,LangChain就會在向量存儲里查詢相關(guān)的信息。你可以把它想象成一個專門為你的文檔服務(wù)的小型谷歌。一旦找到了相關(guān)的信息,我們就用它和提示一起喂給LLM,生成我們的答案。

用LangChain開源框架實現(xiàn)知識機器人,langchain,機器人

用LangChain開源框架實現(xiàn)知識機器人,langchain,機器人

使用場景用例

用LangChain開源框架實現(xiàn)知識機器人,langchain,機器人

自治代理(autonomous agents)

長時間運行的代理會采取多步操作以嘗試完成目標(biāo)。 AutoGPT 和 BabyAGI就是典型代表。

代理模擬(agent simulations)

將代理置于封閉環(huán)境中觀察它們?nèi)绾蜗嗷プ饔茫绾螌κ录鞒龇磻?yīng),是觀察它們長期記憶能力的有趣方法。

個人助理(personal assistants)

主要的 LangChain 使用用例。個人助理需要采取行動、記住交互并具有您的有關(guān)數(shù)據(jù)的知識。

問答(question answering)

第二個重大的 LangChain 使用用例。僅利用這些文檔中的信息來構(gòu)建答案,回答特定文檔中的問題。

聊天機器人(chatbots)

由于語言模型擅長生成文本,因此它們非常適合創(chuàng)建聊天機器人。

查詢表格數(shù)據(jù)(tabular)

如果您想了解如何使用 LLM 查詢存儲在表格格式中的數(shù)據(jù)(csv、SQL、數(shù)據(jù)框等),請閱讀此頁面。

代碼理解(code) : 如果您想了解如何使用 LLM 查詢來自 GitHub 的源代碼,請閱讀此頁面。

與 API 交互(apis)

使LLM 能夠與 API 交互非常強大,以便為它們提供更實時的信息并允許它們采取行動。

提?。╡xtraction)

從文本中提取結(jié)構(gòu)化信息。

摘要(summarization)

將較長的文檔匯總為更短、更簡潔的信息塊。一種數(shù)據(jù)增強生成的類型。

評估(evaluation)

生成模型是極難用傳統(tǒng)度量方法評估的。 一種新的評估方式是使用語言模型本身進行評估。 LangChain 提供一些用于輔助評估的提示/鏈。

Langchian生態(tài)

用LangChain開源框架實現(xiàn)知識機器人,langchain,機器人

實戰(zhàn)舉例

模型(LLM包裝器)

提示

嵌入和向量存儲

代理

我會給你分別來介紹每個部分,讓你能夠?qū)angChain的工作原理有一個高層次的理解。接下來,你應(yīng)該能夠運用這些概念,開始設(shè)計你自己的用例和創(chuàng)建你自己的應(yīng)用程序。

接下來我會用Rabbitmetrics(Github)的一些簡短的代碼片段來進行介紹。他提供了有關(guān)此主題的精彩教程。這些代碼片段應(yīng)該能讓你準(zhǔn)備好使用LangChain。

首先,讓我們設(shè)置我們的環(huán)境。你可以用pip安裝3個你需要的庫:

pip install -r requirements.txt
python-dotenv==1.0.0 langchain==0.0.137 pinecone-client==2.2.1

Pinecone是我們將要和LangChain一起使用的向量存儲(Vector Store)。在這里,你要把你的OpenAI、Pinecone環(huán)境和Pinecone API的API密鑰存儲到你的環(huán)境配置文件里。你可以在它們各自的網(wǎng)站上找到這些信息。然后我們就用下面的代碼來加載那個環(huán)境文件:

現(xiàn)在,我們準(zhǔn)備好開始了!

# 加載環(huán)境變量
from dotenv import loaddotenv,finddotenv loaddotenv(finddotenv())

3.1、模型(LLM包裝器)
為了和我們的LLM交互,我們要實例化一個OpenAI的GPT模型的包裝器。在這里,我們要用OpenAI的GPT-3.5-turbo,因為它是最劃算的。但是如果你有權(quán)限,你可以隨意使用更強大的GPT4。

要導(dǎo)入這些,我們可以用下面的代碼:

# 為了查詢聊天模型GPT-3.5-turbo或GPT-4,導(dǎo)入聊天消息和ChatOpenAI的模式(schema)。
from langchain.schema import (    AIMessage,    HumanMessage,    SystemMessage)
from langchain.chat_models import ChatOpenAI 
chat = ChatOpenAI(model_name="gpt-3.5-turbo",temperature=0.3)
messages = [    SystemMessage(content="你是一個專業(yè)的數(shù)據(jù)科學(xué)家"),    HumanMessage(content="寫一個Python腳本,用模擬數(shù)據(jù)訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)")]
response=chat(messages)print(response.content,end='\n')

實際上,SystemMessage為GPT-3.5-turbo模塊提供了每個提示-完成對的上下文信息。HumanMessage是指您在ChatGPT界面中輸入的內(nèi)容,也就是您的提示。

但是對于一個自定義知識的聊天機器人,我們通常會將提示中重復(fù)的部分抽象出來。例如,如果我要創(chuàng)建一個推特生成器應(yīng)用程序,我不想一直輸入“給我寫一條關(guān)于…的推特”。

因此,讓我們來看看如何使用提示模板(PromptTemplates)來將這些內(nèi)容抽象出來。

3.2、提示
LangChain提供了PromptTemplates,允許你可以根據(jù)用戶輸入動態(tài)地更改提示,類似于正則表達式(regex)的用法。

# 導(dǎo)入提示并定義
PromptTemplatefrom langchain 
import PromptTemplatetemplate = """您是一位專業(yè)的數(shù)據(jù)科學(xué)家,擅長構(gòu)建深度學(xué)習(xí)模型。用幾行話解釋{concept}的概念"""
prompt = PromptTemplate(    input_variables=["concept"],    template=template,)
# 用PromptTemplate運行LLM
llm(prompt.format(concept="autoencoder"))
llm(prompt.format(concept="regularization"))

你可以用不同的方式來改變這些提示模板,讓它們適合你的應(yīng)用場景。如果你熟練使用ChatGPT,這應(yīng)該對你來說很簡單。

3.3、鏈
鏈可以讓你在簡單的提示模板上面構(gòu)建功能。本質(zhì)上,鏈就像復(fù)合函數(shù),讓你可以把你的提示模板和LLM結(jié)合起來。

使用之前的包裝器和提示模板,我們可以用一個單一的鏈來運行相同的提示,它接受一個提示模板,并把它和一個LLM組合起來:

# 導(dǎo)入LLMChain并定義一個鏈,用語言模型和提示作為參數(shù)。
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
# 只指定輸入變量來運行鏈。
print(chain.run("autoencoder"))

除此之外,顧名思義,我們還可以把這些鏈連起來,創(chuàng)建更大的組合。

比如,我可以把一個鏈的結(jié)果傳遞給另一個鏈。在這個代碼片段里,Rabbitmetrics把第一個鏈的完成結(jié)果傳遞給第二個鏈,讓它用500字向一個五歲的孩子解釋。

你可以把這些鏈組合成一個更大的鏈,然后運行它。

# 定義一個第二個提示
second_prompt = PromptTemplate(    input_variables=["ml_concept"],    template="把{ml_concept}的概念描述轉(zhuǎn)換成用500字向我解釋,就像我是一個五歲的孩子一樣",)
chain_two = LLMChain(llm=llm, prompt=second_prompt)
# 用上面的兩個鏈定義一個順序鏈:第二個鏈把第一個鏈的輸出作為輸入
from langchain.chains import SimpleSequentialChain
overall_chain = SimpleSequentialChain(chains=[chain, chain_two], verbose=True)
# 只指定第一個鏈的輸入變量來運行鏈。
explanation = overall_chain.run("autoencoder")print(explanation)

有了鏈,你可以創(chuàng)建很多功能,這就是LangChain功能強大的原因。但是它真正發(fā)揮作用的地方是和前面提到的向量存儲一起使用。接下來我們開始介紹一下這個部分。

3.4、嵌入和向量存儲
這里我們將結(jié)合LangChain進行自定義數(shù)據(jù)存儲。如前所述,嵌入和向量存儲的思想是把大數(shù)據(jù)分成小塊,并存儲起來。

LangChain有一個文本分割函數(shù)來做這個:

# 導(dǎo)入分割文本的工具,并把上面給出的解釋分成文檔塊
from langchain.text_splitter import RecursiveCharacter
TextSplittertext_splitter = RecursiveCharacterTextSplitter(    chunk_size = 100,    chunk_overlap  = 0,)
texts = text_splitter.create_documents([explanation])

分割文本需要兩個參數(shù):每個塊有多大(chunksize)和每個塊有多少重疊(chunkoverlap)。讓每個塊之間有重疊是很重要的,可以幫助識別相關(guān)的相鄰塊。

每個塊都可以這樣獲?。?/p>

texts[0].page_content
在我們有了這些塊之后,我們需要把它們變成嵌入。這樣向量存儲就能在查詢時找到并返回每個塊。我們將使用OpenAI的嵌入模型來做這個。

# 導(dǎo)入并實例化 OpenAI embeddingsfrom langchain.embeddings import OpenAIEmbeddingsembeddings = OpenAIEmbeddings(model_name="ada")     # 用嵌入把第一個文本塊變成一個向量query_result = embeddings.embed_query(texts[0].page_content)print(query_result)

最后,我們需要有一個地方來存儲這些向量化的嵌入。如前所述,我們將使用Pinecone來做這個。使用之前環(huán)境文件里的API密鑰,我們可以初始化Pinecone來存儲我們的嵌入。

# 導(dǎo)入并初始化Pinecone客戶端
import osimport pineconefrom langchain.vectorstores 
import Pineconepinecone.init(    api_key=os.getenv('PINECONE_API_KEY'),      environment=os.getenv('PINECONE_ENV')  )     
# 上傳向量到
Pineconeindex_name = "langchain-quickstart"
search = Pinecone.from_documents(texts, embeddings, index_name=index_name)    
 # 做一個簡單的向量相似度搜索
 query = "What is magical about an autoencoder?"
 result = search.similarity_search(query)print(result)

現(xiàn)在我們能夠從我們的Pinecone向量存儲里查詢相關(guān)的信息了!剩下要做的就是把我們學(xué)到的東西結(jié)合起來,創(chuàng)建我們特定的用例,給我們一個專門的AI“代理”。

3.5、代理
一個智能代理就是一個能夠自主行動的AI,它可以根據(jù)輸入,依次完成一系列的任務(wù),直到達成最終的目標(biāo)。這就意味著我們的AI可以利用其他的API,來實現(xiàn)一些功能,比如發(fā)送郵件或做數(shù)學(xué)題。如果我們再加上我們的LLM+提示鏈,我們就可以打造出一個適合我們需求的AI應(yīng)用程序。

這部分的原理可能有點復(fù)雜,所以讓我們來看一個簡單的例子,來演示如何用LangChain中的一個Python代理來解決一個簡單的數(shù)學(xué)問題。這個代理是通過調(diào)用我們的LLM來執(zhí)行Python代碼,并用NumPy來求解方程的根:

# 導(dǎo)入Python REPL工具并實例化Python代理
from langchain.agents.agent_toolkits 
import create_python_agent from langchain.tools.python.tool 
import PythonREPLToolfrom langchain.python 
import PythonREPLfrom langchain.llms.openai 
import OpenAI
agent_executor = create_python_agent(    llm=OpenAI(temperature=0, max_tokens=1000),    tool=PythonREPLTool(),    verbose=True)     
# 執(zhí)行Python代理
agent_executor.run("找到二次函數(shù)3 * x ** 2 + 2 * x - 1的根(零點)。")

一個定制知識的聊天機器人,其實就是一個能夠把問題和動作串起來的智能代理。它會把問題發(fā)送給向量化存儲,然后把得到的結(jié)果和原來的問題結(jié)合起來,給出答案!

其它參考

10個最流行的向量數(shù)據(jù)庫【AI】文章來源地址http://www.zghlxwxcb.cn/news/detail-619190.html

到了這里,關(guān)于用LangChain開源框架實現(xiàn)知識機器人的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Rasa——對話機器人開源框架

    Rasa是一套對話機器人的開源框架,主要用于構(gòu)建面向任務(wù)(Task Oriented)的對話系統(tǒng)。 NLU自然語言理解 基于規(guī)則 神經(jīng)網(wǎng)絡(luò)方法 DIET(Dual Intent Entity Transformer) 在Rasa中兩種方法都可以使用,但神經(jīng)網(wǎng)絡(luò)方法是核心 一個rasa項目包含的文件: domain 包含了聊天機器人需要知道的所有

    2024年02月08日
    瀏覽(23)
  • 基于Llama2和LangChain構(gòu)建本地化定制化知識庫AI聊天機器人

    基于Llama2和LangChain構(gòu)建本地化定制化知識庫AI聊天機器人

    參考: 本項目?https://github.com/PromtEngineer/localGPT 模型?https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML 云端知識庫項目:基于GPT-4和LangChain構(gòu)建云端定制化PDF知識庫AI聊天機器人_Entropy-Go的博客-CSDN博客? ????????相比OpenAI的LLM ChatGPT模型必須網(wǎng)絡(luò)連接并通過API key云端調(diào)用模型,擔(dān)心

    2024年02月08日
    瀏覽(33)
  • LLM本地知識庫問答系統(tǒng)(一):使用LangChain和LlamaIndex從零構(gòu)建PDF聊天機器人指南

    LLM本地知識庫問答系統(tǒng)(一):使用LangChain和LlamaIndex從零構(gòu)建PDF聊天機器人指南

    ? ? ? ?隨著大型語言模型(LLM)(如ChatGPT和GPT-4)的興起,現(xiàn)在比以往任何時候都更容易構(gòu)建比普通熊更智能的智能聊天機器人,并且可以瀏覽堆積如山的文檔,為您的輸入提供準(zhǔn)確的響應(yīng)。 ? ? ? ?在本系列中,我們將探索如何使用pre-trained的LLM創(chuàng)建一個聊天機器人,該聊

    2024年02月11日
    瀏覽(100)
  • LLMs之RAG:基于LangChain框架利用ChatGPT的API實現(xiàn)一個與在線網(wǎng)頁交互的對話機器人—五大思路步驟—加載文檔WebBaseLoader網(wǎng)址文件→文檔分割(chunk_size=50

    LLMs之RAG:基于LangChain框架利用ChatGPT的API實現(xiàn)一個與在線網(wǎng)頁交互的對話機器人—五大思路步驟—加載文檔WebBaseLoader網(wǎng)址文件→文檔分割(chunk_size=500)→文本嵌入化(OpenAIEmbeddings)并存儲到向量庫(Chroma)→構(gòu)造Prompt(拉取一個對象并將其返回為 LangChain對象)→定義LLMs(ChatOpenAI)→輸入

    2024年02月08日
    瀏覽(20)
  • LangChain入門(九)-使用Memory實現(xiàn)一個帶記憶的對話機器人

    LangChain入門(九)-使用Memory實現(xiàn)一個帶記憶的對話機器人

    目錄 一、說明 二、案例 一、說明 在第五章中我們使用的是通過自定義一個列表來存儲對話的方式來保存歷史的。 當(dāng)然,你也可以使用自帶的 memory 對象來實現(xiàn)這一點。 二、案例 結(jié)尾、掃一掃下方微信名片即可+博主徽信哦? ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓ ↓↓? ↓↓

    2024年02月16日
    瀏覽(23)
  • 手搓GPT系列之 - chatgpt + langchain 實現(xiàn)一個書本解讀機器人

    ChatGPT已經(jīng)威名遠播,關(guān)于如何使用大模型來構(gòu)建應(yīng)用還處于十分前期的探索階段。各種基于大模型的應(yīng)用技術(shù)也層出不窮。本文將給大家介紹一款基于大模型的應(yīng)用框架:langchain。langchain集成了做一個基于大模型應(yīng)用所需的一切。熟悉java web應(yīng)用的同學(xué)們應(yīng)該十分熟悉spring

    2024年02月05日
    瀏覽(18)
  • langchain系列:langchain入門(一分鐘搞定對話機器人)

    langchain系列:langchain入門(一分鐘搞定對話機器人)

    ?? 隨著aigc的火熱,各大廠商開始提供他們自己的api服務(wù),諸如openai、google、等,還有的直接開源出自己的模型,放到Huggingface提供使用,而LangChain就是一個基于語言模型開發(fā)應(yīng)用程序的框架,它可以很方便的去調(diào)用不同公司的api,以及huggingface的資源,為人們提供統(tǒng)一的開

    2024年02月10日
    瀏覽(35)
  • 使用LangChain構(gòu)建問答聊天機器人案例實戰(zhàn)(一)

    使用LangChain構(gòu)建問答聊天機器人案例實戰(zhàn)(一)

    使用LangChain構(gòu)建問答聊天機器人案例實戰(zhàn) 現(xiàn)場演示GPT-4代碼生成 本節(jié)我們會通過一個綜合案例,跟大家講解LangChain,這個案例產(chǎn)生的代碼會直接在瀏覽器中運行,并且會輸出結(jié)果,如圖14-1所示,用戶問:“What was the highest close price of IBM?”(“IBM的最高收盤價是多少?”)

    2024年02月15日
    瀏覽(111)
  • 使用LangChain構(gòu)建問答聊天機器人案例實戰(zhàn)(三)

    使用LangChain構(gòu)建問答聊天機器人案例實戰(zhàn) LangChain開發(fā)全流程剖析 接下來,我們再回到“get_prompt()”方法。在這個方法中,有系統(tǒng)提示詞(system prompts)和用戶提示詞(user prompts),這是從相應(yīng)的文件中讀取的,從“system.prompt”文件中讀取系統(tǒng)提示詞(system_template),從“u

    2024年02月14日
    瀏覽(124)
  • 使用langchain與你自己的數(shù)據(jù)對話(五):聊天機器人

    使用langchain與你自己的數(shù)據(jù)對話(五):聊天機器人

    之前我已經(jīng)完成了使用langchain與你自己的數(shù)據(jù)對話的前四篇博客,還沒有閱讀這四篇博客的朋友可以先閱讀一下: 使用langchain與你自己的數(shù)據(jù)對話(一):文檔加載與切割 使用langchain與你自己的數(shù)據(jù)對話(二):向量存儲與嵌入 使用langchain與你自己的數(shù)據(jù)對話(三):檢索(Retrieva

    2024年02月13日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包