使用聊天模型和提示範本建構簡單的 LLM 應用程式
在這個快速入門中,我們將向您展示如何使用 LangChain 建構一個簡單的 LLM 應用程式。此應用程式將文本從英文翻譯成另一種語言。這是一個相對簡單的 LLM 應用程式 - 它只是一個 LLM 呼叫加上一些提示。儘管如此,這是一個開始使用 LangChain 的絕佳方式 - 許多功能只需一些提示和一個 LLM 呼叫即可建構!
閱讀本教學課程後,您將對以下內容有高階概述
讓我們深入探討!
設定
Jupyter Notebook
這個和其他教學課程可能最方便在 Jupyter notebooks 中執行。在互動式環境中瀏覽指南是更好地理解它們的好方法。請參閱這裡以獲取有關如何安裝的說明。
安裝
要安裝 LangChain,請執行
- Pip
- Conda
pip install langchain
conda install langchain -c conda-forge
有關更多詳細資訊,請參閱我們的安裝指南。
LangSmith
您使用 LangChain 建構的許多應用程式將包含多個步驟,其中包含多個 LLM 呼叫調用。隨著這些應用程式變得越來越複雜,能夠檢查鏈或代理內部到底發生了什麼變得至關重要。執行此操作的最佳方法是使用 LangSmith。
在上面的連結註冊後,請確保設定您的環境變數以開始記錄追蹤
export LANGSMITH_TRACING="true"
export LANGSMITH_API_KEY="..."
或者,如果在 notebook 中,您可以使用以下程式碼設定它們
import getpass
import os
os.environ["LANGSMITH_TRACING"] = "true"
os.environ["LANGSMITH_API_KEY"] = getpass.getpass()
使用語言模型
首先,讓我們學習如何單獨使用語言模型。LangChain 支援許多不同的語言模型,您可以互換使用。有關開始使用特定模型的詳細資訊,請參閱支援的整合。
pip install -qU "langchain[openai]"
import getpass
import os
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")
from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-4o-mini", model_provider="openai")
讓我們首先直接使用模型。聊天模型是 LangChain 可執行物件的實例,這意味著它們公開了一個用於與之互動的標準介面。要簡單地呼叫模型,我們可以將 訊息列表傳遞給 .invoke
方法。
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage("Translate the following from English into Italian"),
HumanMessage("hi!"),
]
model.invoke(messages)
AIMessage(content='Ciao!', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 3, 'prompt_tokens': 20, 'total_tokens': 23, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_0705bf87c0', 'finish_reason': 'stop', 'logprobs': None}, id='run-32654a56-627c-40e1-a141-ad9350bbfd3e-0', usage_metadata={'input_tokens': 20, 'output_tokens': 3, 'total_tokens': 23, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}})
如果我們啟用了 LangSmith,我們可以看見這個執行記錄在 LangSmith 中,並且可以看見 LangSmith 追蹤。LangSmith 追蹤報告 token 使用資訊、延遲、標準模型參數(例如溫度)和其他資訊。
請注意,聊天模型接收 訊息物件作為輸入,並生成訊息物件作為輸出。除了文本內容外,訊息物件還傳達對話 角色並保存重要資料,例如 工具呼叫 和 token 使用計數。
LangChain 也支援透過字串或 OpenAI 格式輸入聊天模型。以下是等效的
model.invoke("Hello")
model.invoke([{"role": "user", "content": "Hello"}])
model.invoke([HumanMessage("Hello")])
串流
由於聊天模型是 可執行物件,它們公開了一個標準介面,其中包括非同步和串流調用模式。這允許我們從聊天模型串流單個 token
for token in model.stream(messages):
print(token.content, end="|")
|C|iao|!||
您可以在本指南中找到有關串流聊天模型輸出的更多詳細資訊。
提示範本
現在我們直接將訊息列表傳遞到語言模型中。這個訊息列表從哪裡來?通常,它是由使用者輸入和應用程式邏輯組合建構而成的。此應用程式邏輯通常接收原始使用者輸入,並將其轉換為準備傳遞給語言模型的訊息列表。常見的轉換包括添加系統訊息或使用使用者輸入格式化範本。
提示範本是 LangChain 中的一個概念,旨在協助進行此轉換。它們接收原始使用者輸入並返回準備傳遞到語言模型的資料(提示)。
讓我們在這裡建立一個提示範本。它將接收兩個使用者變數
language
:要將文本翻譯成的語言text
:要翻譯的文本
from langchain_core.prompts import ChatPromptTemplate
system_template = "Translate the following from English into {language}"
prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template), ("user", "{text}")]
)
請注意,ChatPromptTemplate
在單個範本中支援多個訊息角色。我們將 language
參數格式化為系統訊息,並將使用者 text
格式化為使用者訊息。
此提示範本的輸入是一個字典。我們可以單獨使用此提示範本來看看它本身的作用
prompt = prompt_template.invoke({"language": "Italian", "text": "hi!"})
prompt
ChatPromptValue(messages=[SystemMessage(content='Translate the following from English into Italian', additional_kwargs={}, response_metadata={}), HumanMessage(content='hi!', additional_kwargs={}, response_metadata={})])
我們可以看見它返回一個 ChatPromptValue
,其中包含兩個訊息。如果我們想要直接存取訊息,我們執行
prompt.to_messages()
[SystemMessage(content='Translate the following from English into Italian', additional_kwargs={}, response_metadata={}),
HumanMessage(content='hi!', additional_kwargs={}, response_metadata={})]
最後,我們可以在格式化的提示上調用聊天模型
response = model.invoke(prompt)
print(response.content)
Ciao!
如果我們查看 LangSmith 追蹤,我們可以準確地看見聊天模型接收到的提示,以及 token 使用資訊、延遲、標準模型參數(例如溫度)和其他資訊。
結論
就是這樣!在本教學課程中,您學習了如何建立您的第一個簡單 LLM 應用程式。您學習了如何使用語言模型、如何建立提示範本,以及如何透過 LangSmith 深入了解您建立的應用程式的可觀察性。
這只是您想要學習成為一名精通的 AI 工程師的冰山一角。幸運的是 - 我們有很多其他資源!
有關 LangChain 核心概念的進一步閱讀,我們提供了詳細的概念指南。
如果您對這些概念有更具體的問題,請查看操作指南的以下部分
以及 LangSmith 文件