iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
DevOps

將 AI Code Review 整進 CICD系列 第 24

情境一:根據用戶反應更改主題 or 語氣

  • 分享至 

  • xImage
  •  

因為這幾天帶著 RAG 去打比賽,想直接來整理我們的情境以及如何使用 LangChain 優化。

我們的目標是製作會根據互動有不同反應的導遊。最初版我們寫了非常醜的 prompt

請根據用戶的回應,延伸介紹景點。
如果你判斷用戶反應不佳,請改變主題。

在這樣子的設定上,我們會遇到很多狀況是很難去 de 情境的 bug。所以我們可能想描繪更多情境。

請根據用戶的回應,延伸介紹景點。
如果你判斷用戶反應不佳,像是回應很短,或是沒有根據上一則系統的資訊做回應,請改變主題。

但這樣的 Prompt 會越加越複雜。這時 langchain 就有很好地提供 Prompt 的分段優化。我們先來看 infra。

https://ithelp.ithome.com.tw/upload/images/20240909/20118525yvcDm4dS4T.png

原本的 Prompt 都會被塞在導遊身上。我們現在新增一個 Emotion 判斷者在中間。告訴導遊他應該要調整作法。

https://ithelp.ithome.com.tw/upload/images/20240909/20118525EkL83GJsTD.png

這邊會介紹 EC 做到的方法。首先是 Few-shot,Few-shot 是能透過少量範例來指導語言模型的方式。簡單舉例就是

  1. 定義 Few-Shot
examples = [
    {"input": "你到底在說什麼?完全不懂!", "output": "用戶似乎感到不耐煩,建議改變主題。"},
    {"input": "你能不能好好回答問題?", "output": "用戶表現出明顯的不耐煩,應該道歉並嘗試更準確地回答。"},
]
  1. 定義 prompt
# 創建 example prompt
example_prompt = ChatPromptTemplate.from_messages([
    ("human", "{input}"),
    ("ai", "{output}")
])
  1. 建立 prompt template
few_shot_prompt = FewShotChatMessagePromptTemplate(
    example_prompt=example_prompt,
    examples=examples
)
  1. 然後我們將此 prompt 送給 ChatGPT,並請他協助分析並建議

    final_prompt = ChatPromptTemplate.from_messages([
        ("system", "你是一個能夠識別用戶情緒的AI助手。特別注意用戶是否表現出不耐煩或不滿。如果檢測到這種情況,建議系統改變主題或調整回答方式。"),
        few_shot_prompt,
        ("human", "用戶說: {user_input}"),
        ("human", "請分析用戶的情緒,並給出建議:")
    ])
    
    # 創建 ChatAnthropic 實例
    chat = ChatAnthropic(temperature=0)
    
    # 創建 chain
    chain = final_prompt | chat
    

如此一來,當我們的invoke 時,就會得到

chain.invoke({"user_input": "你在說什麼啊?完全不對!"})
用戶表現出不滿和困惑,可能對之前的回答感到失望。建議道歉並詢問用戶具體想了解的內容,或者推薦一些其他的旅遊景點,以便更好地滿足用戶的需求。

上一篇
DAY 4 喂給 LLM
下一篇
根據用戶選擇的風格和語言來選擇故事風格
系列文
將 AI Code Review 整進 CICD28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言