技管思維 logo

技管思維

Subscribe
Archives
March 29, 2023

「直接看網頁」的理解程度還算堪用

在之前「複雜的時序圖也可以讓ChatGPT幫忙」的內容中,我直接叫它產sequenceDiagram給我,可以work。但我再認真去看了下「Sequence diagrams | Mermaid 」的文件後,發現它還有很多語法可以玩,因此這次是叫它參考文件來解決我的需求。

問題是這麼下的:

我有一個如下的內容:

1. 玩家提交「問題(Question)」
2. 問題被「IGS智能客服(LangChain)」轉交給「語意向量引擎(Embedding Model)」
3. 語音向量引擎處理完後,將「問題向量(Question Vector)」回傳給IGS智能客服
4. IGS智能客服將問題向量傳給「向量資料庫(Qdrant)」做特徵比對
5. 向量資料庫比對向量,將「前K名的相關內容(Top K facts)」傳回給IGS智能客服
6. IGS智能客服將前K名的相關內容做為提詞,將原來的問題含入後,一併詢問「聊天機器人(LLM)」
7. 聊天機器人嘗試參考前K名相關內容回答,將答案回覆給IGS智能客服
8. IGS智能客服最終將聊天機器人的答案回給玩家

請參考 https://mermaid.js.org/syntax/sequenceDiagram.html 的內容,給我一個sequenceDiagram

它給了我這樣的答案:

sequenceDiagram
    participant Player as 玩家
    participant IGS as IGS智能客服(LangChain)
    participant Embedding as 語意向量引擎(Embedding Model)
    participant Qdrant as 向量資料庫(Qdrant)
    participant LLM as 聊天機器人(LLM)

    Player->>IGS: 提交「問題(Question)」
    IGS->>Embedding: 轉交問題
    Embedding->>IGS: 回傳「問題向量(Question Vector)」
    IGS->>Qdrant: 傳遞問題向量
    Qdrant->>IGS: 回傳「前K名的相關內容(Top K facts)」
    IGS->>LLM: 詢問原問題和前K名相關內容
    LLM->>IGS: 回答問題
    IGS->>Player: 將答案回覆給玩家

然後開始試新語法:

「玩家」請用Actor節點,並加入自動編號

不曉得是原來就知道,還是真的去看文件,答案算及格:

sequenceDiagram
    participant actor as Actor 玩家
    participant IGS as IGS智能客服(LangChain)
    participant Embedding as 語意向量引擎(Embedding Model)
    participant Qdrant as 向量資料庫(Qdrant)
    participant LLM as 聊天機器人(LLM)

    Note over actor, IGS: 1.
    actor->>IGS: 提交「問題(Question)」
    Note over IGS, Embedding: 2.
    IGS->>Embedding: 轉交問題
    Note over Embedding, IGS: 3.
    Embedding->>IGS: 回傳「問題向量(Question Vector)」
    Note over IGS, Qdrant: 4.
    IGS->>Qdrant: 傳遞問題向量
    Note over Qdrant, IGS: 5.
    Qdrant->>IGS: 回傳「前K名的相關內容(Top K facts)」
    Note over IGS, LLM: 6.
    IGS->>LLM: 詢問原問題和前K名相關內容
    Note over LLM, IGS: 7.
    LLM->>IGS: 回答問題
    Note over IGS, actor: 8.
    IGS->>actor: 將答案回覆給玩家

為什麼說只是「及格」?因為不曉得為什麼它把原來的說明改成用「Note over」的語法,然後把”自動編號”這個需求加到「Note over」裡了。因此我稍微提示了它一下:

等等,不是有一個「autonumber」可以用嗎?用那個就好。

接下來就回了正確的內容:

sequenceDiagram
    autonumber
    participant actor as Actor 玩家
    participant IGS as IGS智能客服(LangChain)
    participant Embedding as 語意向量引擎(Embedding Model)
    participant Qdrant as 向量資料庫(Qdrant)
    participant LLM as 聊天機器人(LLM)

    actor->>IGS: 提交「問題(Question)」
    IGS->>Embedding: 轉交問題
    Embedding->>IGS: 回傳「問題向量(Question Vector)」
    IGS->>Qdrant: 傳遞問題向量
    Qdrant->>IGS: 回傳「前K名的相關內容(Top K facts)」
    IGS->>LLM: 詢問原問題和前K名相關內容
    LLM->>IGS: 回答問題
    IGS->>actor: 將答案回覆給玩家

表面上看起來的內容沒太大問題,就貼到編輯器去,結果出了錯,再把結果貼給它除錯:

我貼到mermaid.live的編輯器去,得到了如下的錯誤訊息:

Error: Lexical error on line 9. Unrecognized text.
...機器人(LLM)" actor->>IGS: "提交「問題(Quest
---------------------^

請修正

這裡以為是中文的上下引號(「」)的問題,但引號拿掉後還是不對。後來認真對了下文件後才發現,若使用actor看來就不能再使用participant了,因此再提示它這件事:

等等,問題不是中文的引號。我給你的網頁參考中,若使用`actor`,好像就不能用`participant`了的樣子?

結果它又自由發揮了:

sequenceDiagram
    autonumber
    actor 玩家
    actor IGS as "IGS智能客服(LangChain)"
    actor Embedding as "語意向量引擎(Embedding Model)"
    actor Qdrant as "向量資料庫(Qdrant)"
    actor LLM as "聊天機器人(LLM)"

    玩家->>IGS: "提交問題(Question)"
    IGS->>Embedding: "轉交問題"
    Embedding->>IGS: "回傳問題向量(Question Vector)"
    IGS->>Qdrant: "傳遞問題向量"
    Qdrant->>IGS: "回傳前K名的相關內容(Top K facts)"
    IGS->>LLM: "詢問原問題和前K名相關內容"
    LLM->>IGS: "回答問題"
    IGS->>玩家: "將答案回覆給玩家"

最後,再”溫馨提醒”它一下,我只有「玩家」是actor,其他的別動:

不對不對,我只有「玩家」要用actor,其他的別動

最後的答案總算對了:

sequenceDiagram
    autonumber
    actor 玩家
    participant IGS as "IGS智能客服(LangChain)"
    participant Embedding as "語意向量引擎(Embedding Model)"
    participant Qdrant as "向量資料庫(Qdrant)"
    participant LLM as "聊天機器人(LLM)"

    玩家->>IGS: "提交問題(Question)"
    IGS->>Embedding: "轉交問題"
    Embedding->>IGS: "回傳問題向量(Question Vector)"
    IGS->>Qdrant: "傳遞問題向量"
    Qdrant->>IGS: "回傳前K名的相關內容(Top K facts)"
    IGS->>LLM: "詢問原問題和前K名相關內容"
    LLM->>IGS: "回答問題"
    IGS->>玩家: "將答案回覆給玩家"

最後的時序圖很不錯:

討論過程在這裡,有興趣的可以看一下。

Don't miss what's next. Subscribe to 技管思維:
This email brought to you by Buttondown, the easiest way to start and grow your newsletter.