RAG 聊天機器人流水線

PR Ready

問題 → 檢索 → 重新排序 → 產生含引用的答案 → 收集回饋。

7 個節點 · 6 條連接pr ready
difyragchatbotvector-searchllm
視覺化
接收問題api

使用者透過聊天介面或 API 提交問題。

sequential向量檢索
向量檢索db

將查詢向量化,從向量資料庫檢索前 k 個最相關片段。

sequential重新排序結果
重新排序結果agent

使用 cross-encoder 重新排序,選出最相關的 5 個片段。

sequential產生答案
產生答案agent

使用檢索到的上下文產生有依據的答案,並附上行內引用。

sequential格式化引用
格式化引用cli

將行內引用標記對應至來源文件的中繼資料。

sequential使用者回饋
使用者回饋human

提供讚/倒讚及選填評語,用於追蹤答案品質。

conditional記錄至訓練集
記錄至訓練集db

儲存高評分的問答配對,供未來模型微調使用。

ex-dify-rag-chatbot.osop.yaml
# Dify RAG Chatbot — OSOP Portable Workflow
#
# Retrieval-augmented generation pipeline: receive a user question,
# retrieve relevant chunks from a vector store, rerank for relevance,
# generate a cited answer, and collect user feedback for fine-tuning.
#
# Build in Dify or validate: osop validate dify-rag-chatbot.osop.yaml

osop_version: "1.0"
id: "dify-rag-chatbot"
name:"RAG 聊天機器人流水線"
description:"問題 → 檢索 → 重新排序 → 產生含引用的答案 → 收集回饋。"
version: "1.0.0"
tags: [dify, rag, chatbot, vector-search, llm]

nodes:
  - id: "receive_question"
    type: "api"
    subtype: "webhook"
    name: "接收問題"
    description: "使用者透過聊天介面或 API 提交問題。"

  - id: "retrieve_docs"
    type: "db"
    name: "向量檢索"
    description: "將查詢向量化,從向量資料庫檢索前 k 個最相關片段。"
    config:
      store: "pinecone"
      top_k: 20
      embedding_model: "text-embedding-3-small"

  - id: "rerank"
    type: "agent"
    subtype: "llm"
    name: "重新排序結果"
    description: "使用 cross-encoder 重新排序,選出最相關的 5 個片段。"
    config:
      model: "cohere-rerank-v3"
      top_n: 5

  - id: "generate_answer"
    type: "agent"
    subtype: "llm"
    name: "產生答案"
    description: "使用檢索到的上下文產生有依據的答案,並附上行內引用。"
    config:
      model: "gpt-4o"
      temperature: 0.3
      system_prompt: "Answer using ONLY the provided context. Cite sources as [1], [2], etc."

  - id: "format_citations"
    type: "cli"
    subtype: "script"
    name: "格式化引用"
    description: "將行內引用標記對應至來源文件的中繼資料。"

  - id: "collect_feedback"
    type: "human"
    name: "使用者回饋"
    description: "提供讚/倒讚及選填評語,用於追蹤答案品質。"

  - id: "log_for_finetuning"
    type: "db"
    name: "記錄至訓練集"
    description: "儲存高評分的問答配對,供未來模型微調使用。"

edges:
  - from: "receive_question"
    to: "retrieve_docs"
    mode: "sequential"
  - from: "retrieve_docs"
    to: "rerank"
    mode: "sequential"
  - from: "rerank"
    to: "generate_answer"
    mode: "sequential"
  - from: "generate_answer"
    to: "format_citations"
    mode: "sequential"
  - from: "format_citations"
    to: "collect_feedback"
    mode: "sequential"
  - from: "collect_feedback"
    to: "log_for_finetuning"
    mode: "conditional"
    when: "feedback == 'positive'"
    label: "Good answer — save for training"