精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

RAGFlow引用機制揭秘:LLM引導與后端驗證如何協同工作?

人工智能
為啥 RAGFlow 的最終回答中的引用顯示是后端完成的,LLM 通過提示詞引導生成的 [ID:i] 引用標記具體是什么作用,以及這種設計可以參考的工程化經驗。

昨天知識星球內有個提問:

RAGFlow 顯示引用為什么不通過提示詞直接顯示在回答中,而是通過分塊后和檢索片段比較向量相似度?判斷引用出處?能不能直接通過提示詞實現。

我當時給的回答是:

不能簡單地通過提示詞讓 LLM 直接、可靠地生成引用,因為這會引入幻覺風險。LLM 在生成內容時,為了讓回答顯得流暢和可信,可能會編造一個引用來源。此外,當輸出“這句話來自[2]”的時候,無法從技術上驗證,這也不符合生產實踐要求。換句話說,把生成答案和標注引用兩個步驟解耦,才能保證引用的客觀性。

本來這個對話就結束了,今天這個星友追評了下在 RAGFlow 的 Github 提了一個相關問題的 issue,結果 bot 的回答讓他有些困惑。我之前也沒有仔細了解過 RAGFlow 的相關源碼設計,就這這個問題實際看了下之后,覺得值得拿出來專門寫篇文章來做個拆解。

這篇試圖說清楚,為啥 RAGFlow 的最終回答中的引用顯示是后端完成的,LLM 通過提示詞引導生成的 [ID:i] 引用標記具體是什么作用,以及這種設計可以參考的工程化經驗。

以下,enjoy:

1、Issue 中的 BOT 誤導

這個 Issue 的核心問題是:“RAGFlow 是如何生成引用標記的?”bot 的回答顯得搖擺不定:起初它斷言引用完全由后端生成,LLM 本身并不參與;https://github.com/infiniflow/ragflow/issues/8817

但在被用戶以源碼中的 citation_prompt 質疑后,它又提出了一種“雙模式競爭”理論,暗示 LLM 和后端是兩條可能沖突的獨立路徑。不過不看源碼就能猜到,這種說法顯然是不合理的。但是具體還是要從源碼中找答案。

2、后端關鍵函數分析

要找到引用的源頭,首先應該查看后端代碼。在 RAGFlow 的源碼中,我在 rag/nlp/search.py 文件里,找到了一個名為 insert_citations 的關鍵函數。

# 代碼出處: rag/nlp/search.py (Dealer 類中)
class Dealer:
    # ... 其他方法 ...


    def insert_citations(self, answer, chunks, chunk_v,
                         embd_mdl, tkweight=0.1, vtweight=0.9):
        # 1. 將LLM的純文本回答切分成句子
        pieces = re.split(r"(```)", answer)
        # ... 省略清洗和聚合代碼 ...
        pieces_ = [...] # 得到干凈的句子列表


        # 2. 對每個句子,獨立計算與所有知識塊的混合相似度
        ans_v, _ = embd_mdl.encode(pieces_)
        cites = {}
        for i, a in enumerate(pieces_):
            sim, _, _ = self.qryr.hybrid_similarity(ans_v[i], chunk_v, ...)
            mx = np.max(sim) * 0.99
            if mx < thr: continue
            # 3. 記錄下所有相似度足夠高的知識塊作為引用
            cites[idx[i]] = list(
                set([str(ii) for ii in range(len(chunk_v)) if sim[ii] > mx]))


        # 4. 將計算出的引用標記 [ID:c] 注入到句子末尾
        res = ""
        for i, p in enumerate(pieces):
            res += p
            # ...
            if i in cites:
                for c in cites[i]:
                    if c in seted: continue
                    res += f" [ID:{c}]"
                    seted.add(c)
        return res, seted

這段代碼的邏輯很清晰的說明了以下三個問題:

1.輸入是純文本: 該函數的輸入 answer 是 LLM 生成的純凈答案。它完全不關心 answer 是否已經帶有 LLM 自己生成的引用標記。

2.獨立計算: 函數的核心是 hybrid_similarity,它完全基于內容相似度(結合了向量語義和關鍵詞文本)來獨立判斷每個句子與知識塊的關聯。這是一個從零開始、基于數據和算法的計算過程。

3.權威注入: 函數最后將自己計算出的引用 [ID:c] 注入到文本中,并返回最終結果。

初步結論非常明確,RAGFlow 的引用完全由后端算法基于內容相似度獨立生成,擁有最終的、絕對的決定權。 它不依賴、不修改、也不信任 LLM 可能生成的任何引用。這當然也是符合最佳實踐的做法。

3、前端對應溯源

進一步的問題是,既然知道后端生成了帶有 [ID:i] 標記的字符串。那么前端是如何把這個文本標記變成一個可點擊、可交互的鏈接的呢?

3.1message-item 組件

在 web/src/components/message-item/index.tsx 中,可以看到它負責渲染一個完整的消息氣泡。但它并不親自處理消息內容,而是將任務委托了出去。

# 代碼出處: web/src/components/message-item/index.tsx
// ...
            <div className={/* ... */}>
              {/* 關鍵:它將原始content和引用數據直接傳遞給MarkdownContent */}
              <MarkdownContent
                loading={loading}
                content={item.content} 
                reference={reference}
                clickDocumentButton={clickDocumentButton}
              ></MarkdownContent>
            </div>
// ...

3.2markdown-content 組件

真正的魔法發生在 web/src/pages/chat/markdown-content/index.tsx。這個組件接收到原始字符串后,執行了最終的“查找與替換”操作。

# 代碼出處: web/src/pages/chat/markdown-content/index.tsx
import reactStringReplace from 'react-string-replace'; // 1. 引入關鍵的替換庫
import { currentReg } from '../utils'; // 2. 引入包含引用正則表達式的文件


// ...


const MarkdownContent = (/* ... */) => {
  // ...
  const renderReference = useCallback(
    (text: string) => {
      // 3. 使用 react-string-replace 對文本進行查找和替換
      let replacedText = reactStringReplace(text, currentReg, (match, i) => {
        // 4. currentReg 就是匹配 [ID:i] 的正則表達式
        //    對于每一個匹配到的 `match` (例如 "[ID:5]"), 執行以下邏輯:
        const chunkIndex = getChunkIndex(match); // 提取出數字 5


        // 5. 返回一個可交互的 React 組件 (Popover) 來替換原始的 [ID:i] 文本
        return (
          <Popover cnotallow={getPopoverContent(chunkIndex)} key={i}>
            <InfoCircleOutlined className={styles.referenceIcon} />
          </Popover>
        );
      });
      return replacedText;
    },
    // ...
  );


  return (
    <Markdown
      // ...
      compnotallow={{
        // 6. 通過重寫組件渲染邏輯,確保所有文本都經過 renderReference 函數的處理
        'custom-typography': ({ children }: { children: string }) =>
          renderReference(children),
        // ...
      }}
    >
      {contentWithCursor}
    </Markdown>
  );
};

前端的處理流程清晰地展現了“職責分離”原則。MessageItem 負責消息的整體結構,而 MarkdownContent 負責將后端生成的 [ID:i] 文本標記,通過查找替換的方式,轉換為用戶可以交互的 UI 組件。這再次證實了所有引用處理在數據到達前端之前,必須已經在后端全部完成了。

4、提示詞引導生成的巧思

既然后端和前端的邏輯都很清晰,還沒有回答的一個問題是,如果后端函數是引用的唯一來源,那為什么 RAGFlow 的源碼中還要在 rag/prompts/citation_prompt.md 中寫下引導 LLM 生成引用的規則,而這個引用最終并不會使用。

# 證據: rag/prompts/citation_prompt.md 的內容
## Citation Requirements
- Use a uniform citation format such as [ID:i] [ID:j]...
- Citation markers must be placed at the end of a sentence...
- A maximum of 4 citations are allowed per sentence.
- DO NOT insert citations if the content is not from retrieved chunks.
- ...
- STRICTLY prohibit the use of strikethrough symbols...


## Example START
: Here is the knowledge base:
Document: ... ID: 0
Document: ... ID: 1
...


: What's Elon's view on dogecoin?


: Musk has consistently expressed his fondness for Dogecoin... He has referred to it as his favorite cryptocurrency [ID:0] [ID:1].
...
## Example END

看到這里,就知道為啥 GitHub 機器人所說的“雙模式競爭”純屬瞎編了。citation_prompt 的真正目的,不是為了“結果”,而是為了“過程”。

換句話說,不是為了得到 LLM 生成的 [ID:i] 這個結果,而是為了規范 LLM 生成答案文本的整個過程。它通過這種方式向 LLM 施加了強烈的約束。

1.降低幻覺: 通過強制要求 LLM“必須為你的話找到出處”,系統在源頭上極大地降低了內容幻覺。

2.保證內容質量: LLM 必須生成與原文高度相關的內容。

3.為后端鋪路: 正是這份高質量的草稿,讓后端的 insert_citations 函數能夠游刃有余地進行精準的相似度匹配,并最終完成權威的標注工作。

5、寫在最后

RAGFlow 的引用生成機制,也形象的展示了 LLM 應用落地的核心范式。生產實踐可用的關鍵不在于對 LLM 能力的盲目相信(當然最好用最先進的 LLM),也不在于過多的依賴傳統的規則引擎,而在于把 LLM 作為一個強大但需要被引導和驗證的推理核心,并圍繞它構建一套由確定性工程邏輯組成的腳手架,最后給出三個類似的樣例作為參考:

1.AI Agent 與工具調用 (Tool Calling)

讓 LLM 自由思考(Chain of Thought),分析用戶意圖,并決定需要調用哪個 API(工具)。但比如一旦 LLM 決定調用 get_weather("北京"),這個 API 本身的執行過程是完全確定的。系統不會讓 LLM 去“創造”天氣數據,而是通過嚴格的函數調用獲取真實、可信的結果。

2.結構化數據提取 (JSON Mode)

對于一段非結構化的用戶評論:“我喜歡這款手機的屏幕,但電池太不給力了”,通過強制啟用 JSON Mode,并提供 Pydantic 等模式定義,來約束 LLM 的輸出必須符合{ "positive_feedback": "屏幕", "negative_feedback": "電池" }這樣嚴格的格式。LLM 可以在內容上發揮,但格式被約束,這也保證了下游程序的可解析性。

3.黑盒兜底機制 (Fallback)

在許多客服機器人中,首先嘗試讓 LLM 直接回答用戶問題。但如果比如連續兩次回答的置信度都低于某個閾值,或者觸發了特定關鍵詞,系統會無縫切換到人工客服或預設的、基于規則的流程(確定性)。這也是目前業界常用的一種經典的平衡策略。

責任編輯:龐桂玉 來源: 韋東東
相關推薦

2021-01-10 15:28:23

數據科學機器學習AI

2020-01-09 07:48:19

ITOT安全網絡攻擊

2022-09-13 11:38:59

物聯網邊緣計算人工智能

2020-11-21 10:53:55

RFID工業物聯網IIOT

2019-10-18 08:18:00

云計算物聯網IOT

2022-05-11 10:09:13

大數據區塊鏈

2022-10-12 23:58:20

物聯網邊緣計算數據

2020-07-28 10:23:35

協同工作首席信息官IT部門

2023-02-20 15:21:07

物聯網工業4.0

2023-03-24 14:51:05

人工智能大數據

2019-10-17 11:13:27

大數據人工智能

2020-03-27 15:28:08

物聯網機器人人工智能

2020-06-24 12:11:40

云計算5G技術

2023-08-16 14:21:49

物聯網工業4.0

2023-05-08 16:23:42

物聯網工業4.0數字化轉型

2023-08-07 17:45:11

人工智能物聯網

2010-05-21 18:16:13

IIS服務器

2010-05-21 17:03:16

2011-01-06 13:24:48

點贊
收藏

51CTO技術棧公眾號

国产超碰人人模人人爽人人添| 一级黄色片国产| 天堂在线观看免费视频| 亚洲女同同性videoxma| 亚洲男人天堂视频| 天天干在线影院| 五月婷婷视频在线观看| 成人av资源在线| 国产激情久久久| 精品自拍偷拍视频| 最新亚洲精品| 欧美一级xxx| 欧美国产激情视频| 日韩av一区二区三区在线| 亚洲av无码一区东京热久久| 亚洲综合电影| 亚洲欧美日韩国产成人精品影院| 久久精品久久精品国产大片| 国产伦精品一区二区三区免.费| 在线精品一区二区| 日韩在线视频免费观看高清中文| 91九色蝌蚪porny| 欧美aaa级| 欧美性高潮床叫视频| 亚洲精品久久久久久一区二区| 亚洲国产精彩视频| 麻豆成人综合网| 欧美亚洲在线观看| 麻豆视频在线观看| 欧美h版在线| 日韩精品高清在线| 少妇高潮一69aⅹ| 久久亚洲精品中文字幕| 色综合久久久久综合| 久久这里只有精品8| 中文日本在线观看| 在线观看亚洲欧美| 首页亚洲中字| 欧美tk—视频vk| 免费黄频在线观看| 国产精品66| 91久久精品国产91性色tv | www.国产麻豆| 美女视频黄频大全不卡视频在线播放| 欧美在线精品免播放器视频| 国产稀缺真实呦乱在线| 欧美日韩国产综合网| 精品国产一区av| а天堂中文在线资源| 欧美综合另类| 中文字幕成人在线| 波多野结衣一二三四区| 日韩成人激情| 深夜成人在线观看| 蜜桃av免费在线观看| 日韩av二区| 中文字幕亚洲一区二区三区五十路| 国产色视频一区二区三区qq号| 久久1电影院| 激情自拍一区| 欧美福利一区二区| www.亚洲自拍| 日韩欧美高清一区二区三区| 欧美一区二区人人喊爽| 亚洲成人手机在线观看| 色妞ww精品视频7777| 日韩欧美一区二区免费| 337p日本欧洲亚洲大胆张筱雨| 天堂av一区| 精品久久久久一区| 日韩精品一区二区三区高清免费| 日韩免费电影在线观看| 国产丝袜精品第一页| 精品无码人妻一区二区免费蜜桃| 成人亚洲一区二区| 日韩视频免费在线观看| 久久中文字幕在线观看| 日韩一区二区免费看| 国产91在线播放| 中文字幕乱码一区二区 | 亚洲国产精品视频| 国产视频一视频二| 韩日精品一区| 欧美一区二区免费观在线| 野战少妇38p| 免费看成人哺乳视频网站| 色999日韩欧美国产| 欧美第一页在线观看| 在线高清一区| 国产精品主播视频| 性一交一乱一色一视频麻豆| 久久综合精品国产一区二区三区| 日韩久久在线| 日本性爱视频在线观看| 狠狠躁夜夜躁人人爽超碰91| wwwwxxxx日韩| 视频一区日韩精品| 伊人久久久久久久久久| 激情小说中文字幕| 日本女人一区二区三区| 国产精品国色综合久久| av影片免费在线观看| 亚洲制服丝袜在线| 丁香婷婷激情网| 白嫩白嫩国产精品| 中文字幕久久久| 国产系列精品av| 老司机精品视频在线| 国内一区二区在线视频观看| 老司机av在线免费看| 狠狠久久五月精品中文字幕| 欧美激情国内自拍| 国产精品一区2区3区| 欧美寡妇偷汉性猛交| 中文字幕在线日亚洲9| av电影在线观看一区| 日本女人高潮视频| 免费观看成人性生生活片| 精品久久久影院| 国产又色又爽又高潮免费| 亚洲免费中文| 好吊色欧美一区二区三区四区 | 久久人人爽国产| 一级片一区二区三区| 久久久亚洲国产美女国产盗摄| 国产91porn| 欧美日韩伦理一区二区| 亚洲女人天堂成人av在线| 国产一级一片免费播放| 精品一区二区综合| 亚洲看片网站| 日本免费久久| 精品亚洲一区二区三区四区五区| 久久久久香蕉视频| 国产精品一级在线| 制服诱惑一区| 性欧美video另类hd尤物| 在线电影av不卡网址| 欧美一级淫片免费视频黄| 成人av在线观| 欧妇女乱妇女乱视频| 日韩精品三级| 欧美成人免费大片| 国产女人高潮时对白| 中文字幕一区二区视频| 亚洲一级免费观看| 成人在线免费观看| 欧美韩日精品| 国产精品视频中文字幕91| 欧美日韩伦理片| 欧美日韩在线影院| 黄色免费看视频| 亚洲第一毛片| 久久99影院| 无码小电影在线观看网站免费| 亚洲国产天堂久久综合网| 日本在线视频免费观看| 成人av在线影院| 国产乱子伦农村叉叉叉| 香蕉人人精品| 国产精品91免费在线| 黄色免费在线播放| 精品视频资源站| 午夜成人亚洲理伦片在线观看| 久久精品国产久精国产| 欧美h视频在线观看| 精品一区二区三区免费看| 欧美日本高清视频| 日韩一级片免费在线观看| 精品国产乱码久久久久久虫虫漫画 | 老司机免费视频久久| 日本成人三级| 日韩国产大片| 欧美日本高清视频| 五月婷婷开心中文字幕| 色综合天天综合网天天看片| 91视频免费在观看| 国产一区视频网站| 日本精品久久久久久久久久| 亚洲精品**不卡在线播he| 国产成人精品在线视频| 久久精品视频免费看| 欧美久久综合网| 国产精品女视频| av文字幕在线观看| 亚洲国产日韩欧美在线动漫| 亚洲不卡在线视频| 亚洲欧美经典视频| 久久无码人妻精品一区二区三区| 久久精品九九| 日韩最新中文字幕| 欧美日韩一区二区三区在线电影 | 日韩国产精品毛片| 精品国产乱子伦一区二区| 日韩av电影免费观看高清| 精品欧美色视频网站在线观看| 欧美精品一区二区三区蜜桃| 国产精品欧美综合| 一区二区三区丝袜| 国产精品密蕾丝袜| 国产99一区视频免费| 久久久久国产精品熟女影院| 亚洲色图网站| 日本a级片久久久| 玖玖玖电影综合影院| 日本一区二区不卡| 日韩精品分区| 不卡一二三区首页| 91免费看网站| 国产亚洲欧美日韩精品一区二区三区| 欧美激情在线一区| 一区二区三区视频网站| 亚洲精品按摩视频| 国产精品一级视频| 日本韩国欧美三级| 18精品爽视频在线观看| 国产精品人成在线观看免费| 一区二区免费在线观看视频| 国内精品在线播放| 国产v亚洲v天堂无码久久久| 亚洲国产裸拍裸体视频在线观看乱了中文 | 国产精品高潮呻吟AV无码| 欧美小视频在线| 久久精品国产亚洲av无码娇色 | 欧美一区国产| 97久久久久久| 三级福利片在线观看| 日韩综合视频在线观看| 免费在线黄色影片| 亚洲国产精品人久久电影| 99久久精品国产一区二区成人| 欧洲另类一二三四区| 欧美在线观看不卡| 精品久久在线播放| 国产精品成人网站| 亚洲综合一二区| 免费在线视频一区二区| 亚洲欧美激情在线| 亚洲欧美精品aaaaaa片| 中文字幕在线一区| wwwww黄色| 国产蜜臀97一区二区三区 | 亚洲欧美日韩系列| 国产精品视频看看| ...av二区三区久久精品| 欧美成人国产精品一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 在线观看一区二区三区四区| 国产成a人亚洲精| 精品人妻一区二区免费| 成人av在线资源网站| 国产精品无码电影| 91丨九色porny丨蝌蚪| 国产老熟女伦老熟妇露脸| 99久久99精品久久久久久| 给我免费观看片在线电影的| 久久只精品国产| 国产精品亚洲无码| 欧美高清在线视频| 羞羞在线观看视频| 亚洲蜜臀av乱码久久精品蜜桃| 福利所第一导航| 亚洲福利一二三区| 亚洲精品1区2区3区| 欧美视频一区二区三区…| 欧美精品亚洲精品日韩精品| 午夜电影一区二区| 日韩欧美成人一区二区三区| 色爱区综合激月婷婷| 欧美激情一区二区三区免费观看| 欧美主播一区二区三区美女| 一本到在线视频| 欧美成人一区二区三区在线观看| 色婷婷视频在线| 亚洲日本欧美中文幕| 色欧美激情视频在线| 欧美精品在线看| 欧美在线极品| 国产精品欧美激情在线播放| 九九99久久精品在免费线bt| 国产精品国产精品国产专区不卡| 青青草原在线亚洲| 午夜精品一区二区在线观看| 在线国产一区| 91国视频在线| 久久99精品国产麻豆婷婷洗澡| 亚洲视频在线不卡| 久久亚洲精品小早川怜子| 精品视频第一页| 午夜欧美2019年伦理| 波多野结衣一区二区三区在线| 欧美一二三在线| 国产毛片av在线| 精品视频9999| 免费亚洲电影| 9a蜜桃久久久久久免费| 综合亚洲自拍| 糖心vlog在线免费观看| 亚洲欧美激情诱惑| www.色.com| 国产午夜精品久久久久久免费视| 国产波霸爆乳一区二区| 一本大道久久a久久精品综合| 国产精品毛片一区二区在线看舒淇| 日韩av在线直播| www视频在线免费观看| 日韩av电影免费观看高清| jizz性欧美23| 中国成人在线视频| 国产一区白浆| 丰满饥渴老女人hd| 国产精品天美传媒| 五月激情六月丁香| 日韩欧美国产一区二区三区| 草碰在线视频| 欧美性资源免费| 中文字幕一区二区三区日韩精品| 亚洲成人精品电影在线观看| 国产日韩一区二区三区在线播放| 一本之道在线视频| 国产精品久久免费看| 亚洲成人第一网站| 亚洲福利在线观看| 亚洲区欧洲区| 91精品视频免费| 成人同人动漫免费观看| 免费黄色特级片| 99久久婷婷国产综合精品电影| 国产suv一区二区三区| 欧美日韩的一区二区| 久久99久久| 欧美在线一级va免费观看| 国产精品色呦| 久久手机在线视频| 国产91色综合久久免费分享| 国产日韩欧美在线观看视频| 欧美日韩和欧美的一区二区| 国产乱理伦片a级在线观看| 奇米一区二区三区四区久久| 里番精品3d一二三区| 97超碰国产精品| 国产成人在线视频网站| 一区视频免费观看| 欧美一区二区三区思思人| 日本中文字幕视频在线| 国产欧美 在线欧美| 日韩一区亚洲二区| xxww在线观看| 国产精品久久看| 国产一区二区三区黄片| 精品久久久av| 欧美影院精品| 日韩成人手机在线| aaa欧美色吧激情视频| 日韩欧美三级在线观看| 日韩av在线网| 欧美电影免费观看| 日韩高清专区| 久久99精品久久久久婷婷| 国产美女久久久久久| 欧美一级日韩不卡播放免费| 日本色护士高潮视频在线观看 | 另类小说第一页| 国产精品乱人伦| 国产伦精品一区二区三区免.费| 欧美人在线视频| 色哟哟精品丝袜一区二区| www.亚洲天堂网| 日本一区二区三区国色天香 | 日韩精品伦理第一区| 热久久免费视频| 亚洲波多野结衣| 精品99一区二区三区| 超碰超碰人人人人精品| 亚洲国产一区二区精品视频| 韩国理伦片一区二区三区在线播放| 国产黄在线免费观看| 日韩精品中文字幕久久臀| 色婷婷综合久久久中字幕精品久久| 亚洲亚洲精品三区日韩精品在线视频| 九九九久久久精品| 精品少妇theporn| 亚洲欧美激情在线视频| 四虎精品在线观看| 91免费国产精品| 国产无一区二区| 国产成年妇视频| 国产91在线视频| 欧美激情麻豆| 精品无码国产污污污免费网站| 欧美美女一区二区| 欧美13videosex性极品| 亚洲精品欧洲精品| kk眼镜猥琐国模调教系列一区二区| 加勒比在线一区| 欧美大尺度在线观看| 奇米狠狠一区二区三区| 91大神免费观看| 色婷婷综合五月| 国内老司机av在线|