首頁 >後端開發 >Python教學 >使用語義內核建立聊天機器人 - 部分插件

使用語義內核建立聊天機器人 - 部分插件

Linda Hamilton
Linda Hamilton原創
2024-12-06 07:33:15621瀏覽

在上一章中,我們了解了語義內核的一些基本概念,最後建立了一個能夠回答一般問題的工作代理,但使用說明具有預定義的語氣和目的。

在第二章中,我們將使用外掛程式為我們的圖書館員新增特定技能。

什麼是插件?

外掛程式是一組暴露給人工智慧服務的函數。插件封裝了功能,允許助手執行不屬於其本機行為的操作。

例如,透過插件,我們可以讓助理從 API 或資料庫中取得一些資料。此外,助手可以代表使用者執行一些操作,通常是透過 API。此外,助手還可以使用外掛程式更新 UI 的某些部分。

正如我之前提到的,插件是由不同的功能組成的。每個函數主要定義為:

  • 描述:函數的目的以及何時應該呼叫它。它將幫助模型決定何時調用它,正如我們將在函數呼叫.
  • 部分中看到的那樣
  • 輸入變數:用於參數化函數,以便可以重複使用。

語意核心支援不同類型的插件。在這篇文章中,我們將重點放在其中兩個:提示外掛程式原生外掛程式

提示插件

提示外掛程式基本上是在具體情況下呼叫的特定提示。在典型場景中,我們可能有一個複雜的系統提示,我們在其中定義代理的語氣、目的和一般行為。然而,我們可能希望代理執行一些具體的操作,我們需要定義一些特定的限制和規則。對於這種情況,我們會盡量避免系統提示增長到無限,以減少幻覺並保持模型響應的相關性和可控性。這是提示外掛的完美案例:

  1. 系統提示:語氣、目的和一般行為。
  2. 摘要提示:包含如何進行摘要的規則和限制。例如,它不應超過兩段。

提示外掛程式由兩個檔案定義:

  • config.json:設定文件,包括描述、變數和執行設定:
  • skprompt.txt:純文字提示內容。可以使用語法 {{$parameter_1}} 存取設定檔中的變數。

要將提示外掛程式加入核心中,我們只需指定資料夾即可。例如,如果我們有資料夾結構 /plugins/plugin_name/skprompt.txt,則插件註冊如下:

原生插件

本機外掛程式允許模型呼叫本機程式碼(python、C# 或 Java)。插件被表示為一個類,其中任何函數都可以使用註解定義為可從代理呼叫。開發人員必須透過註解向模型提供一些資訊:名稱、描述和參數。

要定義Native Plugin,我們只需建立類別並加入對應的註解:

要將本機外掛程式加入到核心中,我們需要建立該類別的新實例:

函數呼叫

語意核心中的函式呼叫,或規劃,是模型呼叫核心中註冊的函數的一種方式。

對於每個使用者訊息,模型都會建立一個計畫來決定如何回覆。首先,它使用聊天歷史記錄和函數的資訊來決定必須呼叫哪個函數(如果有)。一旦被調用,它將函數的結果附加到歷史記錄中,並決定是否已完成使用者訊息中的任務或需要更多步驟。如果沒有完成,則會從第一步重新開始,直到完成任務,或需要使用者的幫助。

由於這個循環,模型可以串聯對不同函數的呼叫。例如,我們可能有一個函數傳回 user_session(包括使用者的 id),另一個函數需要 current_user_id 作為參數。該模型將製定一個計劃,呼叫第一個函數來檢索使用者會話,解析回應並使用 user_id 作為第二個函數的參數。

Building a chatbot with Semantic Kernel - Part Plugins

在語意核心中,我們必須告訴代理程式使用函數呼叫。這是透過定義執行設定並將函數選擇行為設為自動來完成的:

需要強調的是,描述越詳細,使用的代幣就越多,因此成本就越高。在良好的詳細描述和使用的標記之間找到平衡是關鍵。

我們圖書館員的插件

現在已經清楚了什麼是函數及其用途,讓我們看看如何為我們的圖書館員代理充分利用它。

出於學習目的,我們將定義一個原生外掛程式和一個提示外掛程式

  • 圖書儲存庫外掛程式:它是一個本機外掛程式,用於從儲存庫檢索圖書。

  • 詩歌創作插件:這是一個提示插件,用於從一本書的第一句話創建一首詩。

圖書存儲庫插件

我們使用開放式圖書館 API 來檢索圖書資訊。該插件會傳回搜尋的前 5 個結果,包括書名、作者和書的第一句話。

具體來說,我們使用以下端點來檢索資訊:https://openlibrary.org/search.json?q={user-query}&fields=key,title,author_name,first_sentence&limit=5。

首先,我們定義代表系統中一本書的 BookModel:

現在,是該功能的時間了。我們使用函數和參數的清晰描述。在本例中,我們使用複雜的物件作為回應,但模型稍後可以在進一步回應中使用它。

最後,我們可以將此插件加入核心:

詩歌創作者插件

我們將這個外掛定義為具有一些特定限制的提示外掛程式。提示符號及其配置如下所示:

/plugins/poem-plugin/poem-creator/config.json:

/plugins/poem-plugin/poem-creator/skprompt.txt:

將外掛程式加入核心非常簡單:

良好做法

基於現有文獻和我自己的經驗的一些建議:

  • 即使在 .NET 或 Java 中也可以使用 python 語法來描述您的函數。由於經過訓練的數據,模型通常在 Python 上更加熟練?
  • 保持功能的重點,特別是描述。一種功能,一種目的。不要試圖創建一個函數來製造太多東西,這會適得其反?
  • 簡單的論點,而且數量很少。它們越簡單、越少,從模型到函數的呼叫就越可靠?
  • 如果您有很多函數,請仔細檢查描述,以確保不存在可能使模型感到困惑的潛在衝突?
  • 詢問模型(透過chatgpt或類似的)關於功能描述的回饋。他們通常很容易找到改進。順便說一句,這也適用於一般提示的開發❓
  • 測試,測試,再測試。特別是在商業軟體案例中,可靠性是關鍵。確保模型能夠使用您透過註解提供給模型的資訊來呼叫預期的函數?

概括

在本章中,我們使用插件和語義內核規劃增強了圖書館員代理的一些特定技能。

還記得我的 GitHub 儲存庫上已經提供了所有程式碼嗎?用於語義內核的 PyChatbot。

在下一章中,我們將在聊天中包含一些功能,透過創建 檢查器來即時檢查我們的模型如何調用插件並與插件互動。

以上是使用語義內核建立聊天機器人 - 部分插件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn