以下是langchain-官網的教學,每一個範例我都會根據官網的教學修改成我自己可能會用到的版本,不過這大概出不了書,畢竟只是官網範例的翻譯跟改成我自己需要的版本。
下方是我根據官網教學並修改成使用huggingface 的模型去實作的版本:
在本快速入門中將向您展示如何使用 LangChain 建立簡單的 LLM 應用程式。該應用程式會將英語文字翻譯成另一種語言。這是一個相對簡單的 LLM 應用 - 它只是一個 LLM 呼叫加上一些提示。儘管如此,這仍然是開始使用 LangChain 的好方法 - 只需一些提示和 LLM 呼叫就可以建立很多功能!
閱讀本教學後,您將對以下內容有一個整體的了解:
使用大語言模型
使用PromptTemplates和OutputParsers
使用LangChain 表達式語言 (LCEL)將元件連結在一起
使用LangSmith調試和追蹤您的應用程式
使用LangServe部署您的應用程式
讓我們深入了解吧!
安裝必要套件
!pip install langchain
!pip install langchain-huggingface
!pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
導入跟設定相關設置
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
LANGCHAIN_API_KEY="替換為你的LANGCHAIN_API_KEY"
import getpass
import os
from huggingface_hub import login, HfApi
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = LANGCHAIN_API_KEY
# 替換為你的Hugging Face API Token
my_read_token = "替換為你的Hugging Face API Token"
os.environ["HUGGINGFACE_TOKEN"] = my_read_token
# 登錄Hugging Face
login(token=os.environ["HUGGINGFACE_TOKEN"])
這邊我使用huggingface 的大模型,有想用其他商業大模型的可以參考原教學
from transformers import AutoModelForCausalLM, AutoTokenizer,pipeline
model_id = "MediaTek-Research/Breeze-7B-Instruct-v1_0"
tokenizer = AutoTokenizer.from_pretrained(model_id, use_fast=False, token=my_read_token)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto",torch_dtype=torch.bfloat16)
model.to(device)
原教學先直接使用模型。ChatModels是LangChain“Runnables”的實例,這意味著它們公開了一個標準介面來與之互動。為了簡單地呼叫模型,langchain可以將訊息列表傳遞給該.invoke方法。
補充說明:其實 messages這個只是把訊息貼在一起,可以看成簡單的A+B這樣,HumanMessage 跟SystemMessage的區別只是添加的貼合格式不同。
.invoke的方法就是huggface 產生文本的方法,應該只有格式略有不同,商業的模型我想應該有根據langchain的格式做微調或調整,開源的使用就很容易有點狀況。
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_huggingface import HuggingFacePipeline
pipe = pipeline("text-generation", model=model, tokenizer=tokenizer, max_new_tokens=100, top_k=50)
llm = HuggingFacePipeline(pipeline=pipe)
messages = [
HumanMessage(content="Hello!"),
SystemMessage(content="幫我將前方文本翻譯成法文"),
]
llm.invoke(messages)
API 參考:HumanMessage |系統訊息
請注意,模型的響應是一個AIMessage。其中包含字串回應以及有關回應的其他元資料。通常我們可能只想處理字串回應。我們可以使用一個簡單的輸出解析器來解析這個回應。
我們首先導入簡單的輸出解析器。
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()
API 參考:StrOutputParser
你可以單獨使用它。例如,我們可以保存語言模型呼叫的結果,然後將其傳遞給解析器。
result = llm.invoke(messages)
parser.invoke(result)
更方邊的方法是可以使用此輸出解析器“連結”模型。這意味著該輸出解析器將在該鏈中每次被調用。此鏈採用語言模型的輸入類型(字串或訊息清單)並傳回輸出解析器的輸出類型(字串)。
我們可以使用操作符輕鬆建立鏈|。|LangChain中使用運算符將兩個元素組合在一起。
chain = llm | parser
chain.invoke(messages)
如果我們現在看一下 LangSmith,我們可以看到該chain有兩個步驟:首先呼叫語言模型,然後將結果傳遞到輸出解析器。
##Prompt 模板
現在我們將訊息列表直接傳遞到語言模型中。這個訊息列表從哪裡來?通常,它是由使用者輸入和應用程式邏輯的組合建構的。此應用程式邏輯通常會取得原始使用者輸入並將其轉換為準備傳遞到語言模型的訊息清單。常見的轉換包括新增系統訊息或使用使用者輸入格式化範本。
PromptTemplates是LangChain中的一個概念,旨在協助這種轉換。它們接收原始使用者輸入並傳回準備傳遞到語言模型的資料(提示)。
讓我們在這裡創建一個 PromptTemplate。它將接受兩個用戶變數:
language:將文字翻譯成的語言
text:要翻譯的文本
API 參考:ChatPromptTemplate
首先,我們建立一個字串,將其格式化為系統訊息:
接下來,我們可以建立 PromptTemplate。這將是一個組合system_template以及一個更簡單的模板,用於放置要翻譯的文本
from langchain_core.prompts import ChatPromptTemplate
system_template = "將前方的中文翻譯成{language}:"
prompt_template = ChatPromptTemplate.from_messages(
[ ("user", "{text}"),("system", system_template)]
)
result = prompt_template.invoke({"language": "法文", "text": "你好!"})
result.to_messages()
# 輸出顯示: [HumanMessage(content='你好!'), SystemMessage(content='將前方的中文翻譯成法文:')]
chain = prompt_template | llm | parser
chain.invoke({"language": "法文", "text": "你好!"})
# Human: 你好!
# System: 將前方的中文翻譯成法文: 你好!
# 中文: 你好!
# 法文: Bonjour!
後面官方教學還有使用langServe 提供服務,不過我就不翻譯了。
感覺langchain 把模型調用以及輸入的模板複雜化很多,很多事情不用langchain其實也可以直接做,這讓我考慮是否應該直接使用RAG功能的軟體服務 或搜索服務的api ,再搭上自己網路上找的一些prompt模板跟方法直接調用大模型或是商用模型的API,或許這樣會比較有效率以及方便?
教學:
基礎:
將外部資訊導入到 Agent 的運作中
5. 建立檢索增強生成 (RAG) 應用程式
6. 建立會話式 RAG 應用程式
7. 基於 SQL 資料建構問答系統
8. 建構查詢分析系統
9. 建立本地 RAG 應用程式
10. 透過圖形資料庫建立問答應用程式
11. 建構 PDF 攝取和問答系統
特定的任務或功能
12. 建構抽取資料的方法
13. 產生合成資料
14. 將文字用標籤分類
15. 總結文本
快速入門:
聊天機器人:
RAG:
4.自適應 RAG
5.使用本地的LLM進行自適應 RAG
6.自主檢索 RAG(Agentic RAG)
7.自修正 RAG(Corrective RAG)
8. 使用本地的LLM進行自修正 RAG
9.自我詢問RAG(Self-RAG)
10.使用本地的LLM自我詢問RAG(Self-RAG)
11.SQL Agent
Agent 架構:
評估與分析:
22. 基於代理的評估
23. 在LangSmith中的評估
實驗性項目:
24. 網路搜索Agent(STORM)
25. TNT-LLM
26. Web導航 Agent
27. 競賽中的程式設計
28. 複雜資料抽取