iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

全端 LLM 應用開發-Day27-Langchain 的 Model I/O

我們昨天快速完成了一個常見的應用,今天開始我們來講 Langchain 的基礎。在 Langchain 的 Model I/O。LangChain 提供了一系列的構建塊,使您能夠方便地與任何語言模型進行接口。

Model

還記得我們昨天用的 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。

Prompt

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 前

before prompt template

用 Prompt template 後

after prompt template

Output Parser

Output Parser 也是實務上很常用到的工具,可以把輸出的答案變成我們想要的結構。注意哦是結構,控制輸出的文本還是在 prompt。像我們會常利用這個方法,讓答案輸出成我們要需要的格定,尤其是 JSON。

以上就是今天 Model I/O 的基本介紹囉。


上一篇
全端 LLM 應用開發-Day26-用 Langchain 來做 PDF 文件問答
下一篇
全端 LLM 應用開發-Day28-Langchain 的 Memory
系列文
全端 LLM 應用開發(向量資料庫, Hugging Face, OpenAI, Azure ML, LangChain, FastAPI and more)30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
as88888as
iT邦新手 5 級 ‧ 2023-12-19 09:41:01

Prompt template前跟後的圖是一樣的?

Ben iT邦新手 4 級 ‧ 2024-07-06 23:47:34 檢舉

貼錯了吧

我要留言

立即登入留言