第 15 期:在应用中集成知识库
[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']]}")