LLM及LangChain開發筆記(9)_LangChain對接OpenAI_OpenAI與ChatOpenAI兩種開發API使用
https://developer.aliyun.com/article/1218081
LangChain is a framework for developing applications powered by large language models (LLMs).
在LLM及LangChain開發筆記(3)篇章時,我們已安裝 LangChain 0.3 版本
pip install langchain==0.3.0
這邊可以透過pip list去檢閱目前版本,可發現其他langchain相依套件也一併都安裝下來。
還要補安裝langchain_community
https://api.python.langchain.com/en/latest/community_api_reference.html
https://python.langchain.com/api_reference/community/index.html
pip install langchain-community
記得先執行以下套件下載
pip install langchain==0.3.0
pip install openai==0.28
pip install langchain-community
pip install langchain-openai==0.3.0
示範程式-1 LLM的OpenAI開發API使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import openai import os from dotenv import load_dotenv, find_dotenv _ = load_dotenv(find_dotenv()) # read local .env file openai.api_key = os.getenv('OPENAI_API_KEY') from langchain.llms import OpenAI llm = OpenAI(model_name="gpt-3.5-turbo-instruct",max_tokens=1024) response = llm.invoke("怎麼評價人工智慧") print(response) !pip show langchain |
第一段OPENAI_API_KEY環境變數讀取仍為必備的,請記得先運行。
示範程式-2 聊天模型ChatOpenAI開發API使用
簡易的 LLM 聊天機器人互動迴圈,使用的是 LangChain 封裝的 OpenAI gpt-3.5-turbo 模型。
範例程式2
1 2 3 4 5 6 7 8 | from langchain.schema import HumanMessage from langchain.chat_models import ChatOpenAI chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.0) while True: my_input = input("(me): ") my_input = [HumanMessage(content=my_input)] llm_output = chat(my_input) print(f"(llm): {llm_output.content}") |
- HumanMessage:LangChain 的訊息類別,用來表示使用者輸入(Human)。
- ChatOpenAI:LangChain 的聊天模型包裝器,用於呼叫 gpt-3.5-turbo 或 gpt-4。
- input() 接收來自鍵盤的輸入。
- 再包裝成 LangChain 所需的格式 List[BaseMessage],也就是一個 HumanMessage物件實體的 list。
- 呼叫 chat(),把訊息發送給 GPT 模型,再去印出模型回覆的內容。
範例程式3-1 AIMessage與HumanMessage
1 2 3 4 5 6 7 8 9 | from langchain.chat_models import ChatOpenAI from langchain.schema import ( AIMessage, HumanMessage, SystemMessage ) chat = ChatOpenAI(temperature=0) chat([HumanMessage(content="將這句話從中文翻譯成英文:知道妳收到上榜的通知單,我的心裡就變得很亂。不知為妳而高興還為自己憂愁,只好就放妳走。")]) |
使用 HumanMessage 包裝的翻譯請求,模型會輸出英文翻譯作為 AIMessage。
(temperature=0 強調準確與穩定輸出)
- HumanMessage:表示「使用者輸入」訊息。
- AIMessage:表示模型回應。
- SystemMessage:可選,用來設定整體對話的系統角色或風格。
範例程式3-2 批次generate使用
使用 LangChain + OpenAI GPT 聊天模型,一次處理「多組不同語境的訊息批次」,並讓模型執行「中翻英」與「英翻中」兩項翻譯任務。
1 2 3 4 5 6 7 8 9 10 11 12 | batch_messages = [ [ SystemMessage(content="你是個有幫助的助手,可以將中文翻譯成英文。"), HumanMessage(content="將這句話從中文翻譯成英文:浸泡在十公升的瓶裡,單純想要呼吸,討厭雲裡霧裡。") ], [ SystemMessage(content="你是個有幫助的助手,可以將英文翻譯成中文。"), HumanMessage(content="將這句話從英文翻譯成中文:Another sunrise, another sunset.Soon it'll all be yesterday。") ], ] result = chat.generate(batch_messages) print(result) |
建立了兩筆對話紀錄:
- 第一筆:模型被告知要把中文翻成英文,並翻譯一段抽象句。
- 第二筆:模型被告知要把英文翻成中文,翻譯一段抒情句。
generate() 是 ChatOpenAI 支援的 批次輸入方法,可以一次處理多組對話。
它會回傳一個 LLMResult 物件,裡面包含每組對話的回覆。
它會回傳一個 LLMResult 物件,裡面包含每組對話的回覆。
示範程式-4 ChatPromptTemplate使用,把提示模板化。
- ChatPromptTemplate.from_template():將純文字轉為 LangChain 可用的 聊天提示模板。
- format_messages():轉換成模型可接受的 BaseMessage(預設會是一則 HumanMessage)。
- 使用 chat(prompt) 將 HumanMessage 提示送出,讓模型生成詩句。
- response 是 AIMessage,response.content 即為模型輸出的文字內容。
範例程式4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | from langchain.chat_models import ChatOpenAI chat = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.0) text = f""" 請寫一首詩,和夏天機車通勤族有關。 """ from langchain.prompts import ChatPromptTemplate prompt_template = ChatPromptTemplate.from_template(text) prompt = prompt_template.format_messages() response = chat(prompt) print(response.content) |
https://lunary.ai/blog/langchain-humanmessage#messageclass-in-langchain
SystemMessage : 用於向 AI 系統提供指令或上下文。
HumanMessage : 表示來自人類用戶的輸入。
ChatMessage: 用於各種互動的通用消息類型。
留言
張貼留言