Update 30 min tutorial (#701)
* update based on user feedback * update zh and ja docs * modify based on feedback * correct typos Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
@@ -12,44 +12,67 @@ By the end of this tutorial, you'll have a workflow that takes whatever content
|
||||
|
||||
The complete workflow is shown below. Feel free to refer back to this as you build to stay on track and see how all the nodes work together.
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_workflow_overview.png"
|
||||
alt="Quick Start Workflow Overview"
|
||||
title="Quick Start Workflow Overview"
|
||||
className="mx-auto"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## Before You Start
|
||||
|
||||
<Steps>
|
||||
<Step title="Sign in to Dify Cloud">
|
||||
|
||||
Go to [Dify Cloud](https://cloud.dify.ai) and sign up for free.
|
||||
|
||||
New accounts on the Sandbox plan include 200 message credits for calling models from providers like OpenAI, Anthropic, and Gemini.
|
||||
|
||||
<Info>
|
||||
Message credits are a one-time allocation and don't renew monthly.
|
||||
</Info>
|
||||
</Step>
|
||||
|
||||
<Step title="Set Up the Model Provider">
|
||||
|
||||
Go to **Settings** > **Model Provider** and install the OpenAI plugin. This tutorial uses `gpt-5.2` for the examples.
|
||||
|
||||
If you're using Sandbox credits, no API key is required—the plugin is ready to use once installed. You can also configure your own API key and use it instead.
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="Configure the Default Model">
|
||||
|
||||
1. In the top-right corner of the **Model Provider** page, click **System Model Settings**.
|
||||
|
||||
2. Set the **System Reasoning Model** to `gpt-5.2`. This becomes the default model in the workflow.
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## Step 1: Create a New Workflow
|
||||
|
||||
1. Go to **Studio**, then select **Create from blank** \> **Workflow**.
|
||||
1. Go to **Studio**, then select **Create from blank** > **Workflow**.
|
||||
|
||||
2. Name the workflow `Multi-platform content generator` and click **Create**. You'll automatically land on the workflow canvas to start building.
|
||||
|
||||
## Step 2: Add and Configure Workflow Nodes
|
||||
3. Select the User Input node to start our workflow.
|
||||
|
||||
## Step 2: Orchestrate & Configure
|
||||
|
||||
<Note>
|
||||
Keep any unmentioned settings at their default values.
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
Give nodes and variables clear, descriptive names to make them easier to identify and reference in the workflow.
|
||||
Give nodes and variables clear, descriptive names to make them easier to identify and reference.
|
||||
</Tip>
|
||||
|
||||
### 1. User Input Node: Collect User Inputs
|
||||
### 1. Collect User Inputs: User Input Node
|
||||
|
||||
<Info>
|
||||
First, we need to define what information to gather from users, such as the draft text, target platforms, desired tone, and any reference materials.
|
||||
First, we need to define what information to gather from users for running our content generator, such as the draft text, target platforms, desired tone, and any reference materials.
|
||||
|
||||
The User Input node is where we can easily set this up. Each input field we add here becomes a variable that all downstream nodes can reference and use.
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_start.png"
|
||||
alt="User Input Node"
|
||||
title="User Input Node"
|
||||
className="mx-auto"
|
||||
style={{ width:"71%" }}
|
||||
/>
|
||||
|
||||
Click the User Input node to open its configuration panel, then add the following input fields.
|
||||
|
||||
<Accordion title="Reference materials - text">
|
||||
@@ -57,7 +80,7 @@ Click the User Input node to open its configuration panel, then add the followin
|
||||
- Variable Name: `draft`
|
||||
- Label Name: `Draft`
|
||||
- Max length: `2048`
|
||||
- Required: `No`
|
||||
- Required: `Yes`
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="Reference materials - files">
|
||||
@@ -94,62 +117,70 @@ Click the User Input node to open its configuration panel, then add the followin
|
||||
- `English`
|
||||
- `日本語`
|
||||
- `简体中文`
|
||||
- Default value: `English`
|
||||
- Required: `Yes`
|
||||
</Accordion>
|
||||
|
||||
### 2. Parameter Extractor Node: Identify Target Platforms
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 2. Identify Target Platforms: Parameter Extractor Node
|
||||
|
||||
<Info>
|
||||
Since our platform field accepts free-form text input, users might type in various ways: `x and linkedIn`, `post on Twitter and LinkedIn`, or even `Twitter + LinkedIn please`. However, we need a clean and structured list, like `["Twitter", "LinkedIn"]`, that downstream nodes can work with reliably.
|
||||
Since our platform field accepts free-form text input, users might type in various ways: `x and linkedIn`, `post on Twitter and LinkedIn`, or even `Twitter + LinkedIn please`.
|
||||
|
||||
However, we need a clean and structured list, like `["Twitter", "LinkedIn"]`, that downstream nodes can work with reliably.
|
||||
|
||||
This is the perfect job for the Parameter Extractor node. It uses an LLM to analyze users' natural language, recognize all these variations, and output a standardized array.
|
||||
This is the perfect job for the Parameter Extractor node. In our case, it uses the gpt-5.2 model to analyze users' natural language, recognize all these variations, and output a standardized array.
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_paramater_extractor.png"
|
||||
alt="Paramater Extractor"
|
||||
title="Paramater Extractor"
|
||||
className="mx-auto"
|
||||
style={{ width:"73%" }}
|
||||
/>
|
||||
|
||||
After the User Input node, add a Parameter Extractor node and configure it:
|
||||
|
||||
1. Choose a model.
|
||||
2. Set `User Input/platform` as the input variable.
|
||||
3. Add an extract parameter:
|
||||
1. Name: `platform`
|
||||
2. Type: `Array[String]`
|
||||
3. Description: `Identify and extract the platform(s) for which the user wants to create tailored content.`
|
||||
4. Required: `Yes`
|
||||
4. In the instruction field, paste the following to guide the LLM in parameter extraction:
|
||||
1. In the **Input Variable** field, select `User Input/platform`.
|
||||
|
||||
```markdown INSTRUCTION
|
||||
# TASK DESCRIPTION
|
||||
Parse platform names from input and output as a JSON array.
|
||||
|
||||
## PROCESSING RULES
|
||||
- Support multiple delimiters: commas, semicolons, spaces, line breaks, "and", "&", "|", etc.
|
||||
- Standardize common platform name variants (twitter/X→Twitter, insta→Instagram, etc.)
|
||||
- Remove duplicates and invalid entries
|
||||
- Preserve unknown but reasonable platform names
|
||||
|
||||
## OUTPUT REQUIREMENTS
|
||||
- Success: ["Platform1", "Platform2"]
|
||||
- No platforms found: [No platforms identified. Please enter a valid platform name.]
|
||||
|
||||
## EXAMPLES
|
||||
- Input: "twitter, linkedin" → ["Twitter", "LinkedIn"]
|
||||
- Input: "x and insta" → ["Twitter", "Instagram"]
|
||||
- Input: "invalid content" → [No platforms identified. Please enter a valid platform name.]
|
||||
```
|
||||
2. Add an extract parameter:
|
||||
|
||||
<Check>
|
||||
Note that we've instructed the LLM to output a specific error message for invalid inputs, which will serve as the end trigger for our workflow in the next step.
|
||||
</Check>
|
||||
- Name: `platform`
|
||||
|
||||
### 3. IF/ELSE Node: Validate Platform Extraction Results
|
||||
- Type: `Array[String]`
|
||||
|
||||
- Description: `The platform(s) for which the user wants to create tailored content.`
|
||||
|
||||
- Required: `Yes`
|
||||
|
||||
3. In the **Instruction** field, paste the following to guide the LLM in parameter extraction:
|
||||
|
||||
```markdown INSTRUCTION
|
||||
# TASK DESCRIPTION
|
||||
Parse platform names from input and output as a JSON array.
|
||||
|
||||
## PROCESSING RULES
|
||||
- Support multiple delimiters: commas, semicolons, spaces, line breaks, "and", "&", "|", etc.
|
||||
- Standardize common platform name variants (twitter/X→Twitter, insta→Instagram, etc.)
|
||||
- Remove duplicates and invalid entries
|
||||
- Preserve unknown but reasonable platform names
|
||||
- Preserve the original language of platform names
|
||||
|
||||
## OUTPUT REQUIREMENTS
|
||||
- Success: ["Platform1", "Platform2"]
|
||||
- No platforms found: [No platforms identified. Please enter a valid platform name.]
|
||||
|
||||
## EXAMPLES
|
||||
- Input: "twitter, linkedin" → ["Twitter", "LinkedIn"]
|
||||
- Input: "x and insta" → ["Twitter", "Instagram"]
|
||||
- Input: "invalid content" → [No platforms identified. Please enter a valid platform name.]
|
||||
```
|
||||
|
||||
<Check>
|
||||
Note that we've instructed the LLM to output a specific error message for invalid inputs, which will serve as the end trigger for our workflow in the next step.
|
||||
</Check>
|
||||
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 3. Validate Platform Extraction Results: IF/ELSE Node
|
||||
|
||||
<Info>
|
||||
What if a user enters an invalid platform name, like `ohhhhhh` or `BookFace`? We don't want to waste time and tokens generating useless content.
|
||||
@@ -157,58 +188,64 @@ After the User Input node, add a Parameter Extractor node and configure it:
|
||||
In such cases, we can use an IF/ELSE node to create a branch that stops the workflow early. We'll set a condition that checks for the error message from the Parameter Extractor node; if that message is detected, the workflow will route directly to an Output node and end.
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_if.png"
|
||||
alt="If Condition"
|
||||
className="mx-auto"
|
||||
style={{ width:"80%" }}
|
||||
title="If Condition"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. After the Parameter Extractor node, add an IF/ELSE node.
|
||||
2. On the IF/ELSE node's panel, define the IF condition:
|
||||
|
||||
**IF** `Parameter Extractor/platform` `contains` `No platforms identified. Please enter a valid platform name.`
|
||||
2. On the IF/ELSE node's panel, define the **IF** condition:
|
||||
|
||||
**IF** `Parameter Extractor/platform` **contains** `No platforms identified. Please enter a valid platform name.`
|
||||
|
||||
3. After the IF/ELSE node, add an Output node to the IF branch.
|
||||
|
||||
4. On the Output node's panel, set `Parameter Extractor/platform` as the output variable.
|
||||
|
||||
### 4. List Operator Node: Separate Uploaded Files by Type
|
||||
### 4. Separate Uploaded Files by Type: List Operator Node
|
||||
|
||||
<Info>
|
||||
Our users can upload both images and documents as reference materials, but these two types require different handling: images can be interpreted directly by vision-enabled models, while documents must first be converted to text for an LLM to understand their content.
|
||||
|
||||
Our users can upload both images and documents as reference materials, but these two types require different handling with `gpt-5.2`: images can be interpreted directly via its vision capability, while documents must first be converted to text before the model can process them.
|
||||
|
||||
To manage this, we'll use two List Operator nodes to filter and split the uploaded files into separate branches—one for images and one for documents.
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_list_operator.png"
|
||||
alt="List Operator"
|
||||
className="mx-auto"
|
||||
style={{ width:"70%" }}
|
||||
title="List Operator"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. After the IF/ELSE node, add **two** parallel List Operator nodes to the ELSE branch.
|
||||
|
||||
1. After the IF/ELSE node, add two List Operator nodes to the ELSE branch.
|
||||
2. Rename one node to `Image` and the other to `Document`.
|
||||
3. Configure the Image node:
|
||||
1. Set `User Input/user_file` as the input variable.
|
||||
2. Enable the filter condition: `{x}type` `in` `Image`
|
||||
4. Configure the Document node:
|
||||
1. Set `User Input/user_file` as the input variable.
|
||||
2. Enable the filter condition: `{x}type` `in` `Doc`.
|
||||
|
||||
### 5. Doc Extractor Node: Extract Text from Documents
|
||||
3. Configure the Image node:
|
||||
1. Set `User Input/user_file` as the input variable.
|
||||
|
||||
2. Enable **Filter Condition**: `{x}type` **in** `Image`.
|
||||
|
||||
4. Configure the Document node:
|
||||
1. Set `User Input/user_file` as the input variable.
|
||||
|
||||
2. Enable **Filter Condition**: `{x}type` **in** `Doc`.
|
||||
|
||||
### 5. Extract Text from Documents: Doc Extractor Node
|
||||
|
||||
<Info>
|
||||
LLMs can't directly read uploaded files like PDF or DOCX. To use the information in these documents, we must first convert them into plain text that LLMs can process.
|
||||
`gpt-5.2` cannot directly read uploaded documents like PDF or DOCX, so we must first convert them into plain text.
|
||||
|
||||
This is exactly what a Doc Extractor node does. It takes document files as input and outputs clean, usable text for the next steps.
|
||||
</Info>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. After the Document node, add a Doc Extractor node.
|
||||
|
||||
2. On the Doc Extractor node's panel, set `Document/result` as the input variable.
|
||||
|
||||
### 6. LLM Node: Integrate All Reference Materials
|
||||
### 6. Integrate All Reference Materials: LLM Node
|
||||
|
||||
<Info>
|
||||
When users provide multiple reference types—draft text, documents, and images—simultaneously, we need to consolidate them into a single, coherent summary.
|
||||
@@ -216,86 +253,81 @@ After the User Input node, add a Parameter Extractor node and configure it:
|
||||
An LLM node will handle this task by analyzing all the scattered pieces to create a comprehensive context that guides subsequent content generation.
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_info_integrate.png"
|
||||
alt="Integrate Information"
|
||||
className="mx-auto"
|
||||
style={{ width:"78%" }}
|
||||
title="Integrate Information"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. After the Doc Extractor node, add an LLM node.
|
||||
|
||||
2. Connect the Image node to this LLM node as well.
|
||||
|
||||
3. Click the LLM node to configure it:
|
||||
1. Rename it to `Integrate Info`.
|
||||
2. Choose a model that supports vision (indicated by an eye icon).
|
||||
3. Enable **VISION** and set `Image/result` as the vision variable.
|
||||
4. In the system prompt field, paste the following:
|
||||
|
||||
<Warning>
|
||||
In the prompt, to reference the `Doc Extractor/text` and `User Input/draft` variables in _PROVIDED MATERIALS_, type `{` or `/` and select from the list.
|
||||
1. Rename it to `Integrate Info`.
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_reference_variable.png"
|
||||
alt="Reference Variable"
|
||||
title="Reference Variable"
|
||||
className="mx-auto"
|
||||
style={{ width:"58%" }}
|
||||
/>
|
||||
</Warning>
|
||||
```markdown SYSTEM {2,3}
|
||||
# PROVIDED MATERIALS
|
||||
Doc Extractor/text
|
||||
User Input/draft
|
||||
|
||||
# ROLE & TASK
|
||||
You are a content strategist. Analyze the provided materials and create a comprehensive content foundation for multi-platform social media optimization.
|
||||
|
||||
# ANALYSIS PRINCIPLES
|
||||
- Work exclusively with provided information—no external assumptions
|
||||
- Focus on extraction, synthesis, and strategic interpretation
|
||||
- Identify compelling and actionable elements
|
||||
- Prepare insights adaptable across different platforms
|
||||
|
||||
# REQUIRED ANALYSIS
|
||||
Deliver structured analysis with:
|
||||
|
||||
## 1. CORE MESSAGE
|
||||
- Central theme, purpose, objective
|
||||
- Key value or benefit being communicated
|
||||
|
||||
## 2. ESSENTIAL CONTENT ELEMENTS
|
||||
- Primary topics, facts, statistics, data points
|
||||
- Notable quotes, testimonials, key statements
|
||||
- Features, benefits, characteristics mentioned
|
||||
- Dates, locations, contextual details
|
||||
|
||||
## 3. STRATEGIC INSIGHTS
|
||||
- What makes content compelling/unique
|
||||
- Emotional/rational appeals present
|
||||
- Credibility factors, proof points
|
||||
- Competitive advantages highlighted
|
||||
|
||||
## 4. ENGAGEMENT OPPORTUNITIES
|
||||
- Discussion points, questions emerging
|
||||
- Calls-to-action, next steps suggested
|
||||
- Interactive/participation opportunities
|
||||
- Trending themes touched upon
|
||||
|
||||
## 5. PLATFORM OPTIMIZATION FOUNDATION
|
||||
- High-impact: Quick, shareable formats
|
||||
- Professional: Business-focused discussions
|
||||
- Community: Interaction and sharing
|
||||
- Visual: Enhanced with strong visuals
|
||||
|
||||
## 6. SUPPORTING DETAILS
|
||||
- Metrics, numbers, quantifiable results
|
||||
- Direct quotes, testimonials
|
||||
- Technical details, specifications
|
||||
- Background context available
|
||||
```
|
||||
2. Enable **VISION** and set `Image/result` as the vision variable.
|
||||
|
||||
### 7. Iteration Node: Create Customized Content for Each Platform
|
||||
3. In the system instruction field, paste the following:
|
||||
|
||||
```markdown wrap
|
||||
# ROLE & TASK
|
||||
You are a content strategist. Analyze the provided draft and reference materials (if any), then create a comprehensive content foundation for multi-platform social media optimization.
|
||||
|
||||
# ANALYSIS PRINCIPLES
|
||||
- Work exclusively with provided information—no external assumptions
|
||||
- Focus on extraction, synthesis, and strategic interpretation
|
||||
- Identify compelling and actionable elements
|
||||
- Prepare insights adaptable across different platforms
|
||||
|
||||
# REQUIRED ANALYSIS
|
||||
Deliver structured analysis with:
|
||||
|
||||
## 1. CORE MESSAGE
|
||||
- Central theme, purpose, objective
|
||||
- Key value or benefit being communicated
|
||||
|
||||
## 2. ESSENTIAL CONTENT ELEMENTS
|
||||
- Primary topics, facts, statistics, data points
|
||||
- Notable quotes, testimonials, key statements
|
||||
- Features, benefits, characteristics mentioned
|
||||
- Dates, locations, contextual details
|
||||
|
||||
## 3. STRATEGIC INSIGHTS
|
||||
- What makes content compelling/unique
|
||||
- Emotional/rational appeals present
|
||||
- Credibility factors, proof points
|
||||
- Competitive advantages highlighted
|
||||
|
||||
## 4. ENGAGEMENT OPPORTUNITIES
|
||||
- Discussion points, questions emerging
|
||||
- Calls-to-action, next steps suggested
|
||||
- Interactive/participation opportunities
|
||||
- Trending themes touched upon
|
||||
|
||||
## 5. PLATFORM OPTIMIZATION FOUNDATION
|
||||
- High-impact: Quick, shareable formats
|
||||
- Professional: Business-focused discussions
|
||||
- Community: Interaction and sharing
|
||||
- Visual: Enhanced with strong visuals
|
||||
|
||||
## 6. SUPPORTING DETAILS
|
||||
- Metrics, numbers, quantifiable results
|
||||
- Direct quotes, testimonials
|
||||
- Technical details, specifications
|
||||
- Background context available
|
||||
```
|
||||
5. Click **Add Message** to add a user message, then paste the following. Type `{` or `/` to replace `Doc Extractor/text` and `User Input/draft` with the corresponding variables from the list.
|
||||
|
||||
```markdown USER
|
||||
Draft: User Input/draft
|
||||
Reference material: Doc Extractor/text
|
||||
```
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 7. Create Customized Content for Each Platform: Iteration Node
|
||||
|
||||
<Info>
|
||||
Now that the integrated references and target platforms are ready, let's generate a tailored post for each platform using an Iteration node.
|
||||
@@ -303,218 +335,228 @@ After the User Input node, add a Parameter Extractor node and configure it:
|
||||
The node will loop through the list of platforms and run a sub-workflow for each: first analyze the specific platform's style guidelines and best practices, then generate optimized content based on all available information.
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_integration.png"
|
||||
alt="Iteration Node"
|
||||
className="mx-auto"
|
||||
style={{ width:"62%" }}
|
||||
title="Iteration Node"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. After the Integrate Info node, add an Iteration node.
|
||||
|
||||
2. Inside the Iteration node, add an LLM node and configure it:
|
||||
1. Rename it to `Identify Style`.
|
||||
2. Choose a model.
|
||||
3. In the system prompt field, paste the following:
|
||||
|
||||
<Warning>
|
||||
In the prompt, to reference the `Current Iteration/item` variable in _ROLE & TASK_ and _OUTPUT FORMAT EXAMPLES_, type `{` or `/` and select from the list.
|
||||
</Warning>
|
||||
````markdown SYSTEM {2,40}
|
||||
# ROLE & TASK
|
||||
You are a social media expert. Analyze the platform "Current Iteration/item" and provide content creation guidelines.
|
||||
|
||||
# ANALYSIS REQUIRED
|
||||
For the given platform, provide:
|
||||
|
||||
## 1. PLATFORM PROFILE
|
||||
- Platform type and category
|
||||
- Target audience characteristics
|
||||
|
||||
## 2. CONTENT GUIDELINES
|
||||
- Optimal content length (characters/words)
|
||||
- Recommended tone (professional/casual/conversational)
|
||||
- Formatting best practices (line breaks, emojis, etc.)
|
||||
|
||||
## 3. ENGAGEMENT STRATEGY
|
||||
- Hashtag recommendations (quantity and style)
|
||||
- Call-to-action best practices
|
||||
- Algorithm optimization tips
|
||||
|
||||
## 4. TECHNICAL SPECS
|
||||
- Character/word limits
|
||||
- Visual content requirements
|
||||
- Special formatting needs
|
||||
|
||||
## 5. PLATFORM-SPECIFIC NOTES
|
||||
- Unique features or recent changes
|
||||
- Industry-specific considerations
|
||||
- Community engagement approaches
|
||||
|
||||
# OUTPUT REQUIREMENTS
|
||||
- For recognized platforms: Provide specific guidelines
|
||||
- For unknown platforms: Base recommendations on similar platforms
|
||||
- Focus on actionable, practical advice
|
||||
- Be concise but comprehensive
|
||||
|
||||
# OUTPUT FORMAT EXAMPLES
|
||||
```json
|
||||
{
|
||||
"platform_name": "Current Iteration/item",
|
||||
"platform_type": "social_media/professional_network/visual_platform/microblogging",
|
||||
"content_guidelines": {
|
||||
"max_length": "character/word limit",
|
||||
"optimal_length": "recommended range",
|
||||
"tone": "professional/casual/conversational/authoritative",
|
||||
"hashtag_strategy": "quantity and placement guidelines",
|
||||
"formatting": "line breaks, emojis, mentions guidelines",
|
||||
"engagement_focus": "comments/shares/likes/retweets",
|
||||
"call_to_action": "appropriate CTA style"
|
||||
},
|
||||
"special_considerations": "Any unique platform requirements or recent changes",
|
||||
"confidence_level": "high/medium/low based on platform recognition"
|
||||
}
|
||||
````
|
||||
3. After the Identity Style node, add another LLM node and configure it:
|
||||
1. Rename it to `Create Content`.
|
||||
2. Choose a model.
|
||||
3. In the system prompt field, paste the following:
|
||||
1. Rename it to `Identify Style`.
|
||||
|
||||
<Warning>
|
||||
In the prompt, to reference the following variables, type `{` or `/` and select from the list.
|
||||
- `Identify Style/text` in _PLATFORM GUIDELINES_
|
||||
- `Integrate Info/text` in _SOURCE INFORMATION_
|
||||
- `User Input/voice_and_tone` in _VOICE & TONE (OPTIONAL)_
|
||||
- `User Input/language` in _LANGUAGE REQUIREMENT_
|
||||
</Warning>
|
||||
```markdown SYSTEM {6,9,12,15}
|
||||
# ROLE & TASK
|
||||
You are an expert social media content creator. Generate publication-ready content that matches platform guidelines, incorporates source information, and follows specified voice/tone and language requirements.
|
||||
|
||||
# INPUT MATERIALS
|
||||
## 1. PLATFORM GUIDELINES
|
||||
Identify Style/text
|
||||
|
||||
## 2. SOURCE INFORMATION
|
||||
Integrate Info/text
|
||||
|
||||
## 3. VOICE & TONE (OPTIONAL)
|
||||
User Input/voice_and_tone
|
||||
|
||||
## 4. LANGUAGE REQUIREMENT
|
||||
- Generate ALL content exclusively in: User Input/language
|
||||
- No mixing of languages whatsoever
|
||||
- Adapt platform terminology to the specified language
|
||||
|
||||
# CONTENT REQUIREMENTS
|
||||
- Follow platform guidelines exactly (format, length, tone, hashtags)
|
||||
- Integrate source information effectively (key messages, data, value props)
|
||||
- Apply voice & tone consistently (if provided)
|
||||
- Optimize for platform-specific engagement
|
||||
- Ensure cultural appropriateness for the specified language
|
||||
|
||||
# OUTPUT FORMAT
|
||||
- Generate ONLY the final social media post content. No explanations or meta-commentary. Content must be immediately copy-paste ready.
|
||||
- Maximum heading level: ## (H2) - never use # (H1)
|
||||
- No horizontal dividers: avoid ---
|
||||
|
||||
# QUALITY CHECKLIST
|
||||
✅ Platform guidelines followed
|
||||
✅ Source information integrated
|
||||
✅ Voice/tone consistent (when provided)
|
||||
✅ Language consistency maintained
|
||||
✅ Engagement optimized
|
||||
✅ Publication ready
|
||||
```
|
||||
4. Enable structured output.
|
||||
2. In the system instruction field, paste the following:
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_structured_output.png"
|
||||
alt="Structured Output"
|
||||
title="Structured Output"
|
||||
className="mx-auto"
|
||||
style={{ width:"64%" }}
|
||||
/>
|
||||
1. Next to **OUTPUT VARIABLES**, toggle **STRUCTURED** on. The structured_output variable will appear below.
|
||||
2. Next to **structured_output**, click **Configure**.
|
||||
3. In the pop-up schema editor, click **Import From JSON** in the top-right corner, and paste the following:
|
||||
```markdown wrap
|
||||
# ROLE & TASK
|
||||
You are a social media expert. Analyze the platform and provide content creation guidelines.
|
||||
|
||||
# ANALYSIS REQUIRED
|
||||
For the given platform, provide:
|
||||
|
||||
## 1. PLATFORM PROFILE
|
||||
- Platform type and category
|
||||
- Target audience characteristics
|
||||
|
||||
## 2. CONTENT GUIDELINES
|
||||
- Optimal content length (characters/words)
|
||||
- Recommended tone (professional/casual/conversational)
|
||||
- Formatting best practices (line breaks, emojis, etc.)
|
||||
|
||||
## 3. ENGAGEMENT STRATEGY
|
||||
- Hashtag recommendations (quantity and style)
|
||||
- Call-to-action best practices
|
||||
- Algorithm optimization tips
|
||||
|
||||
## 4. TECHNICAL SPECS
|
||||
- Character/word limits
|
||||
- Visual content requirements
|
||||
- Special formatting needs
|
||||
|
||||
## 5. PLATFORM-SPECIFIC NOTES
|
||||
- Unique features or recent changes
|
||||
- Industry-specific considerations
|
||||
- Community engagement approaches
|
||||
|
||||
# OUTPUT REQUIREMENTS
|
||||
- For recognized platforms: Provide specific guidelines
|
||||
- For unknown platforms: Base recommendations on similar platforms
|
||||
- Focus on actionable, practical advice
|
||||
- Be concise but comprehensive
|
||||
```
|
||||
3. Click **Add Message** to add a user message, then paste the following. Type `{` or `/` to replace `Current Iteration/item` with the corresponding variable from the list.
|
||||
|
||||
```markdown USER
|
||||
Platform: Current Iteration/item
|
||||
```
|
||||
3. After the Identify Style node, add another LLM node and configure it:
|
||||
|
||||
1. Rename it to `Create Content`.
|
||||
|
||||
2. In the system instruction field, paste the following:
|
||||
|
||||
```markdown wrap
|
||||
# ROLE & TASK
|
||||
You are an expert social media content creator. Generate publication-ready content that matches platform guidelines, incorporates source information, and follows specified voice/tone and language requirements.
|
||||
|
||||
# LANGUAGE REQUIREMENT
|
||||
- Generate ALL content exclusively in the target language specified in the user message. You MUST write the entire post in that language, regardless of the language of any source materials.
|
||||
- No mixing of languages whatsoever
|
||||
- Adapt platform terminology to the target language
|
||||
|
||||
# CONTENT REQUIREMENTS
|
||||
- Follow platform guidelines exactly (format, length, tone, hashtags)
|
||||
- Integrate source information effectively (key messages, data, value props)
|
||||
- Apply voice & tone consistently (if provided)
|
||||
- Optimize for platform-specific engagement
|
||||
- Ensure cultural appropriateness for the specified language
|
||||
|
||||
# OUTPUT FORMAT
|
||||
- Generate ONLY the final social media post content. No explanations or meta-commentary. Content must be immediately copy-paste ready.
|
||||
- Maximum heading level: ## (H2) - never use # (H1)
|
||||
- No horizontal dividers: avoid ---
|
||||
|
||||
# QUALITY CHECKLIST
|
||||
✅ Platform guidelines followed
|
||||
✅ Source information integrated
|
||||
✅ Voice/tone consistent (when provided)
|
||||
✅ Language consistency maintained
|
||||
✅ Engagement optimized
|
||||
✅ Publication ready
|
||||
```
|
||||
3. Click **Add Message** to add a user message, then paste the following. Type `{` or `/` to replace all inputs with the corresponding variable from the list.
|
||||
|
||||
```markdown USER
|
||||
Platform Name: Current Iteration/item
|
||||
Target Language: User Input/language
|
||||
Platform Guidelines: Identify Style/text
|
||||
Source Information: Integrate Info/text
|
||||
Voice & Tone: User Input/voice_and_tone
|
||||
```
|
||||
|
||||
4. Enable structured output.
|
||||
|
||||
<Info>
|
||||
This allows us to extract specific pieces of information from the LLM's response in a more reliable way, which is crucial for the next step where we format the final output.
|
||||
</Info>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. Next to **Output Variables**, toggle **Structured** on. The `structured_output` variable will appear below. Click **Configure**.
|
||||
|
||||
2. In the pop-up schema editor, click **Import From JSON** in the top-right corner, and paste the following:
|
||||
|
||||
```json
|
||||
{
|
||||
"platform_name": "string",
|
||||
"post_content": "string"
|
||||
}
|
||||
```
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
```json
|
||||
{
|
||||
"platform_name": "string",
|
||||
"post_content": "string"
|
||||
}
|
||||
```
|
||||
4. Click the Iteration node to configure it:
|
||||
1. Set `Parameter Extractor/platform` as the input variable.
|
||||
2. Set `Create Content/structured_output` as the output variable.
|
||||
3. Enable **PARALLEL MODE** and set the maximum parallelism to `10`.
|
||||
|
||||
<Check>
|
||||
This is why we included `(≤10)` in the label name for the target platform field back in the User Input node.
|
||||
</Check>
|
||||
1. Set `Parameter Extractor/platform` as the input variable.
|
||||
|
||||
### 8. Template Node: Format the Final Output
|
||||
2. Set `Create Content/structured_output` as the output variable.
|
||||
|
||||
3. Enable **Parallel Mode** and set the maximum parallelism to `10`.
|
||||
|
||||
<Check>
|
||||
This is why we included `(≤10)` in the label name for the target platform field back in the User Input node.
|
||||
</Check>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 8. Format the Final Output: Template Node
|
||||
|
||||
<Info>
|
||||
The Iteration node generates a post for each platform, but its output is a raw array of data (e.g., `[{"platform_name": "Twitter", "post_content": "..."}]`) that isn't very readable. We need to present the results in a clearer format.
|
||||
|
||||
That's where the Template node comes in—it allows us to format this raw data into well-organized text using [Jinja2](https://jinja.palletsprojects.com/en/stable/) templating, ensuring the final output is user-friendly and easy to understand.
|
||||
That's where the Template node comes in—it allows us to format this raw data into well-organized text using [Jinja2](https://jinja.palletsprojects.com/en/stable/) templating, ensuring the final output is user-friendly and easy to read.
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_template.png"
|
||||
alt="Template Node"
|
||||
title="Template Node"
|
||||
style={{ width:"49%" }}
|
||||
className="mx-auto"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. After the Iteration node, add a Template node.
|
||||
2. On the Template node's panel, set `Iteration/output` as the input variable.
|
||||
3. Paste the following Jinja2 code (**remember to delete the comments**).
|
||||
|
||||
```
|
||||
{% for item in output %} # Loop through each platform-content pair in the input array
|
||||
# 📱 {{ item.platform_name }} # Display the platform name as an H1 heading with a phone emoji
|
||||
{{ item.post_content }} # Display the generated content for this platform
|
||||
# Add a blank line between platforms for better readability
|
||||
{% endfor %} # End the loop
|
||||
```
|
||||
2. On the Template node's panel, set `Iteration/output` as the input variable and name it `output`.
|
||||
|
||||
<Tip>
|
||||
While LLMs can handle output formatting as well, their outputs can be inconsistent and unpredictable. For rule-based formatting that requires no reasoning, the Template node gets things done in a more stable and reliable way at zero token cost.
|
||||
3. Paste the following Jinja2 code:
|
||||
|
||||
LLMs are incredibly powerful, but knowing when to use the right tool is key to building more reliable and cost-effective AI applications.
|
||||
</Tip>
|
||||
```
|
||||
{% for item in output %}
|
||||
# 📱 {{ item.platform_name }}
|
||||
{{ item.post_content }}
|
||||
|
||||
### 9. Output Node: Return the Results to Users
|
||||
{% endfor %}
|
||||
```
|
||||
|
||||
- `{% for item in output %}` / `{% endfor %}`: Loops through each platform-content pair in the input array.
|
||||
- `{{ item.platform_name }}`: Displays the platform name as an H1 heading with a phone emoji.
|
||||
- `{{ item.post_content }}`: Displays the generated content for that platform.
|
||||
- The blank line between `{{ item.post_content }}` and `{% endfor %}` adds spacing between platforms in the final output.
|
||||
|
||||
<Tip>
|
||||
While LLMs can handle output formatting as well, their outputs can be inconsistent and unpredictable. For rule-based formatting that requires no reasoning, the Template node gets things done in a more stable and reliable way at zero token cost.
|
||||
|
||||
LLMs are incredibly powerful, but knowing when to use the right tool is key to building more reliable and cost-effective AI applications.
|
||||
</Tip>
|
||||
|
||||
### 9. Return the Results to Users: Output Node
|
||||
|
||||
1. After the Template node, add an Output node.
|
||||
2. On the Output node's panel, set the `Template/output` as the output variable.
|
||||
|
||||
## Step 3: Test
|
||||
|
||||
Your workflow is now complete\! Let’s test it out.
|
||||
Your workflow is now complete\! Let's test it out.
|
||||
|
||||
1. Make sure your Checklist is clear.
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_checklist_clear.png"
|
||||
alt="Check Clecklist"
|
||||
className="mx-auto"
|
||||
style={{ width:"77%" }}
|
||||
title="Check Clecklist"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
2. Check your workflow against the reference diagram provided at the beginning to ensure all nodes and connections match.
|
||||
|
||||
3. Click **Test Run** in the top-right corner, fill in the input fields, then click **Start Run**.
|
||||
|
||||
To run a single node with cached inputs, click the **Run this step** icon at the top of its configuration panel.
|
||||
If you're not sure what to enter, try these sample inputs:
|
||||
|
||||
<Tip>
|
||||
To test how a node reacts to different inputs from previous nodes, you don't need to re-run the entire workflow. Just click **View cached variables** at the bottom of the canvas, find the variable you want to change from the list, and edit its value.
|
||||
</Tip>
|
||||
If you encounter any errors, check the **LAST RUN** logs of the corresponding node to identify the exact cause of the problem.
|
||||
- **Draft**: `We just launched a new AI writing assistant that helps teams create content 10x faster.`
|
||||
|
||||
- **Upload File**: Leave empty
|
||||
|
||||
- **Voice & Tone**: `Friendly and enthusiastic, but professional`
|
||||
|
||||
- **Target Platform**: `Twitter and LinkedIn`
|
||||
|
||||
- **Language**: `English`
|
||||
|
||||
A successful run produces a formatted output with a separate post for each platform, like this:
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
<Note>
|
||||
Your results may vary depending on the model you're using. Higher-capability models generally produce better output quality.
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
To test how a node reacts to different inputs from previous nodes, you don't need to re-run the entire workflow. Just click **View cached variables** at the bottom of the canvas, find the variable you want to change, and edit its value.
|
||||
</Tip>
|
||||
|
||||
If you encounter any errors, check the **Last Run** logs of the corresponding node to identify the exact cause of the problem.
|
||||
|
||||
## Step 4: Publish & Share
|
||||
|
||||
@@ -522,8 +564,4 @@ Once the workflow runs as expected and you're happy with the results, click **Pu
|
||||
|
||||
<Warning>
|
||||
If you make any changes later, always remember to publish again so the updates take effect.
|
||||
</Warning>
|
||||
|
||||
<Tip>
|
||||
After publishing, you can run a quick end-to-end test in the live environment to confirm that everything works the same as in **Studio**.
|
||||
</Tip>
|
||||
</Warning>
|
||||
BIN
images/deeper_dive_doc_extractor.png
Normal file
|
After Width: | Height: | Size: 221 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 170 KiB |
BIN
images/deeper_dive_import_from_json.png
Normal file
|
After Width: | Height: | Size: 49 KiB |
|
Before Width: | Height: | Size: 149 KiB After Width: | Height: | Size: 528 KiB |
BIN
images/deeper_dive_iteration.png
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
images/deeper_dive_iteration_config.png
Normal file
|
After Width: | Height: | Size: 251 KiB |
|
Before Width: | Height: | Size: 186 KiB After Width: | Height: | Size: 235 KiB |
|
Before Width: | Height: | Size: 194 KiB After Width: | Height: | Size: 297 KiB |
|
Before Width: | Height: | Size: 143 KiB After Width: | Height: | Size: 189 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 73 KiB |
|
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 217 KiB |
BIN
images/deeper_dive_test_output.png
Normal file
|
After Width: | Height: | Size: 259 KiB |
BIN
images/deeper_dive_user_message.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
|
Before Width: | Height: | Size: 188 KiB After Width: | Height: | Size: 285 KiB |
@@ -14,44 +14,67 @@ icon: "forward"
|
||||
|
||||
完全なワークフローを以下に示します。構築中はいつでも参照して、軌道に乗っていることを確認し、すべてのノードがどのように連携するかを確認してください。
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_workflow_overview.png"
|
||||
alt="クイックスタートワークフロー概要"
|
||||
title="クイックスタートワークフロー概要"
|
||||
className="mx-auto"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## 始める前に
|
||||
|
||||
<Steps>
|
||||
<Step title="Dify Cloudにサインイン">
|
||||
|
||||
[Dify Cloud](https://cloud.dify.ai)にアクセスして無料でサインアップします。
|
||||
|
||||
Sandboxプランの新しいアカウントには、OpenAI、Anthropic、Geminiなどのプロバイダーからモデルを呼び出すための200メッセージクレジットが含まれています。
|
||||
|
||||
<Info>
|
||||
メッセージクレジットは1回限りの割り当てであり、毎月更新されません。
|
||||
</Info>
|
||||
</Step>
|
||||
|
||||
<Step title="モデルプロバイダーの設定">
|
||||
|
||||
**設定** > **モデルプロバイダー**に移動し、OpenAIプラグインをインストールします。このチュートリアルでは`gpt-5.2`を使用します。
|
||||
|
||||
Sandboxクレジットを使用している場合、APIキーは不要です。プラグインはインストール後すぐに使用できます。独自のAPIキーを設定して使用することもできます。
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="デフォルトモデルの設定">
|
||||
|
||||
1. **モデルプロバイダー**ページの右上隅で、**システムモデル設定**をクリックします。
|
||||
|
||||
2. **システム推論モデル**を`gpt-5.2`に設定します。これがワークフローのデフォルトモデルになります。
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## ステップ1:新しいワークフローの作成
|
||||
|
||||
1. **スタジオ**に移動し、**空白から作成** \> **ワークフロー**を選択します。
|
||||
1. **スタジオ**に移動し、**空白から作成** > **ワークフロー**を選択します。
|
||||
|
||||
2. ワークフローに`マルチプラットフォームコンテンツジェネレーター`という名前を付けて、**作成**をクリックします。自動的にワークフローキャンバスに移動し、構築を開始します。
|
||||
|
||||
## ステップ2:ワークフローノードの追加と設定
|
||||
3. ユーザー入力ノードを選択してワークフローを開始します。
|
||||
|
||||
## ステップ2:オーケストレーションと設定
|
||||
|
||||
<Note>
|
||||
言及されていない設定はデフォルト値のままにしてください。
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
ノードと変数に明確で説明的な名前を付けて、ワークフロー内で識別と参照が簡単になるようにします。
|
||||
ノードと変数に明確で説明的な名前を付けて、識別と参照が簡単になるようにします。
|
||||
</Tip>
|
||||
|
||||
### 1. ユーザー入力ノード:エンドユーザーの入力を収集
|
||||
### 1. ユーザー入力を収集:ユーザー入力ノード
|
||||
|
||||
<Info>
|
||||
まず、ドラフトテキスト、ターゲットプラットフォーム、希望のトーン、参考資料など、ユーザーから収集する情報を定義する必要があります。
|
||||
まず、コンテンツジェネレーターを実行するためにユーザーから収集する情報を定義する必要があります。ドラフトテキスト、ターゲットプラットフォーム、希望のトーン、参考資料などです。
|
||||
|
||||
ユーザー入力ノードは、これらを簡単に設定できる場所です。ここに追加する各入力フィールドは、すべての下流ノードが参照して使用できる変数になります。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_start.png"
|
||||
alt="ユーザー入力ノード"
|
||||
title="ユーザー入力ノード"
|
||||
className="mx-auto"
|
||||
style={{ width:"71%" }}
|
||||
/>
|
||||
|
||||
ユーザー入力ノードをクリックして設定パネルを開き、次の入力フィールドを追加します。
|
||||
|
||||
<Accordion title="参考資料 - テキスト">
|
||||
@@ -59,7 +82,7 @@ icon: "forward"
|
||||
- 変数名:`draft`
|
||||
- ラベル名:`ドラフト`
|
||||
- 最大長:`2048`
|
||||
- 必須:`いいえ`
|
||||
- 必須:`はい`
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="参考資料 - ファイル">
|
||||
@@ -96,62 +119,70 @@ icon: "forward"
|
||||
- `English`
|
||||
- `日本語`
|
||||
- `简体中文`
|
||||
- デフォルト値:`English`
|
||||
- 必須:`はい`
|
||||
</Accordion>
|
||||
|
||||
### 2. パラメータ抽出器ノード:ターゲットプラットフォームの識別
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 2. ターゲットプラットフォームの識別:パラメータ抽出器ノード
|
||||
|
||||
<Info>
|
||||
プラットフォームフィールドは自由形式のテキスト入力を受け入れるため、ユーザーは様々な方法で入力する可能性があります:`x and linkedIn`、`post on Twitter and LinkedIn`、さらには`Twitter + LinkedIn please`など。しかし、下流ノードが確実に動作できる`["Twitter", "LinkedIn"]`のようなクリーンで構造化されたリストが必要です。
|
||||
プラットフォームフィールドは自由形式のテキスト入力を受け入れるため、ユーザーは様々な方法で入力する可能性があります:`x and linkedIn`、`post on Twitter and LinkedIn`、さらには`Twitter + LinkedIn please`など。
|
||||
|
||||
これはパラメータ抽出器ノードの完璧な仕事です。LLMを使用してユーザーの自然言語を分析し、これらすべてのバリエーションを認識し、標準化された配列を出力します。
|
||||
しかし、下流ノードが確実に動作できる`["Twitter", "LinkedIn"]`のようなクリーンで構造化されたリストが必要です。
|
||||
|
||||
これはパラメータ抽出器ノードの完璧な仕事です。今回のケースでは、gpt-5.2モデルを使用してユーザーの自然言語を分析し、これらすべてのバリエーションを認識し、標準化された配列を出力します。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_paramater_extractor.png"
|
||||
alt="パラメータ抽出器"
|
||||
title="パラメータ抽出器"
|
||||
className="mx-auto"
|
||||
style={{ width:"73%" }}
|
||||
/>
|
||||
|
||||
ユーザー入力ノードの後に、パラメータ抽出器ノードを追加して設定します:
|
||||
|
||||
1. モデルを選択します。
|
||||
2. `User Input/platform`を入力変数として設定します。
|
||||
3. 抽出パラメータを追加します:
|
||||
1. 名前:`platform`
|
||||
2. タイプ:`Array[String]`
|
||||
3. 説明:`ユーザーがカスタマイズされたコンテンツを作成したいプラットフォームを識別して抽出します。`
|
||||
4. 必須:`はい`
|
||||
4. 指示フィールドに、LLMのパラメータ抽出をガイドする以下を貼り付けます:
|
||||
1. **入力変数**フィールドで、`User Input/platform`を選択します。
|
||||
|
||||
```markdown 指示
|
||||
# タスク説明
|
||||
入力からプラットフォーム名を解析し、JSON配列として出力します。
|
||||
2. 抽出パラメータを追加します:
|
||||
|
||||
## 処理ルール
|
||||
- 複数の区切り文字をサポート:カンマ、セミコロン、スペース、改行、"and"、"&"、"|"など。
|
||||
- 一般的なプラットフォーム名のバリアントを標準化(twitter/X→Twitter、insta→Instagramなど)。
|
||||
- 重複と無効なエントリを削除
|
||||
- 未知だが合理的なプラットフォーム名を保持
|
||||
- 名前:`platform`
|
||||
|
||||
## 出力要件
|
||||
- 成功:["Platform1", "Platform2"]
|
||||
- プラットフォームが見つからない:[プラットフォームが識別されませんでした。有効なプラットフォーム名を入力してください。]
|
||||
- タイプ:`Array[String]`
|
||||
|
||||
## 例
|
||||
- 入力:"twitter, linkedin" → ["Twitter", "LinkedIn"]
|
||||
- 入力:"x and insta" → ["Twitter", "Instagram"]
|
||||
- 入力:"invalid content" → [プラットフォームが識別されませんでした。有効なプラットフォーム名を入力してください。]
|
||||
```
|
||||
- 説明:`The platform(s) for which the user wants to create tailored content.`
|
||||
|
||||
<Check>
|
||||
無効な入力に対して特定のエラーメッセージを出力するようLLMに指示したことに注意してください。これは次のステップでワークフローの終了トリガーとして機能します。
|
||||
</Check>
|
||||
- 必須:`はい`
|
||||
|
||||
### 3. IF/ELSEノード:プラットフォーム抽出結果の検証
|
||||
3. **指示**フィールドに、LLMのパラメータ抽出をガイドする以下を貼り付けます:
|
||||
|
||||
```markdown INSTRUCTION
|
||||
# TASK DESCRIPTION
|
||||
Parse platform names from input and output as a JSON array.
|
||||
|
||||
## PROCESSING RULES
|
||||
- Support multiple delimiters: commas, semicolons, spaces, line breaks, "and", "&", "|", etc.
|
||||
- Standardize common platform name variants (twitter/X→Twitter, insta→Instagram, etc.)
|
||||
- Remove duplicates and invalid entries
|
||||
- Preserve unknown but reasonable platform names
|
||||
- Preserve the original language of platform names
|
||||
|
||||
## OUTPUT REQUIREMENTS
|
||||
- Success: ["Platform1", "Platform2"]
|
||||
- No platforms found: [No platforms identified. Please enter a valid platform name.]
|
||||
|
||||
## EXAMPLES
|
||||
- Input: "twitter, linkedin" → ["Twitter", "LinkedIn"]
|
||||
- Input: "x and insta" → ["Twitter", "Instagram"]
|
||||
- Input: "invalid content" → [No platforms identified. Please enter a valid platform name.]
|
||||
```
|
||||
|
||||
<Check>
|
||||
無効な入力に対して特定のエラーメッセージを出力するようLLMに指示したことに注意してください。これは次のステップでワークフローの終了トリガーとして機能します。
|
||||
</Check>
|
||||
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 3. プラットフォーム抽出結果の検証:IF/ELSEノード
|
||||
|
||||
<Info>
|
||||
ユーザーが`ohhhhhh`や`BookFace`のような無効なプラットフォーム名を入力した場合はどうなるでしょうか?無駄なコンテンツを生成するために時間とトークンを無駄にしたくありません。
|
||||
@@ -159,58 +190,64 @@ icon: "forward"
|
||||
そのような場合、IF/ELSEノードを使用してワークフローを早期に停止する分岐を作成できます。パラメータ抽出器ノードからのエラーメッセージをチェックする条件を設定し、そのメッセージが検出された場合、ワークフローは直接出力ノードにルーティングされます。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_if.png"
|
||||
alt="If条件"
|
||||
className="mx-auto"
|
||||
style={{ width:"80%" }}
|
||||
title="If条件"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. パラメータ抽出器ノードの後に、IF/ELSEノードを追加します。
|
||||
2. IF/ELSEノードのパネルで、IF条件を定義します:
|
||||
|
||||
**IF** `Parameter Extractor/platform` `含む` `プラットフォームが識別されませんでした。有効なプラットフォーム名を入力してください。`
|
||||
2. IF/ELSEノードのパネルで、**IF**条件を定義します:
|
||||
|
||||
**IF** `Parameter Extractor/platform` **含む** `No platforms identified. Please enter a valid platform name.`
|
||||
|
||||
3. IF/ELSEノードの後、IFブランチに出力ノードを追加します。
|
||||
|
||||
4. 出力ノードのパネルで、`Parameter Extractor/platform`を出力変数として設定します。
|
||||
|
||||
### 4. リスト演算子ノード:アップロードされたファイルをタイプ別に分離
|
||||
### 4. アップロードされたファイルをタイプ別に分離:リスト演算子ノード
|
||||
|
||||
<Info>
|
||||
ユーザーは参考資料として画像とドキュメントの両方をアップロードできますが、この2つのタイプは異なる処理が必要です:画像はビジョン対応モデルで直接解釈できますが、ドキュメントはまずLLMがコンテンツを理解できるようにテキストに変換する必要があります。
|
||||
|
||||
ユーザーは参考資料として画像とドキュメントの両方をアップロードできますが、`gpt-5.2`ではこの2つのタイプは異なる処理が必要です:画像はビジョン機能を通じて直接解釈できますが、ドキュメントはモデルが処理できるようにまずテキストに変換する必要があります。
|
||||
|
||||
これを管理するために、2つのリスト演算子ノードを使用して、アップロードされたファイルをフィルタリングし、別々のブランチに分割します—1つは画像用、1つはドキュメント用です。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_list_operator.png"
|
||||
alt="リスト演算子"
|
||||
className="mx-auto"
|
||||
style={{ width:"70%" }}
|
||||
title="リスト演算子"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. IF/ELSEノードの後、ELSEブランチに**2つ**の並列リスト演算子ノードを追加します。
|
||||
|
||||
1. IF/ELSEノードの後、ELSEブランチに2つのリスト演算子ノードを追加します。
|
||||
2. 1つのノードを`画像`、もう1つを`ドキュメント`に名前を変更します。
|
||||
3. 画像ノードを設定します:
|
||||
1. `User Input/user_file`を入力変数として設定します。
|
||||
2. フィルタ条件を有効にします:`{x}type` `に` `Image`
|
||||
4. ドキュメントノードを設定します:
|
||||
1. `User Input/user_file`を入力変数として設定します。
|
||||
2. フィルタ条件を有効にします:`{x}type` `に` `Doc`。
|
||||
|
||||
### 5. ドキュメント抽出器ノード:ドキュメントからテキストを抽出
|
||||
3. 画像ノードを設定します:
|
||||
1. `User Input/user_file`を入力変数として設定します。
|
||||
|
||||
2. **フィルタ条件**を有効にします:`{x}type` **に** `Image`。
|
||||
|
||||
4. ドキュメントノードを設定します:
|
||||
1. `User Input/user_file`を入力変数として設定します。
|
||||
|
||||
2. **フィルタ条件**を有効にします:`{x}type` **に** `Doc`。
|
||||
|
||||
### 5. ドキュメントからテキストを抽出:ドキュメント抽出器ノード
|
||||
|
||||
<Info>
|
||||
LLMはPDFやDOCXなどのアップロードされたファイルを直接読むことはできません。これらのドキュメントの情報を使用するには、まずLLMが処理できるプレーンテキストに変換する必要があります。
|
||||
`gpt-5.2`はPDFやDOCXなどのアップロードされたドキュメントを直接読むことはできないため、まずプレーンテキストに変換する必要があります。
|
||||
|
||||
これがまさにドキュメント抽出器ノードが行うことです。ドキュメントファイルを入力として受け取り、次のステップのためにクリーンで使用可能なテキストを出力します。
|
||||
</Info>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. ドキュメントノードの後に、ドキュメント抽出器ノードを追加します。
|
||||
|
||||
2. ドキュメント抽出器ノードのパネルで、`Document/result`を入力変数として設定します。
|
||||
|
||||
### 6. LLMノード:すべての参考資料を統合
|
||||
### 6. すべての参考資料を統合:LLMノード
|
||||
|
||||
<Info>
|
||||
ユーザーが複数の参考タイプ—ドラフトテキスト、ドキュメント、画像—を同時に提供する場合、それらを一つのまとまった要約に統合する必要があります。
|
||||
@@ -218,86 +255,81 @@ icon: "forward"
|
||||
LLMノードは、すべての散在する部分を分析してこのタスクを処理し、後続のコンテンツ生成をガイドする包括的なコンテキストを作成します。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_info_integrate.png"
|
||||
alt="情報統合"
|
||||
className="mx-auto"
|
||||
style={{ width:"78%" }}
|
||||
title="情報統合"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. ドキュメント抽出器ノードの後に、LLMノードを追加します。
|
||||
|
||||
2. 画像ノードもこのLLMノードに接続します。
|
||||
|
||||
3. LLMノードをクリックして設定します:
|
||||
1. `情報統合`に名前を変更します。
|
||||
2. ビジョンをサポートするモデル(目のアイコンで示される)を選択します。
|
||||
3. **ビジョン**を有効にし、`Image/result`をビジョン変数として設定します。
|
||||
4. システムプロンプトフィールドに、以下を貼り付けます:
|
||||
|
||||
<Warning>
|
||||
プロンプトで、_提供された材料_の`Doc Extractor/text`と`User Input/draft`変数を参照するには、`{`または`/`を入力してリストから選択します。
|
||||
1. `情報統合`に名前を変更します。
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_reference_variable.png"
|
||||
alt="変数を参照"
|
||||
title="変数を参照"
|
||||
className="mx-auto"
|
||||
style={{ width:"58%" }}
|
||||
/>
|
||||
</Warning>
|
||||
```markdown システム {2,3}
|
||||
# 提供された材料
|
||||
Doc Extractor/text
|
||||
User Input/draft
|
||||
2. **VISION**を有効にし、`Image/result`をビジョン変数として設定します。
|
||||
|
||||
# 役割とタスク
|
||||
あなたはコンテンツストラテジストです。提供された資料を分析し、マルチプラットフォームソーシャルメディア最適化のための包括的なコンテンツ基盤を作成します。
|
||||
3. システム指示フィールドに、以下を貼り付けます:
|
||||
|
||||
# 分析原則
|
||||
- 提供された情報のみで作業—外部の仮定なし
|
||||
- 抽出、統合、戦略的解釈に焦点を当てる
|
||||
- 説得力のある実用的な要素を特定
|
||||
- 異なるプラットフォーム間で適応可能な洞察を準備
|
||||
```markdown wrap
|
||||
# ROLE & TASK
|
||||
You are a content strategist. Analyze the provided draft and reference materials (if any), then create a comprehensive content foundation for multi-platform social media optimization.
|
||||
|
||||
# 必要な分析
|
||||
構造化された分析を提供:
|
||||
# ANALYSIS PRINCIPLES
|
||||
- Work exclusively with provided information—no external assumptions
|
||||
- Focus on extraction, synthesis, and strategic interpretation
|
||||
- Identify compelling and actionable elements
|
||||
- Prepare insights adaptable across different platforms
|
||||
|
||||
## 1. コアメッセージ
|
||||
- 中心テーマ、目的、目標
|
||||
- 伝えられる主要な価値または利益
|
||||
# REQUIRED ANALYSIS
|
||||
Deliver structured analysis with:
|
||||
|
||||
## 2. 必須コンテンツ要素
|
||||
- 主要トピック、事実、統計、データポイント
|
||||
- 注目すべき引用、証言、キーステートメント
|
||||
- 言及された機能、利点、特徴
|
||||
- 日付、場所、文脈の詳細
|
||||
## 1. CORE MESSAGE
|
||||
- Central theme, purpose, objective
|
||||
- Key value or benefit being communicated
|
||||
|
||||
## 3. 戦略的洞察
|
||||
- コンテンツを説得力のある/ユニークにするもの
|
||||
- 存在する感情的/理性的アピール
|
||||
- 信頼性要因、証明ポイント
|
||||
- 強調された競争優位性
|
||||
## 2. ESSENTIAL CONTENT ELEMENTS
|
||||
- Primary topics, facts, statistics, data points
|
||||
- Notable quotes, testimonials, key statements
|
||||
- Features, benefits, characteristics mentioned
|
||||
- Dates, locations, contextual details
|
||||
|
||||
## 4. エンゲージメントの機会
|
||||
- 出現する議論ポイント、質問
|
||||
- 提案されたコール・トゥ・アクション、次のステップ
|
||||
- インタラクティブ/参加の機会
|
||||
- 触れられたトレンディングテーマ
|
||||
## 3. STRATEGIC INSIGHTS
|
||||
- What makes content compelling/unique
|
||||
- Emotional/rational appeals present
|
||||
- Credibility factors, proof points
|
||||
- Competitive advantages highlighted
|
||||
|
||||
## 5. プラットフォーム最適化の基盤
|
||||
- 高インパクト:クイックで共有可能な形式
|
||||
- プロフェッショナル:ビジネス中心のディスカッション
|
||||
- コミュニティ:インタラクションと共有
|
||||
- ビジュアル:強力なビジュアルで強化
|
||||
## 4. ENGAGEMENT OPPORTUNITIES
|
||||
- Discussion points, questions emerging
|
||||
- Calls-to-action, next steps suggested
|
||||
- Interactive/participation opportunities
|
||||
- Trending themes touched upon
|
||||
|
||||
## 6. サポート詳細
|
||||
- メトリクス、数値、定量化可能な結果
|
||||
- 直接引用、証言
|
||||
- 技術的詳細、仕様
|
||||
- 利用可能な背景コンテキスト
|
||||
```
|
||||
## 5. PLATFORM OPTIMIZATION FOUNDATION
|
||||
- High-impact: Quick, shareable formats
|
||||
- Professional: Business-focused discussions
|
||||
- Community: Interaction and sharing
|
||||
- Visual: Enhanced with strong visuals
|
||||
|
||||
### 7. イテレーションノード:各プラットフォーム向けにカスタマイズされたコンテンツを作成
|
||||
## 6. SUPPORTING DETAILS
|
||||
- Metrics, numbers, quantifiable results
|
||||
- Direct quotes, testimonials
|
||||
- Technical details, specifications
|
||||
- Background context available
|
||||
```
|
||||
5. **メッセージを追加**をクリックしてユーザーメッセージを追加し、以下を貼り付けます。`{`または`/`を入力して、`Doc Extractor/text`と`User Input/draft`をリスト内の対応する変数に置き換えます。
|
||||
|
||||
```markdown USER
|
||||
Draft: User Input/draft
|
||||
Reference material: Doc Extractor/text
|
||||
```
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 7. 各プラットフォーム向けにカスタマイズされたコンテンツを作成:イテレーションノード
|
||||
|
||||
<Info>
|
||||
統合された参照とターゲットプラットフォームの準備ができたので、イテレーションノードを使用して各プラットフォーム向けにカスタマイズされた投稿を生成しましょう。
|
||||
@@ -305,192 +337,183 @@ icon: "forward"
|
||||
このノードはプラットフォームのリストをループし、各プラットフォーム用のサブワークフローを実行します:まず特定のプラットフォームのスタイルガイドラインとベストプラクティスを分析し、次に利用可能なすべての情報に基づいて最適化されたコンテンツを生成します。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_integration.png"
|
||||
alt="イテレーションノード"
|
||||
className="mx-auto"
|
||||
style={{ width:"62%" }}
|
||||
title="イテレーションノード"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. 情報統合ノードの後に、イテレーションノードを追加します。
|
||||
|
||||
2. イテレーションノード内に、LLMノードを追加して設定します:
|
||||
1. `スタイル識別`に名前を変更します。
|
||||
2. モデルを選択します。
|
||||
3. システムプロンプトフィールドに、以下を貼り付けます:
|
||||
|
||||
<Warning>
|
||||
プロンプトで、_役割とタスク_と_出力形式の例_で`Current Iteration/item`変数を参照するには、`{`または`/`を入力してリストから選択します。
|
||||
</Warning>
|
||||
````markdown システム {2,40}
|
||||
# 役割とタスク
|
||||
あなたはソーシャルメディアの専門家です。プラットフォーム「Current Iteration/item」を分析し、コンテンツ作成ガイドラインを提供します。
|
||||
1. `スタイル識別`に名前を変更します。
|
||||
|
||||
# 必要な分析
|
||||
与えられたプラットフォームについて、以下を提供:
|
||||
2. システム指示フィールドに、以下を貼り付けます:
|
||||
|
||||
## 1. プラットフォームプロフィール
|
||||
- プラットフォームタイプとカテゴリ
|
||||
- ターゲットオーディエンスの特性
|
||||
```markdown wrap
|
||||
# ROLE & TASK
|
||||
You are a social media expert. Analyze the platform and provide content creation guidelines.
|
||||
|
||||
## 2. コンテンツガイドライン
|
||||
- 最適なコンテンツ長(文字/単語)
|
||||
- 推奨トーン(プロフェッショナル/カジュアル/会話調)
|
||||
- フォーマットのベストプラクティス(改行、絵文字など)
|
||||
# ANALYSIS REQUIRED
|
||||
For the given platform, provide:
|
||||
|
||||
## 3. エンゲージメント戦略
|
||||
- ハッシュタグの推奨事項(数量とスタイル)
|
||||
- コール・トゥ・アクションのベストプラクティス
|
||||
- アルゴリズム最適化のヒント
|
||||
## 1. PLATFORM PROFILE
|
||||
- Platform type and category
|
||||
- Target audience characteristics
|
||||
|
||||
## 4. 技術仕様
|
||||
- 文字/単語制限
|
||||
- ビジュアルコンテンツ要件
|
||||
- 特別なフォーマットニーズ
|
||||
## 2. CONTENT GUIDELINES
|
||||
- Optimal content length (characters/words)
|
||||
- Recommended tone (professional/casual/conversational)
|
||||
- Formatting best practices (line breaks, emojis, etc.)
|
||||
|
||||
## 5. プラットフォーム固有の注意事項
|
||||
- ユニークな機能または最近の変更
|
||||
- 業界固有の考慮事項
|
||||
- コミュニティエンゲージメントアプローチ
|
||||
## 3. ENGAGEMENT STRATEGY
|
||||
- Hashtag recommendations (quantity and style)
|
||||
- Call-to-action best practices
|
||||
- Algorithm optimization tips
|
||||
|
||||
# 出力要件
|
||||
- 認識されたプラットフォーム:特定のガイドラインを提供
|
||||
- 未知のプラットフォーム:類似プラットフォームに基づく推奨事項
|
||||
- 実用的で実践的なアドバイスに焦点を当てる
|
||||
- 簡潔だが包括的
|
||||
## 4. TECHNICAL SPECS
|
||||
- Character/word limits
|
||||
- Visual content requirements
|
||||
- Special formatting needs
|
||||
|
||||
# 出力形式の例
|
||||
```json
|
||||
{
|
||||
"platform_name": "Current Iteration/item",
|
||||
"platform_type": "ソーシャルメディア/プロフェッショナルネットワーク/ビジュアルプラットフォーム/マイクロブログ",
|
||||
"content_guidelines": {
|
||||
"max_length": "文字/単語制限",
|
||||
"optimal_length": "推奨範囲",
|
||||
"tone": "プロフェッショナル/カジュアル/会話調/権威的",
|
||||
"hashtag_strategy": "数量と配置のガイドライン",
|
||||
"formatting": "改行、絵文字、メンションのガイドライン",
|
||||
"engagement_focus": "コメント/シェア/いいね/リツイート",
|
||||
"call_to_action": "適切なCTAスタイル"
|
||||
},
|
||||
"special_considerations": "ユニークなプラットフォーム要件または最近の変更",
|
||||
"confidence_level": "プラットフォーム認識に基づく高/中/低"
|
||||
}
|
||||
````
|
||||
## 5. PLATFORM-SPECIFIC NOTES
|
||||
- Unique features or recent changes
|
||||
- Industry-specific considerations
|
||||
- Community engagement approaches
|
||||
|
||||
# OUTPUT REQUIREMENTS
|
||||
- For recognized platforms: Provide specific guidelines
|
||||
- For unknown platforms: Base recommendations on similar platforms
|
||||
- Focus on actionable, practical advice
|
||||
- Be concise but comprehensive
|
||||
```
|
||||
3. **メッセージを追加**をクリックしてユーザーメッセージを追加し、以下を貼り付けます。`{`または`/`を入力して、`Current Iteration/item`をリスト内の対応する変数に置き換えます。
|
||||
|
||||
```markdown USER
|
||||
Platform: Current Iteration/item
|
||||
```
|
||||
3. スタイル識別ノードの後に、別のLLMノードを追加して設定します:
|
||||
1. `コンテンツ作成`に名前を変更します。
|
||||
2. モデルを選択します。
|
||||
3. システムプロンプトフィールドに、以下を貼り付けます:
|
||||
|
||||
<Warning>
|
||||
プロンプトで、以下の変数を参照するには、`{`または`/`を入力してリストから選択します。
|
||||
- _プラットフォームガイドライン_の`Identify Style/text`
|
||||
- _ソース情報_の`Integrate Info/text`
|
||||
- _ボイス&トーン(オプション)_の`User Input/voice_and_tone`
|
||||
- _言語要件_の`User Input/language`
|
||||
</Warning>
|
||||
```markdown システム {6,9,12,15}
|
||||
# 役割とタスク
|
||||
あなたは専門的なソーシャルメディアコンテンツクリエーターです。プラットフォームガイドラインに一致し、ソース情報を組み込み、指定されたボイス/トーンと言語要件に従う公開準備完了のコンテンツを生成します。
|
||||
1. `コンテンツ作成`に名前を変更します。
|
||||
|
||||
# 入力材料
|
||||
## 1. プラットフォームガイドライン
|
||||
Identify Style/text
|
||||
2. システム指示フィールドに、以下を貼り付けます:
|
||||
|
||||
## 2. ソース情報
|
||||
Integrate Info/text
|
||||
```markdown wrap
|
||||
# ROLE & TASK
|
||||
You are an expert social media content creator. Generate publication-ready content that matches platform guidelines, incorporates source information, and follows specified voice/tone and language requirements.
|
||||
|
||||
## 3. ボイス&トーン(オプション)
|
||||
Start/voice_and_tone
|
||||
# LANGUAGE REQUIREMENT
|
||||
- Generate ALL content exclusively in the target language specified in the user message. You MUST write the entire post in that language, regardless of the language of any source materials.
|
||||
- No mixing of languages whatsoever
|
||||
- Adapt platform terminology to the target language
|
||||
|
||||
## 4. 言語要件
|
||||
- 専用に次の言語ですべてのコンテンツを生成:User Input/language
|
||||
- 言語を混在させない
|
||||
- プラットフォーム用語を指定言語に適応
|
||||
# CONTENT REQUIREMENTS
|
||||
- Follow platform guidelines exactly (format, length, tone, hashtags)
|
||||
- Integrate source information effectively (key messages, data, value props)
|
||||
- Apply voice & tone consistently (if provided)
|
||||
- Optimize for platform-specific engagement
|
||||
- Ensure cultural appropriateness for the specified language
|
||||
|
||||
# コンテンツ要件
|
||||
- プラットフォームガイドラインに正確に従う(形式、長さ、トーン、ハッシュタグ)
|
||||
- ソース情報を効果的に統合(キーメッセージ、データ、価値提案)
|
||||
- ボイス&トーンを一貫して適用(提供された場合)
|
||||
- プラットフォーム固有のエンゲージメントに最適化
|
||||
- 指定言語の文化的適切性を確保
|
||||
# OUTPUT FORMAT
|
||||
- Generate ONLY the final social media post content. No explanations or meta-commentary. Content must be immediately copy-paste ready.
|
||||
- Maximum heading level: ## (H2) - never use # (H1)
|
||||
- No horizontal dividers: avoid ---
|
||||
|
||||
# 出力形式
|
||||
- 最終的なソーシャルメディア投稿コンテンツのみを生成。説明やメタコメントなし。コンテンツはすぐにコピー&ペースト可能でなければなりません。
|
||||
- 最大見出しレベル:##(H2)- #(H1)は決して使用しない
|
||||
- 水平区切りなし:---を避ける
|
||||
# QUALITY CHECKLIST
|
||||
✅ Platform guidelines followed
|
||||
✅ Source information integrated
|
||||
✅ Voice/tone consistent (when provided)
|
||||
✅ Language consistency maintained
|
||||
✅ Engagement optimized
|
||||
✅ Publication ready
|
||||
```
|
||||
3. **メッセージを追加**をクリックしてユーザーメッセージを追加し、以下を貼り付けます。`{`または`/`を入力して、すべての入力をリスト内の対応する変数に置き換えます。
|
||||
|
||||
# 品質チェックリスト
|
||||
✅ プラットフォームガイドラインに従った
|
||||
✅ ソース情報を統合した
|
||||
✅ ボイス/トーンが一貫している(提供時)
|
||||
✅ 言語の一貫性を維持
|
||||
✅ エンゲージメントを最適化
|
||||
✅ 公開準備完了
|
||||
```
|
||||
4. 構造化出力を有効にします。
|
||||
```markdown USER
|
||||
Platform Name: Current Iteration/item
|
||||
Target Language: User Input/language
|
||||
Platform Guidelines: Identify Style/text
|
||||
Source Information: Integrate Info/text
|
||||
Voice & Tone: User Input/voice_and_tone
|
||||
```
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_structured_output.png"
|
||||
alt="構造化出力"
|
||||
title="構造化出力"
|
||||
className="mx-auto"
|
||||
style={{ width:"64%" }}
|
||||
/>
|
||||
1. **出力変数**の横で、**構造化**をオンに切り替えます。structured_output変数が下に表示されます。
|
||||
2. **structured_output**の横で、**設定**をクリックします。
|
||||
3. ポップアップスキーマエディタで、右上隅の**JSONからインポート**をクリックし、以下を貼り付けます:
|
||||
4. 構造化出力を有効にします。
|
||||
|
||||
<Info>
|
||||
これにより、LLMの応答から特定の情報をより信頼性の高い方法で抽出できます。これは次のステップで最終出力をフォーマットする際に重要です。
|
||||
</Info>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. **出力変数**の横で、**構造化**をオンに切り替えます。`structured_output`変数が下に表示されます。**設定**をクリックします。
|
||||
|
||||
2. ポップアップスキーマエディタで、右上隅の**JSONからインポート**をクリックし、以下を貼り付けます:
|
||||
|
||||
```json
|
||||
{
|
||||
"platform_name": "string",
|
||||
"post_content": "string"
|
||||
}
|
||||
```
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
```json
|
||||
{
|
||||
"platform_name": "string",
|
||||
"post_content": "string"
|
||||
}
|
||||
```
|
||||
4. イテレーションノードをクリックして設定します:
|
||||
1. `Parameter Extractor/platform`を入力変数として設定します。
|
||||
2. `Create Content/structured_output`を出力変数として設定します。
|
||||
3. **並列モード**を有効にし、最大並列性を`10`に設定します。
|
||||
|
||||
<Check>
|
||||
これが、ユーザー入力ノードのターゲットプラットフォームフィールドのラベル名に`(≤10)`を含めた理由です。
|
||||
</Check>
|
||||
1. `Parameter Extractor/platform`を入力変数として設定します。
|
||||
|
||||
### 8. テンプレートノード:最終出力をフォーマット
|
||||
2. `Create Content/structured_output`を出力変数として設定します。
|
||||
|
||||
3. **並列モード**を有効にし、最大並列数を`10`に設定します。
|
||||
|
||||
<Check>
|
||||
これが、ユーザー入力ノードのターゲットプラットフォームフィールドのラベル名に`(≤10)`を含めた理由です。
|
||||
</Check>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 8. 最終出力をフォーマット:テンプレートノード
|
||||
|
||||
<Info>
|
||||
イテレーションノードは各プラットフォーム用の投稿を生成しますが、その出力は生のデータ配列(例:`[{"platform_name": "Twitter", "post_content": "..."}]`)であり、あまり読みやすくありません。結果をより明確な形式で提示する必要があります。
|
||||
|
||||
ここでテンプレートノードが登場します—[Jinja2](https://jinja.palletsprojects.com/en/stable/)テンプレートを使用してこの生データを整理されたテキストにフォーマットでき、最終出力がユーザーフレンドリーで理解しやすいことを保証します。
|
||||
ここでテンプレートノードが登場します—[Jinja2](https://jinja.palletsprojects.com/en/stable/)テンプレートを使用してこの生データを整理されたテキストにフォーマットでき、最終出力がユーザーフレンドリーで読みやすいことを保証します。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_template.png"
|
||||
alt="テンプレートノード"
|
||||
title="テンプレートノード"
|
||||
style={{ width:"49%" }}
|
||||
className="mx-auto"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. イテレーションノードの後に、テンプレートノードを追加します。
|
||||
2. テンプレートノードのパネルで、`Iteration/output`を入力変数として設定します。
|
||||
3. 以下のJinja2コードを貼り付けます(**コメントを削除することを忘れずに**)。
|
||||
|
||||
```
|
||||
{% for item in output %} # 入力配列の各プラットフォーム-コンテンツペアをループ
|
||||
# 📱 {{ item.platform_name }} # 電話絵文字付きのH1見出しとしてプラットフォーム名を表示
|
||||
{{ item.post_content }} # このプラットフォーム用に生成されたコンテンツを表示
|
||||
# 読みやすさのためプラットフォーム間に空行を追加
|
||||
{% endfor %} # ループを終了
|
||||
```
|
||||
2. テンプレートノードのパネルで、`Iteration/output`を入力変数として設定し、`output`と名前を付けます。
|
||||
|
||||
<Tip>
|
||||
LLMも出力フォーマットを処理できますが、その出力は一貫性がなく予測不可能な場合があります。推論を必要としないルールベースのフォーマットについては、テンプレートノードがゼロトークンコストでより安定した信頼性の高い方法で処理します。
|
||||
3. 以下のJinja2コードを貼り付けます:
|
||||
|
||||
LLMは非常に強力ですが、適切なツールを使用するタイミングを知ることが、より信頼性が高くコスト効果の高いAIアプリケーションを構築する鍵です。
|
||||
</Tip>
|
||||
```
|
||||
{% for item in output %}
|
||||
# 📱 {{ item.platform_name }}
|
||||
{{ item.post_content }}
|
||||
|
||||
### 9. 出力ノード:結果をユーザーに返す
|
||||
{% endfor %}
|
||||
```
|
||||
|
||||
- `{% for item in output %}` / `{% endfor %}`:入力配列の各プラットフォーム-コンテンツペアをループします。
|
||||
- `{{ item.platform_name }}`:電話絵文字付きのH1見出しとしてプラットフォーム名を表示します。
|
||||
- `{{ item.post_content }}`:そのプラットフォーム用に生成されたコンテンツを表示します。
|
||||
- `{{ item.post_content }}`と`{% endfor %}`の間の空行は、最終出力でプラットフォーム間にスペースを追加します。
|
||||
|
||||
<Tip>
|
||||
LLMも出力フォーマットを処理できますが、その出力は一貫性がなく予測不可能な場合があります。推論を必要としないルールベースのフォーマットについては、テンプレートノードがゼロトークンコストでより安定した信頼性の高い方法で処理します。
|
||||
|
||||
LLMは非常に強力ですが、適切なツールを使用するタイミングを知ることが、より信頼性が高くコスト効果の高いAIアプリケーションを構築する鍵です。
|
||||
</Tip>
|
||||
|
||||
### 9. 結果をユーザーに返す:出力ノード
|
||||
|
||||
1. テンプレートノードの後に、出力ノードを追加します。
|
||||
2. 出力ノードのパネルで、`Template/output`を出力変数として設定します。
|
||||
@@ -501,22 +524,41 @@ icon: "forward"
|
||||
|
||||
1. チェックリストがクリアされていることを確認します。
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_checklist_clear.png"
|
||||
alt="チェックリストを確認"
|
||||
className="mx-auto"
|
||||
style={{ width:"77%" }}
|
||||
title="チェックリストを確認"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
2. 最初に提供された参照図と照らし合わせてワークフローを確認し、すべてのノードと接続が一致していることを確認します。
|
||||
3. 右上隅の**実行**をクリックし、入力フィールドを入力して、**実行開始**をクリックします。
|
||||
|
||||
キャッシュされた入力で単一のノードを実行するには、その設定パネルの上部にある**このステップを実行**アイコンをクリックします。
|
||||
3. 右上隅の**テスト実行**をクリックし、入力フィールドを入力して、**実行開始**をクリックします。
|
||||
|
||||
<Tip>
|
||||
前のノードからの異なる入力に対するノードの反応をテストするには、ワークフロー全体を再実行する必要はありません。キャンバスの下部にある**キャッシュされた変数を表示**をクリックし、リストから変更したい変数を見つけて、その値を編集するだけです。
|
||||
</Tip>
|
||||
エラーが発生した場合は、対応するノードの**最後の実行**ログをチェックして、問題の正確な原因を特定します。
|
||||
何を入力すればよいか分からない場合は、以下のサンプル入力を試してみてください:
|
||||
|
||||
- **ドラフト**:`We just launched a new AI writing assistant that helps teams create content 10x faster.`
|
||||
|
||||
- **ファイルをアップロード**:空のまま
|
||||
|
||||
- **ボイス&トーン**:`Friendly and enthusiastic, but professional`
|
||||
|
||||
- **ターゲットプラットフォーム**:`Twitter and LinkedIn`
|
||||
|
||||
- **言語**:`English`
|
||||
|
||||
成功した実行では、各プラットフォームに個別の投稿を含むフォーマットされた出力が生成されます:
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
<Note>
|
||||
使用するモデルによって結果が異なる場合があります。より高い能力を持つモデルは、一般的により高品質な出力を生成します。
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
前のノードからの異なる入力に対するノードの反応をテストするには、ワークフロー全体を再実行する必要はありません。キャンバスの下部にある**キャッシュされた変数を表示**をクリックし、リストから変更したい変数を見つけて、その値を編集するだけです。
|
||||
</Tip>
|
||||
|
||||
エラーが発生した場合は、対応するノードの**最後の実行**ログをチェックして、問題の正確な原因を特定します。
|
||||
|
||||
## ステップ4:公開と共有
|
||||
|
||||
@@ -524,8 +566,4 @@ icon: "forward"
|
||||
|
||||
<Warning>
|
||||
後で変更を加えた場合は、更新が有効になるように必ず再度公開することを忘れないでください。
|
||||
</Warning>
|
||||
|
||||
<Tip>
|
||||
公開後、ライブ環境でクイックなエンドツーエンドテストを実行して、すべてが**スタジオ**と同じように動作することを確認できます。
|
||||
</Tip>
|
||||
</Warning>
|
||||
@@ -14,44 +14,67 @@ icon: "forward"
|
||||
|
||||
完整的工作流如下所示。在构建过程中,可以随时参考它以保持正轨,并了解所有节点如何协同工作。
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_workflow_overview.png"
|
||||
alt="快速入门工作流概览"
|
||||
title="快速入门工作流概览"
|
||||
className="mx-auto"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
## 开始之前
|
||||
|
||||
<Steps>
|
||||
<Step title="登录 Dify Cloud">
|
||||
|
||||
前往 [Dify Cloud](https://cloud.dify.ai) 免费注册。
|
||||
|
||||
Sandbox 计划的新账户包含 200 条消息额度,可用于调用 OpenAI、Anthropic 和 Gemini 等提供商的模型。
|
||||
|
||||
<Info>
|
||||
消息额度为一次性分配,不会按月续费。
|
||||
</Info>
|
||||
</Step>
|
||||
|
||||
<Step title="设置模型供应商">
|
||||
|
||||
前往**设置** > **模型供应商**,安装 OpenAI 插件。本教程使用 `gpt-5.2` 作为示例。
|
||||
|
||||
如果你使用 Sandbox 额度,则无需 API 密钥——插件安装后即可直接使用。你也可以配置自己的 API 密钥来替代使用。
|
||||
|
||||
</Step>
|
||||
|
||||
<Step title="配置默认模型">
|
||||
|
||||
1. 在**模型供应商**页面的右上角,点击**系统模型设置**。
|
||||
|
||||
2. 将**系统推理模型**设置为 `gpt-5.2`。这将成为工作流中的默认模型。
|
||||
</Step>
|
||||
|
||||
</Steps>
|
||||
|
||||
## 步骤 1:创建新工作流
|
||||
|
||||
1. 前往 **工作室**,然后选择 **从空白创建** \> **工作流**。
|
||||
2. 将工作流命名为 `多平台内容生成器`,然后点击 **创建**。你将自动进入工作流画布开始构建。
|
||||
1. 前往**工作室**,然后选择**从空白创建** > **工作流**。
|
||||
|
||||
## 步骤 2:添加和配置工作流节点
|
||||
2. 将工作流命名为 `多平台内容生成器`,然后点击**创建**。你将自动进入工作流画布开始构建。
|
||||
|
||||
3. 选择用户输入节点以开始我们的工作流。
|
||||
|
||||
## 步骤 2:编排与配置
|
||||
|
||||
<Note>
|
||||
保持未提及的设置为默认值。
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
为节点和变量提供清晰、描述性的名称,使它们在工作流中更容易识别和引用。
|
||||
为节点和变量提供清晰、描述性的名称,使它们更容易识别和引用。
|
||||
</Tip>
|
||||
|
||||
### 1. 用户输入节点:收集终端用户的输入
|
||||
### 1. 收集用户输入:用户输入节点
|
||||
|
||||
<Info>
|
||||
首先,我们需要定义从用户那里收集什么信息,例如草稿文本、目标平台、期望的语调以及任何参考材料。
|
||||
首先,我们需要定义从用户那里收集什么信息来运行我们的内容生成器,例如草稿文本、目标平台、期望的语调以及任何参考材料。
|
||||
|
||||
用户输入节点是我们可以轻松设置这些的地方。我们在这里添加的每个输入字段都会成为所有下游节点可以引用和使用的变量。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_start.png"
|
||||
alt="用户输入节点"
|
||||
title="用户输入节点"
|
||||
className="mx-auto"
|
||||
style={{ width:"71%" }}
|
||||
/>
|
||||
|
||||
点击用户输入节点,打开其配置面板,然后添加以下输入字段。
|
||||
|
||||
<Accordion title="参考材料 - 文本">
|
||||
@@ -59,7 +82,7 @@ icon: "forward"
|
||||
- 变量名:`draft`
|
||||
- 标签名:`草稿`
|
||||
- 最大长度:`2048`
|
||||
- 必填:`否`
|
||||
- 必填:`是`
|
||||
</Accordion>
|
||||
|
||||
<Accordion title="参考材料 - 文件">
|
||||
@@ -96,62 +119,70 @@ icon: "forward"
|
||||
- `English`
|
||||
- `日本語`
|
||||
- `简体中文`
|
||||
- 默认值:`English`
|
||||
- 必填:`是`
|
||||
</Accordion>
|
||||
|
||||
### 2. 参数提取器节点:识别目标平台
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 2. 识别目标平台:参数提取器节点
|
||||
|
||||
<Info>
|
||||
由于我们的平台字段接受自由格式的文本输入,用户可能会以各种方式输入:`x 和 linkedIn`、`在 Twitter 和 LinkedIn 上发布`,甚至 `Twitter + LinkedIn please`。然而,我们需要一个干净、结构化的列表,如 `["Twitter", "LinkedIn"]`,下游节点可以可靠地使用。
|
||||
由于我们的平台字段接受自由格式的文本输入,用户可能会以各种方式输入:`x 和 linkedIn`、`在 Twitter 和 LinkedIn 上发布`,甚至 `Twitter + LinkedIn please`。
|
||||
|
||||
这正是参数提取器节点的完美工作。它使用 LLM 来分析用户的自然语言,识别所有这些变化,并输出标准化的数组。
|
||||
然而,我们需要一个干净、结构化的列表,如 `["Twitter", "LinkedIn"]`,下游节点可以可靠地使用。
|
||||
|
||||
这正是参数提取器节点的完美工作。在我们的场景中,它使用 gpt-5.2 模型来分析用户的自然语言,识别所有这些变化,并输出标准化的数组。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_paramater_extractor.png"
|
||||
alt="参数提取器"
|
||||
title="参数提取器"
|
||||
className="mx-auto"
|
||||
style={{ width:"73%" }}
|
||||
/>
|
||||
|
||||
在用户输入节点之后,添加一个参数提取器节点并配置它:
|
||||
|
||||
1. 选择一个模型。
|
||||
2. 将 `User Input/platform` 设置为输入变量。
|
||||
3. 添加一个提取参数:
|
||||
1. 名称:`platform`
|
||||
2. 类型:`Array[String]`
|
||||
3. 描述:`识别并提取用户想要创建定制内容的平台。`
|
||||
4. 必填:`是`
|
||||
4. 在指令字段中,粘贴以下内容来引导 LLM 进行参数提取:
|
||||
1. 在**输入变量**字段中,选择 `User Input/platform`。
|
||||
|
||||
```markdown 指令
|
||||
# 任务描述
|
||||
解析输入中的平台名称并输出为 JSON 数组。
|
||||
2. 添加一个提取参数:
|
||||
|
||||
## 处理规则
|
||||
- 支持多种分隔符:逗号、分号、空格、换行、"and"、"&"、"|" 等。
|
||||
- 标准化常见平台名称变体(twitter/X→Twitter,insta→Instagram 等)。
|
||||
- 删除重复和无效条目
|
||||
- 保留未知但合理的平台名称
|
||||
- 名称:`platform`
|
||||
|
||||
## 输出要求
|
||||
- 成功:["Platform1", "Platform2"]
|
||||
- 未找到平台:[未识别到平台。请输入有效的平台名称。]
|
||||
- 类型:`Array[String]`
|
||||
|
||||
## 示例
|
||||
- 输入:"twitter, linkedin" → ["Twitter", "LinkedIn"]
|
||||
- 输入:"x and insta" → ["Twitter", "Instagram"]
|
||||
- 输入:"invalid content" → [未识别到平台。请输入有效的平台名称。]
|
||||
```
|
||||
- 描述:`The platform(s) for which the user wants to create tailored content.`
|
||||
|
||||
<Check>
|
||||
注意,我们已指示 LLM 为无效输入输出特定的错误消息,这将在下一步中作为我们工作流的结束触发器。
|
||||
</Check>
|
||||
- 必填:`是`
|
||||
|
||||
### 3. IF/ELSE 节点:验证平台提取结果
|
||||
3. 在**指令**字段中,粘贴以下内容来引导 LLM 进行参数提取:
|
||||
|
||||
```markdown INSTRUCTION
|
||||
# TASK DESCRIPTION
|
||||
Parse platform names from input and output as a JSON array.
|
||||
|
||||
## PROCESSING RULES
|
||||
- Support multiple delimiters: commas, semicolons, spaces, line breaks, "and", "&", "|", etc.
|
||||
- Standardize common platform name variants (twitter/X→Twitter, insta→Instagram, etc.)
|
||||
- Remove duplicates and invalid entries
|
||||
- Preserve unknown but reasonable platform names
|
||||
- Preserve the original language of platform names
|
||||
|
||||
## OUTPUT REQUIREMENTS
|
||||
- Success: ["Platform1", "Platform2"]
|
||||
- No platforms found: [No platforms identified. Please enter a valid platform name.]
|
||||
|
||||
## EXAMPLES
|
||||
- Input: "twitter, linkedin" → ["Twitter", "LinkedIn"]
|
||||
- Input: "x and insta" → ["Twitter", "Instagram"]
|
||||
- Input: "invalid content" → [No platforms identified. Please enter a valid platform name.]
|
||||
```
|
||||
|
||||
<Check>
|
||||
注意,我们已指示 LLM 为无效输入输出特定的错误消息,这将在下一步中作为我们工作流的结束触发器。
|
||||
</Check>
|
||||
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 3. 验证平台提取结果:IF/ELSE 节点
|
||||
|
||||
<Info>
|
||||
如果用户输入了无效的平台名称,比如 `ohhhhhh` 或 `BookFace` 怎么办?我们不想浪费时间和令牌生成无用的内容。
|
||||
@@ -159,58 +190,64 @@ icon: "forward"
|
||||
在这种情况下,我们可以使用 IF/ELSE 节点创建一个分支,提前停止工作流。我们将设置一个条件来检查参数提取器节点的错误消息;如果检测到该消息,工作流将直接路由到输出节点并结束。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_if.png"
|
||||
alt="If 条件"
|
||||
className="mx-auto"
|
||||
style={{ width:"80%" }}
|
||||
title="If 条件"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. 在参数提取器节点之后,添加一个 IF/ELSE 节点。
|
||||
2. 在 IF/ELSE 节点的面板上,定义 IF 条件:
|
||||
|
||||
**IF** `Parameter Extractor/platform` `包含` `未识别到平台。请输入有效的平台名称。`
|
||||
2. 在 IF/ELSE 节点的面板上,定义 **IF** 条件:
|
||||
|
||||
**IF** `Parameter Extractor/platform` **包含** `No platforms identified. Please enter a valid platform name.`
|
||||
|
||||
3. 在 IF/ELSE 节点之后,向 IF 分支添加一个输出节点。
|
||||
|
||||
4. 在输出节点的面板上,将 `Parameter Extractor/platform` 设置为输出变量。
|
||||
|
||||
### 4. 列表操作器节点:按类型分离上传的文件
|
||||
### 4. 按类型分离上传的文件:列表操作器节点
|
||||
|
||||
<Info>
|
||||
我们的用户可以上传图像和文档作为参考材料,但这两种类型需要不同的处理:图像可以由启用视觉的模型直接解释,而文档必须首先转换为文本,LLM 才能理解其内容。
|
||||
|
||||
我们的用户可以上传图像和文档作为参考材料,但这两种类型在使用 `gpt-5.2` 时需要不同的处理:图像可以通过其视觉能力直接解释,而文档必须先转换为文本,模型才能处理。
|
||||
|
||||
为了管理这一点,我们将使用两个列表操作器节点来过滤和将上传的文件分成单独的分支——一个用于图像,一个用于文档。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_list_operator.png"
|
||||
alt="列表操作器"
|
||||
className="mx-auto"
|
||||
style={{ width:"70%" }}
|
||||
title="列表操作器"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. 在 IF/ELSE 节点之后,向 ELSE 分支添加**两个**并行的列表操作器节点。
|
||||
|
||||
1. 在 IF/ELSE 节点之后,向 ELSE 分支添加两个列表操作器节点。
|
||||
2. 将一个节点重命名为 `图像`,另一个重命名为 `文档`。
|
||||
3. 配置图像节点:
|
||||
1. 将 `User Input/user_file` 设置为输入变量。
|
||||
2. 启用过滤条件:`{x}type` `在` `Image`
|
||||
4. 配置文档节点:
|
||||
1. 将 `User Input/user_file` 设置为输入变量。
|
||||
2. 启用过滤条件:`{x}type` `在` `Doc`。
|
||||
|
||||
### 5. 文档提取器节点:从文档中提取文本
|
||||
3. 配置图像节点:
|
||||
1. 将 `User Input/user_file` 设置为输入变量。
|
||||
|
||||
2. 启用**过滤条件**:`{x}type` **在** `Image`。
|
||||
|
||||
4. 配置文档节点:
|
||||
1. 将 `User Input/user_file` 设置为输入变量。
|
||||
|
||||
2. 启用**过滤条件**:`{x}type` **在** `Doc`。
|
||||
|
||||
### 5. 从文档中提取文本:文档提取器节点
|
||||
|
||||
<Info>
|
||||
LLM 不能直接读取像 PDF 或 DOCX 这样的上传文件。要使用这些文档中的信息,我们必须首先将它们转换为 LLM 可以处理的纯文本。
|
||||
`gpt-5.2` 不能直接读取像 PDF 或 DOCX 这样的上传文档,因此我们必须先将它们转换为纯文本。
|
||||
|
||||
这正是文档提取器节点所做的。它将文档文件作为输入,并为下一步输出干净、可用的文本。
|
||||
</Info>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. 在文档节点之后,添加一个文档提取器节点。
|
||||
|
||||
2. 在文档提取器节点的面板上,将 `Document/result` 设置为输入变量。
|
||||
|
||||
### 6. LLM 节点:整合所有参考材料
|
||||
### 6. 整合所有参考材料:LLM 节点
|
||||
|
||||
<Info>
|
||||
当用户同时提供多种参考类型——草稿文本、文档和图像时,我们需要将它们整合成一个连贯的摘要。
|
||||
@@ -218,86 +255,81 @@ icon: "forward"
|
||||
LLM 节点将通过分析所有分散的片段来处理此任务,创建一个指导后续内容生成的综合上下文。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_info_integrate.png"
|
||||
alt="整合信息"
|
||||
className="mx-auto"
|
||||
style={{ width:"78%" }}
|
||||
title="整合信息"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. 在文档提取器节点之后,添加一个 LLM 节点。
|
||||
|
||||
2. 将图像节点也连接到这个 LLM 节点。
|
||||
|
||||
3. 点击 LLM 节点进行配置:
|
||||
1. 将其重命名为 `整合信息`。
|
||||
2. 选择一个支持视觉的模型(由眼睛图标表示)。
|
||||
3. 启用 **视觉** 并将 `Image/result` 设置为视觉变量。
|
||||
4. 在系统提示字段中,粘贴以下内容:
|
||||
|
||||
<Warning>
|
||||
在提示中,要在 _提供的材料_ 中引用 `Doc Extractor/text` 和 `User Input/draft` 变量,请键入 `{` 或 `/` 并从列表中选择。
|
||||
1. 将其重命名为 `整合信息`。
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_reference_variable.png"
|
||||
alt="引用变量"
|
||||
title="引用变量"
|
||||
className="mx-auto"
|
||||
style={{ width:"58%" }}
|
||||
/>
|
||||
</Warning>
|
||||
```markdown 系统 {2,3}
|
||||
# 提供的材料
|
||||
Doc Extractor/text
|
||||
User Input/draft
|
||||
2. 启用 **VISION** 并将 `Image/result` 设置为视觉变量。
|
||||
|
||||
# 角色与任务
|
||||
你是一名内容策略师。分析提供的材料并为多平台社交媒体优化创建综合内容基础。
|
||||
3. 在系统指令字段中,粘贴以下内容:
|
||||
|
||||
# 分析原则
|
||||
- 仅使用提供的信息——不做外部假设
|
||||
- 专注于提取、综合和战略解释
|
||||
- 识别引人注目和可操作的元素
|
||||
- 准备可跨不同平台调整的见解
|
||||
```markdown wrap
|
||||
# ROLE & TASK
|
||||
You are a content strategist. Analyze the provided draft and reference materials (if any), then create a comprehensive content foundation for multi-platform social media optimization.
|
||||
|
||||
# 所需分析
|
||||
提供结构化分析:
|
||||
# ANALYSIS PRINCIPLES
|
||||
- Work exclusively with provided information—no external assumptions
|
||||
- Focus on extraction, synthesis, and strategic interpretation
|
||||
- Identify compelling and actionable elements
|
||||
- Prepare insights adaptable across different platforms
|
||||
|
||||
## 1. 核心信息
|
||||
- 中心主题、目的、目标
|
||||
- 传达的关键价值或利益
|
||||
# REQUIRED ANALYSIS
|
||||
Deliver structured analysis with:
|
||||
|
||||
## 2. 基本内容元素
|
||||
- 主要主题、事实、统计数据、数据点
|
||||
- 值得注意的引言、推荐、关键陈述
|
||||
- 提到的特性、利益、特征
|
||||
- 日期、地点、背景细节
|
||||
## 1. CORE MESSAGE
|
||||
- Central theme, purpose, objective
|
||||
- Key value or benefit being communicated
|
||||
|
||||
## 3. 战略见解
|
||||
- 使内容引人注目/独特的原因
|
||||
- 存在的情感/理性诉求
|
||||
- 可信度因素、证明点
|
||||
- 突出的竞争优势
|
||||
## 2. ESSENTIAL CONTENT ELEMENTS
|
||||
- Primary topics, facts, statistics, data points
|
||||
- Notable quotes, testimonials, key statements
|
||||
- Features, benefits, characteristics mentioned
|
||||
- Dates, locations, contextual details
|
||||
|
||||
## 4. 参与机会
|
||||
- 出现的讨论点、问题
|
||||
- 建议的行动号召、下一步
|
||||
- 互动/参与机会
|
||||
- 涉及的热门主题
|
||||
## 3. STRATEGIC INSIGHTS
|
||||
- What makes content compelling/unique
|
||||
- Emotional/rational appeals present
|
||||
- Credibility factors, proof points
|
||||
- Competitive advantages highlighted
|
||||
|
||||
## 5. 平台优化基础
|
||||
- 高影响力:快速、可分享的格式
|
||||
- 专业:以商业为重点的讨论
|
||||
- 社区:互动和分享
|
||||
- 视觉:通过强大的视觉效果增强
|
||||
## 4. ENGAGEMENT OPPORTUNITIES
|
||||
- Discussion points, questions emerging
|
||||
- Calls-to-action, next steps suggested
|
||||
- Interactive/participation opportunities
|
||||
- Trending themes touched upon
|
||||
|
||||
## 6. 支持细节
|
||||
- 指标、数字、可量化的结果
|
||||
- 直接引言、推荐
|
||||
- 技术细节、规格
|
||||
- 可用的背景上下文
|
||||
```
|
||||
## 5. PLATFORM OPTIMIZATION FOUNDATION
|
||||
- High-impact: Quick, shareable formats
|
||||
- Professional: Business-focused discussions
|
||||
- Community: Interaction and sharing
|
||||
- Visual: Enhanced with strong visuals
|
||||
|
||||
### 7. 迭代节点:为每个平台创建定制内容
|
||||
## 6. SUPPORTING DETAILS
|
||||
- Metrics, numbers, quantifiable results
|
||||
- Direct quotes, testimonials
|
||||
- Technical details, specifications
|
||||
- Background context available
|
||||
```
|
||||
5. 点击**添加消息**来添加一条用户消息,然后粘贴以下内容。输入 `{` 或 `/` 将 `Doc Extractor/text` 和 `User Input/draft` 替换为列表中对应的变量。
|
||||
|
||||
```markdown USER
|
||||
Draft: User Input/draft
|
||||
Reference material: Doc Extractor/text
|
||||
```
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 7. 为每个平台创建定制内容:迭代节点
|
||||
|
||||
<Info>
|
||||
现在整合的参考和目标平台已准备就绪,让我们使用迭代节点为每个平台生成定制的帖子。
|
||||
@@ -305,192 +337,183 @@ icon: "forward"
|
||||
该节点将遍历平台列表并为每个平台运行子工作流:首先分析特定平台的风格指南和最佳实践,然后基于所有可用信息生成优化的内容。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_integration.png"
|
||||
alt="迭代节点"
|
||||
className="mx-auto"
|
||||
style={{ width:"62%" }}
|
||||
title="迭代节点"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. 在整合信息节点之后,添加一个迭代节点。
|
||||
|
||||
2. 在迭代节点内部,添加一个 LLM 节点并配置它:
|
||||
1. 将其重命名为 `识别风格`。
|
||||
2. 选择一个模型。
|
||||
3. 在系统提示字段中,粘贴以下内容:
|
||||
|
||||
<Warning>
|
||||
在提示中,要在 _角色与任务_ 和 _输出格式示例_ 中引用 `Current Iteration/item` 变量,请键入 `{` 或 `/` 并从列表中选择。
|
||||
</Warning>
|
||||
````markdown 系统 {2,40}
|
||||
# 角色与任务
|
||||
你是社交媒体专家。分析平台 "Current Iteration/item" 并提供内容创建指南。
|
||||
1. 将其重命名为 `识别风格`。
|
||||
|
||||
# 所需分析
|
||||
对于给定的平台,提供:
|
||||
2. 在系统指令字段中,粘贴以下内容:
|
||||
|
||||
## 1. 平台概况
|
||||
- 平台类型和类别
|
||||
- 目标受众特征
|
||||
```markdown wrap
|
||||
# ROLE & TASK
|
||||
You are a social media expert. Analyze the platform and provide content creation guidelines.
|
||||
|
||||
## 2. 内容指南
|
||||
- 最佳内容长度(字符/单词)
|
||||
- 推荐语调(专业/休闲/对话)
|
||||
- 格式最佳实践(换行、表情符号等)
|
||||
# ANALYSIS REQUIRED
|
||||
For the given platform, provide:
|
||||
|
||||
## 3. 参与策略
|
||||
- 标签建议(数量和风格)
|
||||
- 行动号召最佳实践
|
||||
- 算法优化提示
|
||||
## 1. PLATFORM PROFILE
|
||||
- Platform type and category
|
||||
- Target audience characteristics
|
||||
|
||||
## 4. 技术规格
|
||||
- 字符/单词限制
|
||||
- 视觉内容要求
|
||||
- 特殊格式需求
|
||||
## 2. CONTENT GUIDELINES
|
||||
- Optimal content length (characters/words)
|
||||
- Recommended tone (professional/casual/conversational)
|
||||
- Formatting best practices (line breaks, emojis, etc.)
|
||||
|
||||
## 5. 平台特定注意事项
|
||||
- 独特功能或最近的变化
|
||||
- 行业特定考虑
|
||||
- 社区参与方法
|
||||
## 3. ENGAGEMENT STRATEGY
|
||||
- Hashtag recommendations (quantity and style)
|
||||
- Call-to-action best practices
|
||||
- Algorithm optimization tips
|
||||
|
||||
# 输出要求
|
||||
- 对于已识别的平台:提供特定指南
|
||||
- 对于未知平台:基于类似平台的建议
|
||||
- 专注于可操作、实用的建议
|
||||
- 简洁但全面
|
||||
## 4. TECHNICAL SPECS
|
||||
- Character/word limits
|
||||
- Visual content requirements
|
||||
- Special formatting needs
|
||||
|
||||
# 输出格式示例
|
||||
```json
|
||||
{
|
||||
"platform_name": "Current Iteration/item",
|
||||
"platform_type": "社媒/专业网络/视觉平台/微博客",
|
||||
"content_guidelines": {
|
||||
"max_length": "字符/单词限制",
|
||||
"optimal_length": "推荐范围",
|
||||
"tone": "专业/休闲/对话/权威",
|
||||
"hashtag_strategy": "数量和位置指南",
|
||||
"formatting": "换行、表情符号、提及指南",
|
||||
"engagement_focus": "评论/分享/点赞/转发",
|
||||
"call_to_action": "适当的 CTA 风格"
|
||||
},
|
||||
"special_considerations": "任何独特的平台要求或最近的变化",
|
||||
"confidence_level": "基于平台识别的高/中/低"
|
||||
}
|
||||
````
|
||||
## 5. PLATFORM-SPECIFIC NOTES
|
||||
- Unique features or recent changes
|
||||
- Industry-specific considerations
|
||||
- Community engagement approaches
|
||||
|
||||
# OUTPUT REQUIREMENTS
|
||||
- For recognized platforms: Provide specific guidelines
|
||||
- For unknown platforms: Base recommendations on similar platforms
|
||||
- Focus on actionable, practical advice
|
||||
- Be concise but comprehensive
|
||||
```
|
||||
3. 点击**添加消息**来添加一条用户消息,然后粘贴以下内容。输入 `{` 或 `/` 将 `Current Iteration/item` 替换为列表中对应的变量。
|
||||
|
||||
```markdown USER
|
||||
Platform: Current Iteration/item
|
||||
```
|
||||
3. 在识别风格节点之后,添加另一个 LLM 节点并配置它:
|
||||
1. 将其重命名为 `创建内容`。
|
||||
2. 选择一个模型。
|
||||
3. 在系统提示字段中,粘贴以下内容:
|
||||
|
||||
<Warning>
|
||||
在提示中,要引用以下变量,请键入 `{` 或 `/` 并从列表中选择。
|
||||
- _平台指南_ 中的 `Identify Style/text`
|
||||
- _来源信息_ 中的 `Integrate Info/text`
|
||||
- _语音与语调(可选)_ 中的 `User Input/voice_and_tone`
|
||||
- _语言要求_ 中的 `User Input/language`
|
||||
</Warning>
|
||||
```markdown 系统 {6,9,12,15}
|
||||
# 角色与任务
|
||||
你是专业的社交媒体内容创作者。生成符合平台指南、整合来源信息并遵循指定语音/语调和语言要求的发布就绪内容。
|
||||
1. 将其重命名为 `创建内容`。
|
||||
|
||||
# 输入材料
|
||||
## 1. 平台指南
|
||||
Identify Style/text
|
||||
2. 在系统指令字段中,粘贴以下内容:
|
||||
|
||||
## 2. 来源信息
|
||||
Integrate Info/text
|
||||
```markdown wrap
|
||||
# ROLE & TASK
|
||||
You are an expert social media content creator. Generate publication-ready content that matches platform guidelines, incorporates source information, and follows specified voice/tone and language requirements.
|
||||
|
||||
## 3. 语音与语调(可选)
|
||||
Start/voice_and_tone
|
||||
# LANGUAGE REQUIREMENT
|
||||
- Generate ALL content exclusively in the target language specified in the user message. You MUST write the entire post in that language, regardless of the language of any source materials.
|
||||
- No mixing of languages whatsoever
|
||||
- Adapt platform terminology to the target language
|
||||
|
||||
## 4. 语言要求
|
||||
- 专门使用以下语言生成所有内容:User Input/language
|
||||
- 不得混用语言
|
||||
- 将平台术语调整为指定语言
|
||||
# CONTENT REQUIREMENTS
|
||||
- Follow platform guidelines exactly (format, length, tone, hashtags)
|
||||
- Integrate source information effectively (key messages, data, value props)
|
||||
- Apply voice & tone consistently (if provided)
|
||||
- Optimize for platform-specific engagement
|
||||
- Ensure cultural appropriateness for the specified language
|
||||
|
||||
# 内容要求
|
||||
- 严格遵循平台指南(格式、长度、语调、标签)
|
||||
- 有效整合来源信息(关键信息、数据、价值主张)
|
||||
- 一致地应用语音与语调(如果提供)
|
||||
- 针对平台特定的参与进行优化
|
||||
- 确保指定语言的文化适当性
|
||||
# OUTPUT FORMAT
|
||||
- Generate ONLY the final social media post content. No explanations or meta-commentary. Content must be immediately copy-paste ready.
|
||||
- Maximum heading level: ## (H2) - never use # (H1)
|
||||
- No horizontal dividers: avoid ---
|
||||
|
||||
# 输出格式
|
||||
- 仅生成最终的社交媒体帖子内容。没有解释或元评论。内容必须立即可复制粘贴。
|
||||
- 最大标题级别:##(H2)- 永远不要使用 #(H1)
|
||||
- 没有水平分隔符:避免 ---
|
||||
# QUALITY CHECKLIST
|
||||
✅ Platform guidelines followed
|
||||
✅ Source information integrated
|
||||
✅ Voice/tone consistent (when provided)
|
||||
✅ Language consistency maintained
|
||||
✅ Engagement optimized
|
||||
✅ Publication ready
|
||||
```
|
||||
3. 点击**添加消息**来添加一条用户消息,然后粘贴以下内容。输入 `{` 或 `/` 将所有输入替换为列表中对应的变量。
|
||||
|
||||
# 质量检查清单
|
||||
✅ 遵循平台指南
|
||||
✅ 整合来源信息
|
||||
✅ 语音/语调一致(提供时)
|
||||
✅ 保持语言一致性
|
||||
✅ 优化参与度
|
||||
✅ 发布就绪
|
||||
```
|
||||
4. 启用结构化输出。
|
||||
```markdown USER
|
||||
Platform Name: Current Iteration/item
|
||||
Target Language: User Input/language
|
||||
Platform Guidelines: Identify Style/text
|
||||
Source Information: Integrate Info/text
|
||||
Voice & Tone: User Input/voice_and_tone
|
||||
```
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_structured_output.png"
|
||||
alt="结构化输出"
|
||||
title="结构化输出"
|
||||
className="mx-auto"
|
||||
style={{ width:"64%" }}
|
||||
/>
|
||||
1. 在 **输出变量** 旁边,将 **结构化** 切换为开启。structured_output 变量将出现在下方。
|
||||
2. 在 **structured_output** 旁边,点击 **配置**。
|
||||
3. 在弹出的架构编辑器中,点击右上角的 **从 JSON 导入**,并粘贴以下内容:
|
||||
4. 启用结构化输出。
|
||||
|
||||
<Info>
|
||||
这使我们能够以更可靠的方式从 LLM 的响应中提取特定信息,这对于下一步格式化最终输出至关重要。
|
||||
</Info>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. 在**输出变量**旁边,将**结构化**切换为开启。`structured_output` 变量将出现在下方。点击**配置**。
|
||||
|
||||
2. 在弹出的架构编辑器中,点击右上角的**从 JSON 导入**,并粘贴以下内容:
|
||||
|
||||
```json
|
||||
{
|
||||
"platform_name": "string",
|
||||
"post_content": "string"
|
||||
}
|
||||
```
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
```json
|
||||
{
|
||||
"platform_name": "string",
|
||||
"post_content": "string"
|
||||
}
|
||||
```
|
||||
4. 点击迭代节点进行配置:
|
||||
1. 将 `Parameter Extractor/platform` 设置为输入变量。
|
||||
2. 将 `Create Content/structured_output` 设置为输出变量。
|
||||
3. 启用 **并行模式** 并将最大并行度设置为 `10`。
|
||||
|
||||
<Check>
|
||||
这就是为什么我们在用户输入节点的目标平台字段的标签名称中包含了 `(≤10)`。
|
||||
</Check>
|
||||
1. 将 `Parameter Extractor/platform` 设置为输入变量。
|
||||
|
||||
### 8. 模板节点:格式化最终输出
|
||||
2. 将 `Create Content/structured_output` 设置为输出变量。
|
||||
|
||||
3. 启用**并行模式**并将最大并行度设置为 `10`。
|
||||
|
||||
<Check>
|
||||
这就是为什么我们在用户输入节点的目标平台字段的标签名称中包含了 `(≤10)`。
|
||||
</Check>
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
### 8. 格式化最终输出:模板节点
|
||||
|
||||
<Info>
|
||||
迭代节点为每个平台生成一个帖子,但其输出是原始数据数组(例如,`[{"platform_name": "Twitter", "post_content": "..."}]`),不太可读。我们需要以更清晰的格式呈现结果。
|
||||
|
||||
这就是模板节点的用武之地——它允许我们使用 [Jinja2](https://jinja.palletsprojects.com/en/stable/) 模板将这些原始数据格式化为组织良好的文本,确保最终输出用户友好且易于理解。
|
||||
这就是模板节点的用武之地——它允许我们使用 [Jinja2](https://jinja.palletsprojects.com/en/stable/) 模板将这些原始数据格式化为组织良好的文本,确保最终输出用户友好且易于阅读。
|
||||
</Info>
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_template.png"
|
||||
alt="模板节点"
|
||||
title="模板节点"
|
||||
style={{ width:"49%" }}
|
||||
className="mx-auto"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
1. 在迭代节点之后,添加一个模板节点。
|
||||
2. 在模板节点的面板上,将 `Iteration/output` 设置为输入变量。
|
||||
3. 粘贴以下 Jinja2 代码(**记得删除注释**)。
|
||||
|
||||
```
|
||||
{% for item in output %} # 遍历输入数组中的每个平台-内容对
|
||||
# 📱 {{ item.platform_name }} # 显示平台名称作为带有手机表情符号的 H1 标题
|
||||
{{ item.post_content }} # 显示为此平台生成的内容
|
||||
# 在平台之间添加空行以提高可读性
|
||||
{% endfor %} # 结束循环
|
||||
```
|
||||
2. 在模板节点的面板上,将 `Iteration/output` 设置为输入变量并命名为 `output`。
|
||||
|
||||
<Tip>
|
||||
虽然 LLM 也可以处理输出格式化,但它们的输出可能不一致且不可预测。对于不需要推理的基于规则的格式化,模板节点以更稳定可靠的方式完成任务,且成本为零令牌。
|
||||
3. 粘贴以下 Jinja2 代码:
|
||||
|
||||
LLM 非常强大,但知道何时使用正确的工具是构建更可靠和经济高效的 AI 应用程序的关键。
|
||||
</Tip>
|
||||
```
|
||||
{% for item in output %}
|
||||
# 📱 {{ item.platform_name }}
|
||||
{{ item.post_content }}
|
||||
|
||||
### 9. 输出节点:将结果返回给用户
|
||||
{% endfor %}
|
||||
```
|
||||
|
||||
- `{% for item in output %}` / `{% endfor %}`:遍历输入数组中的每个平台-内容对。
|
||||
- `{{ item.platform_name }}`:显示平台名称作为带有手机表情符号的 H1 标题。
|
||||
- `{{ item.post_content }}`:显示为该平台生成的内容。
|
||||
- `{{ item.post_content }}` 和 `{% endfor %}` 之间的空行在最终输出中为各平台之间添加间距。
|
||||
|
||||
<Tip>
|
||||
虽然 LLM 也可以处理输出格式化,但它们的输出可能不一致且不可预测。对于不需要推理的基于规则的格式化,模板节点以更稳定可靠的方式完成任务,且成本为零令牌。
|
||||
|
||||
LLM 非常强大,但知道何时使用正确的工具是构建更可靠和经济高效的 AI 应用程序的关键。
|
||||
</Tip>
|
||||
|
||||
### 9. 将结果返回给用户:输出节点
|
||||
|
||||
1. 在模板节点之后,添加一个输出节点。
|
||||
2. 在输出节点的面板上,将 `Template/output` 设置为输出变量。
|
||||
@@ -501,31 +524,46 @@ icon: "forward"
|
||||
|
||||
1. 确保你的检查列表已清除。
|
||||
|
||||
<img
|
||||
src="/images/deeper_dive_checklist_clear.png"
|
||||
alt="检查检查列表"
|
||||
className="mx-auto"
|
||||
style={{ width:"77%" }}
|
||||
title="检查检查列表"
|
||||
/>
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
2. 对照开头提供的参考图检查你的工作流,确保所有节点和连接都匹配。
|
||||
3. 点击右上角的 **运行**,填写输入字段,然后点击 **开始运行**。
|
||||
|
||||
要使用缓存的输入运行单个节点,请点击其配置面板顶部的 **运行此步骤** 图标。
|
||||
3. 点击右上角的**运行测试**,填写输入字段,然后点击**开始运行**。
|
||||
|
||||
<Tip>
|
||||
要测试节点对来自先前节点的不同输入的反应,你不需要重新运行整个工作流。只需点击画布底部的 **查看缓存变量**,从列表中找到要更改的变量,然后编辑其值。
|
||||
</Tip>
|
||||
如果遇到任何错误,请检查相应节点的 **最后运行** 日志以确定问题的确切原因。
|
||||
如果你不确定要输入什么,可以尝试以下示例输入:
|
||||
|
||||
- **草稿**:`We just launched a new AI writing assistant that helps teams create content 10x faster.`
|
||||
|
||||
- **上传文件**:留空
|
||||
|
||||
- **语音与语调**:`Friendly and enthusiastic, but professional`
|
||||
|
||||
- **目标平台**:`Twitter and LinkedIn`
|
||||
|
||||
- **语言**:`English`
|
||||
|
||||
成功运行后会生成格式化的输出,每个平台有一个单独的帖子,如下所示:
|
||||
|
||||
<Frame>
|
||||

|
||||
</Frame>
|
||||
|
||||
<Note>
|
||||
你的结果可能会因使用的模型不同而有所差异。能力更强的模型通常会产生更高质量的输出。
|
||||
</Note>
|
||||
|
||||
<Tip>
|
||||
要测试节点对来自先前节点的不同输入的反应,你不需要重新运行整个工作流。只需点击画布底部的**查看缓存变量**,从列表中找到要更改的变量,然后编辑其值。
|
||||
</Tip>
|
||||
|
||||
如果遇到任何错误,请检查相应节点的**最后运行**日志以确定问题的确切原因。
|
||||
|
||||
## 步骤 4:发布和共享
|
||||
|
||||
一旦工作流按预期运行并且你对结果感到满意,点击 **发布** \> **发布更新** 使其生效并可共享。
|
||||
一旦工作流按预期运行并且你对结果感到满意,点击**发布** \> **发布更新**使其生效并可共享。
|
||||
|
||||
<Warning>
|
||||
如果你稍后进行任何更改,请始终记住再次发布,以便更新生效。
|
||||
</Warning>
|
||||
|
||||
<Tip>
|
||||
发布后,你可以在实时环境中运行快速的端到端测试,以确认一切工作与 **工作室** 中相同。
|
||||
</Tip>
|
||||
</Warning>
|
||||