我們昨天快速完成了一個常見的應用,今天開始我們來講 Langchain 的基礎。在 Langchain 的 Model I/O
。LangChain 提供了一系列的構建塊,使您能夠方便地與任何語言模型進行接口。
還記得我們昨天用的 from langchain.chat_models.azure_openai import AzureChatOpenAI
嗎?在 Langchain 的 model 裡,分成了 LLMs 和 chat models。我們先來講解其區別。
LLMs:在 LangChain 中,LLMs 指的是純文本補全模型。這些模型所封裝的 API 接受一個字串 prompt 作為輸入,並輸出一個字串補全。OpenAI 的 GPT-3 就是一個 LLM 。
Chat models:這些模型通常基於 LLMs,但特別調整用於進行對話。它們的提供與純文本補全模型不同的接口。而不是單一的字串,它們接受一系列的聊天紀錄作為輸入。還記得我們昨天寫的 ask_question_with_context
function 嗎?這些聊天紀錄通常會標記講話者(在 Langchain 裡通常是 System、AI 或 Human 中的一個,這和 OpenAI 原生的 SDK 不一樣)。它們輸出的是一條 AI 聊天答覆。GPT-3.5 turboe 和 GPT-4 就是 chat models。
我們昨天用範例的就是一個 chat_models。
Langchain 提供了 Prompt templates 和 Example selectors 可以給開發者使用。前者是參數化的模版輸入,可以更加靈活地設計和使用特定的 prompt 輸入。後者是動態地選擇要包含在提示中的範例,以生成特定的或相關的回應。
通常在一機多用的場景下才會用 example selector,而且效果往往會不如預期。所以我們還是會選擇專門為了解決方案 AI 應用來做 prompt。
我們來修改昨天的程式碼,加下面的內容:
from langchain.prompts import PromptTemplate
# 在 main() 加上與修改下面這段
QUESTION_PROMPT = PromptTemplate.from_template("""你是生育補貼小幫手,只能回答生育補貼的問題,其他問題一律不回答。並以繁體中文回答問題。""")
qa = ConversationalRetrievalChain.from_llm(
llm=llm,
retriever=doc_store.as_retriever(),
condense_question_prompt=QUESTION_PROMPT,
return_source_documents=True,
verbose=False
)
這樣子就不會回答關於文本以外的問題了,可以參考下圖。
用 Prompt template 前
用 Prompt template 後
Output Parser 也是實務上很常用到的工具,可以把輸出的答案變成我們想要的結構。注意哦是結構,控制輸出的文本還是在 prompt。像我們會常利用這個方法,讓答案輸出成我們要需要的格定,尤其是 JSON。
以上就是今天 Model I/O 的基本介紹囉。