傳統業務對接AI-AI編程框架-Rasa的業務應用實戰(5)--Rasa成型可用 rasa服務化部署及識別意圖后的決策及行為

此篇接續上一篇?傳統業務對接AI-AI編程框架-Rasa的業務應用實戰(4)--Rasa成型可用 針對業務配置rasa并訓練和部署
?

上一篇我們已經讓Rasa準確識別了我們自然語言指令的開票和查詢發票的意圖和實體。

# 開具發票場景

用戶輸入:開具一張1000元的發票,稅率13%? ?// 識別開票意圖和實體

rasa輸出:好的,我將為您開具一張金額為1000元,稅率為13%的發票。

# 查詢發票場景

用戶輸入:查詢發票編號12345? // 識別發票查詢意圖和實體

rasa輸出:正在查詢發票編號12345的詳情,請稍候。

此篇我們要做進一步提升改造,內容如下:

1、當前是命令行界面輸入文本來交互,我則希望是前端發送http rest請求來輸入自然語言指令。?

比如:前端頁面訪問?http://localhost:xxx/xxx/?(rasa服務的交互接口)

2、Rasa 接收到前端的自然語言指令后,識別了意圖和實體,調用后端的開票/查詢業務服務接口

并最終將最后的業務操作結果,返回給前端。

http://localhost:8088/ai/rasa/issue_invoice(開票接口)


http://localhost:8088/ai/rasa/query_invoice/xxx(查票接口)


接下來就是我們具體的改造?

1、定義 Rasa 的后臺服務API地址,通過配置 endpoints.yml 文件來實現:(在其中添加以下配置內容)

action_endpoint:url: "http://localhost:5055/webhook"

解釋:http://localhost:5055/webhook 此即 rasa對外暴露的API接口,前端界面就可以通過這個url來傳入自然語言指令來與rasa交互

2、先改規則配置文件:

?

?開票和查票的兩個意圖的動作,都由原來的返回響應文本(utter_issue_invoice),改成執行動作(action_issue_invoice),即觸發對應domain.yml中配置的動作項:

?

3、實現rasa的開票和查票的兩個動作 即 action_issue_invoice 和?action_query_invoice 去調用業務系統的后臺服務接口

編輯工作目錄下的actions/actions.py文件 如下:

from rasa_sdk import Action, Tracker
from rasa_sdk.executor import CollectingDispatcher
from rasa_sdk.events import SlotSet
import requestsclass ActionIssueInvoice(Action):def name(self):return "action_issue_invoice"def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: dict):amount = tracker.get_slot("amount")tax_rate = tracker.get_slot("tax_rate")if amount and tax_rate:# 替換為你的發票系統 API 地址和參數try:response = requests.post("http://localhost:8088/ai/rasa/issue_invoice",json={"amount": amount.replace("元", ""), "tax_rate": tax_rate.replace("%", "")},headers={"Authorization": "Bearer YOUR_API_TOKEN"})if response.status_code == 200:dispatcher.utter_message(text=f"發票已開具,金額為{amount},稅率為{tax_rate}。")else:dispatcher.utter_message(text=f"發票開具失敗:{response.json().get('error', '未知錯誤')}。")except Exception as e:dispatcher.utter_message(text=f"發票開具失敗:{str(e)}。")return [SlotSet("amount", amount), SlotSet("tax_rate", tax_rate)]else:dispatcher.utter_message(text="抱歉,無法識別金額或稅率,請重新輸入。")return []class ActionQueryInvoice(Action):def name(self):return "action_query_invoice"def run(self, dispatcher: CollectingDispatcher, tracker: Tracker, domain: dict):invoice_number = tracker.get_slot("invoice_number")if invoice_number:# 替換為你的發票系統 API 地址和參數try:response = requests.get(f"http://localhost:8088/ai/rasa/query_invoice/{invoice_number}",headers={"Authorization": "Bearer YOUR_API_TOKEN"})if response.status_code == 200:invoice_data = response.json()dispatcher.utter_message(text=f"發票編號{invoice_number}的詳情:{invoice_data}。")else:dispatcher.utter_message(text=f"查詢失敗:{response.json().get('error', '未知錯誤')}。")except Exception as e:dispatcher.utter_message(text=f"查詢失敗:{str(e)}。")return [SlotSet("invoice_number", invoice_number)]else:dispatcher.utter_message(text="抱歉,無法識別發票編號,請重新輸入。")return []

此即意味著,當識別了開票意圖后, 會執行Python的action_issue_invoice方法,傳入識別的實體信息去調用開票的后端服務接口。當識別了查詢發票的意圖后,會執行Python的action_query_invoice方法,?傳入識別的實體信息去調用開票的后端服務接口。

?4、以服務方式(非殼方式 即不是shell命令行模式)啟動 rasa 執行以下命令:

rasa run --enable-api --cors "*" --port 5005

執行后運行如下:

這樣 rasa 就以http server模式啟動了,前端就可以通過http請求與之交互對話了。

5、啟動 rasa 的動作服務器。? 在工程目錄下,新開個 powershell 執行界面,執行以下命令:

rasa run actions

?此一步正是第3步中的?actions/actions.py 的服務端實現的部署啟動,用來對外調用業務接口

如上圖所示 就是啟動成功了 動作服務器的端口默認為:5055?

6、模擬業務前端界面發起開票的自然語言指令試試效果

如下圖,我用自然語言,作為傳入參數,調用rasa的server,它成功調用了業務端接口并返回了正確的預期結果。大功告成!

上圖是我的模擬開票服務的后端接口日志輸出,證明rasa在識別到開票的自然語言指令后確實成功調用了業務接口。?

再試試查票的識別:

也是OK 完美識別。?


末尾,順帶附上我測試用的業務接口的代碼 (模擬開發票和查發票的業務API)?

@RestController
@RequestMapping("/ai/rasa")
public class Ai4BizController extends BaseController {private static final Logger logger = LoggerFactory.getLogger(Ai4BizController.class);@PostMapping("/issue_invoice")public JSONObject issueInvoice(@RequestBody JSONObject reqObj) {String amount = reqObj.getString("amount");String taxRate = reqObj.getString("tax_rate");if (StringUtils.isEmpty(amount) || StringUtils.isEmpty(taxRate)) {return fail("開票失敗,缺少開票信息!");}logger.info("業務系統后臺成功開具了一張發票!金額:{}, 稅率:{}", reqObj.getString("amount"), reqObj.getString("tax_rate"));JSONObject data = new JSONObject().fluentPut("info", "發票開具成功!").fluentPut("fee", reqObj.getString("amount")).fluentPut("tax_rate", reqObj.getString("tax_rate"));return success(data);}@GetMapping("/query_invoice/{invoice_number}")public JSONObject queryInvoice(@PathVariable("invoice_number") String invoiceNumber) {if (StringUtils.isEmpty(invoiceNumber)) {return fail("查詢失敗,缺少發票號碼!");}return success(new JSONObject().fluentPut("info", "您查詢的發票號碼是:" + invoiceNumber));}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83900.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83900.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83900.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

MajicTryOn(基于wanvideo的虛擬試穿項目)

網絡結構 Attention模塊詳解 左邊服裝通過qwen2.5-VL-7B來生成詳細的服裝描述;線條提取器產生相應的線條map;garment和line map通過vae轉換為潛在空間特征,然后分別經過patchfier,最后通過zero proj得到Garment Tokens和Line Tokens;右邊是di…

JAVA-什么是JDK?

1.JDK 的定義 JDK(Java Development Kit)是 Java 開發工具包,是 Oracle 官方提供的用于開發、編譯和運行 Java 應用程序的核心工具集。它包含了編寫 Java 程序所需的編譯器、調試工具、庫文件以及運行時環境(JRE)。 2…

Palo Alto Networks Expedition存在命令注入漏洞(CVE-2025-0107)

免責聲明 本文檔所述漏洞詳情及復現方法僅限用于合法授權的安全研究和學術教育用途。任何個人或組織不得利用本文內容從事未經許可的滲透測試、網絡攻擊或其他違法行為。使用者應確保其行為符合相關法律法規,并取得目標系統的明確授權。 對于因不當使用本文信息而造成的任何直…

分布式光纖傳感(DAS)技術應用解析:從原理到落地場景

近年來,分布式光纖傳感(Distributed Acoustic Sensing,DAS)技術正悄然改變著眾多傳統行業的感知方式。它將普通的通信光纜轉化為一個長距離、連續分布的“聽覺傳感器”,對振動、聲音等信號實現高精度、高靈敏度的監測。…

獨家首發!低照度環境下YOLOv8的增強方案——從理論到TensorRT部署

文章目錄 引言一、低照度圖像增強技術現狀1.1 傳統低照度增強方法局限性1.2 深度學習-based方法進展 二、Retinexformer網絡原理2.1 Retinex理論回顧2.2 Retinexformer創新架構2.2.1 光照感知Transformer2.2.2 多尺度Retinex分解2.2.3 自適應特征融合 三、YOLOv8-Retinexformer…

96. 2017年藍橋杯省賽 - Excel地址(困難)- 進制轉換

96. Excel地址(進制轉換) 1. 2017年藍橋杯省賽 - Excel地址(困難) 標簽:2017 省賽 1.1 題目描述 Excel 單元格的地址表示很有趣,它使用字母來表示列號。 比如, A 表示第 1 列,…

EtherNet/IP轉DeviceNet協議網關詳解

一,設備主要功能 疆鴻智能JH-DVN-EIP本產品是自主研發的一款EtherNet/IP從站功能的通訊網關。該產品主要功能是連接DeviceNet總線和EtherNet/IP網絡,本網關連接到EtherNet/IP總線中做為從站使用,連接到DeviceNet總線中做為從站使用。 在自動…

Druid連接池實現自定義數據庫密碼加解密功能詳解

Druid連接池實現自定義數據庫密碼加解密功能詳解 在企業級應用開發中,數據庫密碼的明文存儲是一個顯著的安全隱患。Druid作為阿里巴巴開源的高性能數據庫連接池組件,提供了靈活的密碼加密與解密功能,允許開發者通過自定義邏輯實現數據庫密碼…

生成 Git SSH 證書

🔑 1. ??生成 SSH 密鑰對?? 在終端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)執行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" ??參數說明??: -t rsa&#x…

Java并發編程實戰 Day 12:阻塞隊列與線程協作

【Java并發編程實戰 Day 12】阻塞隊列與線程協作 開篇 歡迎來到“Java并發編程實戰”系列的第12天!今天我們將深入探討阻塞隊列(BlockingQueue)及其在線程協作中的應用。阻塞隊列是Java并發編程中一個非常重要的工具,它不僅簡化…

Linux 前后端項目問題排查命令手冊

一、系統資源監控類命令? 1. CPU 資源排查? top - 動態實時監控進程? top [選項] 常用選項: -d 2 # 每2秒刷新一次 -H # 顯示線程信息 -p 1234 # 僅監控PID為1234的進程 輸出解讀:? %Cpu(s):總 CPU 使用率,用戶態 + 內核態?KiB Mem:內…

Git 3天2K星標:Datawhale 的 Happy-LLM 項目介紹(附教程)

引言 在人工智能飛速發展的今天,大語言模型(Large Language Models, LLMs)已成為技術領域的焦點。從智能寫作到代碼生成,LLM 的應用場景不斷擴展,深刻改變了我們的工作和生活方式。然而,理解這些模型的內部…

vue3前端實現導出Excel功能

前端實現導出功能可以使用一些插件 我使用的是xlsx庫 1.首先我們需要在vue3的項目中安裝xlsx庫。可以使用npm 或者 pnpm來進行安裝 npm install xlsx或者 pnpm install xlsx2.在vue組件中引入xlsx庫 import * as XLSX from xlsx;3.定義導出實例方法 const exportExcel () …

【C++特殊工具與技術】優化內存分配(一):C++中的內存分配

目錄 一、C 內存的基本概念? 1.1 內存的物理與邏輯結構? 1.2 C 程序的內存區域劃分? 二、棧內存分配? 2.1 棧內存的特點? 2.2 棧內存分配示例? 三、堆內存分配? 3.1 new和delete操作符? 4.2 內存泄漏與懸空指針問題? 4.3 new和delete的重載? 四、智能指針…

DeepSeek 賦能智慧能源:微電網優化調度的智能革新路徑

目錄 一、智慧能源微電網優化調度概述1.1 智慧能源微電網概念1.2 優化調度的重要性1.3 目前面臨的挑戰 二、DeepSeek 技術探秘2.1 DeepSeek 技術原理2.2 DeepSeek 獨特優勢2.3 DeepSeek 在 AI 領域地位 三、DeepSeek 在微電網優化調度中的應用剖析3.1 數據處理與分析3.2 預測與…

Redis配合唯一序列號實現接口冪等性方案

1.原理 可以在客戶端每次請求服務端的時候,客戶端請求中攜帶一個短時間內唯一不重復的序列號來確保其唯一性,這個序列號常見的幾種形式有:基于時間戳、用戶ID和隨機數的組合;基于請求的來源與客戶端生成的唯一序列號組合 2.方案…

代碼安全規范1.1

命令注入是指應用程序執行命令的字符串或字符串的一部分來源于不可信賴的數據源,程序沒有對這 些不可信賴的數據進行驗證、過濾,導致程序執行惡意命令的一種攻擊方式。 例 1 :以下代碼通過 Runtime.exec() 方法調用 Windows 的 dir 命…

Jenkins實現自動化部署Springboot項目到Docker容器(Jenkinsfile)

Jenkins實現自動化部署Springboot項目到Docker容器 引言:為什么需要自動化部署? 在軟件開發中,頻繁的手動部署既耗時又容易出錯。通過 Docker + Jenkins + Git 的組合,您可以實現: ? 一鍵部署:代碼推送后自動構建和部署?? 環境一致性:Docker 確保開發、測試、生產環…

第二屆智慧教育與計算機技術國際學術會議(IECT 2025)

在數字化浪潮中,智慧教育與計算機技術的深度融合正重構教育生態。智能教學系統打破傳統課堂的單向灌輸模式,通過機器學習分析學習數據,為學生生成個性化學習路徑,推動被動接受向主動探索轉型。這對教育體系提出核心訴求&#xff1…

驅控邊界在哪里?知名舵機品牌偉創動力CNTE2025展帶來答案

2025年6月12日,北京國防科技裝備展將再度啟幕。作為微型驅控領域的代表性廠商,偉創動力(Kpower)將帶來覆蓋舵機、減速齒輪箱、無刷電機及一體化驅控模組在內的全系解決方案,舵機產品回應一個至關重要的技術命題——“國…