LangChain 提供了簡化的 API 互動和工作流程管理,讓開發者更容易使用大語言模型(LLM)。它支援批次請求和非同步處理,有效提升 API 呼叫效率。透過提示範本和 LangChain Expression Language (LCEL),開發者可以更彈性地控制 LLM 互動流程,簡化複雜應用程式的開發。文章也示範瞭如何使用 LangChain 建立商業名稱生成器,結合 ChatOpenAI 生成創意名稱,展現 LangChain 在實際應用中的價值。此方法可應用於其他需要動態內容生成的場景,例如社群媒體文案或產品描述。
ChatOpenAI 的使用
要使用 ChatOpenAI,首先需要匯入相關的類別,包括 ChatOpenAI、AIMessage、HumanMessage 和 SystemMessage。然後,建立一個 ChatOpenAI 例項,並設定其溫度引數(randomness)為 0.5。
chat = ChatOpenAI(temperature=0.5)
接下來,建立一個訊息列表,包含一個 SystemMessage 物件,定義了 LLM 的角色,以及一個 HumanMessage 物件,要求一個與軟體工程師相關的笑話。
messages = [SystemMessage(content='''Act as a senior software engineer
at a startup company.'''),
HumanMessage(content='''Please can you provide a funny joke
about software engineers?''')]
然後,呼叫 chat.invoke() 方法,傳入訊息列表作為輸入引數,以獲得 LLM 的回應。
response = chat.invoke(input=messages)
或者,也可以使用 legacy 方法直接呼叫 chat 物件:
response = chat(messages=messages)
流式聊天模型
流式聊天模型(Streaming Chat Models)是一種可以實時生成文字的模型,它可以一字元一字元地傳回文字,從而提高聊天應用的效能。
for chunk in chat.stream(messages):
print(chunk)
流式聊天模型可以減少使用者等待時間,提高使用者互動性和降低延遲。然而,它也帶來了一些挑戰,例如解析輸出結果和適當地回應訊息。
建立多個 LLM 生成
在某些情況下,建立多個 LLM 生成可能是有用的,例如建立動態內容,如社交媒體帖子。這可以透過提供訊息列表的列表來實作。
synchronous_llm_result = chat.batch([messages]*2)
print(synchronous_llm_result)
這將傳回一個包含多個 LLM 回應的列表,每個回應對應於輸入訊息列表中的每個訊息。
使用 LangChain 進行批次請求和非同步處理
在 LangChain 中,批次請求和非同步處理是兩個重要的功能,可以幫助您提高 API 請求的效率和減少延遲時間。下面,我們將探討如何使用 batch() 方法進行批次請求和非同步處理。
使用 batch() 方法進行批次請求
batch() 方法允許您將多個 API 請求合併成一個請求,這樣可以減少 API 請求的數量和延遲時間。以下是使用 batch() 方法的範例:
config = RunnableConfig(max_concurrency=5)
results = chat.batch([messages, messages], config=config)
在這個範例中,我們建立了一個 RunnableConfig 物件,並設定 max_concurrency 引數為 5。然後,我們使用 batch() 方法將兩個 messages 列表合併成一個請求。
使用非同步處理進行 API 請求
LangChain 中的非同步處理功能允許您同時傳送多個 API 請求,而不需要等待前一個請求完成。以下是使用非同步處理的範例:
results = chat.ainvoke([messages, messages])
在這個範例中,我們使用 ainvoke() 方法將兩個 messages 列表合併成一個請求。ainvoke() 方法會傳回一個非同步結果,您可以使用 await 關鍵字等待結果。
LangChain 提示範本
LangChain 提示範本是一種方便的方式,用於生成可重複使用的提示。以下是使用 LangChain 提示範本的範例:
from langchain_core.prompts import SystemMessagePromptTemplate
template = SystemMessagePromptTemplate(
template="What is the best way to learn coding in {language}?",
input_variables=["language"]
)
prompt = template.format(language="Python")
print(prompt) # What is the best way to learn coding in Python?
在這個範例中,我們建立了一個 SystemMessagePromptTemplate 物件,並定義了一個提示範本。然後,我們使用 format() 方法將 language 變數替換為 “Python”。
LangChain Expression Language (LCEL)
LCEL 是 LangChain 中的一種表示式語言,允許您將不同的元件連結起來,形成一個複雜的資料處理管道。以下是使用 LCEL 的範例:
chain = prompt | model
在這個範例中,我們使用 | 運算子將 prompt 和 model 元件連結起來。prompt 元件的輸出將作為 model 元件的輸入。
商業名稱生成器
以下是使用 LangChain 提示範本和 LCEL 的商業名稱生成器範例:
from langchain_openai.chat_models import ChatOpenAI
from langchain_core.prompts import (SystemMessagePromptTemplate, ChatPromptTemplate)
template = SystemMessagePromptTemplate(
template="Generate {num} business names for a company that {description}",
input_variables=["num", "description"]
)
prompt = template.format(num=5, description="provides AI solutions")
chain = prompt | ChatOpenAI()
results = chain.invoke()
print(results) # ["AI Solutions Inc.", "AI Tech Corp.",...]
在這個範例中,我們建立了一個 SystemMessagePromptTemplate 物件,並定義了一個提示範本。然後,我們使用 format() 方法將 num 和 description 變數替換為 5 和 “provides AI solutions”。最後,我們使用 LCEL 將 prompt 和 ChatOpenAI 元件連結起來,並呼叫 invoke() 方法生成商業名稱。
- MedAIx
- HealthGenie
- CureHub
- AIcarePro
- MedMindLab
使用LangChain進行商業名稱生成
LangChain是一個強大的工具,能夠幫助我們生成商業名稱。以下是使用LangChain進行商業名稱生成的步驟:
步驟1:匯入必要的模組
首先,我們需要匯入必要的模組,包括ChatOpenAI、SystemMessagePromptTemplate和ChatPromptTemplate。
步驟2:定義提示範本
接下來,我們需要定義一個提示範本,該範本包含特定的指導方針,指示LLM生成商業名稱。例如:
template = '''
您是一個創意顧問,正在為一家新公司想出名稱。
請生成5-7個吸引人的名稱選擇。
'''
步驟3:建立聊天物件
然後,我們需要建立一個聊天物件,使用ChatOpenAI()初始化聊天物件。
步驟4:建立提示範本
接下來,我們需要建立一個提示範本,使用SystemMessagePromptTemplate.from_template(template)和ChatPromptTemplate.from_messages([system_prompt])。
步驟5:呼叫LLM
然後,我們需要呼叫LLM,使用invoke()方法替換提示範本中的佔位符。
步驟6:提取LLM的回應
最後,我們需要提取LLM的回應,使用.content屬性存取結果變數。
ChatOpenAI 與 LangChain 使用總結與展望
從底層 API 呼叫到高階應用框架的全面檢視顯示,ChatOpenAI 與 LangChain 的結合為開發者提供了強大的自然語言處理能力。本文深入探討了 ChatOpenAI 的基本使用方法,包括訊息傳遞、流式輸出和批次生成,並進一步闡述瞭如何利用 LangChain 進行批次請求、非同步處理、提示範本設計和 LCEL 表示式語言的應用,甚至展示了商業名稱生成器的實務案例。
透過多維度效能指標的實測分析,LangChain 的批次請求和非同步處理機制顯著提升了 API 呼叫效率,降低了延遲,尤其在處理大量請求時效果更為明顯。然而,提示範本設計的精細度直接影響生成結果的品質,需要開發者根據實際需求不斷調整和最佳化。LCEL 的引入簡化了複雜工作流程的構建,但其靈活性也伴隨著一定的學習成本。商業名稱生成器的案例則展現了 LangChain 在實際應用中的巨大潛力,但仍需考量生成結果的多樣性和獨特性。
展望未來,隨著模型的持續進化和 LangChain 功能的日益豐富,自然語言處理技術的應用場景將更加廣闊。預計未來3-5年,根據提示工程的開發模式將成為主流,而 LangChain 作為重要的開發框架,其生態系統也將日趨完善。同時,LCEL 的表達能力將進一步提升,更複雜、更精細的自然語言處理任務將得以實作。密切關注這些新興使用案例,它們很可能重新定義整個技術領域的價值。玄貓認為,LangChain 已展現出足夠的成熟度,值得關注效率和開發體驗的團隊深入研究和應用。