LunaTalk 的 HTML 渲染秘密——為什麼聊天應用也能玩模擬器
LunaTalk 是什麼
LunaTalk 是一款主打虛擬 AI 角色聊天互動的手機應用。打開之後先進入「廣場」,裡面有數百張由社區創作者精心製作的角色卡——每張卡都有名字、性別、背景故事、聊天次數和粉絲數,從日常戀愛向的咖啡店老闆娘,到西幻世界的精靈遊吟詩人,再到修仙模擬器裡的五靈根廢材弟子,應有盡有。你挑一張喜歡的角色卡,輸入文字,AI 就開始以這個角色的身份和你對話。更多角色卡玩法和規則細節,可以參考 LunaTalk官網 的完整指南。
聽起來像是又一個「AI 角色扮演聊天」應用——但 LunaTalk 真正有意思的地方不在於 AI 有多會聊天,而在於它讓聊天本身變成了一個可交互的介面。有的角色卡會在對話裡渲染出狀態表格(靈根進度、靈力值、當前位置),有的會在回覆末尾放一排按鈕(「選擇基礎吐納術」「下山歷練看看」),點一下按鈕,下一句對話就自動換了個方向。

安裝
LunaTalk 目前提供 Android APK 安裝包,最新版本 1.0,整體積只有 3.39MB——在同類應用裡算是非常輕量。LunaTalk下載。下載 APK 後直接點擊安裝,系統如果彈出「未知來源」警告,在設定裡給當前瀏覽器或下載工具放行即可,整個安裝過程不到一分鐘。
首次啟動需要登錄賬號,支持第三方賬號關聯或手機號註冊,完成後進入主界面就能看到廣場的熱門角色榜。建議第一次使用先從總榜挑 1 到 2 張熱門角色卡試手,熟悉一下廣場的導航和角色卡的渲染風格,再去周榜或有獎主題榜找新鮮內容。如果之前裝過舊版本,建議先卸載再安裝,避免舊緩存導致角色卡渲染異常。
問題:為什麼一個聊天應用能跑模擬器
我第一次在 LunaTalk 裡見到修仙模擬器角色卡的時候愣了一下——不是普通的文字對話,而是一段場景描寫加一段對話框,下面跟著一個淡藍色底的狀態表格(姓名、靈根、修為、靈力值一行行排開),表格下面是四個帶樣式的按鈕,點「下山歷練」之後,下一回 AI 的回覆直接跳轉到山林場景,靈力值也自動扣掉了兩點。
這不是 AI 在聊天,這是 AI 在跑遊戲邏輯。但 LunaTalk 只有 3.39MB,不可能內置一個模擬器引擎——那它是怎麼做到的?
拆解:一套精心設計的 HTML 子集
答案藏在角色卡的「格式要求」裡。LunaTalk 允許創作者在角色卡提示詞裡指定「全部回覆以 HTML 格式輸出」,然後 AI 就會按照這個格式,把狀態條、按鈕、顏色標籤直接寫進回覆文本裡。應用內置了一個輕量的 HTML 渲染器,讀到這些標籤就渲染成對應的介面元素。
但這裡有個核心取捨——LunaTalk 沒有支持完整的 HTML。<style> 標籤被禁用了(防止 AI 注入惡意樣式),獨立的 <script> 塊也被禁用了(防止執行未經審核的 JS)。它只支持一個經過挑選的子集:文字樣式標籤(<b> <i> <font>)、標題層級、表格(<table>)、水平線、以及帶內联 onclick 事件的按鈕。
這個內联 onclick 是整個互動閉環的關鍵。幫助文檔裡給了一段完整的按鈕模板:
<button onclick="
const textarea = document.querySelector('#lunatalk-input textarea.uni-textarea-textarea');
if (textarea) {
textarea.value='選項文本';
textarea.dispatchEvent(new Event('input', { bubbles: true }));
}
">選項文本</button>
這段代碼做的事情很簡單:在頁面裡找到輸入框元素,把按鈕上寫的「選項文本」填進去,然後手動觸發一個 input 事件——相當於模擬了用戶手動輸入了這段文字,應用的輸入框邏輯自然就會接著往下走。按鈕本身不負責執行遊戲邏輯,它只負責把玩家的選擇「變回文字」丟給 AI,AI 拿到之後再根據角色卡的規則(靈力值扣減、場景切換)生成下一輪回覆。

取捨:安全和自由度的交換
這套設計聰明的地方在於它把互動邏輯的控制權交給了 AI,而不是交給了前端引擎。按鈕不跑遊戲代碼,只跑「把文字塞回輸入框」這一個固定操作。這意味著:
- 好處一:應用本身不需要內置任何遊戲引擎或腳本解釋器,保持了體積的輕量(3.39MB 不是湊出來的數字,是真的只內置了一個 HTML 渲染器加模型調用邏輯)。
- 好處二:安全風險被鎖死在一個固定的操作集合裡。onclick 裡的 JS 只能查詢輸入框並改它的值,無法訪問網路、無法讀取本地存儲、無法彈出外部頁面——寫不了木馬,也寫不了廣告彈窗。
- 好處三:創作者不需要會寫前端。角色卡提示詞裡貼一段表格模板和按鈕模板,AI 直接照著輸出。幫助文檔甚至提供了顏色代碼速查表和複製粘貼就能用的狀態條樣式,零前端基礎的用戶也能做出遊戲化介面。
但代價也很明顯。沒有 <style> 意味著所有樣式只能寫內聯 style="",無法寫統一的 CSS 類——複雜介面的代碼會變得又長又亂。沒有 <script> 意味著無法實現動畫、無法做數學計算(比如自動隨機靈力恢復)、無法做本地存儲——所有動態邏輯都必須由 AI 在每一輪回覆裡重新計算。如果角色卡的規則寫得不夠清晰,AI 很容易在連續幾輪後忘記狀態(靈力值本該剩 5/100,突然變成 80/100),這是社區裡優質角色卡人設部分動輒一兩千字的原因之一——規則寫得越明確、狀態描述得越具體,AI 出錯的概率就越低。
判斷:這套原理適合什麼場景
LunaTalk 的 HTML 設計本質上是一個「介面層」,而不是一個「引擎層」。它擅長的是把 AI 的文字回覆裝扮成遊戲化介面——狀態表格讓抽象的數值變得直觀,按鈕讓選項變得觸手可及,顏色和樣式讓對話有了情感色彩。這對互動劇情類角色卡和模擬器類角色卡來說足夠了,因為它們的核心本來就是「AI 根據規則生成文字,玩家根據文字做選擇」。
但如果你想做需要複雜視覺效果的場景——比如修仙大比的即時戰鬥動畫、角色的 3D 立繪切換、背景音樂的動態變化——這套機制就遠遠不夠了。它能渲染表格和按鈕,但渲染不了真正的互動介面。這個時候你需要的是一個獨立的應用,而不是一個聊天介面裡的角色卡。
總的來說,LunaTalk 選擇了一條很務實的路:用最小的技術成本換來最大的社區創造力。3.39MB 的應用裡跑著修仙模擬器、戀愛劇情、桌寵助手——不是因為它有多強大,而是因為它把「創造遊戲」這件事變成了「寫一段好提示詞」,而這正是 AI 現在最擅長的事情。
本文為個人基於網路公開資料整理編寫,非官方內容,僅供學習交流參考;軟體版權歸原作者所有,請支持正版;使用過程中遇到問題請查閱官方管道,本文不承擔任何責任。