博客 / 詳情

返回

OpenTiny訓練營實操體驗|輕鬆解鎖TinyVue智能組件開發Web應用

1.背景描述

TinyVue 是一套企業級的 Vue 框架下的組件庫,它具有跨端、跨框架的特性,同時支持 Vue2 和 Vue3,支持 PC 端和移動端瀏覽器。

本次實驗是通過改造一個使用 TinyVue 組件的常規 Web 應用,秒變為一個能夠對接大語言模型的智能應用。這個應用可以讓用户通過自然語言與網頁進行對話,直接“精準”操作網頁上的組件。

2.實驗簡介

首先,我們提供了一個用  Vue3  搭建的商品列表管理的單頁面應用,它使用 TinyVue 組件庫中的  Select、Grid  等組件。該商品管理應用默認會顯示商品管理的表格,並且已經實現了條件查詢商品,添加、刪除商品和保存商品等功能。但此應用目前不支持 AI 大模型的操作,比如打開智能助手,發送的信息不會正確執行。

對接 TinyVue Next 智能框架的相關包,給 Select、Grid  等組件添加業務描述後,讓智能助手等功能可以遙控操作網頁。

3.基本要求

  • 熟練使用 VSCode 或其他代碼編輯器
  • 具有 Chrome、Edge 等瀏覽器的調試能力
  • 熟悉 Vue 開發,以及具有 TinyVue 或其它組件庫的開發經驗

4.代碼實戰

4.1 啓動電商平台 demo 頁面,熟悉功能

解壓桌面上的工程壓縮文件 agent-app-demo (可能位置與名稱有調整,有疑問可諮詢)

解壓完成後用 VSCode 軟件打開指定的工程目錄,打開終端,執行以下命令安裝依賴:

npm install

安裝完成後執行以下命令,啓動電商平台 demo 頁面。

npm run dev

啓動成功後,查看商品列表並簡單的進行增刪改查的操作。

但此時測試 AI 智能助手,則是無響應的。下一步就來對應用進行簡單改造。

4.2 引用 vue-next 等智能包進行應用改造

將上面的普通應用,秒變為智能應用,需要以下 4 步, 需要按順序完成。

4.2.1 引入智能包

在終端中執行以下命令,安裝相關智能包。

npm install @opentiny/tiny-vue-mcp @opentiny/next-vue -S

4.2.2 全局註冊 TinyVue MCP 的工具

main.ts 文件中,引入@opentiny/tiny-vue-mcp,註冊 TinyVue MCP 的工具。

import { createMcpTools, getTinyVueMcpConfig } from "@opentiny/tiny-vue-mcp";

import { registerMcpConfig } from "@opentiny/vue-common";

// 1、 將 TinyVue MCP的工具注入到 vue-common 層中,之後應用可以TinyVue MCP的功能

registerMcpConfig(getTinyVueMcpConfig(), createMcpTools);

4.2.3  創建 MCP Client 的遠端會話

App.vue文件中,引入@opentiny/next-vue, 創建 MCP Client 的遠端會話。

注意:代碼中連接需要自行提供\
目前 agent 代理服務器代碼未開源,如想進一步瞭解可以在 github 中提 issue 單\
提交 issue 連接:https://github.com/opentiny/tiny-vue/issues

import { useNextClient } from"@opentiny/next-vue";
import { globalConversation } from"./composable/utils";

// 2、創建 sessionId , 一個 ref<string> 的值, 並保存起來,智能助手會訪問該變量進行通訊

const { sessionId } = useNextClient({
clientInfo: { name: "my-project", version: "1.0.0" },
// url為工具調用方,token為對應的憑證
proxyOptions: { url: "https://xxx/sse", token: "" },
});

globalConversation.sessionId = sessionId;

4.2.4 在應用頁面,創建 MCP Server, 並給組件聲明“業務屬性”

views/productManager/index.vue中,創建 MCP Server

import { useNextServer } from "@opentiny/next-vue";
// 3、創建web應用所需的 McpServer 變量, 用於註冊頁面中的組件到系統中。
const { server } = useNextServer({
  serverInfo: { name: "company-list", version: "1.0.0" },
});
// 4、 模板中,在AI智能助手要操作的組件上,去綁定 server 和 組件的 “業務描述”。  這樣 AI就能關聯mcp,並識別每個組件的業務定義了。

views/productManager/index.vue文件中, 可以改造 TinyVue 的組件,它們支持屬性 tiny\_mcp\_config, 傳入 server 和組件的業務描述,例如:

<tiny-base-select
  v-model="statusFilter"
  :options="statusOptions"
  placeholder="商品狀態"
  clearable
  :tiny_mcp_config="{
    server,
    business: {
      id: 'category-status',
      description: '商品狀態的下拉框',
    },
  }"
>
</tiny-base-select>

其中 business.id 是組件在頁面上的唯一 id。 business.description 是描述組件的業務含義, 這樣與大模型對話時,大模型可以“精準”的知道頁面上有什麼可以操縱。

接下來,給商品狀態的 Select, 商品列表的表格,按鈕等等,都可以添加上 :tiny\_mcp\_config 屬性了。

給分類下拉框添加 tiny\_mcp\_config

<tiny-base-select
  v-model="categoryFilter"
  :options="categoryOptions"
  placeholder="商品分類"
  clearable
  :tiny_mcp_config="{
    server,
    business: {
      id: 'category-select',
      description: '商品分類的下拉框',
    },
  }"
>
</tiny-base-select>

給商品列表表格添加

<tiny-grid
  auto-resize
  ref="gridRef"
  :data="displayProducts"
  :height="520"
  :edit-config="{ trigger: 'click', mode: 'cell', showStatus: true }"
  :tiny_mcp_config="{
    server,
    business: {
      id: 'category-list',
      description: '商品列表',
    },
  }"
>
  <!--省略部分代碼-->
</tiny-grid>

4.3 通過頁面的 AI 智能助手進行網頁的智能操作

經過 4.2 節, 我們已經將普通的應用秒變為智能應用。此時就可以通過“AI 智能體”工具跟網頁對話了

對下拉框,你可以嘗試提問:   在商品分類下拉框中,彈出下拉麪板選中手機分類。

對於表格, 你可以問:幫我在商品列表中刪除最貴的且分類為手機的商品。

這裏就可以發揮想像力,對網頁進行各種提問,看看大模型能否正確判斷行為,並調用正確的 MCP 方法。

如果“AI 智能體”工具不能執行成功,可以打開瀏覽器控制枱,參考以下內容進行排查:

控制枱有無報錯

打開“網絡” 面板,查看 chat-messages 接口是否異常

查看控制枱打印的: SSE data: xxxx  信息。可以跟蹤大模型的執行過程,查看調用 MCP 工具的中間過程等。

4.4 頁面添加可識別二維碼,通過手機遠程操作

通過文字去操作頁面有點麻煩,如果能通過語音就是遠程遙控網頁是不是就好了。

在“App.vue”的頂部增加 的二維碼組件:

<div class="qr-code">
  <span>
    頁面識別二維碼, 請用手機掃碼後,在瀏覽器中打開。
    微信的瀏覽器可能沒有語音功能,需要使用手機內置的瀏覽器訪問。
  </span>
  <tiny-qr-code :value="sessionUrl" :size="100" color="#1677ff"></tiny-qr-code>
   
</div>

二維碼的 value= sessionUrl ,它是通過 sessionId 計算出來的一個 url。在App.vue添加以下 js 代碼:

注意:代碼中連接需要自行實現並部署遠程操控服務
如對此有疑問或者有興趣交流,歡迎提交 issue: https://github.com/opentiny/tiny-vue/issues

import CryptoJSfrom"crypto-js";
import { computed } from"vue";

const sessionUrl = computed(() => {
// 未創建session時

if (!sessionId.value) return"no session"; // 創建好 sessionId後,加密後拼接成 sessionUrl ,  這樣手機掃碼後會連接這個Url頁面

const encryptedId = CryptoJS.AES.encrypt(
    sessionId.value,
    "secret-session-id"
  ).toString();

return"https://xxx?id=" + encodeURIComponent(encryptedId);
});

這樣,我們的應用頂部會有一個二維碼,用手機掃描後,使用手機上的瀏覽器打開,就可以選擇“語音控制器”,跟它對話了,通過手機遠程指揮網頁。

因為上述流程中 proxyOptions.url 與 語音遠程操控頁面需要自行部署服務,因此提供了臨時的線上體驗連接:https://opentiny.design/tiny-vue/zh-CN/os-theme/comprehensive

5.實驗總結

通過本次實驗,我們不僅掌握了將普通 Web 應用轉化為智能 Web 應用的關鍵技能,還學會了利用智能助手或遠程手機對網頁進行精準操控。

該實驗引導用户深入思考網頁未來可能呈現的形態與無限可能,讓每一位用户都能深切體驗到人工智能為 Web 開發領域所帶來的震撼,感受技術進步如何重塑我們的網頁世界。

關於 OpenTiny

歡迎加入 OpenTiny 開源社區。添加微信小助手:opentiny-official 一起參與交流前端技術~

OpenTiny 官網:https://opentiny.design
OpenTiny 代碼倉庫:https://github.com/opentiny
TinyVue 源碼:https://github.com/opentiny/tiny-vue
TinyEngine 源碼: https://github.com/opentiny/tiny-engine
歡迎進入代碼倉庫 Star🌟TinyEngine、TinyVue、TinyNG、TinyCLI、TinyEditor\~\
如果你也想要共建,可以進入代碼倉庫,找到 good first issue 標籤,一起參與開源貢獻\~

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.