Files
wecom_it_smart_desk/scripts/dify_export_clean.yaml
Simon 449c6d4875 feat: 2026-07-12~13 全量更新 - AI对话链路改造+H5 v4/v5+坐席端v5+上下文感知诊断+知识库迭代3
## H5 员工端 v4 (2026-07-13 00:48 已部署)
- 人工按钮三态文案统一为"人工坐席"
- 按钮位置移至发送键和语音按钮上方(垂直堆叠)
- 点按钮直接调 store.shakeAgent(),删除 CallAgentModal 弹窗动画
- 截图快捷键提示改为"截图->粘贴:Alt+Shift+A-Ctrl+V ---> Ctrl+V"
- 移动端隐藏截图提示(CSS 媒体查询)
- AI转人工提示改为"已为您呼叫人工坐席,请稍等!"
- 坐席接入提示改为"坐席正在查看您的信息,请等待处理回复!"
- 删除"摇铃呼叫坐席"入口和文案
- 删除孤儿组件 MessageList.vue + shake 动画 CSS

## H5 员工端 v5 (2026-07-13 02:08 已部署)
- RightPanel v2.1:删除"软件安装"和"资源权限"标签页
- 移除标签栏,智能推荐(DynamicRecommend)直接展示
- 删除 SoftwareDownloads/ApprovalLinks 引用和相关 CSS

## AI 对话链路全栈改造 Phase 1-6 (已部署)
- Phase 1: Dify JSON输出 + 后端blocking解析 + 双WS推送 + 错误降级
- Phase 2: 关键词收窄(~25强意图词) + 两级分类Prompt + 删除前端checkApprovalIntent
- Phase 3: WS扩展(ai_thinking+dynamic_recommend) + ai_structured气泡 + RightPanel v2 + 选项回传
- Phase 4: VisionService接入 + 图片消息融合(5秒窗口) + 降级策略
- Phase 5: 坐席端ai_thinking指示器 + ai_structured/byod_card渲染 + handleNewMessage修复
- Phase 6: diagnosis_stage(6值) + response_time_ms计时 + 慢响应告警(>10s)

## 坐席端 v5 (2026-07-13 01:38 已部署)
- ai_structured/byod_card 只读渲染
- AI思考指示器 UI
- handleNewMessage 透传 msg_type/extra_data 修复
- 布局优化v2.0: QuickReplyBar L1+L2悬浮 + ReplyBox左右分区 + 右栏260/560px切换
- 键盘快捷键v2.3: 纯数字路由 + ESC分层撤销 + Shift+Space用event.code

## 上下文感知智能诊断闭环 (2026-07-12 已部署)
- 三层诊断(API→Script→AI) + 三段排队(VIP→info_locked→not locked)
- 答题插队 + 五场景关闭
- 迁移052(6表+6列) + queue_service + quiz_service + closing_service
- H5前端: QueueWaiting + RightPanel双Tab + InputBar三态 + ResolveConfirmCard
- 坐席前端: pending_close结单流程 + 信息锁定(Dify步骤完成+有效回答率≥70%)

## 知识库迭代3 (2026-07-12 已部署)
- 分诊交互(H5+坐席+Dify独立应用)
- 拓扑预览(ECharts只读)
- 代答排除(4种匹配器: keyword/regex/intent/category)
- 迁移051 + 44文件43测试通过

## 后端变更
- 6个Python文件改造(h5_ai_task.py/h5.py/ai_service.py/closing_service.py等)
- funny_phrase_service.py: shake/connected/keyword 默认文案更新
- session_service.py: 企微消息文案同步
- 新增: queue.py/quiz.py/triage.py/exclusion_rules.py 等API端点
- 新增: diagnostic.py/quiz.py/triage_session.py 等模型
- 新增: closing_service/queue_service/quiz_service/triage_service 等服务

## 文档更新
- CHANGELOG.md: 新增 [未发布] 区全部变更记录
- 项目管理主文档 v2.5: 新增v0.7.3版本 + 已完成看板 + 最近搞定
- 版本记录: 新增v0.7.3条目
- AI对话链路实施计划: Phase 1-6 全部标记已实施
- 新增架构图/时序图/类图(mermaid)

## 部署路径修正
- 服务器项目根路径: /opt/wecom-it-desk/
- 所有前端dist均为ro bind mount,只能在宿主机源路径操作
- 服务器nginx /h5/ 是静态文件服务(非proxy_pass)
- elFinder上传二进制不可靠(MD5不匹配),改用base64分块上传
2026-07-13 02:17:03 +08:00

4365 lines
132 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
app:
description: AI在线咨询-上线使用
icon: 🤖
icon_background: '#FFEAD5'
mode: advanced-chat
name: 智能IT支持-员工咨询
use_icon_as_answer_icon: true
dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/openai_api_compatible:0.0.23@59ef558a46420c436b280af1ee452b4129ddfd3567826112f6f193279d8c4a37
version: null
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: yangyaofei/vllm:0.1.5@3eecf807d9767f40eb757ff70720291aa6055e9e1803893b4c93b61a5d4d4319
version: null
kind: app
version: 0.4.0
workflow:
conversation_variables:
- description: ''
id: f4602fd1-2bff-4c6f-bbad-e6ae1033e6e4
name: mmq
selector:
- conversation
- mmq
value: []
value_type: array[string]
- description: 保底机制
id: 24608e8f-1de8-4eba-b081-75bcff64594d
name: guarantee_mechanism
selector:
- conversation
- guarantee_mechanism
value: 1
value_type: integer
- description: 员工问题
id: 3b232c97-81b9-4b16-804c-cd845441b4d6
name: servyou_query
selector:
- conversation
- servyou_query
value: ''
value_type: string
- description: 历史问题对应答案
id: dd3c2a43-5813-4582-93ac-54c2e6f4261c
name: memory_ans
selector:
- conversation
- memory_ans
value: ''
value_type: string
- description: 历史问题
id: 8a7563cb-0d2f-49fe-801a-e61e659421ea
name: memory_query
selector:
- conversation
- memory_query
value: ''
value_type: string
environment_variables: []
features:
file_upload:
allowed_file_extensions:
- .JPG
- .JPEG
- .PNG
- .GIF
- .WEBP
- .SVG
allowed_file_types:
- image
- document
allowed_file_upload_methods:
- remote_url
- local_file
enabled: true
fileUploadConfig:
audio_file_size_limit: 50
batch_count_limit: 5
file_size_limit: 100
image_file_size_limit: 10
video_file_size_limit: 100
workflow_file_upload_limit: 10
image:
enabled: false
number_limits: 3
transfer_methods:
- local_file
- remote_url
number_limits: 3
opening_statement: ''
retriever_resource:
enabled: true
sensitive_word_avoidance:
enabled: false
speech_to_text:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
language: ''
voice: ''
graph:
edges:
- data:
isInIteration: false
isInLoop: false
sourceType: http-request
targetType: if-else
id: 1762241246839-source-1762333864200-target
selected: false
source: '1762241246839'
sourceHandle: source
target: '1762333864200'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: knowledge-retrieval
targetType: llm
id: 1764905829011-source-1764905844059-target
selected: false
source: '1764905829011'
sourceHandle: source
target: '1764905844059'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: assigner
targetType: answer
id: 1765357529351-source-1765181482474-target
selected: false
source: '1765357529351'
sourceHandle: source
target: '1765181482474'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: list-operator
targetType: llm
id: 1765436887640-source-1765437083981-target
selected: false
source: '1765436887640'
sourceHandle: source
target: '1765437083981'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: list-operator
id: 1765437585148-false-1765436887640-target
selected: false
source: '1765437585148'
sourceHandle: 'false'
target: '1765436887640'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: template-transform
id: 1765437083981-source-1765439054336-target
source: '1765437083981'
sourceHandle: source
target: '1765439054336'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: template-transform
targetType: assigner
id: 1765439054336-source-1765441716709-target
source: '1765439054336'
sourceHandle: source
target: '1765441716709'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: if-else
id: 1765437585148-true-1765517905842-target
source: '1765437585148'
sourceHandle: 'true'
target: '1765517905842'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: answer
id: 1765517905842-true-1765518093072-target
source: '1765517905842'
sourceHandle: 'true'
target: '1765518093072'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: answer
id: 1765517905842-d7e857f8-75b0-44b6-a342-fcbf0fd1bce0-1765524938055-target
source: '1765517905842'
sourceHandle: d7e857f8-75b0-44b6-a342-fcbf0fd1bce0
target: '1765524938055'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: answer
id: 1765517905842-5b113ab9-2154-45bb-9fbc-e2fa2246b8c1-1765524956759-target
source: '1765517905842'
sourceHandle: 5b113ab9-2154-45bb-9fbc-e2fa2246b8c1
target: '1765524956759'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: assigner
id: 1764905844059-source-1765357529351-target
source: '1764905844059'
sourceHandle: source
target: '1765357529351'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: answer
id: 1765517905842-66e1df2e-d7b7-4e2f-9ddb-ebac301f35f4-1765766043047-target
source: '1765517905842'
sourceHandle: 66e1df2e-d7b7-4e2f-9ddb-ebac301f35f4
target: '1765766043047'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: answer
id: 1765517905842-1ec2ad7a-456a-4181-ba0f-9a3362d7a44c-1765766067015-target
source: '1765517905842'
sourceHandle: 1ec2ad7a-456a-4181-ba0f-9a3362d7a44c
target: '1765766067015'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: answer
id: 1765517905842-909d209a-20c2-464b-9117-335166bd0209-1765766081739-target
source: '1765517905842'
sourceHandle: 909d209a-20c2-464b-9117-335166bd0209
target: '1765766081739'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: answer
id: 1765517905842-f8839db4-0b63-4411-b052-f82aa3807e34-1765766096673-target
source: '1765517905842'
sourceHandle: f8839db4-0b63-4411-b052-f82aa3807e34
target: '1765766096673'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: answer
id: 1765517905842-98d72ef6-f53a-482a-9cc6-36140595d055-1765766112941-target
source: '1765517905842'
sourceHandle: 98d72ef6-f53a-482a-9cc6-36140595d055
target: '1765766112941'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: assigner
id: 1765782485068-source-1765441606676-target
source: '1765782485068'
sourceHandle: source
target: '1765441606676'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: start
targetType: code
id: 1762235823950-source-1765782485068-target
source: '1762235823950'
sourceHandle: source
target: '1765782485068'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: if-else
id: 1765785630566-source-1765786049975-target
source: '1765785630566'
sourceHandle: source
target: '1765786049975'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: http-request
id: 1765786049975-true-1762241246839-target
source: '1765786049975'
sourceHandle: 'true'
target: '1762241246839'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: http-request
id: 1765786049975-false-17657860354750-target
source: '1765786049975'
sourceHandle: 'false'
target: '17657860354750'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: if-else
id: 1765785673343-source-1765786290221-target
source: '1765785673343'
sourceHandle: source
target: '1765786290221'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: http-request
id: 1765786290221-true-1762241246839-target
source: '1765786290221'
sourceHandle: 'true'
target: '1762241246839'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: http-request
id: 1765786290221-false-17657860354750-target
source: '1765786290221'
sourceHandle: 'false'
target: '17657860354750'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: http-request
targetType: if-else
id: 17657860354750-source-17657864016400-target
source: '17657860354750'
sourceHandle: source
target: '17657864016400'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: knowledge-retrieval
targetType: llm
id: 17657866222300-source-17657866286790-target
source: '17657866222300'
sourceHandle: source
target: '17657866286790'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: assigner
id: 17657866286790-source-17657866367000-target
source: '17657866286790'
sourceHandle: source
target: '17657866367000'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: answer
id: 17657866367000-source-17657866567850-target
source: '17657866367000'
sourceHandle: source
target: '17657866567850'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: if-else
id: 1766648935323-source-1766654954216-target
source: '1766648935323'
sourceHandle: source
target: '1766654954216'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: assigner
targetType: llm
id: 1766655043205-source-1765785630566-target
source: '1766655043205'
sourceHandle: source
target: '1765785630566'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: llm
id: 17666551541000-source-1765785673343-target
source: '17666551541000'
sourceHandle: source
target: '1765785673343'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: assigner
id: 1766726065787-source-1766655043205-target
source: '1766726065787'
sourceHandle: source
target: '1766655043205'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: if-else
id: 17667264375750-source-17666551325690-target
source: '17667264375750'
sourceHandle: source
target: '17666551325690'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: assigner
id: 17667264509960-source-17666551541000-target
source: '17667264509960'
sourceHandle: source
target: '17666551541000'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: answer
id: 17667269647440-true-1766727080009-target
source: '17667269647440'
sourceHandle: 'true'
target: '1766727080009'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: answer
id: 17667272700050-true-1766727285253-target
source: '17667272700050'
sourceHandle: 'true'
target: '1766727285253'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: answer
id: 17657864016400-true-17667318333930-target
source: '17657864016400'
sourceHandle: 'true'
target: '17667318333930'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: answer
id: 1762333864200-true-17667318501870-target
source: '1762333864200'
sourceHandle: 'true'
target: '17667318501870'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: if-else
id: 1766654954216-false-1766737231108-target
source: '1766654954216'
sourceHandle: 'false'
target: '1766737231108'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 1766737231108-false-1766726065787-target
source: '1766737231108'
sourceHandle: 'false'
target: '1766726065787'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: code
id: 1766737231108-true-1766737321402-target
source: '1766737231108'
sourceHandle: 'true'
target: '1766737321402'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: assigner
id: 1766737321402-source-17667375172980-target
source: '1766737321402'
sourceHandle: source
target: '17667375172980'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: llm
id: 17667375172980-source-1765785630566-target
source: '17667375172980'
sourceHandle: source
target: '1765785630566'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: if-else
id: 17666551325690-false-17667376015020-target
source: '17666551325690'
sourceHandle: 'false'
target: '17667376015020'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 17667376015020-false-17667264509960-target
source: '17667376015020'
sourceHandle: 'false'
target: '17667264509960'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 17667376015020-true-17667376904610-target
source: '17667376015020'
sourceHandle: 'true'
target: '17667376904610'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: assigner
id: 17667376904610-source-17667377094060-target
source: '17667376904610'
sourceHandle: source
target: '17667377094060'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: code
targetType: assigner
id: 1766739425288-source-1766739488182-target
source: '1766739425288'
sourceHandle: source
target: '1766739488182'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: if-else
id: 1765441606676-source-1765437585148-target
source: '1765441606676'
sourceHandle: source
target: '1765437585148'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: assigner
id: 17667406566450-source-17667406611650-target
source: '17667406566450'
sourceHandle: source
target: '17667406611650'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 1765517905842-false-1766739425288-target
source: '1765517905842'
sourceHandle: 'false'
target: '1766739425288'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: http-request
id: 1766739488182-source-17666588259460-target
source: '1766739488182'
sourceHandle: source
target: '17666588259460'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: code
id: 1765441716709-source-17667406566450-target
source: '1765441716709'
sourceHandle: source
target: '17667406566450'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: http-request
id: 17667406611650-source-17667264218480-target
source: '17667406611650'
sourceHandle: source
target: '17667264218480'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: assigner
id: 1766654954216-true-1766986002113-target
source: '1766654954216'
sourceHandle: 'true'
target: '1766986002113'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: if-else
targetType: template-transform
id: 1766739849720-true-1766986387628-target
source: '1766739849720'
sourceHandle: 'true'
target: '1766986387628'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: template-transform
targetType: assigner
id: 1766986387628-source-1766986503282-target
source: '1766986387628'
sourceHandle: source
target: '1766986503282'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: assigner
targetType: code
id: 1766986503282-source-1766737321402-target
source: '1766986503282'
sourceHandle: source
target: '1766737321402'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: assigner
id: 17666551325690-true-17669865896480-target
source: '17666551325690'
sourceHandle: 'true'
target: '17669865896480'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: template-transform
id: 17667403682010-true-17669866215620-target
source: '17667403682010'
sourceHandle: 'true'
target: '17669866215620'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: template-transform
targetType: assigner
id: 17669866215620-source-17669866341260-target
source: '17669866215620'
sourceHandle: source
target: '17669866341260'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: code
id: 17669866341260-source-17667376904610-target
source: '17669866341260'
sourceHandle: source
target: '17667376904610'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: llm
id: 17667377094060-source-1765785673343-target
source: '17667377094060'
sourceHandle: source
target: '1765785673343'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: knowledge-retrieval
targetType: llm
id: 17669940249670-source-17669940385140-target
source: '17669940249670'
sourceHandle: source
target: '17669940385140'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: assigner
targetType: code
id: 17669865896480-source-1766994739449-target
source: '17669865896480'
sourceHandle: source
target: '1766994739449'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: code
id: 1766986002113-source-17669960466150-target
source: '1766986002113'
sourceHandle: source
target: '17669960466150'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: knowledge-retrieval
targetType: llm
id: 17669960738730-source-17669960812650-target
source: '17669960738730'
sourceHandle: source
target: '17669960812650'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: assigner
id: 17669960812650-source-17669987893140-target
source: '17669960812650'
sourceHandle: source
target: '17669987893140'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: answer
id: 17669987893140-source-1766655012100-target
source: '17669987893140'
sourceHandle: source
target: '1766655012100'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: llm
targetType: assigner
id: 17669940385140-source-17669989513170-target
source: '17669940385140'
sourceHandle: source
target: '17669989513170'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: assigner
targetType: answer
id: 17669989513170-source-17666551440550-target
source: '17669989513170'
sourceHandle: source
target: '17666551440550'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: http-request
targetType: code
id: 17669960576130-source-1767577724877-target
source: '17669960576130'
sourceHandle: source
target: '1767577724877'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: knowledge-retrieval
id: 1767577724877-source-17669960738730-target
source: '1767577724877'
sourceHandle: source
target: '17669960738730'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: http-request
targetType: code
id: 17669939758770-source-17675939731110-target
source: '17669939758770'
sourceHandle: source
target: '17675939731110'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: knowledge-retrieval
id: 17675939731110-source-17669940249670-target
source: '17675939731110'
sourceHandle: source
target: '17669940249670'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 1762333864200-false-17676676167470-target
source: '1762333864200'
sourceHandle: 'false'
target: '17676676167470'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: knowledge-retrieval
id: 17676676167470-source-1764905829011-target
source: '17676676167470'
sourceHandle: source
target: '1764905829011'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 17657864016400-false-17676676927510-target
source: '17657864016400'
sourceHandle: 'false'
target: '17676676927510'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: knowledge-retrieval
id: 17676676927510-source-17657866222300-target
source: '17676676927510'
sourceHandle: source
target: '17657866222300'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 1766739849720-false-17677487224360-target
source: '1766739849720'
sourceHandle: 'false'
target: '17677487224360'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: code
id: 17667403682010-false-17677497085030-target
source: '17667403682010'
sourceHandle: 'false'
target: '17677497085030'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: http-request
targetType: if-else
id: 17666588259460-source-1766739849720-target
source: '17666588259460'
sourceHandle: source
target: '1766739849720'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: llm
id: 17667269647440-false-1766648935323-target
source: '17667269647440'
sourceHandle: 'false'
target: '1766648935323'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: http-request
targetType: if-else
id: 17667264218480-source-17667403682010-target
source: '17667264218480'
sourceHandle: source
target: '17667403682010'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: if-else
targetType: llm
id: 17667272700050-false-17667264375750-target
source: '17667272700050'
sourceHandle: 'false'
target: '17667264375750'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: if-else
id: 17677487224360-source-17667269647440-target
source: '17677487224360'
sourceHandle: source
target: '17667269647440'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: if-else
id: 17677497085030-source-17667272700050-target
source: '17677497085030'
sourceHandle: source
target: '17667272700050'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: http-request
id: 17669960466150-source-17669960576130-target
source: '17669960466150'
sourceHandle: source
target: '17669960576130'
targetHandle: target
type: custom
zIndex: 0
- data:
isInLoop: false
sourceType: code
targetType: http-request
id: 1766994739449-source-17669939758770-target
source: '1766994739449'
sourceHandle: source
target: '17669939758770'
targetHandle: target
type: custom
zIndex: 0
nodes:
- data:
selected: false
title: 同事咨询问题
type: start
variables: []
height: 52
id: '1762235823950'
position:
x: -4529.924643957575
y: 436.97867740596223
positionAbsolute:
x: -4529.924643957575
y: 436.97867740596223
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
authorization:
config: null
type: no-auth
body:
data:
- id: key-value-263
key: ''
type: text
value: "{\n \"model\": \"model\",\n \"messages\": [\n {\n \"\
role\": \"user\",\n \"content\": \"当前问题:{{#conversation.servyou_query#}}\\\
n 前置问题: {{#conversation.memory_query#}}\\n前置回复:{{#conversation.memory_ans#}}\"\
\n }\n ],\n \"stream\": true,\n \"encoding\": \"utf-8\"\n}"
type: json
headers: 'Content-Type:application/json; charset="utf-8"
Authorization:Bearer ragflow-ZiYmIzMjcwYjk0ZjExZjBhODgzMDI0Mm'
method: post
params: ''
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 100
selected: false
ssl_verify: true
timeout:
max_connect_timeout: 0
max_read_timeout: 0
max_write_timeout: 0
title: ragflow知识库
type: http-request
url: http://10.80.0.85:9380/api/v1/agents_openai/d4051f80dfdc11f0993d0242ac120006/chat/completions
variables: []
height: 170
id: '1762241246839'
position:
x: 8755.808392505616
y: -230.25468317548746
positionAbsolute:
x: 8755.808392505616
y: -230.25468317548746
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: 7f0f5251-7f1d-46f1-bff7-a4a4c215dbc5
value: 您的问题可能不在服务业务范围内
varType: string
variable_selector:
- '1762241246839'
- body
id: 'true'
logical_operator: or
selected: false
title: 知识库是否完全无命中
type: if-else
height: 124
id: '1762333864200'
position:
x: 9452.516247064188
y: -225.60940729165085
positionAbsolute:
x: 9452.516247064188
y: -225.60940729165085
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
dataset_ids:
- 1aM5JfrtmBYtghXflTeQDOTiM0MaufWVaEpunkstrQr2DWCad1pyfImMvY9EDXJh
- SouBCst5gmvLf9zgdmQZq3fT46jOWdR4r136JeI7ieO9n5FJVVzKCCd0aaLkQ6UK
multiple_retrieval_config:
reranking_enable: true
reranking_mode: reranking_model
reranking_model:
model: bge-rerank
provider: langgenius/openai_api_compatible/openai_api_compatible
top_k: 4
query_variable_selector:
- conversation
- servyou_query
retrieval_mode: multiple
selected: false
title: 知识库图片检索
type: knowledge-retrieval
height: 118
id: '1764905829011'
position:
x: 11501.117932237017
y: 258.0075828932353
positionAbsolute:
x: 11501.117932237017
y: 258.0075828932353
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: true
variable_selector:
- '1764905829011'
- result
memory:
query_prompt_template: '{{#sys.query#}}【{{#conversation.servyou_query#}}】
{{#sys.files#}}'
role_prefix:
assistant: ''
user: ''
window:
enabled: true
size: 10
model:
completion_params:
temperature: 0.7
mode: chat
name: Qwen3-30B-A3B-Instruct
provider: yangyaofei/vllm/vllm
prompt_template:
- id: 8fdbc119-5c08-4eb4-9364-40deb1bb4b1f
role: system
text: '# 角色与核心任务
- 你是一名专业的IT支持分析助理,专门处理企业内部同事的IT咨询。
- **核心使命**:为同事提供准确、清晰且可立即执行的解决方案。
# 处理流程与规则
## 第一步:问答判断
- 判断知识库内容能否回复同事咨询问题。
- 此判断是后续流程的决策基础。
## 第二步:分支处理与回复生成 (整合结束语)
###情况一:知识库内容能够回复同事咨询问题
- **同时**,判断图文信息与同事咨询问题是否相关。
- **提取相关图文信息中的链接**,如”![image](https://yw-dify.dc.servyou-it.com)“提取其中的”https://yw-dify.dc.servyou-it.com“,进行全局规则中的**链接标准化**。
- **生成回复**:基于知识库内容和相关的图文信息,生成最终回复。
###情况二:知识库内容不能够回复同事咨询问题
- **回复固定语句**:"抱歉,您的问题可能不在服务业务范围内,请尝试调整其他问法。"。
- **重要**:在上述固定语句后,必须同样附加结束语。
#全局输出格式要求(仅当知识库内容能够回复同事咨询问题时生效)
- **结构化格式**,回复必须具有清晰的视觉层次,严格使用以下格式:
-- 使用标题(如 ### 问题描述、### 解决方案)划分部分。
-- 使用编号列表(1. 2. 3...)表示有顺序的操作步骤。
-- 使用项目符号列表(-)表示并列的要点或说明。
-- 关键信息(如服务器地址、代码关键字)使用行内代码标记(如 `hostname`)突出。
#全局内容质量要求
- **简洁精准**:确保回答直接精准有效,避免冗长,切勿过度赘述和扩展回答。
- **专业友好**:保持专业、耐心且友好的支持态度,理解同事的急切心情。
- **清晰准确**:确保技术术语解释清楚,步骤无歧义,信息准确无误。
- **回复有效性**:确保**问题描述**的内容,在**解决方案**是准确的回复并给出了正确的执行方案。
#全局规则(所有分支适用)【要求】
- **版权合规**:如果知识库内容和同事咨询问题涉及破解、激活等风险内容,必须附加回复相关风险内容的免责声明。
- **链接标准化**:所有链接必须转换为markdown格式,不得出现原始链接,如”https://oa.servyou-it.com/,输出为[xxx](https://oa.servyou-it.com/)“,其中xxx根据上下文定义。
- **结束语**:必须在回复末尾附加固定提示:"您可选择回复"IT、人力、物业、报销、党工、安全"关键词,通过回复的链接进入人工支持。(人工服务时间:工作日9:00~18:00)"。
- **文字要求**:在**问题描述**和**解决方案**中,不能包含文字"知识库"和"员工”。
- **文字替换**:在**问题描述**和**解决方案**中,将"同事"文字改为称呼"您"。
- **回复字数**:回复字数不超过1000字。
- **完全忠于知识库内容回复**:在**问题描述**和**解决方案**中,不允许出现知识库外的拓展思考内容,包括dify的链接地址等'
- id: 034760a9-98ca-4e3a-a86d-269ca66a9e69
role: user
text: '同事咨询问题:{{#conversation.servyou_query#}}
知识库内容:{{#17676676167470.result#}}
图文信息:{{#context#}}'
selected: false
title: 本地大模型分析
type: llm
vision:
enabled: false
height: 88
id: '1764905844059'
position:
x: 12303.182583067013
y: 258.0075828932353
positionAbsolute:
x: 12303.182583067013
y: 258.0075828932353
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: '{{#1764905844059.text#}}'
selected: false
title: 整合回复
type: answer
variables: []
height: 103
id: '1765181482474'
position:
x: 13762.9588534678
y: 258.0075828932353
positionAbsolute:
x: 13762.9588534678
y: 258.0075828932353
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- conversation
- servyou_query
variable_selector:
- conversation
- memory_query
write_mode: over-write
- input_type: variable
operation: over-write
value:
- '1764905844059'
- text
variable_selector:
- conversation
- memory_ans
write_mode: over-write
selected: false
title: 全局变量-记忆前置问题和回复
type: assigner
version: '2'
height: 110
id: '1765357529351'
position:
x: 13067.71450474107
y: 258.0075828932353
positionAbsolute:
x: 13067.71450474107
y: 258.0075828932353
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
extract_by:
enabled: false
serial: '1'
filter_by:
conditions:
- comparison_operator: in
key: type
value:
- image
enabled: true
item_var_type: file
limit:
enabled: false
size: 10
order_by:
enabled: false
key: ''
value: asc
selected: false
title: 提取图片
type: list-operator
var_type: array[file]
variable:
- sys
- files
height: 92
id: '1765436887640'
position:
x: -1236.233421978262
y: 731.254359189726
positionAbsolute:
x: -1236.233421978262
y: 731.254359189726
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: true
variable_selector:
- '1765436887640'
- last_record
model:
completion_params:
temperature: 0.7
mode: chat
name: Qwen3-VL-8B-Instruct
provider: langgenius/openai_api_compatible/openai_api_compatible
prompt_template:
- id: 9f9ca01e-921c-46af-9fde-99961443a7f4
role: system
text: 分析图片的内容,不超过50字。
- id: 01bdc141-56e6-4757-a1f5-57f78f504369
role: user
text: 图片:{{#context#}}
selected: false
title: 图片分析大模型
type: llm
vision:
configs:
detail: high
variable_selector:
- '1765436887640'
- last_record
enabled: true
height: 88
id: '1765437083981'
position:
x: -729.4536141008323
y: 888.1844744887503
positionAbsolute:
x: -729.4536141008323
y: 888.1844744887503
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: empty
id: e86d98d8-010f-4cf2-a1c6-b8e151b7cf26
value: ''
varType: array[file]
variable_selector:
- sys
- files
id: 'true'
logical_operator: and
selected: false
title: 图文判断
type: if-else
height: 124
id: '1765437585148'
position:
x: -1926.280179417684
y: 425.8515926460108
positionAbsolute:
x: -1926.280179417684
y: 425.8515926460108
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
selected: false
template: '{{ image }},{{ text }}'
title: 图文内容整合
type: template-transform
variables:
- value_selector:
- '1765437083981'
- text
value_type: string
variable: image
- value_selector:
- conversation
- servyou_query
value_type: string
variable: text
height: 52
id: '1765439054336'
position:
x: -184.91587430741686
y: 1042.342443267299
positionAbsolute:
x: -184.91587430741686
y: 1042.342443267299
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '1765782485068'
- result
variable_selector:
- conversation
- servyou_query
write_mode: over-write
selected: false
title: 全局赋值-同事咨询问题
type: assigner
version: '2'
height: 84
id: '1765441606676'
position:
x: -2963.8329056615107
y: 436.97867740596223
positionAbsolute:
x: -2963.8329056615107
y: 436.97867740596223
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '1765439054336'
- output
variable_selector:
- conversation
- servyou_query
write_mode: over-write
selected: false
title: 全局变量-同事咨询问题
type: assigner
version: '2'
height: 84
id: '1765441716709'
position:
x: 293.29585950407113
y: 1160.9098249676185
positionAbsolute:
x: 293.29585950407113
y: 1160.9098249676185
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: is
id: 33ee6a32-a0c0-4bbf-9a96-bb7160234499
value: 您好
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: 459317d5-9334-4557-83cc-bcd5acec58bf
value: 你好
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: 73df0b1d-a2ad-45f8-8b63-003d70b0d108
value: hi
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: 20e600d7-6737-4fd2-8658-26e43b68bc32
value: 哈喽
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: b7903e47-d4fb-44e1-b6a1-242903487ff6
value: Hi
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: af62fff6-c3de-4c8d-821a-38c7f1f44608
value: HI
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: ea51a7b1-7f5a-435f-a56c-2348802996a1
value: hl
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: 92c3338e-915f-424f-87fb-84eb995e0f40
value: 早上好
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: f47b5f19-0c46-46f0-8098-ee05a2078547
value: 中午好
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: 6362a678-559e-4cf7-a48d-d997b56629c3
value: 晚上好
varType: string
variable_selector:
- conversation
- servyou_query
id: 'true'
logical_operator: or
- case_id: d7e857f8-75b0-44b6-a342-fcbf0fd1bce0
conditions:
- comparison_operator: is
id: 83764bd9-5d95-4aa7-966c-38a0eb37f463
value: 人工
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: 1135a97c-f44c-4b05-9048-e0efed72d761
value: 人工服务
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: b80be458-4af2-4d20-8b7c-1d661e75fa7f
value: 转人工
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: debde512-7ae9-4abe-9778-a0073d2e42d8
value: 人工支持
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: 9d308df4-3147-4c89-9073-d3199b69d99a
value: 能否人工
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: 553a78ee-cb2c-46b9-9475-c6bca650a51c
value: 人工客服
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: e244f35d-9568-46e2-a9e0-605022e9996d
value: IT人工
varType: string
variable_selector:
- conversation
- servyou_query
id: d7e857f8-75b0-44b6-a342-fcbf0fd1bce0
logical_operator: or
- case_id: 5b113ab9-2154-45bb-9fbc-e2fa2246b8c1
conditions:
- comparison_operator: is
id: ca85a04b-ea31-40de-87ea-024ea69c780a
value: IT
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: f721a7cf-e0cc-48a2-9314-b73967c900fb
value: it
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: 9547b80f-0444-46c0-acb1-a1e37309ac84
value: iT
varType: string
variable_selector:
- conversation
- servyou_query
- comparison_operator: is
id: ad1029fa-3fb9-4d48-a8a5-e5a4c24224fd
value: It
varType: string
variable_selector:
- conversation
- servyou_query
id: 5b113ab9-2154-45bb-9fbc-e2fa2246b8c1
logical_operator: or
- case_id: 66e1df2e-d7b7-4e2f-9ddb-ebac301f35f4
conditions:
- comparison_operator: is
id: d109fdb4-fb99-47fa-8c4d-0eaac37846a4
value: 人力
varType: string
variable_selector:
- conversation
- servyou_query
id: 66e1df2e-d7b7-4e2f-9ddb-ebac301f35f4
logical_operator: and
- case_id: 1ec2ad7a-456a-4181-ba0f-9a3362d7a44c
conditions:
- comparison_operator: is
id: 2fd0693a-fb0e-46a2-902e-9fd7b26c412c
value: 物业
varType: string
variable_selector:
- conversation
- servyou_query
id: 1ec2ad7a-456a-4181-ba0f-9a3362d7a44c
logical_operator: and
- case_id: 909d209a-20c2-464b-9117-335166bd0209
conditions:
- comparison_operator: is
id: d75ac251-6e79-4b8d-bc6a-510f0c38cfb4
value: 报销
varType: string
variable_selector:
- conversation
- servyou_query
id: 909d209a-20c2-464b-9117-335166bd0209
logical_operator: and
- case_id: f8839db4-0b63-4411-b052-f82aa3807e34
conditions:
- comparison_operator: is
id: 213ed616-05ae-483a-8c37-512eb39a138a
value: 党工
varType: string
variable_selector:
- conversation
- servyou_query
id: f8839db4-0b63-4411-b052-f82aa3807e34
logical_operator: and
- case_id: 98d72ef6-f53a-482a-9cc6-36140595d055
conditions:
- comparison_operator: is
id: eead373e-a9f0-459e-b2bf-6ea814f65e4c
value: 安全
varType: string
variable_selector:
- conversation
- servyou_query
id: 98d72ef6-f53a-482a-9cc6-36140595d055
logical_operator: and
selected: true
title: 自定义规则库
type: if-else
height: 928
id: '1765517905842'
position:
x: 520.5281865827573
y: -2456.2000110016365
positionAbsolute:
x: 520.5281865827573
y: -2456.2000110016365
selected: true
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: Hi!我是“智能IT助手”,很高兴为您服务,请使用文字简单描述您的问题。
selected: false
title: 问候固定回复
type: answer
variables: []
height: 116
id: '1765518093072'
position:
x: 2554.5815342573715
y: -3113.922099235114
positionAbsolute:
x: 2554.5815342573715
y: -3113.922099235114
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 请使用文字简单描述您的问题,或者回复“IT”、“人力”、“物业”、“报销”、“党工”、“安全”等获得人工咨询服务入口。
selected: false
title: 输入“人工”二字相关固定回复
type: answer
variables: []
height: 148
id: '1765524938055'
position:
x: 2854.0743305228325
y: -2967.3309878875216
positionAbsolute:
x: 2854.0743305228325
y: -2967.3309878875216
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 请点击“[联系IT人工坐席](https://work.weixin.qq.com/nl/innerkfid/ikfCtcYBwAASJO8iTSSGONGsDfFMoUypg)”链接进入人工服务窗口,简单描述您的问题,并提供报错信息或截图,同事将尽快回复您的问题,(人工坐席服务时间:工作日 9:00~18:00)。【注:请确保企微在最新版本,否则无法点击链接。】
selected: false
title: IT坐席人工链接回复
type: answer
variables: []
height: 228
id: '1765524956759'
position:
x: 3113.2329739514166
y: -2800.425441650135
positionAbsolute:
x: 3113.2329739514166
y: -2800.425441650135
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 请点击“[人力资源共享服务咨询](https://work.weixin.qq.com/nl/innerkfid/ikfCtcYBwAAvSRL5i5b_Xia8vCmFc2gRw)”链接进入人工服务窗口,简单描述您的问题,同事将尽快回复您的问题。【注:请确保企微在最新版本,否则无法点击链接。】
selected: false
title: 人力坐席人工链接回复
type: answer
variables: []
height: 196
id: '1765766043047'
position:
x: 3374.9606775942593
y: -2570.152723035539
positionAbsolute:
x: 3374.9606775942593
y: -2570.152723035539
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 请点击“[物业服务咨询](https://work.weixin.qq.com/nl/innerkfid/ikfCtcYBwAAUtkMyOToCZqe42ZBDupVEQ)”链接进入人工服务窗口,简单描述您的问题,同事将尽快回复您的问题。【注:请确保企微在最新版本,否则无法点击链接。】
selected: false
title: 物业坐席人工链接回复
type: answer
variables: []
height: 196
id: '1765766067015'
position:
x: 3616.741884343417
y: -2365.8413323601862
positionAbsolute:
x: 3616.741884343417
y: -2365.8413323601862
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 请点击“[报销服务咨询](https://work.weixin.qq.com/nl/innerkfid/ikfCtcYBwAAG4HC1zWJtPuALPKl2X6jcw)”链接进入人工服务窗口,简单描述您的问题,同事将尽快回复您的问题。【注:请确保企微在最新版本,否则无法点击链接。】
selected: false
title: 报销坐席人工链接回复
type: answer
variables: []
height: 196
id: '1765766081739'
position:
x: 3909.9734093883203
y: -2174.2176645758727
positionAbsolute:
x: 3909.9734093883203
y: -2174.2176645758727
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 请点击“[党工服务咨询](https://work.weixin.qq.com/nl/innerkfid/ikfCtcYBwAANk3yPOPAmkD6nLRHjbv-Zg)”链接进入人工服务窗口,简单描述您的问题,同事将尽快回复您的问题。【注:请确保企微在最新版本,否则无法点击链接。】
selected: false
title: 党工坐席人工链接回复
type: answer
variables: []
height: 196
id: '1765766096673'
position:
x: 4161.9490515054285
y: -1965.5190282543938
positionAbsolute:
x: 4161.9490515054285
y: -1965.5190282543938
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 请点击“[安全服务咨询](https://work.weixin.qq.com/nl/innerkfid/ikfCtcYBwAAtkP_ODMcv53bGE5x5M9YYw)”链接进入人工服务窗口,简单描述您的问题,同事将尽快回复您的问题。【注:请确保企微在最新版本,否则无法点击链接。】
selected: false
title: 安全坐席人工链接回复
type: answer
variables: []
height: 196
id: '1765766112941'
position:
x: 4421.398579391068
y: -1741.1828280237867
positionAbsolute:
x: 4421.398579391068
y: -1741.1828280237867
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "def main(query: str):\n extracted_content = \"\"\n query = query.replace(\"\
\\n\",\"\")\n query = query.replace(\"\\\"\",\"\")\n query = query.strip()\n\
\ if \"Here is my question\" in query:\n before, separator, after\
\ = query.partition(\"Here is my question:\")\n if separator:\n \
\ if after:\n extracted_content = after.strip()\n\
\ else:\n after = \"什么问题?\"\n extracted_content\
\ = after.strip()\n else:\n extracted_content = query.strip()\n\
\ return {\n \"result\": extracted_content\n }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 代码执行
type: code
variables:
- value_selector:
- sys
- query
value_type: string
variable: query
height: 52
id: '1765782485068'
position:
x: -3867.754148404409
y: 436.97867740596223
positionAbsolute:
x: -3867.754148404409
y: 436.97867740596223
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: true
variable_selector:
- conversation
- servyou_query
model:
completion_params:
temperature: 0.7
mode: chat
name: Qwen3-30B-A3B-Instruct
provider: yangyaofei/vllm/vllm
prompt_template:
- id: df73d0b1-fb70-4b31-b446-94bfc168d44c
role: system
text: '##角色
- 你是一个严谨的文档相关性分析专家,擅长识别文本之间的实质意图关联。
##任务
- 对比分析以下两段内容:
-- 当前查询内容
-- 历史查询内容
- 判断两者是否围绕同一个具体问题或需求展开,且意图一致、信息可直接对应。
#规则
- 仔细理解每一段内容的核心意图和关键信息点。
- 按以下条件判断是否为“相关”:
-- 主题一致,且针对的是同一具体问题;
-- 意图重合;
-- 信息可直接呼应或衔接,而非仅仅话题类似。
- 若内容虽有话题重叠,但意图不同、问题指向不同,或信息无法直接对应,则判断为“不相关”。
- 若历史查询内容为空,则判断为“不相关”。
#输出时仅允许返回以下两种结果之一,不要添加任何解释或标点:
- 相关
- 不相关'
- id: f694ec6c-01b7-423a-95ec-c91a21fabe3f
role: user
text: '当前查询内容:{{#context#}}
历史查询内容:{{#conversation.memory_query#}}'
selected: false
title: 相关性判断1
type: llm
vision:
enabled: false
height: 88
id: '1765785630566'
position:
x: 7704.55937556773
y: -266.3929337287146
positionAbsolute:
x: 7704.55937556773
y: -266.3929337287146
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: true
variable_selector:
- conversation
- servyou_query
model:
completion_params:
temperature: 0.7
mode: chat
name: Qwen3-30B-A3B-Instruct
provider: yangyaofei/vllm/vllm
prompt_template:
- id: 87969cdd-a098-488b-ba64-29238794b75d
role: system
text: '##角色
- 你是一个严谨的文档相关性分析专家,擅长识别文本之间的实质意图关联。
##任务
- 对比分析以下两段内容:
-- 当前查询内容
-- 历史查询内容
- 判断两者是否围绕同一个具体问题或需求展开,且意图一致、信息可直接对应。
#规则
- 仔细理解每一段内容的核心意图和关键信息点。
- 按以下条件判断是否为“相关”:
-- 主题一致,且针对的是同一具体问题;
-- 意图重合;
-- 信息可直接呼应或衔接,而非仅仅话题类似。
- 若内容虽有话题重叠,但意图不同、问题指向不同,或信息无法直接对应,则判断为“不相关”。
- 若历史查询内容为空,则判断为“不相关”。
#输出时仅允许返回以下两种结果之一,不要添加任何解释或标点:
- 相关
- 不相关'
- id: 82dc391b-0a47-4a1d-85b7-765f54602748
role: user
text: '当前查询内容:{{#context#}}
历史查询内容:{{#conversation.memory_query#}}'
selected: false
title: 相关性判断2
type: llm
vision:
enabled: false
height: 88
id: '1765785673343'
position:
x: 7712.724115335564
y: 1135.8772265369253
positionAbsolute:
x: 7712.724115335564
y: 1135.8772265369253
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
authorization:
config: null
type: no-auth
body:
data:
- id: key-value-263
key: ''
type: text
value: "{\n \"model\": \"model\",\n \"messages\": [\n {\n \"\
role\": \"user\",\n \"content\": \"{{#conversation.servyou_query#}}\"\
\n }\n ],\n \"stream\": true,\n \"encoding\": \"utf-8\"\n}"
type: json
headers: 'Content-Type:application/json; charset="utf-8"
Authorization:Bearer ragflow-ZiYmIzMjcwYjk0ZjExZjBhODgzMDI0Mm'
method: post
params: ''
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 100
selected: false
ssl_verify: true
timeout:
max_connect_timeout: 0
max_read_timeout: 0
max_write_timeout: 0
title: ragflow知识库 (1)
type: http-request
url: http://10.80.0.85:9380/api/v1/agents_openai/d4051f80dfdc11f0993d0242ac120006/chat/completions
variables: []
height: 170
id: '17657860354750'
position:
x: 9160.279141300143
y: 1215.7394875693199
positionAbsolute:
x: 9160.279141300143
y: 1215.7394875693199
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: is
id: f483964e-e4ed-4c6e-8ae1-9d2ae1b42e94
value: 相关
varType: string
variable_selector:
- '1765785630566'
- text
id: 'true'
logical_operator: or
selected: false
title: 是否相关1
type: if-else
height: 124
id: '1765786049975'
position:
x: 8195.329669667188
y: -266.3929337287146
positionAbsolute:
x: 8195.329669667188
y: -266.3929337287146
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: is
id: f6fd9947-db67-4463-8e25-858e223cc137
value: 相关
varType: string
variable_selector:
- '1765785673343'
- text
id: 'true'
logical_operator: and
selected: false
title: 是否相关2
type: if-else
height: 124
id: '1765786290221'
position:
x: 8195.329669667188
y: 1135.8772265369253
positionAbsolute:
x: 8195.329669667188
y: 1135.8772265369253
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: 7f0f5251-7f1d-46f1-bff7-a4a4c215dbc5
value: 您的问题可能不在服务业务范围内
varType: string
variable_selector:
- '17657860354750'
- body
id: 'true'
logical_operator: or
selected: false
title: 知识库是否完全无命中 (1)
type: if-else
height: 124
id: '17657864016400'
position:
x: 10219.434585373543
y: 1199.837653129122
positionAbsolute:
x: 10219.434585373543
y: 1199.837653129122
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
dataset_ids:
- 1aM5JfrtmBYtghXflTeQDOTiM0MaufWVaEpunkstrQr2DWCad1pyfImMvY9EDXJh
- SouBCst5gmvLf9zgdmQZq3fT46jOWdR4r136JeI7ieO9n5FJVVzKCCd0aaLkQ6UK
multiple_retrieval_config:
reranking_enable: true
reranking_mode: reranking_model
reranking_model:
model: bge-rerank
provider: langgenius/openai_api_compatible/openai_api_compatible
top_k: 4
query_variable_selector:
- conversation
- servyou_query
retrieval_mode: multiple
selected: false
title: 知识库图片检索 (1)
type: knowledge-retrieval
height: 118
id: '17657866222300'
position:
x: 11335.415558234963
y: 2023.661199565415
positionAbsolute:
x: 11335.415558234963
y: 2023.661199565415
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: true
variable_selector:
- '17657866222300'
- result
memory:
query_prompt_template: '{{#sys.query#}}【{{#conversation.servyou_query#}}】
{{#sys.files#}}'
role_prefix:
assistant: ''
user: ''
window:
enabled: true
size: 10
model:
completion_params:
temperature: 0.7
mode: chat
name: Qwen3-30B-A3B-Instruct
provider: yangyaofei/vllm/vllm
prompt_template:
- id: 8fdbc119-5c08-4eb4-9364-40deb1bb4b1f
role: system
text: '# 角色与核心任务
- 你是一名专业的IT支持分析助理,专门处理企业内部同事的IT咨询。
- **核心使命**:为同事提供准确、清晰且可立即执行的解决方案。
# 处理流程与规则
## 第一步:问答判断
- 判断知识库内容能否回复同事咨询问题。
- 此判断是后续流程的决策基础。
## 第二步:分支处理与回复生成 (整合结束语)
###情况一:知识库内容能够回复同事咨询问题
- **同时**,判断图文信息与同事咨询问题是否相关。
- **提取相关图文信息中的链接**,如”![image](https://yw-dify.dc.servyou-it.com)“提取其中的”https://yw-dify.dc.servyou-it.com“,进行全局规则中的**链接标准化**。
- **生成回复**:基于知识库内容和相关的图文信息,生成最终回复。
###情况二:知识库内容不能够回复同事咨询问题
- **回复固定语句**:"抱歉,您的问题可能不在服务业务范围内,请尝试调整其他问法。"。
- **重要**:在上述固定语句后,必须同样附加结束语。
#全局输出格式要求(仅当知识库内容能够回复同事咨询问题时生效)
- **结构化格式**,回复必须具有清晰的视觉层次,严格使用以下格式:
-- 使用标题(如 ### 问题描述、### 解决方案)划分部分。
-- 使用编号列表(1. 2. 3...)表示有顺序的操作步骤。
-- 使用项目符号列表(-)表示并列的要点或说明。
-- 关键信息(如服务器地址、代码关键字)使用行内代码标记(如 `hostname`)突出。
#全局内容质量要求
- **简洁精准**:确保回答直接精准有效,避免冗长,切勿过度赘述和扩展回答。
- **专业友好**:保持专业、耐心且友好的支持态度,理解同事的急切心情。
- **清晰准确**:确保技术术语解释清楚,步骤无歧义,信息准确无误。
- **回复有效性**:确保**问题描述**的内容,在**解决方案**是准确的回复并给出了正确的执行方案。
#全局规则(所有分支适用)【要求】
- **版权合规**:如果知识库内容和同事咨询问题涉及破解、激活等风险内容,必须附加回复相关风险内容的免责声明。
- **链接标准化**:所有链接必须转换为markdown格式,不得出现原始链接,如”https://oa.servyou-it.com/,输出为[xxx](https://oa.servyou-it.com/)“,其中xxx根据上下文定义。
- **结束语**:必须在回复末尾附加固定提示:"您可选择回复"IT、人力、物业、报销、党工、安全"关键词,通过回复的链接进入人工支持。(人工服务时间:工作日9:00~18:00)"。
- **文字要求**:在**问题描述**和**解决方案**中,不能包含文字"知识库"和"员工”。
- **文字替换**:在**问题描述**和**解决方案**中,将"同事"文字改为称呼"您"。
- **回复字数**:回复字数不超过1000字。
- **完全忠于知识库内容回复**:在**问题描述**和**解决方案**中,不允许出现知识库外的拓展思考内容,包括dify的链接地址等'
- id: 034760a9-98ca-4e3a-a86d-269ca66a9e69
role: user
text: '同事咨询问题:{{#conversation.servyou_query#}}
知识库内容:{{#17676676927510.result#}}
图文信息:{{#context#}}'
selected: false
title: 本地大模型分析 (1)
type: llm
vision:
enabled: false
height: 88
id: '17657866286790'
position:
x: 12174.350946071341
y: 2023.661199565415
positionAbsolute:
x: 12174.350946071341
y: 2023.661199565415
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- conversation
- servyou_query
variable_selector:
- conversation
- memory_query
write_mode: over-write
- input_type: variable
operation: over-write
value:
- '17657866286790'
- text
variable_selector:
- conversation
- memory_ans
write_mode: over-write
selected: false
title: 全局变量-记忆前置问题和回复 (1)
type: assigner
version: '2'
height: 110
id: '17657866367000'
position:
x: 13058.347048392365
y: 2023.661199565415
positionAbsolute:
x: 13058.347048392365
y: 2023.661199565415
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: '{{#17657866286790.text#}}'
selected: false
title: 整合回复 (1)
type: answer
variables: []
height: 103
id: '17657866567850'
position:
x: 13825.43617678274
y: 2023.661199565415
positionAbsolute:
x: 13825.43617678274
y: 2023.661199565415
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: true
variable_selector:
- '17677487224360'
- result
model:
completion_params:
temperature: 0.7
mode: chat
name: Qwen3-30B-A3B-Instruct
provider: yangyaofei/vllm/vllm
prompt_template:
- id: 4fc3c788-e1c4-4ec5-aae0-ac791f1b4f5f
role: system
text: "# 角色与任务\n你是一名专业的IT支持意图识别助手,负责理解同事咨询问题,并判断其是否完整。你的核心任务是:\n1. **评估问题是否已清晰表达了具体的IT支持意图并包含必要上下文**。完整的信息通常包括:\n\
\ * **具体的请求或问题点** (例如:无法打印、申请账号、咨询某手册、软件安装)\n * **涉及的对象或背景**\
\ (例如:网络打印机、新员工入职、财务软件Adobe Premiere)\n2. **智能响应**\n * 若问题**同时包含\"\
具体的请求或问题点”和\"涉及的对象或背景”**,则视为已具备关键信息,使用**格式二**直接优化输出。\n * 若问题**极度模糊,缺乏具体的请求或问题点或涉及的对象或背景**(例如:“打印机有问题”、“报错了”),则使用**格式一**引导补充。\n\
\n# 判断标准与示例\n* **引导补充(格式一)的示例**:\n * “打印机有问题。”(过于模糊,仅有设备类别)\n \
\ * “手册。”(过于模糊,仅有需求类别)\n* **优化输出(格式二)的示例**:\n * “如何为新同事申请VPN账号?”(**包含**:具体请求“申请VPN账号”\
\ + 背景“为新同事”)\n * “咨询新员工入职IT指引手册。”(**包含**:具体意图“咨询” + 明确对象“新员工入职IT指引手册”)\n\
\n# 输出格式规则\n## 格式一:需补充信息时(仅当问题确实缺乏核心信息时使用),格式是:\n\"如果上述答案不是您想要的结果,请换一种问法或者补充相关信息。如:\n\
1.补充信息的提示1\n2.补充信息的提示2\n例如,您可以这样提问:<提供一个完整问题的示例>\"\n\n## 格式二:直接优化并输出(默认优先选择),要求:\n\
**触发条件**:问题已包含足够的核心信息要素。\n**你的任务**:基于原问题,结合IT支持场景,输出一个**更清晰、更结构化的问题描述**,直接作为优化结果。优化时应聚焦于澄清意图,无需生成解决方案。\n\
\n**优化原则**:\n1. **精简**:去除口语化词汇,保留核心名词和动词。\n2. **结构化**:将问题背景、对象、现象有机组织成一句或几句连贯的话。\n\
3. **完整**:不丢失原问题中的任何关键信息。\n\n# 开始任务\n- 请严格根据以上规则处理同事咨询问题。你的回复只能是最终的引导语(格式一)或优化后的问题描述(格式二),无需任何思考过程或额外解释。\n\
- 仅从**引导语**中提取信息进行补充优化,绝对禁止任何主观拓展与额外思考。\n- ”<提供一个完整问题的示例>\"所给出的内容必须严格从**引导语**中最相关的内容中提取,且必须意图和同事咨询问题意图相同,若都不相关,则直接输出同事咨询问题原内容作为示例输出。"
- id: 74c386d0-c729-4b7f-b31b-f98302226335
role: user
text: '同事咨询问题:{{#conversation.servyou_query#}}
'
- id: 5ff721b3-6c4f-49cd-9f43-54455bde9ef0
role: user
text: 引导语:{{#context#}}
selected: false
title: 同事问题优化1
type: llm
vision:
enabled: false
height: 88
id: '1766648935323'
position:
x: 3561.8140222602924
y: 130.11067076120256
positionAbsolute:
x: 3561.8140222602924
y: 130.11067076120256
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: fa63036d-f561-48de-ad78-283131aef7d7
value: 如果上述答案不是您想要的结果
varType: string
variable_selector:
- '1766648935323'
- text
id: 'true'
logical_operator: and
selected: false
title: 引导or优化1
type: if-else
height: 124
id: '1766654954216'
position:
x: 3909.9734093883203
y: 338.4707924041919
positionAbsolute:
x: 3909.9734093883203
y: 338.4707924041919
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: '您想要问的是不是:"{{#17669960466150.result#}}",以下是该问题的相关回复:
{{#17669960812650.text#}}
--------------------------------------------------------------------------------
{{#17669960466150.clue_word#}}
--------------------------------------------------------------------------------
您可选择回复"IT、人力、物业、报销、党工、安全"关键词,通过回复的链接进入人工支持。(人工服务时间:工作日9:00~18:00)'
selected: false
title: 引导回复1
type: answer
variables: []
height: 301
id: '1766655012100'
position:
x: 6482.071720136611
y: -593.1240379777566
positionAbsolute:
x: 6482.071720136611
y: -593.1240379777566
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '1766726065787'
- result
variable_selector:
- conversation
- servyou_query
write_mode: over-write
selected: false
title: 优化后问题重新输入1
type: assigner
version: '2'
height: 84
id: '1766655043205'
position:
x: 7288.857117544632
y: 507.257523676975
positionAbsolute:
x: 7288.857117544632
y: 507.257523676975
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: fa63036d-f561-48de-ad78-283131aef7d7
value: 如果上述答案不是您想要的结果
varType: string
variable_selector:
- '17667264375750'
- text
id: 'true'
logical_operator: and
selected: false
title: 引导or优化2
type: if-else
height: 124
id: '17666551325690'
position:
x: 3920.1886110664195
y: 1886.2588083260023
positionAbsolute:
x: 3920.1886110664195
y: 1886.2588083260023
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: '您想要问的是不是:"{{#1766994739449.result#}}",以下是该问题的相关回复:
{{#17669940385140.text#}}
--------------------------------------------------------------------------------
{{#1766994739449.clue_word#}}
--------------------------------------------------------------------------------
您可选择回复"IT、人力、物业、报销、党工、安全"关键词,通过回复的链接进入人工支持。(人工服务时间:工作日9:00~18:00)'
selected: false
title: 引导回复2
type: answer
variables: []
height: 301
id: '17666551440550'
position:
x: 6515.847981247866
y: 933.4680278742334
positionAbsolute:
x: 6515.847981247866
y: 933.4680278742334
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '17667264509960'
- result
variable_selector:
- conversation
- servyou_query
write_mode: over-write
selected: false
title: 优化后问题重新输入2
type: assigner
version: '2'
height: 84
id: '17666551541000'
position:
x: 7342.04462057978
y: 2066.1618018612235
positionAbsolute:
x: 7342.04462057978
y: 2066.1618018612235
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
authorization:
config: null
type: no-auth
body:
data:
- id: key-value-263
key: ''
type: text
value: "{\n \"model\": \"model\",\n \"messages\": [\n {\n \"\
role\": \"user\",\n \"content\": \"{{#conversation.servyou_query#}}\"\
\n }\n ],\n \"stream\": true,\n \"encoding\": \"utf-8\"\n}"
type: json
headers: 'Content-Type:application/json; charset="utf-8"
Authorization:Bearer ragflow-ZiYmIzMjcwYjk0ZjExZjBhODgzMDI0Mm'
method: post
params: ''
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 100
selected: false
ssl_verify: true
timeout:
max_connect_timeout: 0
max_read_timeout: 0
max_write_timeout: 0
title: 引导词来源1
type: http-request
url: http://10.80.0.85:9380/api/v1/agents_openai/d4051f80dfdc11f0993d0242ac120006/chat/completions
variables: []
height: 170
id: '17666588259460'
position:
x: 1807.3310303332867
y: -1098.2770469233678
positionAbsolute:
x: 1807.3310303332867
y: -1098.2770469233678
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "def main(arg1: str):\n arg1 = arg1[9:]\n return {\n \"\
result\": arg1 ,\n }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 输出格式进一步处理1
type: code
variables:
- value_selector:
- '1766648935323'
- text
value_type: string
variable: arg1
height: 52
id: '1766726065787'
position:
x: 6833.465302518225
y: 507.257523676975
positionAbsolute:
x: 6833.465302518225
y: 507.257523676975
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
authorization:
config: null
type: no-auth
body:
data:
- id: key-value-263
key: ''
type: text
value: "{\n \"model\": \"model\",\n \"messages\": [\n {\n \"\
role\": \"user\",\n \"content\": \"{{#conversation.servyou_query#}}\"\
\n }\n ],\n \"stream\": true,\n \"encoding\": \"utf-8\"\n}"
type: json
headers: 'Content-Type:application/json; charset="utf-8"
Authorization:Bearer ragflow-ZiYmIzMjcwYjk0ZjExZjBhODgzMDI0Mm'
method: post
params: ''
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 100
selected: false
ssl_verify: true
timeout:
max_connect_timeout: 0
max_read_timeout: 0
max_write_timeout: 0
title: 引导词来源2
type: http-request
url: http://10.80.0.85:9380/api/v1/agents_openai/d4051f80dfdc11f0993d0242ac120006/chat/completions
variables: []
height: 170
id: '17667264218480'
position:
x: 1536.60025559854
y: 1330.5805764260908
positionAbsolute:
x: 1536.60025559854
y: 1330.5805764260908
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: true
variable_selector:
- '17677497085030'
- result
model:
completion_params:
temperature: 0.7
mode: chat
name: Qwen3-30B-A3B-Instruct
provider: yangyaofei/vllm/vllm
prompt_template:
- id: 4fc3c788-e1c4-4ec5-aae0-ac791f1b4f5f
role: system
text: "# 角色与任务\n你是一名专业的IT支持意图识别助手,负责理解同事咨询问题,并判断其是否完整。你的核心任务是:\n1. **评估问题是否已清晰表达了具体的IT支持意图并包含必要上下文**。完整的信息通常包括:\n\
\ * **具体的请求或问题点** (例如:无法打印、申请账号、咨询某手册、软件安装)\n * **涉及的对象或背景**\
\ (例如:网络打印机、新员工入职、财务软件Adobe Premiere)\n2. **智能响应**\n * 若问题**同时包含\"\
具体的请求或问题点”和\"涉及的对象或背景”**,则视为已具备关键信息,使用**格式二**直接优化输出。\n * 若问题**极度模糊,缺乏具体的请求或问题点或涉及的对象或背景**(例如:“打印机有问题”、“报错了”),则使用**格式一**引导补充。\n\
\n# 判断标准与示例\n* **引导补充(格式一)的示例**:\n * “打印机有问题。”(过于模糊,仅有设备类别)\n \
\ * “手册。”(过于模糊,仅有需求类别)\n* **优化输出(格式二)的示例**:\n * “如何为新同事申请VPN账号?”(**包含**:具体请求“申请VPN账号”\
\ + 背景“为新同事”)\n * “咨询新员工入职IT指引手册。”(**包含**:具体意图“咨询” + 明确对象“新员工入职IT指引手册”)\n\
\n# 输出格式规则\n## 格式一:需补充信息时(仅当问题确实缺乏核心信息时使用),格式是:\n\"如果上述答案不是您想要的结果,请换一种问法或者补充相关信息。如:\n\
1.补充信息的提示1\n2.补充信息的提示2\n例如,您可以这样提问:<提供一个完整问题的示例>\"\n\n## 格式二:直接优化并输出(默认优先选择),要求:\n\
**触发条件**:问题已包含足够的核心信息要素。\n**你的任务**:基于原问题,结合IT支持场景,输出一个**更清晰、更结构化的问题描述**,直接作为优化结果。优化时应聚焦于澄清意图,无需生成解决方案。\n\
\n**优化原则**:\n1. **精简**:去除口语化词汇,保留核心名词和动词。\n2. **结构化**:将问题背景、对象、现象有机组织成一句或几句连贯的话。\n\
3. **完整**:不丢失原问题中的任何关键信息。\n\n# 开始任务\n- 请严格根据以上规则处理同事咨询问题。你的回复只能是最终的引导语(格式一)或优化后的问题描述(格式二),无需任何思考过程或额外解释。\n\
- 仅从**引导语**中提取信息进行补充优化,绝对禁止任何主观拓展与额外思考。\n- ”<提供一个完整问题的示例>\"所给出的内容必须严格从**引导语**中最相关的内容中提取,且必须意图和同事咨询问题意图相同,若都不相关,则直接输出同事咨询问题原内容作为示例输出。"
- id: ab5c0515-7a2f-4a71-aeb9-ebb8bf787158
role: user
text: '同事咨询问题:{{#conversation.servyou_query#}}
'
- id: 2c2149b3-9198-495b-8d79-74f8d17b6167
role: user
text: 引导语:{{#context#}}
selected: false
title: 同事问题优化2
type: llm
vision:
enabled: false
height: 88
id: '17667264375750'
position:
x: 3632.4899312396797
y: 1752.2151424451133
positionAbsolute:
x: 3632.4899312396797
y: 1752.2151424451133
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "def main(arg1: str):\n arg1 = arg1[9:]\n return {\n \"\
result\": arg1 ,\n }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 输出格式进一步处理 2
type: code
variables:
- value_selector:
- '17667264375750'
- text
value_type: string
variable: arg1
height: 52
id: '17667264509960'
position:
x: 7012.552826051923
y: 2066.1618018612235
positionAbsolute:
x: 7012.552826051923
y: 2066.1618018612235
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: 7f0f5251-7f1d-46f1-bff7-a4a4c215dbc5
value: 您的问题可能不在服务业务范围内
varType: string
variable_selector:
- '17677487224360'
- result
id: 'true'
logical_operator: or
selected: false
title: 知识库是否完全无命中 1
type: if-else
height: 124
id: '17667269647440'
position:
x: 3279.2658110309185
y: -217.44062064286942
positionAbsolute:
x: 3279.2658110309185
y: -217.44062064286942
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 抱歉,您的问题可能不在服务业务范围内,请尝试调整其他问法。
selected: false
title: 预判定1
type: answer
variables: []
height: 116
id: '1766727080009'
position:
x: 4125.604259535419
y: -332.7764718352077
positionAbsolute:
x: 4125.604259535419
y: -332.7764718352077
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: 7f0f5251-7f1d-46f1-bff7-a4a4c215dbc5
value: 您的问题可能不在服务业务范围内
varType: string
variable_selector:
- '17677497085030'
- result
id: 'true'
logical_operator: or
selected: false
title: 知识库是否完全无命中 2
type: if-else
height: 124
id: '17667272700050'
position:
x: 3315.065308881474
y: 1491.5012001383288
positionAbsolute:
x: 3315.065308881474
y: 1491.5012001383288
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 抱歉,您的问题可能不在服务业务范围内,请尝试调整其他问法。
selected: false
title: 预判定2
type: answer
variables: []
height: 116
id: '1766727285253'
position:
x: 3950.274742560605
y: 1348.0615303816649
positionAbsolute:
x: 3950.274742560605
y: 1348.0615303816649
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 抱歉,您的问题可能不在服务业务范围内,请尝试调整其他问法。
selected: false
title: 知识库没有相关内容2
type: answer
variables: []
height: 116
id: '17667318333930'
position:
x: 13816.805959882542
y: 1237.219929155591
positionAbsolute:
x: 13816.805959882542
y: 1237.219929155591
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
answer: 抱歉,您的问题可能不在服务业务范围内,请尝试调整其他问法。
selected: false
title: 知识库没有相关内容1
type: answer
variables: []
height: 116
id: '17667318501870'
position:
x: 13768.052696348677
y: -203.15401123345174
positionAbsolute:
x: 13768.052696348677
y: -203.15401123345174
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: 9ca8109a-80ef-40d4-bfc3-4edccfcca6af
value: 如果上述答案不是您想要的结果
varType: string
variable_selector:
- '1766648935323'
- text
id: 'true'
logical_operator: and
desc: ''
selected: false
title: 有记忆情况的模糊判定
type: if-else
height: 124
id: '1766737231108'
position:
x: 6426.639792077752
y: 425.8515926460108
positionAbsolute:
x: 6426.639792077752
y: 425.8515926460108
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "\ndef main(arg1: str):\n return {\n \"result\": arg1\n \
\ }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 模糊问题再现处理
type: code
variables:
- value_selector:
- conversation
- servyou_query
value_type: string
variable: arg1
height: 52
id: '1766737321402'
position:
x: 6880.549057021819
y: -667.4394351166043
positionAbsolute:
x: 6880.549057021819
y: -667.4394351166043
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '1766737321402'
- result
variable_selector:
- conversation
- servyou_query
write_mode: over-write
selected: false
title: 优化后问题重新输入1
type: assigner
version: '2'
height: 84
id: '17667375172980'
position:
x: 7243.494609251557
y: -667.4394351166043
positionAbsolute:
x: 7243.494609251557
y: -667.4394351166043
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: contains
id: 9ca8109a-80ef-40d4-bfc3-4edccfcca6af
value: 如果上述答案不是您想要的结果
varType: string
variable_selector:
- '17667264375750'
- text
id: 'true'
logical_operator: and
selected: false
title: 有记忆情况的模糊判定2
type: if-else
height: 124
id: '17667376015020'
position:
x: 6643.459408608936
y: 1986.7105089978963
positionAbsolute:
x: 6643.459408608936
y: 1986.7105089978963
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "\ndef main(arg1: str):\n return {\n \"result\": arg1\n \
\ }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 模糊问题再现处理 2
type: code
variables:
- value_selector:
- conversation
- servyou_query
value_type: string
variable: arg1
height: 52
id: '17667376904610'
position:
x: 7012.552826051923
y: 641.245937604978
positionAbsolute:
x: 7012.552826051923
y: 641.245937604978
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '17667376904610'
- result
variable_selector:
- conversation
- servyou_query
write_mode: over-write
selected: false
title: 优化后问题重新输入2
type: assigner
version: '2'
height: 84
id: '17667377094060'
position:
x: 7364.265613221313
y: 989.4871914055992
positionAbsolute:
x: 7364.265613221313
y: 989.4871914055992
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "\ndef main(arg1: int):\n arg1 = arg1 + 1 \n return {\n \
\ \"result\": arg1\n }\n"
code_language: python3
outputs:
result:
children: null
type: number
selected: false
title: 会话保底机制
type: code
variables:
- value_selector:
- conversation
- guarantee_mechanism
value_type: number
variable: arg1
height: 52
id: '1766739425288'
position:
x: 945.9831789536895
y: -1384.1426506333903
positionAbsolute:
x: 945.9831789536895
y: -1384.1426506333903
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '1766739425288'
- result
variable_selector:
- conversation
- guarantee_mechanism
write_mode: over-write
selected: false
title: 保底变量覆盖
type: assigner
version: '2'
height: 84
id: '1766739488182'
position:
x: 1320.3810327539275
y: -1163.350971624335
positionAbsolute:
x: 1320.3810327539275
y: -1163.350971624335
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: '>'
id: dccd0a41-2d45-4101-837a-491ff6fa4a96
numberVarType: constant
value: '2'
varType: number
variable_selector:
- conversation
- guarantee_mechanism
id: 'true'
logical_operator: and
selected: false
title: 保底判定
type: if-else
height: 124
id: '1766739849720'
position:
x: 2757.148077573397
y: -703.5597694394028
positionAbsolute:
x: 2757.148077573397
y: -703.5597694394028
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
cases:
- case_id: 'true'
conditions:
- comparison_operator: '>'
id: dccd0a41-2d45-4101-837a-491ff6fa4a96
numberVarType: constant
value: '2'
varType: number
variable_selector:
- conversation
- guarantee_mechanism
id: 'true'
logical_operator: and
selected: false
title: 保底判定2
type: if-else
height: 124
id: '17667403682010'
position:
x: 2679.454273211391
y: 1118.1507630120286
positionAbsolute:
x: 2679.454273211391
y: 1118.1507630120286
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "\ndef main(arg1: int):\n arg1 = arg1 + 1 \n return {\n \
\ \"result\": arg1\n }\n"
code_language: python3
outputs:
result:
children: null
type: number
selected: false
title: 会话保底机制2
type: code
variables:
- value_selector:
- conversation
- guarantee_mechanism
value_type: number
variable: arg1
height: 52
id: '17667406566450'
position:
x: 656.369246652056
y: 1259.1101255623037
positionAbsolute:
x: 656.369246652056
y: 1259.1101255623037
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '17667406566450'
- result
variable_selector:
- conversation
- guarantee_mechanism
write_mode: over-write
selected: false
title: 保底变量覆盖2
type: assigner
version: '2'
height: 84
id: '17667406611650'
position:
x: 1134.8627105803314
y: 1394.372623040324
positionAbsolute:
x: 1134.8627105803314
y: 1394.372623040324
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: append
value:
- conversation
- servyou_query
variable_selector:
- conversation
- mmq
write_mode: over-write
selected: false
title: 记忆变量
type: assigner
version: '2'
height: 84
id: '1766986002113'
position:
x: 4284.85470831095
y: 248.12903838526358
positionAbsolute:
x: 4284.85470831095
y: 248.12903838526358
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
selected: false
template: '{{ arg1 }}, {{ arg2 }}'
title: 历史引导记忆问题
type: template-transform
variables:
- value_selector:
- conversation
- servyou_query
value_type: string
variable: arg1
- value_selector:
- conversation
- mmq
value_type: array[string]
variable: arg2
height: 52
id: '1766986387628'
position:
x: 3676.1256850077352
y: -672.2016382530768
positionAbsolute:
x: 3676.1256850077352
y: -672.2016382530768
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '1766986387628'
- output
variable_selector:
- conversation
- servyou_query
write_mode: over-write
selected: false
title: 结合历史问题和当前问题
type: assigner
version: '2'
height: 84
id: '1766986503282'
position:
x: 5111.322705256988
y: -667.4394351166043
positionAbsolute:
x: 5111.322705256988
y: -667.4394351166043
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: append
value:
- conversation
- servyou_query
variable_selector:
- conversation
- mmq
write_mode: over-write
selected: false
title: 记忆变量 2
type: assigner
version: '2'
height: 84
id: '17669865896480'
position:
x: 4249.10052907629
y: 1796.7420776432623
positionAbsolute:
x: 4249.10052907629
y: 1796.7420776432623
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
selected: false
template: '{{ arg1 }}, {{ arg2 }}'
title: 历史引导记忆问题 2
type: template-transform
variables:
- value_selector:
- conversation
- servyou_query
value_type: string
variable: arg1
- value_selector:
- conversation
- mmq
value_type: array[string]
variable: arg2
height: 52
id: '17669866215620'
position:
x: 3451.5694329482812
y: 1144.8537852682175
positionAbsolute:
x: 3451.5694329482812
y: 1144.8537852682175
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '17669866215620'
- output
variable_selector:
- conversation
- servyou_query
write_mode: over-write
selected: false
title: 结合历史问题和当前问题2
type: assigner
version: '2'
height: 84
id: '17669866341260'
position:
x: 4319.753413222378
y: 641.245937604978
positionAbsolute:
x: 4319.753413222378
y: 641.245937604978
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
authorization:
config: null
type: no-auth
body:
data:
- id: key-value-263
key: ''
type: text
value: "{\n \"model\": \"model\",\n \"messages\": [\n {\n \"\
role\": \"user\",\n \"content\": \"{{#1766994739449.result#}}\"\
\n }\n ],\n \"stream\": true,\n \"encoding\": \"utf-8\"\n}"
type: json
headers: 'Content-Type:application/json; charset="utf-8"
Authorization:Bearer ragflow-ZiYmIzMjcwYjk0ZjExZjBhODgzMDI0Mm'
method: post
params: ''
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 100
selected: false
ssl_verify: true
timeout:
max_connect_timeout: 0
max_read_timeout: 0
max_write_timeout: 0
title: ragflow知识库 3
type: http-request
url: http://10.80.0.85:9380/api/v1/agents_openai/d4051f80dfdc11f0993d0242ac120006/chat/completions
variables: []
height: 170
id: '17669939758770'
position:
x: 4872.407870326148
y: 1569.4484181615476
positionAbsolute:
x: 4872.407870326148
y: 1569.4484181615476
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
dataset_ids:
- 1aM5JfrtmBYtghXflTeQDOTiM0MaufWVaEpunkstrQr2DWCad1pyfImMvY9EDXJh
- SouBCst5gmvLf9zgdmQZq3fT46jOWdR4r136JeI7ieO9n5FJVVzKCCd0aaLkQ6UK
multiple_retrieval_config:
reranking_enable: true
reranking_mode: reranking_model
reranking_model:
model: bge-rerank
provider: langgenius/openai_api_compatible/openai_api_compatible
top_k: 4
query_variable_selector:
- '1766994739449'
- result
retrieval_mode: multiple
selected: false
title: 知识库图片检索 3
type: knowledge-retrieval
height: 118
id: '17669940249670'
position:
x: 5514.596837783464
y: 1330.5805764260908
positionAbsolute:
x: 5514.596837783464
y: 1330.5805764260908
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: true
variable_selector:
- '17669940249670'
- result
model:
completion_params:
temperature: 0.7
mode: chat
name: Qwen3-30B-A3B-Instruct
provider: yangyaofei/vllm/vllm
prompt_template:
- id: 8fdbc119-5c08-4eb4-9364-40deb1bb4b1f
role: system
text: '# 角色与核心任务
- 你是一名专业的IT支持分析助理,专门处理企业内部同事的IT咨询。
- **核心使命**:为同事提供准确、清晰且可立即执行的解决方案。
# 处理流程与规则
## 第一步:问答判断
- 判断知识库内容能否回复同事咨询问题。
- 此判断是后续流程的决策基础。
## 第二步:分支处理与回复生成 (整合结束语)
###情况一:知识库内容能够回复同事咨询问题
- **同时**,判断图文信息与同事咨询问题是否相关。
- **提取相关图文信息中的链接**,如”![image](https://yw-dify.dc.servyou-it.com)“提取其中的”https://yw-dify.dc.servyou-it.com“,进行全局规则中的**链接标准化**。
- **生成回复**:基于知识库内容和相关的图文信息,生成最终回复。
###情况二:知识库内容不能够回复同事咨询问题
- **回复固定语句**:"抱歉,您的问题可能不在服务业务范围内,请尝试调整其他问法。"。
#全局输出格式要求(仅当知识库内容能够回复同事咨询问题时生效)
- **结构化格式**,回复必须具有清晰的视觉层次,严格使用以下格式:
-- 使用标题(### 解决方案)表示回复。
-- 使用编号列表(1. 2. 3...)表示有顺序的操作步骤。
-- 使用项目符号列表(-)表示并列的要点或说明。
-- 关键信息(如服务器地址、代码关键字)使用行内代码标记(如 `hostname`)突出。
#全局内容质量要求
- **简洁精准**:确保回答直接精准有效,避免冗长,切勿过度赘述和扩展回答。
- **专业友好**:保持专业、耐心且友好的支持态度,理解同事的急切心情。
- **清晰准确**:确保技术术语解释清楚,步骤无歧义,信息准确无误。
- **回复有效性**:确保**解决方案**是准确的回复并给出了正确的执行方案。
#全局规则(所有分支适用)【要求】
- **版权合规**:如果知识库内容和同事咨询问题涉及破解、激活等风险内容,必须附加回复相关风险内容的免责声明。
- **链接标准化**:所有链接必须转换为markdown格式,不得出现原始链接,如”https://oa.servyou-it.com/,输出为[xxx](https://oa.servyou-it.com/)“,其中xxx根据上下文定义。
- **文字要求**:在**解决方案**中,不能包含文字"知识库"和"员工”。
- **文字替换**:在**解决方案**中,将"同事"文字改为称呼"您"。
- **回复字数**:回复字数不超过500字。
- **完全忠于知识库内容回复**:在**解决方案**中,不允许出现知识库外的拓展思考内容,包括dify的链接地址等。'
- id: 034760a9-98ca-4e3a-a86d-269ca66a9e69
role: user
text: '同事咨询问题:{{#1766994739449.result#}}
知识库内容:{{#17675939731110.result#}}【附加:{{#17677497085030.result#}}】
图文信息:{{#context#}}'
selected: false
title: 本地大模型分析3
type: llm
vision:
enabled: false
height: 88
id: '17669940385140'
position:
x: 5819.859752897343
y: 1208.9998846785986
positionAbsolute:
x: 5819.859752897343
y: 1208.9998846785986
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "def main(query: str):\n extracted_content = \"\"\n query = query.strip()\n\
\ if \"如果上述答案不是您想要的结果\" in query:\n before, separator, after =\
\ query.partition(\"例如,您可以这样提问:\")\n if separator:\n if\
\ after:\n extracted_content = after.strip()\n \
\ else:\n after = query\n extracted_content\
\ = after.strip()\n else:\n extracted_content = query.strip()\n\
\ return {\n \"result\": extracted_content,\n \"clue_word\"\
: before\n }\n"
code_language: python3
outputs:
clue_word:
children: null
type: string
result:
children: null
type: string
selected: false
title: 猜测问题提取
type: code
variables:
- value_selector:
- '17667264375750'
- text
value_type: string
variable: query
height: 52
id: '1766994739449'
position:
x: 4523.465086086416
y: 1701.4487797185989
positionAbsolute:
x: 4523.465086086416
y: 1701.4487797185989
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "def main(query: str):\n extracted_content = \"\"\n query = query.strip()\n\
\ if \"如果上述答案不是您想要的结果\" in query:\n before, separator, after =\
\ query.partition(\"例如,您可以这样提问:\")\n if separator:\n if\
\ after:\n extracted_content = after.strip()\n \
\ else:\n after = query\n extracted_content\
\ = after.strip()\n else:\n extracted_content = query.strip()\n\
\ return {\n \"result\": extracted_content,\n \"clue_word\"\
: before\n }\n"
code_language: python3
outputs:
clue_word:
children: null
type: string
result:
children: null
type: string
selected: false
title: 猜测问题提取 (1)
type: code
variables:
- value_selector:
- '1766648935323'
- text
value_type: string
variable: query
height: 52
id: '17669960466150'
position:
x: 4657.500635670119
y: 110.81946497169574
positionAbsolute:
x: 4657.500635670119
y: 110.81946497169574
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
authorization:
config: null
type: no-auth
body:
data:
- id: key-value-263
key: ''
type: text
value: "{\n \"model\": \"model\",\n \"messages\": [\n {\n \"\
role\": \"user\",\n \"content\": \"{{#17669960466150.result#}}\"\
\n }\n ],\n \"stream\": true,\n \"encoding\": \"utf-8\"\n}"
type: json
headers: 'Content-Type:application/json; charset="utf-8"
Authorization:Bearer ragflow-ZiYmIzMjcwYjk0ZjExZjBhODgzMDI0Mm'
method: post
params: ''
retry_config:
max_retries: 3
retry_enabled: true
retry_interval: 100
selected: false
ssl_verify: true
timeout:
max_connect_timeout: 0
max_read_timeout: 0
max_write_timeout: 0
title: ragflow知识库 3 (1)
type: http-request
url: http://10.80.0.85:9380/api/v1/agents_openai/d4051f80dfdc11f0993d0242ac120006/chat/completions
variables: []
height: 170
id: '17669960576130'
position:
x: 4983.265199351364
y: -47.23120205277857
positionAbsolute:
x: 4983.265199351364
y: -47.23120205277857
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
dataset_ids:
- 1aM5JfrtmBYtghXflTeQDOTiM0MaufWVaEpunkstrQr2DWCad1pyfImMvY9EDXJh
- SouBCst5gmvLf9zgdmQZq3fT46jOWdR4r136JeI7ieO9n5FJVVzKCCd0aaLkQ6UK
multiple_retrieval_config:
reranking_enable: true
reranking_mode: reranking_model
reranking_model:
model: bge-rerank
provider: langgenius/openai_api_compatible/openai_api_compatible
top_k: 4
query_variable_selector:
- '17669960466150'
- result
retrieval_mode: multiple
selected: false
title: 知识库图片检索 3 (1)
type: knowledge-retrieval
height: 118
id: '17669960738730'
position:
x: 5612.418633990207
y: -284.37595518643394
positionAbsolute:
x: 5612.418633990207
y: -284.37595518643394
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: true
variable_selector:
- '17669960738730'
- result
model:
completion_params:
temperature: 0.7
mode: chat
name: Qwen3-30B-A3B-Instruct
provider: yangyaofei/vllm/vllm
prompt_template:
- id: 8fdbc119-5c08-4eb4-9364-40deb1bb4b1f
role: system
text: '# 角色与核心任务
- 你是一名专业的IT支持分析助理,专门处理企业内部同事的IT咨询。
- **核心使命**:为同事提供准确、清晰且可立即执行的解决方案。
# 处理流程与规则
## 第一步:问答判断
- 判断知识库内容能否回复同事咨询问题。
- 此判断是后续流程的决策基础。
## 第二步:分支处理与回复生成 (整合结束语)
###情况一:知识库内容能够回复同事咨询问题
- **同时**,判断图文信息与同事咨询问题是否相关。
- **提取相关图文信息中的链接**,如”![image](https://yw-dify.dc.servyou-it.com)“提取其中的”https://yw-dify.dc.servyou-it.com“,进行全局规则中的**链接标准化**。
- **生成回复**:基于知识库内容和相关的图文信息,生成最终回复。
###情况二:知识库内容不能够回复同事咨询问题
- **回复固定语句**:"抱歉,您的问题可能不在服务业务范围内,请尝试调整其他问法。"。
#全局输出格式要求(仅当知识库内容能够回复同事咨询问题时生效)
- **结构化格式**,回复必须具有清晰的视觉层次,严格使用以下格式:
-- 使用标题(### 解决方案)表示回复。
-- 使用编号列表(1. 2. 3...)表示有顺序的操作步骤。
-- 使用项目符号列表(-)表示并列的要点或说明。
-- 关键信息(如服务器地址、代码关键字)使用行内代码标记(如 `hostname`)突出。
#全局内容质量要求
- **简洁精准**:确保回答直接精准有效,避免冗长,切勿过度赘述和扩展回答。
- **专业友好**:保持专业、耐心且友好的支持态度,理解同事的急切心情。
- **清晰准确**:确保技术术语解释清楚,步骤无歧义,信息准确无误。
- **回复有效性**:确保**解决方案**是准确的回复并给出了正确的执行方案。
#全局规则(所有分支适用)【要求】
- **版权合规**:如果知识库内容和同事咨询问题涉及破解、激活等风险内容,必须附加回复相关风险内容的免责声明。
- **链接标准化**:所有链接必须转换为markdown格式,不得出现原始链接,如”https://oa.servyou-it.com/,输出为[xxx](https://oa.servyou-it.com/)“,其中xxx根据上下文定义。
- **文字要求**:在**解决方案**中,不能包含文字"知识库"和"员工”。
- **文字替换**:在**解决方案**中,将"同事"文字改为称呼"您"。
- **回复字数**:回复字数不超过500字。
- **完全忠于知识库内容回复**:在**解决方案**中,不允许出现知识库外的拓展思考内容,包括dify的链接地址等。'
- id: 034760a9-98ca-4e3a-a86d-269ca66a9e69
role: user
text: '同事咨询问题:{{#17669960466150.result#}}
图文信息:{{#context#}}
知识库内容:{{#1767577724877.result#}}【附加:{{#17677487224360.result#}}】'
selected: false
title: 本地大模型分析3 (1)
type: llm
vision:
enabled: false
height: 88
id: '17669960812650'
position:
x: 5888.374478810877
y: -373.74936226508623
positionAbsolute:
x: 5888.374478810877
y: -373.74936226508623
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '17669960466150'
- result
variable_selector:
- conversation
- memory_query
write_mode: over-write
- input_type: variable
operation: over-write
value:
- '17669960812650'
- text
variable_selector:
- conversation
- memory_ans
write_mode: over-write
selected: false
title: 全局变量-记忆前置问题和回复 (2)
type: assigner
version: '2'
height: 110
id: '17669987893140'
position:
x: 6176.5333029773565
y: -470.1705846854579
positionAbsolute:
x: 6176.5333029773565
y: -470.1705846854579
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
items:
- input_type: variable
operation: over-write
value:
- '1766994739449'
- result
variable_selector:
- conversation
- memory_query
write_mode: over-write
- input_type: variable
operation: over-write
value:
- '17669940385140'
- text
variable_selector:
- conversation
- memory_ans
write_mode: over-write
selected: false
title: 全局变量-记忆前置问题和回复 (3)
type: assigner
version: '2'
height: 110
id: '17669989513170'
position:
x: 6133.195841100804
y: 1083.9264082053355
positionAbsolute:
x: 6133.195841100804
y: 1083.9264082053355
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "import re\n\ndef main(arg1: str):\n result = re.sub(r'.*?{\"content\"\
:', '', arg1, count=1)\n result = re.sub(r'.*?(\\\"\\\\n)', '', result,\
\ count=1)\n result = re.sub(r'(\\\"}, \\\"finish_reason\\\".*)', '',\
\ result, flags=re.DOTALL)\n return {\n \"result\": result,\n\
\ }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 知识库格式修正1
type: code
variables:
- value_selector:
- '17669960576130'
- body
value_type: string
variable: arg1
height: 52
id: '1767577724877'
position:
x: 5296.261648985534
y: -151.6317444173636
positionAbsolute:
x: 5296.261648985534
y: -151.6317444173636
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "import re\n\ndef main(arg1: str):\n result = re.sub(r'.*?{\"content\"\
:', '', arg1, count=1)\n result = re.sub(r'.*?(\\\"\\\\n)', '', result,\
\ count=1)\n result = re.sub(r'(\\\"}, \\\"finish_reason\\\".*)', '',\
\ result, flags=re.DOTALL)\n return {\n \"result\": result,\n\
\ }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 知识库格式修正2
type: code
variables:
- value_selector:
- '17669939758770'
- body
value_type: string
variable: arg1
height: 52
id: '17675939731110'
position:
x: 5178.454419369272
y: 1459.5565107244784
positionAbsolute:
x: 5178.454419369272
y: 1459.5565107244784
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "import re\n\ndef main(arg1: str):\n result = re.sub(r'.*?{\"content\"\
:', '', arg1, count=1)\n result = re.sub(r'.*?(\\\"\\\\n)', '', result,\
\ count=1)\n result = re.sub(r'(\\\"}, \\\"finish_reason\\\".*)', '',\
\ result, flags=re.DOTALL)\n return {\n \"result\": result,\n\
\ }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 知识库格式修正3
type: code
variables:
- value_selector:
- '1762241246839'
- body
value_type: string
variable: arg1
height: 52
id: '17676676167470'
position:
x: 10285.667260026912
y: 267.7051966087703
positionAbsolute:
x: 10285.667260026912
y: 267.7051966087703
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "import re\n\ndef main(arg1: str):\n result = re.sub(r'.*?{\"content\"\
:', '', arg1, count=1)\n result = re.sub(r'.*?(\\\"\\\\n)', '', result,\
\ count=1)\n result = re.sub(r'(\\\"}, \\\"finish_reason\\\".*)', '',\
\ result, flags=re.DOTALL)\n return {\n \"result\": result,\n\
\ }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 知识库格式修正4
type: code
variables:
- value_selector:
- '17657860354750'
- body
value_type: string
variable: arg1
height: 52
id: '17676676927510'
position:
x: 10673.907899004127
y: 2023.661199565415
positionAbsolute:
x: 10673.907899004127
y: 2023.661199565415
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "import re\n\ndef main(arg1: str):\n result = re.sub(r'.*?{\"content\"\
:', '', arg1, count=1)\n result = re.sub(r'.*?(\\\"\\\\n)', '', result,\
\ count=1)\n result = re.sub(r'(\\\"}, \\\"finish_reason\\\".*)', '',\
\ result, flags=re.DOTALL)\n return {\n \"result\": result,\n\
\ }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 引导词格式修正
type: code
variables:
- value_selector:
- '17666588259460'
- body
value_type: string
variable: arg1
height: 52
id: '17677487224360'
position:
x: 3003.434211354486
y: -373.74936226508623
positionAbsolute:
x: 3003.434211354486
y: -373.74936226508623
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
code: "import re\n\ndef main(arg1: str):\n result = re.sub(r'.*?{\"content\"\
:', '', arg1, count=1)\n result = re.sub(r'.*?(\\\"\\\\n)', '', result,\
\ count=1)\n result = re.sub(r'(\\\"}, \\\"finish_reason\\\".*)', '',\
\ result, flags=re.DOTALL)\n return {\n \"result\": result,\n\
\ }\n"
code_language: python3
outputs:
result:
children: null
type: string
selected: false
title: 引导词格式修正2
type: code
variables:
- value_selector:
- '17667264218480'
- body
value_type: string
variable: arg1
height: 52
id: '17677497085030'
position:
x: 2925.420471711777
y: 1416.0668749341942
positionAbsolute:
x: 2925.420471711777
y: 1416.0668749341942
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
viewport:
x: 257.344217857632
y: 724.5007800203003
zoom: 0.25
rag_pipeline_variables: []