大語言模型(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

內容解密:

  1. hfTrue時,程式會從指定目錄下載human_feedback.txt檔案。
  2. 檢查human_feedback.txt檔案是否存在。
  3. 如果檔案存在,讀取檔案內容並清理(替換換行符和#符號)。
  4. 將清理後的內容指定給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)

內容解密:

  1. ranking大於或等於5時,限制生成的最大字數為100。
  2. 呼叫process_query函式處理使用者輸入和最大字數限制,生成rdata
  3. 清理rdata中的換行符和#符號。
  4. 將清理後的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")

內容解密:

  1. 安裝指定版本的OpenAI函式庫。
  2. 從Google Drive中檢索API金鑰。
  3. 將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)

內容解密:

  1. evaluate_response 函式:此函式負責顯示生成的回應,並提示使用者輸入評估分數(1至5分)。
  2. 錯誤處理:程式碼中使用了 try-except 區塊來捕捉無效輸入(如非數值輸入或超出範圍的分數),並透過遞迴呼叫請求重新輸入。
  3. 評分機制:評分結果用於計算平均分數和評估模型的整體表現。

評估結果分析

在進行多次評估後,我們收集了評分資料並計算了平均分數:

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)

內容解密:

  1. 資料累積counter 變數記錄了評估次數,而 score_history 儲存了累積評分。
  2. 平均分數計算:使用 np.mean 函式計算平均評分,並四捨五入至小數點後兩位。
  3. 輸出結果:顯示評估次數和平均分數,用於監控模型的表現。

觸發專家反饋

當平均評分低於預設閾值(此例中為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.")

內容解密:

  1. 條件觸發:當評估次數超過 counter_threshold 且平均分數低於或等於 score_threshold 時,觸發專家評估。
  2. 專家反饋:此機制確保在模型表現不佳時,能夠引入人工評估以提升系統品質。

專家反饋介面實作

在觸發專家反饋後,系統會顯示一個包含「大拇指向上」和「大拇指向下」圖示的介面,供專家進行評估:

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()

內容解密:

  1. 圖片轉換image_to_data_uri 函式將圖片檔案轉換為 base64 編碼的資料 URI,以便在 HTML 中顯示。
  2. 介面顯示display_icons 函式定義了包含兩個可點選圖片的 HTML 內容,並在 Jupyter Notebook 中顯示。
  3. 專家反饋儲存:當專家點選「大拇指向下」圖示時,系統會提示輸入反饋並將其儲存至指設定檔案。
圖表翻譯:

此圖示展示了專家反饋介面的操作流程,包括顯示評估圖示、接收專家輸入及儲存反饋的完整過程。透過這個介面,專家能夠針對模型的輸出提供有價值的意見,從而幫助系統進行改進。