將多個不同的prompt template 與 chain整合使用
# 先定義好兩個runnable (兩個HumanMessage)
person = ChatPromptTemplate.from_template("是誰發行{invention}?")
country = ChatPromptTemplate.from_template("{person}來自哪個國家?")
# 一起加入到chain中
person_chain = ({"invention":RunnablePassthrough()} | person | chat_model | str_parser)
person_summary_chain = ({'person':person_chain} | country |chat_model | str_parser)
person_summary_chain.invoke("珍珠奶茶")
珍珠奶茶起源於台灣。這種飲品在1980年代的台灣誕生,並迅速成為一種受歡迎的飲品,隨後風靡全球。無論是台中的春水堂還是台南的翰林茶館,它們都為珍珠奶茶的發展和普及做出了貢獻。
from langchain_core.output_parsers import JsonOutputParser
# 初始化 JSON 解析器並獲取格式指示。這會讓 prompt2 知道如何格式化輸出
json_parser = JsonOutputParser()
format_instructions = json_parser.get_format_instructions()
# 定義提示模板
prompt1 = ChatPromptTemplate.from_template("請根據{attribute}特性,推薦一種環保的再生能源。請僅提供能源的名稱:")
prompt2 = ChatPromptTemplate.from_template(
"在永續發展中,{energy}能源通常用於製造哪種環保材料?請僅提供能源材料的名稱:{format_instructions}"
)
prompt3 = ChatPromptTemplate.from_template(
"假設每個國家的能源發展是相等的,哪個國家使用{energy}能源可以做得最好?"
"請僅提供國家/地區名稱:"
)
prompt4 = ChatPromptTemplate.from_template(
"請結合{material}和{country},描述一個環境友善的未來生活場景。"
)
from langchain_core.runnables import RunnablePassthrough
prompt2 = prompt2.partial(format_instructions=format_instructions) # 將 format_instructions 部分應用到 prompt2,以確保輸出格式正確
# 將聊天模型與字符串解析器串聯,確保聊天模型的輸出可以被解析為字符串
model_parser = chat_model | str_parser
# 能源生成鏈 (先將收到的attribute丟給prompt1得到結果,得到 能源 的名稱 => 已解決prompt1,再丟給prompt2)
energy_generator = ({"attribute":RunnablePassthrough()} | prompt1 | {"energy":model_parser}) # 太陽能
# 能源材料(得到 能源材料 的名稱): 將 prompt2 的輸出經過聊天模型處理後,使用 JSON 解析器解析輸出
energy_to_material = prompt2 | chat_model | json_parser
# 定義新的 lambda 函數來處理沒有 'energy_material' 的情況
def extract_material(x):
return x.get('energy_material', next(iter(x.values())))
"""
定義 extract_material 函數。該函數首先嘗試從輸出中提取 energy_material 鍵的值。
如果 energy_material 不存在,它會提取輸出中的第一個鍵值
因為material_output會隨機產生key:
例如:
material_output = {
"energy_material": "綠氫"
}
或
material_output = {
"其他鍵": "其他值"
}
這樣才可以避免沒讀到指定key值而造成錯誤發生
"""
# 能源使用做得最好的國家: 將 prompt3 的輸出經過聊天模型和字符串解析器處理
material_to_country = prompt3 | model_parser
# 結合: 將 energy_generator 的輸出傳遞給 energy_to_material 和 material_to_country,
# 確保 energy_to_material 的輸出存在 energy_material 鍵,否則提供一個預設值,最後將這些結果傳遞給 prompt4
question_generator = (
energy_generator
| {
"material": energy_to_material | extract_material,
"country": material_to_country
}
| prompt4
)
# 最後生成問題
final_prompt = question_generator.invoke("零污染")
print(f"最終產生的問題:{final_prompt.messages[0].content}\n\n"
f"AI 回答結果:{chat_model.invoke(final_prompt).content}")
最終產生的問題:請結合氫氣和澳大利亚,描述一個環境友善的未來生活場景。
AI 回答結果:在未來的一個環境友善生活場景中,澳大利亞成為全球領先的綠色能源典範,廣泛利用氫氣作為主要能源來源。以下是這個未來場景的詳細描述:
氫氣生產與儲存
澳大利亞利用其豐富的太陽能和風能資源,建立了大量的可再生能源發電設施。這些設施通過電解水產生綠氫,這種氫氣不僅清潔,而且生產過程中幾乎不排放溫室氣體。氫氣被儲存在先進的儲能設施中,包括高壓罐和固態儲氫技術,確保穩定的能源供應。
交通運輸
城市和城鎮之間的交通系統全面實現了氫燃料電池車輛的普及。氫燃料電池汽車、巴士和卡車在道路上行駛,不僅運行安靜,且僅排放水。澳大利亞的主要城市如悉尼、墨爾本和布里斯班都建設了完善的氫氣加注站網絡,保證了車輛的高效運行。
家庭與工業應用
居民家庭和商業建築物都安裝了氫燃料電池,這些電池能夠為家庭供電和供暖,並且可與太陽能板和風能發電設備無縫結合,形成一個自給自足的微電網系統。工業部門則利用氫氣作為清潔燃料,取代傳統的化石燃料,顯著減少了二氧化碳排放。
農業與環保
澳大利亞的農業也受益於氫氣技術的發展。農場使用氫燃料電池拖拉機和灌溉系統,大幅降低了對化石燃料的依賴。氫氣技術還被應用於生物質轉化和廢物處理,實現了循環經濟的目標。
教育與研究
各大學和研究機構積極參與氫氣科技的研究與開發。大量的科研資金和政策支持促進了新技術的創新,並培養了大量專業人才。澳大利亞成為全球氫氣技術的研究中心,吸引了來自世界各地的科學家和工程師。
社會影響
環境友善的氫氣經濟帶來了顯著的社會變革。澳大利亞的人們享有更清新的空氣、更低的能源成本和更高的生活質量。氫氣產業的發展還創造了大量的就業機會,促進了經濟的可持續增長。
總結來說,在這個未來場景中,氫氣技術的廣泛應用使得澳大利亞成為一個真正的綠色國家,不僅實現了能源系統的轉型,還帶來了環境、經濟和社會的多重益處。這樣的未來生活場景展示了可持續發展的無限可能性。