v0.1.0: CRM/ERP 系统内测版本 - 安全加固完成

- Docker bridge 网络隔离(8000 端口封死)
- Gunicorn 4 Worker 多进程
- Alembic 数据库迁移基线
- 日志轮转 20m×3
- JWT 密钥 + DB 密码 + CORS 收紧
- 3-2-1 备份链路(NAS + R740-B 冷备)
- 连接池 pool_pre_ping + pool_recycle=3600
This commit is contained in:
hankin
2026-03-16 07:31:37 +00:00
commit 423baff73b
2578 changed files with 824643 additions and 0 deletions
+176
View File
@@ -0,0 +1,176 @@
app:
description: '接收销售日志内容,AI 提取客户画像特征(痛点/偏好/购买意向),通过 HTTP 回写至 ERP 客户表的 ai_persona 字段'
icon: "\U0001F4DD"
icon_background: '#E4FBCC'
mode: workflow
name: '销售日志 → 客户画像提取'
use_icon_as_answer_icon: false
kind: app
version: 0.1.3
workflow:
conversation_variables: []
environment_variables: []
features:
file_upload:
image:
enabled: false
opening_statement: ''
retriever_resource:
enabled: false
sensitive_word_avoidance:
enabled: false
suggested_questions: []
suggested_questions_after_answer:
enabled: false
text_to_speech:
enabled: false
graph:
edges:
- data:
sourceType: start
targetType: llm
id: edge-start-to-llm
source: start
target: llm-extract
type: custom
- data:
sourceType: llm
targetType: http-request
id: edge-llm-to-http
source: llm-extract
target: http-update-persona
type: custom
- data:
sourceType: http-request
targetType: end
id: edge-http-to-end
source: http-update-persona
target: end
type: custom
nodes:
# ── 开始节点 ──
- data:
desc: '接收销售日志参数'
title: 开始
type: start
variables:
- label: customer_id
max_length: 100
required: true
type: text-input
variable: customer_id
- label: content
max_length: 5000
required: true
type: paragraph
variable: content
- label: salesperson_name
max_length: 50
required: false
type: text-input
variable: salesperson_name
height: 90
id: start
position:
x: 80
y: 282
type: start
width: 244
# ── LLM 画像提取节点 ──
- data:
desc: '从销售日志中提取客户画像特征'
# ⚠️ 导入后请在此节点选择你 Dify 中已配置的模型
# 推荐选择 Qwen3.5-27B (R740-A 节点)
model:
completion_params:
temperature: 0.3
max_tokens: 1024
mode: chat
name: qwen3.5 # ← 导入后改为你实际的模型名称
provider: ollama # ← 改为你的模型供应商
prompt_template:
- role: system
text: |
你是一名 B2B 润滑油行业的客户分析专家。
根据销售人员的日志内容,提取客户特征并输出严格的 JSON 格式。
输出要求(纯 JSON,不要 markdown 代码块):
{
"pain_points": ["痛点1", "痛点2"],
"preferences": ["偏好1", "偏好2"],
"purchase_intent": "high 或 medium 或 low",
"key_decision_makers": ["决策人姓名"],
"competitor_info": ["竞品信息"],
"summary": "一句话总结本次跟进要点"
}
如果某个字段从日志中无法提取,返回空数组 [] 或 "unknown"。
- role: user
text: |
销售人员: {{#start.salesperson_name#}}
日志内容:
{{#start.content#}}
title: 'AI 画像提取'
type: llm
height: 98
id: llm-extract
position:
x: 380
y: 282
type: llm
width: 244
# ── HTTP 回写客户画像 ──
- data:
desc: '将提取的画像 JSON 写入 ERP 客户表'
title: '回写客户画像'
type: http-request
authorization:
config:
api_key: '' # ← 导入后填写 Bearer token
header: Authorization
type: bearer
type: api-key
body:
data: '{{#llm-extract.text#}}'
type: json
headers: ''
method: put
params: ''
timeout:
max_connect_timeout: 10
max_read_timeout: 30
max_write_timeout: 30
# ⚠️ 导入后修改为你的实际 ERP 地址
url: 'http://192.168.1.100:8000/api/customers/{{#start.customer_id#}}/persona'
height: 98
id: http-update-persona
position:
x: 680
y: 282
type: http-request
width: 244
# ── 结束节点 ──
- data:
desc: ''
outputs:
- value_selector:
- llm-extract
- text
variable: ai_persona_result
- value_selector:
- http-update-persona
- status_code
variable: http_status
title: 结束
type: end
height: 90
id: end
position:
x: 980
y: 282
type: end
width: 244
hash: ''