大語言模型(LLM)已成為提升企業客戶服務體驗的重要工具。本文介紹如何利用 LLM 處理客戶的技術問題、引導產品設定、最佳化裝置效能,並從客戶反饋中取得洞察。實務上,透過 Python 程式碼可以實作下載及處理客戶反饋、應用檢索與生成(RAG)技術最佳化 API 成本,並整合 OpenAI 環境進行內容生成。文章同時也詳細說明如何評估 LLM 生成內容的品質,包含計算回應時間、餘弦相似度分數等自動評估指標,以及設計使用者評分和專家反饋機制,以確保 LLM 能夠有效提升客戶服務效率和滿意度。
大語言模型(LLM)在企業客戶服務中的應用與最佳化
企業客戶服務的挑戰與解決方案
在現代企業中,客戶服務是維持客戶滿意度和忠誠度的關鍵因素。隨著人工智慧(AI)技術的發展,大語言模型(LLM)被廣泛應用於客戶服務領域,以提升服務品質和效率。公司C(Company C)希望透過LLM來改善其C-phone系列產品的客戶服務體驗。
LLM在客戶服務中的應用
LLM是一種先進的AI系統,能夠根據訓練資料生成類別似人類的文字回應。它可以處理各種根據語言的任務,如回答問題、提供建議和促進對話。在客戶服務中,LLM可以被程式設計來處理常見的技術問題,排除故障,引導使用者完成設定過程,並最佳化裝置效能。此外,它還可以收集使用者反饋,提供寶貴的使用者經驗和產品效能洞察。
程式碼實作:下載和處理客戶反饋檔案
if hf == True:
from grequests import download
directory = "Chapter05"
filename = "human_feedback.txt"
download(directory, filename, private_token)
# 檢查檔案是否存在
efile = os.path.exists('human_feedback.txt')
if efile:
# 讀取並清理檔案內容
with open('human_feedback.txt', 'r') as file:
content = file.read().replace('\n', ' ').replace('#', '')
text_input = content
print(text_input)
else:
print("檔案未找到")
hf = False
內容解密:
- 當
hf
為True
時,程式會從指定目錄下載human_feedback.txt
檔案。 - 檢查
human_feedback.txt
檔案是否存在。 - 如果檔案存在,讀取檔案內容並清理(替換換行符和
#
符號)。 - 將清理後的內容指定給
text_input
,作為GPT-4模型的輸入。
LLM生成內容的最佳化
當使用text_input
作為GPT-4模型的輸入時,生成的回應能夠定義LLM及其在公司C的客戶服務中的應用。生成的內容表明LLM能夠提供個人化的建議,根據使用者的使用模式和偏好提升使用者滿意度和忠誠度。
GPT-4回應:
一個大語言模型(LLM)是一種先進的AI系統,透過在大量文字資料上的訓練,能夠生成類別似人類的文字回應。它能夠根據訓練資料中的模式和資訊理解語言,對於各種根據語言的任務非常有效,如回答問題、提供建議和促進對話。
檢索與生成(RAG)技術的應用
在某些情況下,使用者可能不需要包含人類專家反饋的RAG檔案。這種情況下,可以限制生成的最大字數以最佳化API成本。
程式碼實作:RAG技術的應用
if ranking >= 5:
max_words = 100 # 限制資料大小
rdata = process_query(user_input, max_words)
print(rdata) # 用於維護
if rdata:
rdata_clean = rdata.replace('\n', ' ').replace('#', '')
rdata_sentences = rdata_clean.split('. ')
text_input = rdata
print(text_input)
內容解密:
- 當
ranking
大於或等於5時,限制生成的最大字數為100。 - 呼叫
process_query
函式處理使用者輸入和最大字數限制,生成rdata
。 - 清理
rdata
中的換行符和#
符號。 - 將清理後的
rdata
指定給text_input
,作為GPT-4模型的輸入。
安裝生成式AI環境
為了生成根據使用者輸入和檢索檔案的內容,需要安裝生成式AI環境。
程式碼實作:安裝OpenAI
!pip install openai==1.40.3
# 檢索API金鑰
from google.colab import drive
drive.mount('/content/drive')
f = open("drive/MyDrive/files/api_key.txt", "r")
API_KEY = f.readline().strip()
f.close()
import os
import openai
os.environ['OPENAI_API_KEY'] = API_KEY
openai.api_key = os.getenv("OPENAI_API_KEY")
內容解密:
- 安裝指定版本的OpenAI函式庫。
- 從Google Drive中檢索API金鑰。
- 將API金鑰設定為環境變數,並初始化OpenAI。
2.6 內容生成與評估
在進行內容生成時,首先需要匯入並設定所需的模組。為了測量回應速度並選擇適當的對話模型,我們引入了時間模組並選用 gpt-4o 作為對話模型:
import openai
from openai import OpenAI
import time
client = OpenAI()
gpt_model = "gpt-4o"
start_time = time.time() # 在請求前開始計時
接著,定義一個標準的 Gpt-4o 提示詞,提供足夠的資訊讓模型回應,並將其他部分交由模型和 RAG 資料處理:
def call_gpt4_with_full_text(input_text):
# 將所有行組合成一個字串
text_input = '\n'.join(input_text)
prompt = f"請總結或闡述以下內容:{text_input}"
try:
response = client.chat.completions.create(
model=gpt_model,
messages=[
{"role": "system", "content": "你是一位專家"},
{"role": "assistant", "content": "1. 你可以解釋相關內容"},
{"role": "user", "content": prompt}
],
temperature=0.1 # 在此新增溫度引數
)
return response.choices[0].message.content.strip()
except Exception as e:
return str(e)
內容解密:
此段程式碼定義了一個函式 call_gpt4_with_full_text
,用於呼叫 GPT-4o 模型並傳遞輸入文字。函式首先將輸入文字組合成一個字串,然後建立一個包含系統提示、助手提示和使用者輸入的訊息列表。GPT-4o 模型根據這些訊息生成回應,並將回應內容傳回給呼叫者。
程式碼格式化輸出:
import textwrap
def print_formatted_response(response):
# 定義文字包裝的寬度
wrapper = textwrap.TextWrapper(width=80) # 設定為 80 欄
wrapped_text = wrapper.fill(text=response)
# 列印格式化的回應,包含標頭和標尾
print("GPT-4 回應:")
print("---------------")
print(wrapped_text)
print("---------------\n")
# 假設 'gpt4_response' 包含前一步驟的回應
print_formatted_response(gpt4_response)
內容解密:
此段程式碼定義了一個函式 print_formatted_response
,用於將 GPT-4o 的回應格式化輸出。函式使用 textwrap
模組將回應文字包裝成指定的寬度(80 欄),並在輸出中加入標頭和標尾以便區分。
3. 評估器
根據每個專案的規格和需求,我們可以實作多個數學和人工評估函式。在本文中,我們將實作兩個自動化指標:回應時間和餘弦相似度分數。接著,我們將實作兩個互動式評估函式:人工使用者評分和人工專家評估。
3.1 回應時間
回應時間在 API 呼叫中計算並顯示:
import time
...
start_time = time.time() # 在請求前開始計時
...
response_time = time.time() - start_time # 測量回應時間
print(f"回應時間:{response_time:.2f} 秒") # 列印回應時間
內容解密:
此段程式碼測量 GPT-4o 模型的回應時間。透過在請求前後記錄時間,可以計算出模型的回應時間,並將結果以秒為單位輸出。
3.2 餘弦相似度分數
餘弦相似度衡量兩個非零向量之間的夾角餘弦值。在文字分析中,這些向量通常是 TF-IDF(詞頻-逆向檔案頻率)表示的文字,根據詞彙在檔案和語料函式庫中的重要性進行加權。
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
def calculate_cosine_similarity(text1, text2):
vectorizer = TfidfVectorizer()
tfidf = vectorizer.fit_transform([text1, text2])
similarity = cosine_similarity(tfidf[0:1], tfidf[1:2])
return similarity[0][0]
# 使用範例
similarity_score = calculate_cosine_similarity(text_input, gpt4_response)
print(f"餘弦相似度分數:{similarity_score:.3f}")
內容解密:
此段程式碼定義了一個函式 calculate_cosine_similarity
,用於計算兩個文字之間的餘弦相似度。函式使用 TF-IDF 向量化器將文字轉換為向量,然後計算這些向量之間的相似度。餘弦相似度分數越接近 1,表示兩個文字越相似。
3.3 人工使用者評分
人工使用者評分介面提供人工使用者的回饋。我們將假設人工使用者面板是一組測試系統的軟體開發人員。
# 評分引數
counter = 20 # 回饋查詢數量
score_history = 30 # 人工回饋總分
threshold = 4 # 觸發人工專家回饋的最低評分門檻
內容解密:
此段程式碼定義了人工使用者評分的引數,包括回饋查詢數量、人工回饋總分和觸發人工專家回饋的最低評分門檻。這些引數用於評估 GPT-4o 模型的表現。
評估函式是一個簡單的回饋請求,用於取得 1 至 5 之間的評分值:
def evaluate_response(response):
# 評分邏輯
while True:
try:
score = int(input("請輸入評分(1-5):"))
if 1 <= score <= 5:
return score
else:
print("請輸入有效的評分(1-5)。")
except ValueError:
print("無效輸入,請重新輸入。")
內容解密:
此段程式碼定義了一個函式 evaluate_response
,用於評估 GPT-4o 模型的回應。函式透過輸入提示取得使用者評分,並確保輸入的有效性。評分值將用於評估模型的表現。
人工智慧模型的評估與改進:從自動評估到專家反饋
在開發與佈署大語言模型(LLM)的過程中,如何評估模型的表現並進行適當的改進,是一個至關重要的課題。本文將探討從自動評估到專家反饋的整個流程,分析其中涉及的技術細節與實務挑戰。
自動評估機制
在初步評估階段,我們採用了一套自動化的評分系統,用於評估模型生成的回應品質。以下程式碼展示了這一評估過程的核心邏輯:
import numpy as np
def evaluate_response(response):
print("\nGenerated Response:")
print(response)
print("\nPlease evaluate the response based on the following criteria:")
print("1 - Poor, 2 - Fair, 3 - Good, 4 - Very Good, 5 - Excellent")
score = input("Enter the relevance and coherence score (1-5): ")
try:
score = int(score)
if 1 <= score <= 5:
return score
else:
print("Invalid score. Please enter a number between 1 and 5.")
return evaluate_response(response) # 遞迴呼叫
except ValueError:
print("Invalid input. Please enter a numerical value.")
return evaluate_response(response) # 遞迴呼叫
# 呼叫函式
score = evaluate_response(gpt4_response)
print("Evaluator Score:", score)
內容解密:
evaluate_response
函式:此函式負責顯示生成的回應,並提示使用者輸入評估分數(1至5分)。- 錯誤處理:程式碼中使用了
try-except
區塊來捕捉無效輸入(如非數值輸入或超出範圍的分數),並透過遞迴呼叫請求重新輸入。 - 評分機制:評分結果用於計算平均分數和評估模型的整體表現。
評估結果分析
在進行多次評估後,我們收集了評分資料並計算了平均分數:
counter += 1
score_history += score
mean_score = round(np.mean(score_history / counter), 2)
if counter > 0:
print("Rankings:", counter)
print("Score history:", mean_score)
內容解密:
- 資料累積:
counter
變數記錄了評估次數,而score_history
儲存了累積評分。 - 平均分數計算:使用
np.mean
函式計算平均評分,並四捨五入至小數點後兩位。 - 輸出結果:顯示評估次數和平均分數,用於監控模型的表現。
觸發專家反饋
當平均評分低於預設閾值(此例中為4分),且評估次數超過特定門檻(此例中為10次),系統將觸發專家反饋機制:
threshold = 4
counter_threshold = 10
score_threshold = 4
if counter > counter_threshold and mean_score <= score_threshold:
print("Human expert evaluation is required for the feedback loop.")
內容解密:
- 條件觸發:當評估次數超過
counter_threshold
且平均分數低於或等於score_threshold
時,觸發專家評估。 - 專家反饋:此機制確保在模型表現不佳時,能夠引入人工評估以提升系統品質。
專家反饋介面實作
在觸發專家反饋後,系統會顯示一個包含「大拇指向上」和「大拇指向下」圖示的介面,供專家進行評估:
import base64
from google.colab import output
from IPython.display import display, HTML
def image_to_data_uri(file_path):
with open(file_path, 'rb') as image_file:
encoded_string = base64.b64encode(image_file.read()).decode()
return f'data:image/png;base64,{encoded_string}'
thumbs_up_data_uri = image_to_data_uri('/content/thumbs_up.png')
thumbs_down_data_uri = image_to_data_uri('/content/thumbs_down.png')
def display_icons():
# 定義包含兩個可點選圖片的HTML內容
html_content = f"""
<img src="{thumbs_up_data_uri}" onclick="alert('Thumbs up clicked!')">
<img src="{thumbs_down_data_uri}" onclick="prompt('Enter feedback:')">
"""
display(HTML(html_content))
def save_feedback(feedback):
with open('/content/expert_feedback.txt', 'w') as f:
f.write(feedback)
print("Feedback saved successfully.")
# 註冊回撥函式
output.register_callback('notebook.save_feedback', save_feedback)
print("Human Expert Adaptive RAG activated")
display_icons()
內容解密:
- 圖片轉換:
image_to_data_uri
函式將圖片檔案轉換為 base64 編碼的資料 URI,以便在 HTML 中顯示。 - 介面顯示:
display_icons
函式定義了包含兩個可點選圖片的 HTML 內容,並在 Jupyter Notebook 中顯示。 - 專家反饋儲存:當專家點選「大拇指向下」圖示時,系統會提示輸入反饋並將其儲存至指設定檔案。
圖表翻譯:
此圖示展示了專家反饋介面的操作流程,包括顯示評估圖示、接收專家輸入及儲存反饋的完整過程。透過這個介面,專家能夠針對模型的輸出提供有價值的意見,從而幫助系統進行改進。