如何集成Dify
本指南详细介绍如何将ThinkDoc与Dify平台无缝集成,构建强大的AI应用。通过集成,您可以在Dify应用中调用ThinkDoc的知识库能力,实现基于企业文档的智能问答和内容生成。
集成架构概述
ThinkDoc + Dify集成采用API调用模式,ThinkDoc作为知识检索和问答服务,Dify作为应用编排和用户交互平台。
集成流程:
- Dify应用 → 接收用户查询
- 调用ThinkDoc API → 检索相关知识
- 返回检索结果 → 结合LLM生成最终回答
- 展示给用户 → 包含引用来源
准备工作
ThinkDoc端配置
-
创建API Key:
- 登录ThinkDoc控制台
- 进入”账号设置” → “API管理”
- 创建API Key
- 记录密钥:
td-xxxxxx
-
准备知识库:
- 创建专用知识库(如”Dify集成知识库”)
- 上传相关文档并完成解析
- 记录知识库ID:
xxxxxx
Dify端配置
-
创建应用:
- 登录Dify平台
- 创建新的对话应用或工作流应用
- 配置基础提示词和模型
-
准备HTTP请求节点:
- 在Dify工作流中添加HTTP Request节点
- 配置ThinkDoc API调用
集成方案
适用于需要更精细控制检索过程的场景,分别调用检索和生成接口。
步骤1:检索
# 检索节点配置
Method: POST
URL: https://doc.bluedigit.ai/api/retrieve
Headers:
Authorization: Bearer {{$secret.THINKDOC_API_KEY}}
Content-Type: application/json
Body:
query: "{{$input.user_query}}"
kb_ids: ["kb_xxxxxx"]
retrieval_setting:
top_k: 10
score_threshold: 0.5
步骤2:生成
# 生成节点提示词
基于以下检索到的知识片段,回答用户问题:
检索到的相关内容:
{{#each $node.retrieve.response.records}}
片段{{@index + 1}}:
{{text}}
来源:{{file_name}}
相关度:{{score}}
---
{{/each}}
用户问题:{{$input.user_query}}
请基于检索结果生成准确、详细的回答,并在回答中明确标注信息来源。
Dify工作流配置示例
节点配置详情:
- 输入预处理节点:
// 清理和标准化用户输入
const cleanQuery = $input.user_query.trim();
const enhancedQuery = `请基于企业知识库回答:${cleanQuery}`;
return { enhanced_query: enhancedQuery };
- 知识库选择节点:
// 根据查询类型选择知识库
const query = $input.user_query.toLowerCase();
let kbIds = [];
if (query.includes('政策') || query.includes('法规')) {
kbIds.push('kb_policy');
}
if (query.includes('产品') || query.includes('服务')) {
kbIds.push('kb_product');
}
if (query.includes('技术') || query.includes('开发')) {
kbIds.push('kb_tech');
}
return { selected_kb_ids: kbIds };
- ThinkDoc检索节点:
Method: POST
URL: https://doc.bluedigit.ai/api/retrieve
Headers:
Authorization: Bearer {{$secret.THINKDOC_API_KEY}}
Content-Type: application/json
Body:
prompt: "{{$node.preprocess.enhanced_query}}"
kb_ids: {{$node.kb_selector.selected_kb_ids}}
retrieval_setting:
top_k: 20
score_threshold: 0.5
- 结果处理节点:
// 处理ThinkDoc返回结果
const response = $node.thinkdoc_retrieve.response;
const answer = response.answer;
const sources = response.sources || [];
// 格式化引用来源
const formattedSources = sources.map(source => ({
content: source.content.substring(0, 200) + '...',
file: source.metadata.file_name,
score: source.score
}));
return {
answer: answer,
sources: formattedSources,
has_sources: sources.length > 0
};
- LLM生成节点:
# 最终生成提示词
你是一个专业的AI助手,基于ThinkDoc检索到的企业知识回答用户问题。
检索到的答案:
{{$node.result_process.answer}}
引用来源:
{{#each $node.result_process.sources}}
- {{file}} (相关度: {{score}})
{{content}}
{{/each}}
用户问题:{{$input.user_query}}
请基于检索结果生成专业、准确的回答。如果检索结果不足以回答问题,请明确说明并建议用户提供更多信息。
回答要求:
1. 保持专业性和准确性
2. 明确标注信息来源
3. 如果信息不足,主动说明
4. 使用清晰的结构化格式
环境变量配置
在Dify中配置以下环境变量:
# ThinkDoc API配置
THINKDOC_API_KEY=td-xxxxxx
THINKDOC_BASE_URL=https://doc.bluedigit.ai/api
Dify环境变量设置:
- 进入应用设置 → “环境变量”
- 添加上述变量
- 在节点中通过
{{$secret.VARIABLE_NAME}}
引用