LangChain 和 Hub 的前世今生
作為LLM(大模型)開發框架的寵兒,LangChain在短短幾年內迅速崛起,成為開發者們不可或缺的工具。本文將帶你探討LangChain和LangChainHub的發展歷程。
一、LLM開發框架的寵兒
這兩年人工智能領域發展迅猛,LLM(大模型)的出現功不可沒。LLM的發展將整個人工智能領域往前推進了一大步,將人工智能這道狹窄的門撐寬了不少,讓我們這些平凡的普通人也有機會擠進人工智能的發展中。
普通開發者在人工智能領域能做什么呢?目前可以發力的領域是:開發基于LLM的App。開發LLM的App有多種實現方式,LangChain是比較流行的一種。
伴隨著人工智能的發展,這兩年LangChain發展迅猛,GitHub上的star數飆升,近期更是成功融資2億美刀,足見其受歡迎程度。
早期的LangChain只是作為一個工具或者膠水,集成了多個LLM和多種外部組件(比如記憶、檢索、向量數據庫、工具集等等),方便開發者快速開發基于LLM的App。
我估計,當時LangChain的創始人對LangChain的定位也不是很清晰,只是覺得AI應用開發是個不錯的風口,先搞了再說,這也很符合創業和商業邏輯。
二、現在的LangChain
隨著LLM的發展,一切逐步走向確定性(業內一致認為LLM App是未來的方向),而且可能伴隨著商業化的要求,LangChain對自己的定位發生了一些改變。
早期的LangChain可能只是想抓住一波LLM的風口,對于自身的定位也不是很清晰,隨著LLM領域更多的發力點在構建基于LLM的App上,LangChain也趕緊調整了自身的定位。
不再定位在:膠水、工具集合等等理念了。更多的強調自己是:構建LLM App的最大社區,基于LangChain可以開發出可推理的應用程序。
調整了定位,生態也自然做了調整,同時軟件架構也隨之變化,比如:軟件包上做了很多重構和重組,核心能力 和 周邊社區生態 的邊界越發清晰。
同時,還加入了LangSmith用于監控LLM應用,還有LangServe用于部署LLM應用。一切的步伐都在朝著商業化發展。
至此LangChain調整為以下幾個核心模塊:
- LangChain-Core:抽象LangChain的內核 和 LangChain 表達式語言。
- LangChain-Community:集成的各種第三方部件。
- LangChain:構成LLM應用程序需要的 鏈、代理和檢索等。
- LangSmith:開發者平臺,可讓 調試、測試、評估和監控 基于任何 LLM 框架上構建的鏈,并與 LangChain 無縫集成。
- LangServe:用于將 LangChain 的應用 部署為 REST API。
這幾點我們從官網的架構圖清晰可見。也可以認為此時的LangChain變成了一個SAAS化的開發者平臺。而它提供的組件、工具、監控、部署等生態,也都是為了讓開發者方便的開發出LLM App,然后部署到這個平臺上。
LangChain是一個優秀的LLM開源框架,也無法避免走上常規的開源軟件商業化的套路。
三、早期的LangChainHub
LangChain早期推出的各種組件中LangChainHub是其中一個比較有意思的項目。
早期LangChainHub對自己的定位如下:LangChainHub 受 Hugging Face Hub 啟發,是一個用于發現和提交常用的 提示、鏈、代理等的平臺。早期,LangChainHub以Prompt集合為起點,然后很快擴展到 鏈 和 代理。
這個定位我們從之前的LangChainHub在github倉庫上的目錄可見一斑。
此時的LangChainHub 可以理解為LangChain 工具包 或者說 組件中心,里面提供了高質量的組件方便開發者使用。確確實實是一個分享和探索Prompt、鏈 和Agent的地方。
比如,我們要基于reAct機制實現一個Agent,如果自己寫一堆Prompt(提示詞)那就太費勁了。此時,在LangChainHub就有許多現成可用的Prompt模板,使用簡單又省事,所以LangChainHub迅速流行開。
四、現在的LangChainHub
那現在的LangChainHub在新的LangChain架構圖的哪里呢?我也覺得挺奇怪的,LangChainHub也是算生態里較為重要的版塊,架構圖里居然沒提。
后來發現,LangChainHub被放到了LangSmith里。這個從新版的官方文檔也是清晰可見。
這也算合情合理吧,畢竟LangSmith是一個開發者平臺,用于調試、測試、評估、監控基于LLM框架的鏈,在這個平臺上,可以使用和創建Prompt。
早期的時候LangChainHub有Prompt、Chain、Agent,現在也只有Prompt了。我個人對LangChainHub的定位多少覺得有些悲涼了,LangChainHub淪為了Prompt模板倉庫。
我認為這背后存在兩種可能的原因:
- 可能是商業化的要求吧,將常用的Prompt模板挪到開發者平臺LangSmith里,畢竟LangSmith是有各種付費計劃的。
- 可能是官方對于LangChainHub里的內容開始做收縮,聚焦于Prompt,畢竟Prompt比較獨立 而且易于交付。而Chains 和 Agents 相對來說,交付難度高一些,變動性也低,所以官方直接將 Chains 和 Agents 沉淀到自己的核心庫里,這樣也能保證Chains 和 Agents 的質量,保證自己的口碑。
LangChainHub真的是始于Prompt,終于Prompt!!!當然啦,以后的LangChainHub怎么發展就不得而知了。
慶幸的是,我們大部分場景還是使用Prompt模板居多,此時的LangChainHub里依舊能找到大咖們貢獻的復雜常用的Prompt模板,降低了我們使用ReAct、Tool的門檻。
五、LangChainHub的使用
下面我們通過一個示例,來看看如何使用LangChainHub。
1.拆解LangChainHub的Prompt
比如:要實現一個reAct機制,如果我們自己寫提示詞,那太復雜了。但是LangChainHub上已經有大佬定義好了相關提示詞。
比如:structured-chat-agent(https://smith.langchain.com/hub/hwchase17/structured-chat-agent),提示詞寫的還是有點復雜的,大致意思就是:告訴LLM,它可以使用一堆什么格式的工具,然后先推理,選擇合適的工具,執行之后,進行觀察,觀察完了之后,繼續推理,如果有答案了,就回復用戶。
具體內容如下:
2.使用LangChainHub
使用LangChainHub上的Prompt就2步:
- 導入LangChainHub庫
- 從Hub上拉取對應的提示詞
接下來舉個例子,比如,LLM在直接計算浮點數加減時會出現錯誤,我要做一個基于reAct框架的AI Agent,讓這個Agent幫我精準計算浮點數。這里使用LangChainHub里的structured-chat-agent來簡化我的流程。
具體代碼如下:
from langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor, tool
from langchain.memory import ConversationBufferMemory
from langchain.schema import HumanMessage
from langchain.tools import BaseTool
from langchain_openai import ChatOpenAI
model = ChatOpenAI(
model="gpt-3.5-turbo",
openai_api_key="sk-xnAKVC6V0LzBwqGK9fE59cFcBc3f40DcBf96C135112dFb63",
openai_api_base="https://api.aigc369.com/v1",
)
# 定義工具
class SumNumberTool(BaseTool):
name = "數字相加計算工具"
description = "當你被要求計算2個數字相加時,使用此工具"
def _run(self, a, b):
return a["title"] + b["title"]
# 加入到工具合集
tools = [SumNumberTool()]
# 使用reAct的提示詞
prompt = hub.pull("hwchase17/structured-chat-agent")
# 創建Agent
agent = create_structured_chat_agent(llm=model, tools=tools, prompt=prompt)
# 創建記憶組件
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
# 創建Agent執行器
agent_executor = AgentExecutor.from_agent_and_tools(
agent=agent, tools=tools, memory=memory, verbose=True, handle_parsing_errors=True
)
agent_executor.invoke({"input": "你幫我算下 3.941592623412424 + 4.3434532535353的結果"})
六、總結
本文主要聊了LangChain和LangChainHub的發展變遷,還介紹了LangChainHub的使用,希望對你有幫助!