基於LLM場景識別,採用詞槽實體提取,實現多輪問答

Mondo 科技 更新 2024-01-30

前言

隨著人工智慧技術的不斷進步,大型語言模型(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 自動化。

相關問題答案

    JD和LLM有什麼區別?

    JD 法學博士 和LLM 法學碩士 是兩種不同型別的法律學位,區別主要在於習學習的內容 學位型別和學習習的方式。JD是Juris Doctor的縮寫,是法學學位的一種,是美國本科畢業生申請法學院的主要學位。法學博士課程主要包括法學研究方法 法學理論 法律實務 法律倫理 憲法 訴訟等課程,旨在培養學生...

    新技術 LIN 迫使 LLM 回答有毒的問題

    美國普渡大學的研究人員發表了一篇題為 讓他們灑豆子!從 生產 LLMS中提取強制知識。他們描述說,他們設計了一種新方法,可以打破現有的LLM規則,並使它們給出 有害 的響應,利用大型模型供應商暴露與快速響應相關的概率資料的趨勢。研究人員使用了一種稱為lint LLM審訊 的技術,該技術比通常繞過安全...

    基於Java SpringBoot和Vue的醫院資訊管理掛號系統

    總結 醫院資訊管理系統 HIMS 是應用於醫療機構的資訊管理系統,旨在提高醫療服務質量,降低運營成本,提高工作效率,滿足患者需求。通過對醫院內各種資訊的整合 管理和共享,實現醫療資源的有效利用和優化配置。HIMS的實施和應用,將有助於提高醫院的管理水平,提高醫療服務質量,降低醫療成本,實現醫療資源的...

    阿里巴巴在東南亞開發LLM,以幫助其到2024年實現1000億美元的收入目標

    這是阿里巴巴首個針對特定地區的大型語言模型AI,東南亞被視為乙個重要的增長市場,而大墨的新LLM則表明,中國企業仍在加倍努力,擁抱OpenAI的ChatGPT帶來的生成式AI浪潮。阿里巴巴集團控股有限公司 Alibaba Group Holdings 的研究部門達摩院 DAMO Academy 推出...

    這是新的!基於SpringBoot Vue的Java快速開發框架,前後端分離

    一 專案簡介 這是新的!J 基於 Springboot Vue 的快速開發框架,將前端和後端分開。二 功能的實現 安慰。顯示系統的整體資訊,目前是乙個模板頁面,可以根據您的實際需求進行轉換。組織結構。它包括組織結構 部門 人員和部門領導的管理,其中顯示了組織 部門和人員樹結構。組織職位。包括組織架構...