> ## Documentation Index
> Fetch the complete documentation index at: https://dify-6c0370d8-docs-new-agent-experience.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# 第 9 课：排版设计师（模板）

> 本文档由 AI 自动翻译。如有任何不准确之处，请参考 [英文原版](/en/learn/tutorials/workflow-101/lesson-09)。

回顾第八课，我们使用最后的 LLM 节点产出一篇完整的回复邮件。

虽然，我们在这个 LLM 节点内的 Prompt 里告知了邮件内需要每一个问题对应一个答案，但仍然会有每封邮件输出格式不统一的情况。

为了解决这个问题，我们需要一个专属的排版小助手，在最终生成邮件之前，把所有的内容整理成工整和标准的格式。

## 模板转换

你可以将它理解成排版设计师，它能够接收一个或者多个输入变量（比如我们的答案列表），然后按照你设置好的模板，将这些变量重新组合、排版，最终输出一段格式统一的文本。

## 动手实践：优化邮件排版

<Steps>
  <Step title="更新 LLM 节点">
    既然模板节点将会负责处理问候语和落款，我们需要告诉 LLM 只专注于回答问题本身就行。你可以复制并粘贴下方的提示词，也可以自由修改。别忘了在用户消息（User Message）中把文本替换成相应的变量。

    ```plaintext wrap theme={null}
    Combine all answers for the original email. Write a complete, clear, and friendly reply that only includes the summarized answers.

    IMPORTANT: Focus SOLELY on the answers. Do NOT include greetings (like "Hi Name"), do NOT write intro paragraphs (like "Thank you for reaching out"), and do NOT include signatures.
    ```
  </Step>

  <Step title="添加用户信息 （User Message）">
    在 LLM 的 User 框内，分别列出并插入对应的变量。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/m7n3yF17cj5TGqhL/images/use-dify/tutorial/workflow-101-lesson-09/edit-llm-node.png?fit=max&auto=format&n=m7n3yF17cj5TGqhL&q=85&s=25259e44b45804c5c7a999b5e318f83a" alt="设置输入" width="1476" height="1126" data-path="images/use-dify/tutorial/workflow-101-lesson-09/edit-llm-node.png" />
    </Frame>
  </Step>

  <Step title="添加模板转换节点（Template Node）">
    在 LLM 节点之后，点击 `+` 号添加一个模板节点。

    <Frame>
      <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/m7n3yF17cj5TGqhL/images/use-dify/tutorial/workflow-101-lesson-09/add-template-node.png?fit=max&auto=format&n=m7n3yF17cj5TGqhL&q=85&s=b36206d0a1a7ebc572d6637ea5eabd56" alt="添加模板转换节点" width="1006" height="216" data-path="images/use-dify/tutorial/workflow-101-lesson-09/add-template-node.png" />
    </Frame>
  </Step>

  <Step title="设置输入变量">
    我们需要把原材料交给我们的排版设计师，让它知道该排版哪些内容。
    点击模板节点，找到输入变量（Input Variables）区域，并添加以下这两个变量：

    * `customer`：选择 `User Input / {x} customer_name String`
    * `body`：选择 `LLM / {x} text String`

          <Frame>
            <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/m7n3yF17cj5TGqhL/images/use-dify/tutorial/workflow-101-lesson-09/template-input-variable.png?fit=max&auto=format&n=m7n3yF17cj5TGqhL&q=85&s=9227a27084b693891a90edc4d1a485e7" alt="设置模板转换器输入变量" width="1222" height="510" data-path="images/use-dify/tutorial/workflow-101-lesson-09/template-input-variable.png" />
          </Frame>
  </Step>

  <Step title="使用 Jinja 语法进行排版">
    **什么是 Jinja2?**

    简单来说，Jinja2 就是一种让你把变量（比如答案列表）按照你想要的格式，填入到一个文本模板里的工具。它使用一些简单的符号来标记变量的位置和执行一些基本操作。通过它，我们能把一个原始的数据列表，转换成一段格式整齐的文本。

    在这里，我们可以把开场白、邮件正文和署名落款拼装在一起，确保每次发出的邮件都既专业又格式统一。

    请将下方这段排版代码直接复制并粘贴到模板节点的代码框中。

    ```jinja theme={null}
    Hi {{ customer }},

    Thank you for reaching out to us, and we are more than happy to provide you with the information you are seeking.

    Here are the details regarding your specific questions:

    {{ body }}

    ---
    Thank you for reaching out to us!
    Best regards,
    Anne
    ```
  </Step>
</Steps>

这是最终的工作流：

<Frame>
  <img src="https://mintcdn.com/dify-6c0370d8-docs-new-agent-experience/m7n3yF17cj5TGqhL/images/use-dify/tutorial/workflow-101-lesson-09/the-final-workflow.png?fit=max&auto=format&n=m7n3yF17cj5TGqhL&q=85&s=98c88ee41e684e9765657d34be6b3dc8" alt="最终工作流" width="2524" height="390" data-path="images/use-dify/tutorial/workflow-101-lesson-09/the-final-workflow.png" />
</Frame>

点击 **运行**，在一封邮件中提出多个问题进行测试。你会发现，最终生成的回复完美包含了个性化的开场白、LLM 在中间部分出色总结的答案，以及最下方标准、专业的落款。

## 小挑战

1. 如何修改 Jinja2 的语法，将项目符号列表修改成数字编号列表。

   <Tip>
     可前往 [Template Designer Documentation](https://jinja.palletsprojects.com/en/stable/templates/)，或者向 AI 提问，探索更多格式。
   </Tip>
2. 格式转换除了对列表进行统一的格式处理，还能做什么？
