因為這幾天帶著 RAG 去打比賽,想直接來整理我們的情境以及如何使用 LangChain 優化。
我們的目標是製作會根據互動有不同反應的導遊。最初版我們寫了非常醜的 prompt
請根據用戶的回應,延伸介紹景點。
如果你判斷用戶反應不佳,請改變主題。
在這樣子的設定上,我們會遇到很多狀況是很難去 de 情境的 bug。所以我們可能想描繪更多情境。
請根據用戶的回應,延伸介紹景點。
如果你判斷用戶反應不佳,像是回應很短,或是沒有根據上一則系統的資訊做回應,請改變主題。
但這樣的 Prompt 會越加越複雜。這時 langchain 就有很好地提供 Prompt 的分段優化。我們先來看 infra。
原本的 Prompt 都會被塞在導遊身上。我們現在新增一個 Emotion 判斷者在中間。告訴導遊他應該要調整作法。
這邊會介紹 EC 做到的方法。首先是 Few-shot,Few-shot 是能透過少量範例來指導語言模型的方式。簡單舉例就是
examples = [
{"input": "你到底在說什麼?完全不懂!", "output": "用戶似乎感到不耐煩,建議改變主題。"},
{"input": "你能不能好好回答問題?", "output": "用戶表現出明顯的不耐煩,應該道歉並嘗試更準確地回答。"},
]
# 創建 example prompt
example_prompt = ChatPromptTemplate.from_messages([
("human", "{input}"),
("ai", "{output}")
])
few_shot_prompt = FewShotChatMessagePromptTemplate(
example_prompt=example_prompt,
examples=examples
)
然後我們將此 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": "你在說什麼啊?完全不對!"})
用戶表現出不滿和困惑,可能對之前的回答感到失望。建議道歉並詢問用戶具體想了解的內容,或者推薦一些其他的旅遊景點,以便更好地滿足用戶的需求。