topfans/docs/dify/角角.yml
Lenticular Studio Agent 65ce6bba12 feat: Dify 部署脚本修复 + AI 搭子 MVP 接入
主要改动:

fix(docker/dify-deploy): 修复脚本核心功能
- heredoc 单引号 bug: 'ENVEOF' 改为 ENVEOF,变量正确展开
- 端口默认值 8083/8084/8085 对齐 .env.prod 生产配置
- 加 dc_cmd() 兼容 docker-compose v1/v2 plugin
- openssl rand 生成强随机密码与 SECRET_KEY(42 字符)
- install 跳过已存在 .env,保护用户配置(管理员密码/SECRET_KEY)
- read -p < /dev/tty 兼容非 tty 环境(CI/CD)
- show-config 改用 DIFY_NGINX_PORT(nginx 入口)而非 APP_WEB_PORT

docs(mvp-design): 修正 §3.2 workflow inputs 描述
- 实际只有 query,删除错误的 user_id input 声明
- 节点序列图同步更新

feat(aiChatService): 新增 Dify 客户端与适配器
- service/dify_client.go: Dify Workflow 调用 + SSE 解析
- service/dify_adapter.go: 与现有 chat_service 桥接
- provider/ai_chat_provider.go: Dubbo 入口简化
- main.go: 装配 ConversationRepository + DifyClient

feat(migrations): 新增 AI 搭子会话表 ai_chat.sql
- ai_conversations / ai_messages 表 + 索引

docs: 新增 Dify 集成设计文档
- 2026-06-29-ai-chat-dify-mvp-design.md (MVP 实施级)
- 2026-06-29-ai-chat-dify-integration-v2-design.md (V2 演进路线图)
- docs/dify/角角.yml (Workflow DSL 导出)

config: 更新 env 模板与 docker 配置
- backend/.env.example: DIFY_* 环境变量声明
- docker/.env.prod: DIFY_API_BASE 对齐 8083
- docker/build.sh: 微调
- CLAUDE.md: 项目规范补充

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-02 12:32:34 +08:00

228 lines
5.4 KiB
YAML

app:
description: ''
icon: 🤖
icon_background: '#FFEAD5'
icon_type: emoji
mode: workflow
name: 角角
use_icon_as_answer_icon: false
dependencies:
- current_identifier: null
type: marketplace
value:
marketplace_plugin_unique_identifier: langgenius/minimax:0.0.21@ccfbb9b4f38d35b1daa2483daaad5ed5402896d1119d68601a820a806910bf87
version: null
kind: app
version: 0.6.0
workflow:
conversation_variables: []
environment_variables: []
features:
file_upload:
allowed_file_extensions:
- .JPG
- .JPEG
- .PNG
- .GIF
- .WEBP
- .SVG
allowed_file_types:
- image
allowed_file_upload_methods:
- local_file
- remote_url
enabled: false
fileUploadConfig:
attachment_image_file_size_limit: 2
audio_file_size_limit: 50
batch_count_limit: 5
file_size_limit: 15
file_upload_limit: 20
image_file_batch_limit: 10
image_file_size_limit: 10
single_chunk_attachment_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: start
targetType: knowledge-retrieval
id: 1782726878899-source-1782726916693-target
source: '1782726878899'
sourceHandle: source
target: '1782726916693'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: knowledge-retrieval
targetType: llm
id: 1782726916693-source-1782726955948-target
source: '1782726916693'
sourceHandle: source
target: '1782726955948'
targetHandle: target
type: custom
zIndex: 0
- data:
isInIteration: false
isInLoop: false
sourceType: llm
targetType: end
id: 1782726955948-source-1782727496103-target
source: '1782726955948'
sourceHandle: source
target: '1782727496103'
targetHandle: target
type: custom
zIndex: 0
nodes:
- data:
selected: false
title: 用户输入
type: start
variables:
- default: ''
hint: ''
label: query
options: []
placeholder: ''
required: true
type: text-input
variable: query
height: 108
id: '1782726878899'
position:
x: 16
y: 277
positionAbsolute:
x: 16
y: 277
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
dataset_ids:
- NCv1DfzNsC8G/IjCISUkvry7LBfVIV8mXqRliZH+TUgfixw/U0t6Tz5wWsLdX/Vh
multiple_retrieval_config:
reranking_enable: false
reranking_mode: reranking_model
top_k: 4
query_attachment_selector: []
query_variable_selector:
- '1782726878899'
- query
retrieval_mode: multiple
selected: false
title: 知识检索
type: knowledge-retrieval
height: 89
id: '1782726916693'
position:
x: 230
y: 103.1999999999999
positionAbsolute:
x: 230
y: 103.1999999999999
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
context:
enabled: true
variable_selector:
- '1782726916693'
- result
model:
completion_params:
temperature: 0.7
mode: chat
name: minimax-m3
provider: langgenius/minimax/minimax
prompt_config:
jinja2_variables: []
prompt_template:
- edition_type: basic
id: b656505c-e726-47c4-b036-6e6025595a8c
role: system
text: 你是角角,专注于肖战的粉丝助手
- id: db882835-3ffe-4600-b95a-9eca51b93ce2
role: user
text: '{{#context#}}}{{#1782726878899.query#}}}'
selected: false
title: LLM
type: llm
vision:
enabled: false
height: 87
id: '1782726955948'
position:
x: 358
y: 510
positionAbsolute:
x: 358
y: 510
selected: false
sourcePosition: right
targetPosition: left
type: custom
width: 242
- data:
outputs:
- value_selector:
- '1782726955948'
- text
value_type: string
variable: text
selected: false
title: 输出
type: end
height: 88
id: '1782727496103'
position:
x: 612
y: 235
positionAbsolute:
x: 612
y: 235
selected: true
sourcePosition: right
targetPosition: left
type: custom
width: 242
viewport:
x: 19
y: -99.1999999999999
zoom: 1
rag_pipeline_variables: []