發表文章

目前顯示的是有「LLM」標籤的文章

LLM及LangChain開發筆記(14)_對話記憶(Conversational Memory):介紹與簡介

圖片
  記憶機制簡介 ConversationBufferMemory :儲存完整的對話歷史 ConversationSummaryBufferMemory :使用摘要方式儲存對話歷史 ConversationBufferWindowMemory :僅保留最後幾輪對話 ConversationalTokenBufferMemory :限制儲存的 Token 數量 範例程式 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.chat_models import ChatOpenAI chat = ChatOpenAI(model_name= "gpt-3.5-turbo" , temperature= 0.0 ) from langchain.callbacks import get_openai_callback def count_tokens (chain, query): with get_openai_callback() as cb: result = chain.run(query) print (f 'Spent a total of {cb.total_tokens} tokens' ) return result from langchain.chains import ConversationChain conversation_buf = ConversationChain( llm=chat, ) print (conversation_buf.prompt.template) from langchain.memory import ConversationBufferMemory memory=ConversationBuffe...

LLM及LangChain開發筆記(13)_輸出解析器(Output Parser)

圖片
  原始輸入(customer_review)內容: customer_review = """ 這個吹風機非常棒。它有四個檔位:輕柔模式、輕微微風、大風城市和龍捲風。 它在兩天內送到,正好趕上我妻子的周年紀念禮物。我覺得我妻子非常喜歡它, 她感到無言以對。到目前為止,我是唯一在使用它, 我每隔一天上班前用它來為妻子吹頭髮。它的價格略高於其他吹風機, 但我認為為了額外的功能,這是值得的。 """ 預期的輸出 JSON: { "禮物" : true, "送貨天數" : "2" , "價格" : [ "它的價格略高於其他吹風機," , "但我認為為了額外的功能,這是值得的。" ] } "禮物" 由 我妻子的周年紀念禮物 判斷為 true "送貨天數" 由 它在兩天內送到 中的「兩天」提取為 "2" "價格" 將描述價格與價值的兩句話提取為一組列表 Step1.定義 JSON 輸出格式的 Schema(結構化回應欄位) 目的是讓大語言模型(如 GPT)依照明確規範輸出 JSON 格式的資訊。 常用於資訊擷取(Information Extraction)任務。 匯入必要模組: ResponseSchema:定義每個欄位的名稱與描述。 StructuredOutputParser:根據這些 Schema 解析模型輸出。 ChatPromptTemplate:製作提示詞。 步驟1程式 from langchain.output_parsers import ResponseSchema from langchain.output_parsers import StructuredOutputParser from langchain.prompts.chat import ChatPromptTemplate gift_schema = ResponseSchema( name= "禮物" , desc...

LLM及LangChain開發筆記(12)_聊天模型的PromptTemplate_ChatPromptTemplate

圖片
  https://livebook.manning.com/book/langchain-in-action/chapter-1/v-3/49 範例1.HumanMessagePromptTemplate 根據指定主題與風格,自動生成一首詩。 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.chat_models import ChatOpenAI chat = ChatOpenAI(model_name= "gpt-3.5-turbo" , temperature= 0.0 ) from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate human_template = HumanMessagePromptTemplate.from_template( """ 請寫首詩,按以下主題與風格: 主題:{theme} 風格:{style} """ ) chat_prompt = ChatPromptTemplate.from_messages([human_template]) theme = "描述大海的美麗" style = "用唐代的七言詩,共四句,每句七個字" chat_prompt_value = chat_prompt.format_prompt( theme=theme, style = style ) response = chat.invoke(chat_prompt_value.to_messages()) print (response.content) 建立 Prompt 模板(HumanMessage) 使用者輸入的 pr...

LLM及LangChain開發筆記(11)_文本語言模型LLMs的FewShotPromptTemplate

圖片
透過給模型幾個示範範例,讓它更好地模仿這些範例風格來回答新問題。 https://python.langchain.com/api_reference/core/prompts/langchain_core.prompts.few_shot.FewShotPromptTemplate.html 示範程式1.實作一個 few-shot learning 對話提示系統。 使用 LangChain + OpenAI GPT 模型(gpt-3.5-turbo-instruct) 透過 few-shot learning(少樣本學習) 方式,讓 GPT 模型根據兩個範例學會風格與語氣,並回答新的問題。 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 import FewShotPromptTemplate, PromptTemplate from langchain.llms import OpenAI llm = OpenAI(model_name= "gpt-3.5-turbo-instruct" ,temperature= 0.0 ,max_tokens= 1024 ) # create our examples examples = [ { "query" : "你好嗎?" , "answer" : "還不錯,但有時我們仍會抱怨。" }, { "query" : "現在幾點了?" , "answer" : "是時候買支手錶了。" } ] # create a example template example_temp...

LLM及LangChain開發筆記(10)_文本語言模型LLMs的PromptTemplate

圖片
在過去幾篇章中探討到關於prompt技巧,至於所謂PromptTemplate主要聚焦在如何去重複運用提示詞,並將其抽離成可以重複使用的模板。類似所謂「字串插值」(String interpolation)。 傳統透過python f string去做format字串傳參數的寫法較不靈活。 https://python.langchain.com/api_reference/core/prompts/langchain_core.prompts.prompt.PromptTemplate.html 示範程式1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 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 ) from langchain import PromptTemplate template = """ 請將由三個反引號分隔的文本內容用一句話進行概括 ```{text}``` """ prompt_template = PromptTemplate( input_variables = [ "text" ], template = template ) print ( prompt_template.format( text = "這是一個神奇的大模型,可以像人一樣對話" ) ) 示範程式2 1 2 3 4 5 ...

LLM及LangChain開發筆記(9)_LangChain對接OpenAI_OpenAI與ChatOpenAI兩種開發API使用

圖片
Model I/O Module https://upstash.com/blog/langchain-explained 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 0.3x 以後的版本結構大改,llms.OpenAI 被拆分移到 langchain_community 套件中。 還要補安裝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.l...

LLM及LangChain開發筆記大綱

圖片
https://www.researchgate.net/figure/LLM-LangChain-technology-roadmap_fig5_380721469 關於服用以下文章學習交流請留意 請留意!! 筆記(1)~筆記(8)都是介紹和LLM 採用OpenAI GPT做使用的提示詞技巧示範 LLM及LangChain開發筆記(3)~LLM及LangChain開發筆記(8)用的程式都有承先啟後 筆記(9)後續的才是偏重在LangChain部分的開發學習筆記相關介紹 LLM及LangChain開發筆記(1)_LangChain與LLM觀念與相關術語簡介Chains(鏈)跟Prompts(提示) https://coolmandiary.blogspot.com/2025/05/langchain1langchainllmchainsprompts.html LLM及LangChain開發筆記(2)_何謂提示詞工程(Prompt Engineering)_8個常見提示詞工程技巧 https://coolmandiary.blogspot.com/2025/05/langchain2prompt-engineering8.html LLM及LangChain開發筆記(3)_OpenAPI金鑰配置_Model的I/O_提示詞、分割符、摘要與指定輸出格式_token耗用 https://coolmandiary.blogspot.com/2025/05/langchain3openapimodeliotoken.html LLM及LangChain開發筆記(4)_Zero-Shot和Few-Shot Prompting通過搜索進行自我詢問 https://coolmandiary.blogspot.com/2025/05/langchain4zero-shotfew-shot-prompting.html LLM及LangChain開發筆記(5)_思維鍊CoT(Chain-of-Thought Prompt) https://coolmandiary.blogspot.com/2025/05/langchain5cotchain-of-thought-prompt.html LLM及LangChain開發筆記(6)_聊天機器人函數改寫_模擬對話歷史扮演某風格助理對話 h...

LLM及LangChain開發筆記(8)_對抗攻擊_Prompt Injection(提示詞注入)_洩漏與越獄

圖片
針對提示詞,若給有心人士使用,可能會變成兩面刃。 因此關於對放攻擊的研究與機制也逐漸進步,LLM現在也會做一些基本防範。(以下提示詞僅用於研究學習用途) 生成式AI生成根據給予的prompt去生出內容,然而prompt當中潛藏混淆視聽的內容,導致AI回復出現幻覺、有害訊息等等,甚至會在公共場合、醫療、宣傳、企業去生成有害的資訊,甚至政治敏感內容,造成決策疏失等諸多風險。 對抗攻擊-提示詞注入 透過分割符號、忽略等字眼來混淆AI去跳過指令描述,甚至用欺騙語法提供給AI。 以下是目前GPT已修復此BUG了,因此沒被混淆。 範例提示詞程式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 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' ) def get_completion (prompt, model= "gpt-3.5-turbo" ): messages = [{ "role" : "user" , "content" : prompt}] response = openai.ChatCompletion.create( model=model, messages=messages, temperature= 0 , # this is the degree of randomness of the model's output ) return response.choices[ 0 ].message[ "content" ] prompt = f """ 將下面的句子...

LLM及LangChain開發筆記(7)_聊天機器人函數改寫_自動點餐機器人_結合OpenAI GPT-3.5 API 和 Panel GUI 工具

圖片
  範例程式碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 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' ) def get_completion_from_messages (messages, model= "gpt-3.5-turbo" , temperature= 0 ): response = openai.ChatCompletion.create( model=model, messages=messages, temperature=temperature, # this is the degree of randomness of the model's output ) # print(str(response.choices[0].message)) return response.choices[ 0 ].message[ "content" ] def merge_histories (_): prompt = chat.value_input chat.value = '' retailshop.append({ 'role' : 'user' , 'co...