前言
隨著人工智慧技術的不斷進步,大型語言模型(LLMs)已成為技術前沿的熱點。 它們不僅能夠理解和生成文字,而且還可以在各種用例中實現複雜的互動。 本文將深入探討 Python 結合大型語言模型能力、意圖識別和詞槽實體提取的部分,並展示如何實現智慧型多輪問答能力,為使用者提供更豐富、更個性化的互動體驗。
身體
完成**。 該細分市場的核心是整合最新的大型語言模型(LLM)功能,結合意圖識別和詞槽實體提取技術,實現智慧型多輪問答。
import json解析import re
import requests
from datetime import datetime
url = ''
替換為您自己的 ChatGPT API 金鑰。
api_key = 'sk-xxxxxx'
除錯日誌。
debug = false
def check_values_not_empty(json_data):
檢查所有元素值是否不為空。
遍歷 JSON 資料中的每個元素。
for item in json_data:
檢查值欄位是否為空字串。
if item.get('value') == '':
如果找到空字串,則返回 false
如果所有值字段都為非空,則返回 true
def format_title_value_for_logging(json_data):
提取引數名稱和值。
log_strings =
for item in json_data:
title = item.get('title', 'unknown title') 獲取標題,如果標題不存在,則使用它'unknown title'
value = item.get('value', 'n/a') 獲取該值,如果該值不存在,則使用它'n/a'
log_string = f"title: ,value: "
log_strings.append(log_string)
return ''.join(log_strings)
def extract_json_from_string(input_string):
JSON提取函式。
返回 JSON 物件的列表。
try:正規表示式假定 JSON 物件用大括號括起來。
matches = re.findall(r'', input_string, re.dotall)
驗證找到的每個匹配項是否為有效的 JSON
valid_jsons =
for match in matches:
try:json_obj = json.loads(match)
valid_jsons.append(json_obj)
except json.jsondecodeerror:
如果 CONTINUE 不是有效的 JSON,則跳過匹配。
return valid_jsons
except exception as e:
print(f"error occurred: ")
return
def send_message(message, user_input):
請求 llm 函式。
print('---')
if debug:
print('使用者輸入:', message)
else:print('使用者輸入:', user_input)
print('---')
headers = ","content-type": "application/json",}
data = ,"}
response = requests.post(url, headers=headers, json=data, verify=false)
if response.status_code == 200:
answer = response.json()["choices"][0]["message"]['content']
print('LLM 輸出:', answer)
print('---')
return answer
else:print(f"error: ")
return none
詢問天氣。
引數:1時間(說話:今天,明天,日期:10 日,範圍:未來一周)。
# 2.位置:(國家/地區、省/自治區或地區)。
# todo "transform": "時間格式轉換工具?是自己製作還是使用大型模型。 建議自己開發乙個",dict_weather = [,prompt_weather_info_update = """
每個 JSON 元素都代表乙個引數資訊,所以我會給你一些基本的介紹
title 欄位是引數的名稱,如果需要填寫引數,應該告訴使用者您需要的引數名稱。
desc 欄位是乙個引數描述,可以作為 title 欄位的補充,更好地指導使用者對引數進行補充。
轉換欄位是對輸入值字段的格式要求的描述。
如果必填欄位為 true,則元素的值為必填字段,如果值為空,則必須要求使用者新增引數資訊,如果必填欄位為 false,則引數不是必填字段。
任職要求: 01 根據使用者輸入資訊提取有用資訊,更新為JSON中的value欄位,並返回更新後的JSON
02 僅更新值欄位,所有其他欄位均按原樣返回。
03 如果沒有可更新的值,則按原樣返回。
04 當前時間為{},參考示例:
json: [
問:南京 今天的天氣怎麼樣?
答案:[.]","required": true
json:{}
Q: {} A:
prompt_weather_query_user = """
每個 JSON 元素都代表乙個引數資訊,所以我會給你一些基本的介紹
title 欄位是引數的名稱,如果需要填寫引數,應該告訴使用者您需要的引數名稱。
desc 欄位是乙個引數描述,可以作為 title 欄位的補充,更好地指導使用者對引數進行補充。
如果必填欄位為 true,則元素的值為必填字段,如果值為空,則必須要求使用者新增引數資訊,如果必填欄位為 false,則引數不是必填字段。
要求: 01 如果有多個引數沒有值,可以一起向使用者提問。
02 已填寫的引數無需再次詢問。 參考示例:
問:[A:你想在什麼地方檢視天氣?
Q: {} A:
公積金諮詢。
引數:1活動(購買、租賃、停用)。
# 2.購買的房屋型別(購買活動時需要經濟適用房、新房、二手房)。
dict consult = A:
global_purpose = ''
def multi_question(user_input):
global global_purpose
global dict_weather
current_purpose = send_message(prompt_global_purpose.format(user_input), user_input)
if current_purpose != '其他方案':
global_purpose = current_purpose
if global_purpose == '詢問天氣。 ':
首先,檢查使用者輸入中是否有任何資訊補充,並儲存補充結果。
current_time = datetime.now().strftime("%y-%m-%d")
new_info_json_raw = send_message(prompt_weather_info_update.format(current_time, current_time, json.dumps(dict_weather, ensure_ascii=false), user_input), user_input)
dict_weather = extract_json_from_string(new_info_json_raw)
檢查所有引數是否已完成。
if check_values_not_empty(dict_weather):
print('問天氣——引數齊全,詳細引數如下')
print(format_title_value_for_logging(dict_weather))
print('請求天氣查詢 API,請......後')
else:str = json.dumps(dict_weather, ensure_ascii=false)
send_message(prompt_weather_query_user.format(str), user_input)
elif global_purpose == '公積金諮詢。 ':
passelse:
passpass
def user_input():
while true:
question = input("請輸入您的問題:")
multi_question(question)
# test
# multi_question("明天的天氣會怎樣?")
# multi_question("蘇州的天氣狀況如何?")
# multi_question("蘇州明天的天氣怎麼樣?")
user_input()
整合大型語言模型 (LLM)。:** 通過與其中乙個語言模型 API 互動,利用大型語言模型強大的文字生成和理解功能。 這使指令碼能夠處理複雜的使用者查詢並生成合理的響應。
意圖識別:通過分析使用者的輸入,指令碼可以識別使用者的意圖(例如,檢視天氣或進行 CPF 諮詢),這是通過向 LLM 傳送特定提示來實現的。
槽實體提取:** 能夠從使用者輸入中提取關鍵資訊(例如時間和地點),並將此資訊填充到預定義的 JSON 結構中。 這是通過正規表示式和 json 操作實現的。
多輪互動:指令碼支援多輪互動,可根據不同的使用者輸入動態提問和回覆,為使用者提供連貫自然的對話體驗。
實用性
該指令碼不僅展示了如何在 Python 中處理複雜的資料結構和執行 HTTP 請求,還展示了大型語言模型在實際應用程式中的巨大潛力。 它為開發人員提供了乙個實用的框架,用於構建能夠理解和響應人類語言的智慧型應用程式。 LLM+場景識別+詞槽實體提取,實現人機互動的多輪會話,遙遙領先
結束
我們可以看到大型語言模型在理解和生成自然語言方面的巨大潛力。 結合意圖識別和詞槽實體提取,它可實現複雜而自然的多輪對話。 該技術可用於廣泛的應用,從簡單的資訊查詢到複雜的互動式任務。
希望本文能啟發您探索大型語言模型和智慧型問答系統的更多可能性。 如果您覺得這篇文章有用,請不要忘記點讚和收藏!作者 Gallonyin 繼續專注於 AI 自動化。