了解 Langchain?是個啥?:第 1 部分

一、說明

????????在日常生活中,我們主要致力于構建端到端的應用程序。我們可以使用許多自動 ML 平臺和 CI/CD 管道來自動化 ml 管道。我們還有像Roboflow和Andrew N.G.的登陸AI這樣的工具來自動化或創建端到端的計算機視覺應用程序。

????????如果我們想在OpenAI或擁抱臉的幫助下創建一個LLM應用程序,那么以前,我們想手動完成。出于同樣的目的,我們有兩個最著名的庫,Haystack?和?LangChain,它們幫助我們為 LLM 模型創建端到端的應用程序或管道。讓我們更多地了解Langchain。

二、什么是LangChain鏈?

????????LangChain 是一個創新的框架,它正在徹底改變我們開發由語言模型驅動的應用程序的方式。通過結合先進的原則,LangChain正在重新定義通過傳統API可以實現的極限。此外,LangChain應用程序是代理的,使語言模型能夠輕松交互并適應其環境。

????????Langchain由幾個模塊組成。顧名思義,將不同的模塊鏈接在一起是Langchain的主要目的。這里的想法是將每個模塊鏈接在一個鏈中,最后使用該鏈一次調用所有模塊。

????????這些模塊包括以下內容:

  1. 提示
  2. 記憶
  3. 代理
  4. 回調
  5. 指標

讓我們從,

2.1 模型?

????????如簡介中所述,模型主要涵蓋大型語言模型。相當大的大型語言模型是由具有眾多參數的神經網絡組成的模型,并在大量未標記的文本上進行訓練。科技巨頭有各種各樣的LLM,比如,

  1. 谷歌的伯特
  2. OpenAI 的 GPT-3
  3. 谷歌的拉MDA
  4. PaLM by Google
  5. LLaMA by Meta AI
  6. OpenAI 的 GPT-4
  7. 還有更多...

????????在語言鏈的幫助下,與大型語言模型的交互變得更加容易。Langchain提供的界面和功能有助于輕松地將LLM的強大功能集成到您的工作應用程序中。LangChain通過利用asyncio庫為LLM提供異步支持。

????????還有?Langchain 提供的異步支持[通過釋放處理請求的線程,服務器可以將其分配給其他任務,直到準備好響應,從而最大限度地提高資源利用率。目前、、、 和 受支持,但對其他 LLM 的異步支持已在路線圖上。您可以使用該方法異步調用 OpenAI LLM。您還可以編寫自定義 LLM?包裝器,而不是 LangChain 中支持的包裝器。OpenAIPromptLayerOpenAIChatOpenAIAnthropicagenerate

????????我在應用程序中使用了OpenAI,并且主要使用Davinci,Babbage,CurieAda模型來陳述問題。每個模型都有自己的優點、令牌使用計數和用例。您可以在此處閱讀有關這些模型的更多信息。

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 產出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)

產出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 提示?

????????我們都知道,提示是我們提供給任何系統的輸入,以根據我們的用例完善我們的答案,使其更準確或更具體。很多時候,您可能希望獲得更多結構化的信息,而不僅僅是文本回復。許多新的目標檢測和基于對比預訓練和零鏡頭學習的分類算法包括提示作為結果的有效輸入。舉個例子,OpenAI的CLIP和META的Grounding DINO使用提示作為預測的輸入。

????????在 Langchain 中,我們可以根據自己想要的答案設置一個提示模板,然后將其鏈接到主鏈進行輸出預測。輸出分析器還有一個工具來優化結果。輸出解析器負責 (1) 指示模型應如何格式化輸出,以及 (2) 將輸出解析為所需的格式(包括在必要時重試)。

在 Langchain 中,我們可以提供提示作為模板。模板是指提示的藍圖或我們想要答案的特定格式。LangChain提供預先設計的提示模板,可以為不同類型的任務生成提示。但是,在某些情況下,默認模板可能無法滿足您的要求。默認情況下,我們可以使用自定義提示模板。

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 中的鏈和代理以無狀態模式運行,這意味著它們獨立處理每個傳入的查詢。但是,在某些應用程序中,例如聊天機器人,在短期和長期內保留以前的交互非常重要。這就是“記憶”概念發揮作用的地方。

LangChain以兩種形式提供內存組件。首先,LangChain 提供了用于管理和操作以前的聊天消息的輔助實用程序,這些消息被設計為模塊化且有用,無論其用例如何。其次,LangChain提供了一種將這些實用程序集成到鏈中的簡單方法。這使得它們具有高度的通用性和適應任何情況。

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 鏈:

????????鏈提供了一種將各種組件合并到統一應用程序中的方法。例如,可以創建一個鏈,該鏈接收來自用戶的輸入,使用提示模板對其進行格式化,然后將格式化的回復傳輸到LLM。通過將多個鏈與其他組件集成,可以生成更復雜的鏈。

???LLMChain被認為是查詢 LLM 對象使用最廣泛的方法之一。它根據提示模板格式化提供的輸入鍵值以及內存鍵值(如果存在),然后將格式化的字符串發送到 LLM,然后生成返回的輸出。

????????在調用語言模型之后,可以采取一系列步驟,其中可以對模型進行一系列調用。當希望將一個調用的輸出用作另一個調用的輸入時,這種做法特別有價值。在這一系列鏈中,每個單獨的鏈都有一個輸入和一個輸出,一個步驟的輸出用作下一個步驟的輸入。

#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 代理:

????????某些應用程序可能不僅需要預先確定的LLM /其他工具調用序列,還需要依賴于用戶輸入的不確定序列。這些類型的序列包括可以訪問一系列工具的“代理”。根據用戶輸入,代理可以確定應調用哪些工具(如果有)。

根據文檔,代理的高級偽代碼如下所示:

收到一些用戶輸入

代理決定使用哪個工具(如果有),以及該工具的輸入應該是什么

然后使用該工具輸入調用該工具,并記錄觀察結果(這只是使用該工具輸入調用該工具的輸出。

工具、工具輸入和觀察的歷史記錄將傳遞回代理,并決定下一步要執行的步驟

重復此操作,直到代理決定不再需要使用工具,然后直接響應用戶。

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

????????讓我們在下面附的一個快照中總結所有內容。

LangChain的高級思想[圖片來源:作者]

????????了解所有模塊和鏈接對于使用 Lang-Chain 為大型語言模型構建管道應用程序非常重要。這只是對 LangChain 的簡單介紹,在本系列的下一部分,我們將研究真正的管道,例如制作 pdfGPT、制作對話機器人、回答文檔和其他應用程序。這種基于應用程序的工作將使這些概念更加清晰。LangChain 的文檔很好理解,但我添加了我自己的想法以使其更清晰。你可以在這里找到LangChain的文檔。

[編輯:我在下面添加了LangChain系列的下一部分,這樣你就不需要在我的個人資料中搜索它]

其它參考:

了解語言鏈🦜?🔗:第2部分

實際實施 LangChain 以構建自定義數據機器人涉及合并內存、提示模板和...

代幣和模型:了解語言鏈 🦜?🔗 部分:3

了解令牌以及如何為您的用例選擇 OpenAI 模型,API 密鑰定價的工作原理

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35421.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35421.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35421.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Day 26 C++ list容器(鏈表)

文章目錄 list基本概念定義結構雙向迭代器優點缺點List和vector區別存儲結構內存管理迭代器穩定性隨機訪問效率 list構造函數——創建list容器函數原型示例 list 賦值和交換函數原型 list 大小操作函數原型示例 list 插入和刪除函數原型示例 list 數據存取函數原型注意示例 lis…

論文詳解 ——《SNR-Aware Low-light Image Enhancement》

文章目錄 Abstract1.Introduction2. Related Work3. Our Method3.1 Long- and Short-range Branches3.2 SNR-based Spatially-varying Feature Fusion3.3 SNR-guided Attention in Transformer3.4 Loss Function 4. Experiments4.1. Datasets and Implementation Details4.2 Co…

SpringBoot | 使用newWorkStealingPool和CompletableFuture進行并發異步處理

關注wx&#xff1a; CodingTechWork 需求 一個列表操作需要異步處理每個元素&#xff0c;最終需要將列表各個元素的操作結果統一返回&#xff0c;無需關注該列表中的順序執行。這個線程池不會保證任務的順序執行&#xff0c;即為WorkStealing搶占式的工作。 開發模板 線程池…

基于SpringBoot實現MySQL備份與還原

基于SpringBoot實現MySQL備份與還原&#xff0c;需求是在頁面上對所有的平臺數據執行備份和恢復操作&#xff0c;那么就需要使用代碼去調用MySQL備份和恢復的指令&#xff0c;下面是具體實現步驟&#xff1b; MySQL備份表設計 CREATE TABLE IF NOT EXISTS mysql_backups (id …

6.1 安全漏洞與網絡攻擊

數據參考&#xff1a;CISP官方 目錄 安全漏洞及產生原因信息收集與分析網絡攻擊實施后門設置與痕跡清除 一、安全漏洞及產生原因 什么是安全漏洞 安全漏洞也稱脆弱性&#xff0c;是計算機系統存在的缺陷 漏洞的形式 安全漏洞以不同形式存在漏洞數量逐年遞增 漏洞產生的…

前端開發:數組對象判斷重復的方法詳解

前言 在前端開發過程中,關于數據處理是非常常用的操作,尤其是通過算法處理從后端獲取的數據甚為重要。而且在前端開發中,兩大類型的數據處理是必備的:數組和對象。與其說是數據處理,不如說是數組和對象的處理。實際開發中,關于數組數據的處理所占比例更高,尤其是涉及到表…

使用Flask.Request的方法和屬性,獲取get和post請求參數(二)

1、Flask中的request 在Python發送Post、Get等請求時&#xff0c;我們使用到requests庫。Flask中有一個request庫&#xff0c;有其特有的一些方法和屬性&#xff0c;注意跟requests不是同一個。 2、Post請求&#xff1a;request.get_data() 用于服務端獲取客戶端請求數據。注…

理解ConcurrentSkipListMap(有點類似于并發的TreeMap)

是一個分層的結構。 從最上面開始查找&#xff0c;最后層層往下查。 插入和刪除有可能會引起節點Level的變更。 key是有序的&#xff0c;因此可以看做是并發的TreeMap

ubuntu18.04下配置muduoC++11環境

1.安裝muduo依賴的編譯工具及庫 Cmake sudo apt-get install cmakeBoost sudo apt-get install libboost-dev libboost-test-devcurl、c-ares DNS、google protobuf sudo apt-get install libcurl4-openssl-dev libc-ares-dev sudo apt-get install protobuf-compiler libp…

帶你了解SpringBoot支持的復雜參數--自定義對象參數-自動封裝

&#x1f600;前言 本篇博文是關于SpringBoot 在響應客戶端請求時支持的復雜參數和自定義對象參數&#xff0c;希望您能夠喜歡&#x1f60a; &#x1f3e0;個人主頁&#xff1a;晨犀主頁 &#x1f9d1;個人簡介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章…

go struct 的常見問題

go struct 的常見問題 1. 什么是struct&#xff1f;2. 如何聲明、定義和創建一個struct&#xff1f;3. struct和其他數據類型&#xff08;如數組、切片、map等&#xff09;有什么區別&#xff1f;4. 如何訪問struct字段&#xff1f;5. struct是否支持繼承&#xff0c;是否支持重…

JavaWeb_xml

文章目錄 1.xml是什么&#xff1f;2.xml的用途 1.xml是什么&#xff1f; xml 是可擴展的標記性語言 2.xml的用途 1、用來保存數據&#xff0c;而且這些數據具有自我描述性 2、它還可以做為項目或者模塊的配置文件 3、還可以做為網絡傳輸數據的格式&#xff08;現在 JSON 為主…

【Github】SourceTree技巧匯總

sourceTree登錄github賬戶 會跳轉到瀏覽器端 按照Git Flow 初始化倉庫分支 克隆遠程倉庫到本地 推送變更到遠程倉庫 合并分支 可以看到目前的本地分支&#xff08;main、iOS_JS&#xff09;和遠程分支&#xff08;origin/main、origin/HEAD、origin/iOS_JS&#xff09;目前所處…

5134. 簡單判斷

文章目錄 Question輸入樣例1&#xff1a; 3 7 0 輸出樣例1&#xff1a; IdeasCode Question 給定三個非負整數 x,y,z &#xff0c;請你按如下要求進行判斷并輸出相應結果&#xff1a; 如果 x>yz &#xff0c;則輸出 。 如果 y>xz &#xff0c;則輸出 -。 如果 xy 且 z0…

pip install總是報錯:ValueError: Trusted host URL must include a host part: ‘#‘

一、問題現象 報錯信息如下&#xff1a; Traceback (most recent call last):File "/user_name/anaconda3/bin/pip", line 11, in <module>sys.exit(main())^^^^^^File "/user_name/anaconda3/lib/python3.11/site-packages/pip/_internal/cli/main.py&…

14_基于Flink將pulsar數據寫入到HBase

3.7.基于Flink將數據寫入到HBase 3.7.1.編寫Flink完成數據寫入到Hbase操作, 完成數據備份, 便于后續進行即席查詢和離線分析 3.7.1.1.HBase基本介紹 hbase是基于Google發布bigTable論文產生一款軟件, 是一款noSQL型數據, 不支持SQL. 不支持join的操作, 沒有表關系, 不支持事…

Codeforces 757F. Team Rocket Rises Again 最短路 + 支配樹

題意&#xff1a; 給你 n 個點&#xff0c; m 條雙向邊&#xff0c;求爆了某個點后&#xff0c;從s出發的最短路距離&#xff0c;會改變最多的數量。 分析&#xff1a; 建出最短路樹&#xff08;DAG&#xff09;之后&#xff0c;在最短路樹上跑一下支配樹&#xff0c;找出支…

鏈表OJ詳解

&#x1f495;人生不滿百&#xff0c;常懷千歲憂&#x1f495; 作者&#xff1a;Mylvzi 文章主要內容&#xff1a;鏈表oj詳解 題目一&#xff1a;移除元素 題目要求&#xff1a; 畫圖分析&#xff1a; 代碼實現&#xff1a; struct ListNode* removeElements(struct List…

flutter項目 環境搭建

開發flutter項目 搭建工具環境 flutter項目本身 所需開發工具環境 flutter 谷歌公司開發 系統支持庫 鏡像庫 搭建流程&#xff1a; flutter 官網&#xff1a; https://flutter.dev/community/china //步驟1 .bash_profile touch .bash_profile pwd /Users/haijunyan open ~ e…