# 筆記:Building Systems with the ChatGPT API 課程連結: https://learn.deeplearning.ai/chatgpt-building-system/lesson/4/moderation 主題:使用LLM建立完整系統的步驟 ## 建立LLM系統四步驟 1. 確認使用者input內容沒有問題(Moderation) 2. 辨識與分類input類型 3. 針對input類型,撈取資料或產生output 4. 確認模型output內容沒有問題 ## 語言模型原理、Tokens、格式 ### 原理 - LLM核心是使用supervised learning訓練而成 - 重複使用相同的句子預測每一段接龍 - 兩種LLM: Base-LLM(純接龍)、Instruction Tuned-LLM(以額外指令微調過) - Instruction tuned-LLM 訓練流程: 1. 微調 - 放入許多input/output來確保輸出符合要求 2. 人類評價 - 讓人類幫output做評價,如答案是否有幫助、誠實、沒有傷害 3. 依評價微調 - 增強好評結果的輸出(常用增強式學習) ### Token - 我們發現其實接龍不是接「下一個字」而是「下一個Token」 - 英文中,1個token大概等於4個字母,或四分之三個字 - input (context) + output (completion) 經常會有token數的限制 - 例如 GPT3.5 turbo 一次只能有4000個tokens(input + ouput) ### 格式 - LLM的對答有三個腳色設定 1. System: 設定與規範此語言模型工作範圍 2. Assistant: 實際於System規範內與使用者對答 3. User: 系統使用者 Tip 1: 查看Token使用量 ```python reponse['usage']['prompt_tokens'] # input token reponse['usage']['completion_tokens'] # output token reponse['usage']['total_tokens'] # total token ``` Tip 2: 不要把API key寫在你的JupyterNB(防止key外流) 可用兩行code呼叫local file ```python load_dotenv(find_dotenv()) open.api_key = os.getenv('OPPENAI_API_KEY') ``` ## 第一階段:Classification 需先分類input類型,才能判斷是否有問題 - 方法:使用prompt定義如何辨識不同類型,並輸出類型做下一階段指令 - Tip 1:使用 `####` 作為delimiter,通常會被認定為1個token - Tip 2:分類完後將答案格式化(例如json)可方便餵到程式下一階段 ## 第二階段:Moderation 需確認使用者沒有不正當地使用系統 - 方法1:使用 Moderation API 來確認這件事 - 方法2:使用另一個prompt作為helper function來檢查 1. Moderation API: 確保內容符合OpenAI安全規範(偵測gate, self-harm, sexual and violence) 指令: open.Moderation.create - 會偵測是否違反任何規範類型,以及此類型違反指數 - 也可以加入自定義的規範 - 還會有一個flagged參數,吐出True/False指示是否任一規範被違反 ?? 我們可以自行調高閥值,how? 2. Injections and strategies - 防止使用者意圖控制我們的語言模型,確保模型負責任且cost-effective - 方法1: 使用delimiters強調指示 Tip: 多加一行code移除user給delimiter,防止他們在prompt中加入我們定義的delimiter混淆我們的語言模型 ```python input_user_message = input_user_message.replace(delimiter, "") ``` - 將規範指示加在每一次user input前,強調我們的規範 (GPT4比較會聽從system的指示,所以未來可能就不需要再做額外加強) - 方法2: 使用額外的helper_function指示確認是否使用者意圖做injection - 在system_message中指示若發現使用者意圖inject,則直接輸出二元答案指示是否ignore (Y/N) Tip: 因為我們只需要二元答案,可以使用max_tokens=1來限制output的token數 ## 第三階段 Chain of Thought Reasoning - 處理較複雜的工作,可讓模型先依特定步驟思考再給最終答案(過程就叫CoT) - 為隱藏思考過程,可將output格式化:使用delimiter分離思考過程/最終解答,取最終答案並使用except block處理預期外的答案 ```python try: final_response = response.split(delimiter)[-1].strip() except Exception as e: final_response = "Sorry, I'm having trouble right now, please try asking another question." print(final_response) ``` ## 第四階段 Chain Prompts - 將複雜的任務由一個巨大的promt拆解成次任務的小prompt -
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up