# LLM Nodes and Prompt Templates — Dify Workflow Basics

Source: https://www.skillbyai.com/en/dify-workflows/b-llm

> Prompts that pull in upstream variables.

## System prompt, variables, model settings

An **LLM node** sends a prompt to a chosen model. You write system and user messages and insert upstream variables into them (the editor offers a variable picker; in the prompt they appear as references such as `{{#start.query#}}`). Set the model, temperature and maximum tokens per node, and enable structured output when downstream nodes need fields. Keep instructions explicit: tell the model to answer only from provided context when using retrieval, and specify the format and language. Dify's node names, menus and options change between versions; check the current Dify documentation.

## Filling a prompt template from variables, run

I ran this with plain Python 3 (scikit-learn 1.9.1 where imported). It models or tests one piece of a Dify app locally; Dify itself was not running. A simplified model of variable insertion: three references are filled from upstream values and one, start.tone, has no value, so it renders empty and is reported. Missing variables silently producing blank text is a common prompt bug.

```python
import re
# Simplified model of inserting upstream variables into a prompt template
variables = {"start.query": "How do I reset my password?", "start.lang": "English",
             "kb.result": "Passwords are reset from Settings > Security > Reset."}
template = ("Answer in {{#start.lang#}} using only the context.\n"
            "Context: {{#kb.result#}}\nQuestion: {{#start.query#}}\nMissing: {{#start.tone#}}")
missing = []
def fill(m):
    key = m.group(1)
    if key not in variables:
        missing.append(key); return ""
    return variables[key]
prompt = re.sub(r"\{\{#([\w.]+)#\}\}", fill, template)
print(prompt)
print("unresolved variables:", missing)
```

Output:

```
Answer in English using only the context.
Context: Passwords are reset from Settings > Security > Reset.
Question: How do I reset my password?
Missing: 
unresolved variables: ['start.tone']
```

## Check the rendered prompt in logs

Run logs show the final prompt each LLM node received; look there first when an answer is odd.

**Quiz:** What happens if a prompt references a variable that has no value?

- [ ] The model always refuses
- [x] It can render as empty text, quietly changing the prompt
- [ ] The variable is invented automatically
- [ ] Dify trains a new model

*Answer:* It can render as empty text, quietly changing the prompt. Verify rendered prompts.
