第 15 期:在应用中集成知识库

Updated on 4/6/2026

[Translation Pending]\n\n## Knowledge Retrieval 节点

graph LR
    Query[用户提问] --> KR[Knowledge Retrieval 节点]
    KR --> |检索| KB1[(知识库A: 产品文档)]
    KR --> |检索| KB2[(知识库B: FAQ)]
    KR --> Context[召回的相关段落]
    Context --> LLM[LLM: 基于上下文回答]

节点配置

在 Workflow 画布中,添加 Knowledge Retrieval 节点并绑定知识库:

# Knowledge Retrieval 节点配置
query_variable: "{{#start.user_query#}}"
datasets:
  - id: "dataset-product-docs"    # 产品文档库
  - id: "dataset-faq"             # FAQ 库
retrieval_mode: multiple           # single | multiple
top_k: 5
score_threshold: 0.3

Prompt 上下文注入

在下游 LLM 节点中引用检索结果:

System Prompt:
你是一个专业的产品技术支持助手。

请根据以下参考资料来回答用户的问题。
如果参考资料中找不到答案,请明确说"根据现有文档,我无法找到相关信息"。

## 参考资料
{{#knowledge_retrieval.result#}}

## 规则
1. 只引用参考资料中的内容,不要编造
2. 如果引用了某段内容,注明来源文档名
3. 回答要简洁清晰

User Prompt:
{{#start.user_query#}}

多知识库联合查询策略

graph TB
    Query[用户查询] --> Strategy{查询策略}
    Strategy -->|顺序查询| Seq[逐库查询,合并去重]
    Strategy -->|并行查询| Par[全部知识库同时查询]
    Strategy -->|路由查询| Route[分类器先判断→查对应库]
    
    Route --> QC[Question Classifier]
    QC -->|技术问题| KBTech[(技术文档库)]
    QC -->|销售问题| KBSales[(销售资料库)]
    QC -->|人事问题| KBHR[(HR政策库)]

完整 RAG Pipeline 代码

# 通过 Dify API 调用含知识库增强的应用
import requests

def rag_query(question: str) -> dict:
    response = requests.post(
        "http://localhost/api/chat-messages",
        headers={
            "Authorization": "Bearer app-xxxxxxxx",
            "Content-Type": "application/json"
        },
        json={
            "inputs": {},
            "query": question,
            "response_mode": "blocking",
            "user": "rag-user",
            "conversation_id": ""
        }
    )
    
    result = response.json()
    return {
        "answer": result["answer"],
        "sources": result.get("metadata", {}).get("retriever_resources", [])
    }

# 使用示例
result = rag_query("Dify 支持哪些向量数据库?")
print(f"回答: {result['answer']}")
print(f"来源: {[s['document_name'] for s in result['sources']]}")