# 보고서 생성 워크플로우 만들기

* 에이전트 > 워크플로우에서 보고서 생성에 활용할 워크플로우를 생성합니다.
* 보고서 생성 시에 필수값인 주제 워크플로우, 목차 워크플로우, 작성 워크플로우 생성 및 배포합니다.

### **주제 워크플로우 생성**

#### **1.1 워크플로우 생성 버튼 클릭**

* **워크플로우 생성** 버튼을 클릭하여 새로운 워크플로우를 만듭니다.

<figure><img src="/files/FEkjmgPDgEJUeUg1Zwxy" alt=""><figcaption></figcaption></figure>

**1.2 정보 입력**

* **제목**: 워크플로우의 이름을 입력합니다. 예시: "보고서 생성 - 주제 생성"
* **상세 설명**: 워크플로우의 특징이나 목적을 간단히 메모합니다.
* **관리 그룹**: 워크플로우의 편집 권한을 가질 관리 그룹을 지정합니다.

<figure><img src="/files/UPlkUkFpmmuJXojSmlEo" alt=""><figcaption></figcaption></figure>

**1.3 워크플로우 목록에서 확인**

* 생성한 워크플로우는 **워크플로우 목록**에서 확인할 수 있습니다. 목록에서 해당 워크플로우를 더블 클릭하여 상세 페이지로 이동합니다. (워크플로우 목록에는 생성된 워크플로우가 ID, 이름, 생성 날짜와 함께 표시됩니다.)

<figure><img src="/files/mcvHPi2ZG7loBlTsFB0F" alt=""><figcaption></figcaption></figure>

#### **2. 워크플로우 편집**

#### **2.1 리비전 정보 설정**

* **리비전 정보** 탭을 클릭합니다.
* **도커 이미지**, **인스턴스 타입**, **복제본** 등을 설정합니다. 이는 워크플로우가 실행될 환경을 결정합니다.
  * **도커 이미지**: 워크플로우 실행에 필요한 환경과 라이브러리가 포함된 컨테이너 이미지를 선택합니다.
  * **인스턴스 타입**: 워크플로우 실행에 할당할 컴퓨팅 리소스(CPU, 메모리)를 선택합니다.
  * **복제본**: 워크플로우를 실행할 인스턴스의 개수를 설정합니다. 복제본 수를 늘리면 병렬 처리 및 부하 분산이 가능합니다.
  * **GPU 할당량** (선택사항): GPU가 필요한 워크플로우의 경우 GPU 리소스를 할당할 수 있습니다.
  * **최대 큐 크기** (선택사항): 동시에 대기할 수 있는 최대 요청 수를 설정합니다.
  * **최대 동시 실행 수** (선택사항): 동시에 실행할 수 있는 최대 워크플로우 인스턴스 수를 제한합니다.
  * **환경 변수** (선택사항): 워크플로우 실행 시 필요한 환경 변수를 키-값 쌍으로 설정할 수 있습니다.
  * 도커 이미지 : `llmops-workflow-api:latest`
  * 인스턴스 타입: `smicro (1 CPU Core, 1 Gb Memory)`
  * 복제본: `1`

<figure><img src="/files/32o9rUcxwynf4QlI35q7" alt="워크플로우 리비전 정보 설정 화면"><figcaption><p>워크플로우 리비전 정보 설정 화면</p></figcaption></figure>

**2.2 세부 설정(1)**

* 하단의 **Flowise Step 추가 버튼** 클릭 후 'Chatflow 2.2.3'을 선택합니다.

<figure><img src="/files/IH4OiXZNTIN9Jx9TDUSH" alt=""><figcaption></figcaption></figure>

* **Flowise 창**에서 '+' 버튼을 클릭하여 노드를 드래그하여 배치합니다. 각 노드의 세부 설정을 조정합니다. 이번엔 노드 구성에 대해서 설명합니다.

<figure><img src="/files/y7rIE520dDwpLcv5QhkJ" alt=""><figcaption></figcaption></figure>

* **Mnc Inference Embeddings:** 사용할 Serving을 선택합니다.
  * 이 예시에서는 `bge-m3` 을 적용하였습니다.
* **DeepSearfing:** Weaviate Host와 Weaviate Index를 선택합니다.
  * 이 예시에서는 `[MNC QA] 보고서 DB`, `MNC_QA_REPORT`를 적용하였습니다.
* **MNC Merge Retriever**: Vector Store Retrievers와 Embeddings 노드를 연결해주고 Output값을 선택합니다.
  * 이 예시에서는 `Text`를 적용하였습니다.
* **Prompt Template(1):** Template를 입력합니다.
  * 이 예시에서는 아래 값을 적용하였습니다.

```
아래 종류의 보고서를 작성하기 위해 사용자가 임의로 주제를 선정하였습니다.
참고 자료를 바탕으로 사용자가 선정한 주제를 바탕으로 topics 5개를 답변으로 제공하세요

### 참고 자료:
{context}

###사용자가 선정한 주제 ###
{question}

###답변###
```

* **Prompt Template(2):** Format Promt Values 버튼을 클릭하여 값을 입력합니다.

  * 이 예시에서는 아래 값을 적용하였습니다.

    * \+ 버튼을 클릭하여 key name 값을 `context`과 `question`을 입력하고 체크 버튼을 클릭합니다.

    <figure><img src="/files/CuRPQCDY5W8fdS6GhOrK" alt=""><figcaption></figcaption></figure>

    <figure><img src="/files/ZmJK7Jetgd0fLOQYa9iJ" alt=""><figcaption></figcaption></figure>

    * 입력한 keyname의 📝버튼을 클릭하여 각각의 variable을 선택해줍니다.
    * context는 `MNCMergeRetriver_0`을 선택해줍니다.

    <figure><img src="/files/JcViIRzWRgU8NDe5l6ql" alt=""><figcaption></figcaption></figure>

    * question은 `question`을 선택해줍니다.

    <figure><img src="/files/wqReR1onXEE8XIGXaBtA" alt=""><figcaption></figcaption></figure>

    * 아래와 같이 모두 입력 및 선택해줍니다.

  <figure><img src="/files/8crLnpU1S9fSwI0YKP9O" alt=""><figcaption></figcaption></figure>
* **ChatMNC**: 사용할 LLM(Large Language Model)과 Max Token, Temperature을 선택합니다. 이 모델은 워크플로우에서 텍스트 생성에 사용됩니다.
  * 이 예시에서는 `Qwen2.5-72B-Instruct,` `Max Token 1024`, `Temperature 0.9`를 적용하였습니다.
* **Custom List Output Parser:** Length를 입력하고 Autofix를 활성화해줍니다.
  * 이 예시에서는 `5`를 적용하였습니다.
* **LLM Chain**: Language Model과 Prompt, Output Parser 노드를 연결합니다.

**2.3 세부설정(2)**

* 하단의 **Python 단계 추가 버튼**을 선택합니다.

<figure><img src="/files/IH4OiXZNTIN9Jx9TDUSH" alt=""><figcaption></figcaption></figure>

* Python 창을 활성화하여 코드를 입력합니다.

<figure><img src="/files/xjipk88nIAslNTKAZOSA" alt=""><figcaption></figcaption></figure>

* 아래의 코드를 입력해줍니다. flowise output parser에서 리턴하는 'json'키를 자동으로 'text'키로 변환하여 보고서 생성 시 올바르게 반영할 수 있도록 하기 위해서입니다.

```python
async def run(data: dict) -> dict:
    # Your custom processing logic here
    data['text'] = data['json']  #  보고서 생성 로직에서 'text'키를 사용, flowise output parser는 'json'키를 리턴
    return data
```

**2.4 저장**

모든 설정을 마친 후 **리비전 상세 섹션**에 있는 **저장** 버튼을 클릭하여 워크플로우 설정을 저장합니다.

<figure><img src="/files/5cZJbC7A4ccegeUSeWWu" alt=""><figcaption></figcaption></figure>

[**2.5 배포**](/default/v1.8.4/basic-tutorials/guides/workflow/openapi.md#id-3)

***

### **목차 워크플로우 생성**

#### **1.1 워크플로우 생성 버튼 클릭**

* **워크플로우 생성** 버튼을 클릭하여 새로운 워크플로우를 만듭니다.

<figure><img src="/files/FEkjmgPDgEJUeUg1Zwxy" alt=""><figcaption></figcaption></figure>

**1.2 정보 입력**

* **제목**: 워크플로우의 이름을 입력합니다. 예시: "보고서 생성 - 목차생성"
* **상세 설명**: 워크플로우의 특징이나 목적을 간단히 메모합니다.
* **관리 그룹**: 워크플로우의 편집 권한을 가질 관리 그룹을 지정합니다.

<figure><img src="/files/jhA0jPf6VOfn6O9td33J" alt=""><figcaption></figcaption></figure>

**1.3 워크플로우 목록에서 확인**

* 생성한 워크플로우는 **워크플로우 목록**에서 확인할 수 있습니다. 목록에서 해당 워크플로우를 더블 클릭하여 상세 페이지로 이동합니다. (워크플로우 목록에는 생성된 워크플로우가 ID, 이름, 생성 날짜와 함께 표시됩니다.)

<figure><img src="/files/ZIvalyKM44s1YHnGAynk" alt=""><figcaption></figcaption></figure>

#### **2. 워크플로우 편집**

#### **2.1 리비전 정보 설정**

* **리비전 정보** 탭을 클릭합니다.
* **도커 이미지**, **인스턴스 타입**, **복제본** 등을 설정합니다. 이는 워크플로우가 실행될 환경을 결정합니다.
  * **도커 이미지**: 워크플로우 실행에 필요한 환경과 라이브러리가 포함된 컨테이너 이미지를 선택합니다.
  * **인스턴스 타입**: 워크플로우 실행에 할당할 컴퓨팅 리소스(CPU, 메모리)를 선택합니다.
  * **복제본**: 워크플로우를 실행할 인스턴스의 개수를 설정합니다. 복제본 수를 늘리면 병렬 처리 및 부하 분산이 가능합니다.
  * **GPU 할당량** (선택사항): GPU가 필요한 워크플로우의 경우 GPU 리소스를 할당할 수 있습니다.
  * **최대 큐 크기** (선택사항): 동시에 대기할 수 있는 최대 요청 수를 설정합니다.
  * **최대 동시 실행 수** (선택사항): 동시에 실행할 수 있는 최대 워크플로우 인스턴스 수를 제한합니다.
  * **환경 변수** (선택사항): 워크플로우 실행 시 필요한 환경 변수를 키-값 쌍으로 설정할 수 있습니다.
  * 도커 이미지 : `llmops-workflow-api:latest`
  * 인스턴스 타입: `smicro (1 CPU Core, 1 Gb Memory)`
  * 복제본: `1`

<figure><img src="/files/32o9rUcxwynf4QlI35q7" alt="워크플로우 리비전 정보 설정 화면"><figcaption><p>워크플로우 리비전 정보 설정 화면</p></figcaption></figure>

**2.2 세부 설정(1)**

* 하단의 **Flowise Step 추가 버튼** 클릭 후 'Chatflow 2.2.3'을 선택합니다.

<figure><img src="/files/IH4OiXZNTIN9Jx9TDUSH" alt=""><figcaption></figcaption></figure>

* **Flowise 창**에서 '+' 버튼을 클릭하여 노드를 드래그하여 배치합니다. 각 노드의 세부 설정을 조정합니다. 이번엔 노드 구성에 대해서 설명합니다.

<figure><img src="/files/l3S5sNm92Vs29AHKe7cU" alt=""><figcaption></figcaption></figure>

* **Mnc Inference Embeddings:** 사용할 Serving을 선택합니다.
  * 이 예시에서는 `bge-m3` 을 적용하였습니다.
* **DeepSearfing:** Weaviate Host와 Weaviate Index를 선택합니다.
  * 이 예시에서는 `[MNC QA] 보고서 DB`, `MNC_QA_REPORT`를 적용하였습니다.
* **MNC Merge Retriever**: Vector Store Retrievers와 Embeddings 노드를 연결해주고 Output값을 선택합니다.
  * 이 예시에서는 `Text`를 적용하였습니다.
* **Prompt Template(1):** Template를 입력합니다.
  * 이 예시에서는 아래 값을 적용하였습니다.

```
아래 규칙을 반드시 지키면서 답변을 JSON 형태로 출력하세요.

- 보고서 제목(title)은 한 줄로 작성해야 합니다.
- 목차(indices)는 최소 1개 이상 포함해야 하며, 최대 20개까지만 출력할 수 있습니다.
- LLM이 생성한 목차가 20개를 초과하면 상위 20개까지만 사용됩니다.
- 각 목차는 "index" (목차 제목)과 "description" (설명 리스트)을 반드시 포함해야 하며, description은 최소 1개 이상이어야 합니다.
- 전체 답변은 JSON 형식으로 감싸서 출력해야 하며, 형식 오류 없이 정확한 JSON 구조를 유지해주세요.

다음 보고서 주제와 참고 자료를 바탕으로 보고서 목차를 작성해주세요.
제목, 목차, 그리고 목차별 관련 내용을 포함해야 합니다.

### 보고서 주제 ###
{question}

### 참고 자료 ###
{context}

출력 형식:
- JSON 안에 "title" 필드와, "indices" 배열을 반드시 포함
- "indices" 배열 안에는 각 목차별 구조가 들어가며, 각 목차는 다음 필드로 구성됩니다:
  - "index": 목차 제목 (문자열)
  - "description": 해당 목차에 대한 설명 (문자열 배열, 최소 1개 이상)
```

* **Prompt Template(2):** Format Promt Values 버튼을 클릭하여 값을 입력합니다.

  * 이 예시에서는 아래 값을 적용하였습니다.

    * \+ 버튼을 클릭하여 key name 값을 `context`과 `question`을 입력하고 체크 버튼을 클릭합니다.

    <figure><img src="/files/CuRPQCDY5W8fdS6GhOrK" alt=""><figcaption></figcaption></figure>

    <figure><img src="/files/ZmJK7Jetgd0fLOQYa9iJ" alt=""><figcaption></figcaption></figure>

    * 입력한 keyname의 📝버튼을 클릭하여 각각의 variable을 선택해줍니다.
    * context는 `MNCMergeRetriver_0`을 선택해줍니다.

    <figure><img src="/files/JcViIRzWRgU8NDe5l6ql" alt=""><figcaption></figcaption></figure>

    * question은 `question`을 선택해줍니다.

    <figure><img src="/files/wqReR1onXEE8XIGXaBtA" alt=""><figcaption></figcaption></figure>

    * 아래와 같이 모두 입력 및 선택해줍니다.

  <figure><img src="/files/8crLnpU1S9fSwI0YKP9O" alt=""><figcaption></figcaption></figure>
* **ChatMNC**: 사용할 LLM(Large Language Model)과 Max Token, Temperature을 선택합니다.
* **ChatMNC**: 사용할 LLM(Large Language Model)과 Max Token, Temperature을 선택합니다. 이 모델은 워크플로우에서 텍스트 생성에 사용됩니다.
  * 이 예시에서는 `Qwen2.5-72B-Instruct,` `Max Token 2048`, `Temperature 0.9`를 적용하였습니다.
* **Advanced Structured Output Parser:** Autofix를 활성화하고 Example JSON을 입력합니다.
  * 이 예시에서는 아래 값을 적용하였습니다.

```json
z.object({
  // 보고서 제목 (문자열)
  title: z.string(),
  // 목차 배열 (최소 1개, 최대 20개까지 허용)
  indices: z
    .array(
      z.object({
        // 목차 이름
        index: z.string(),
        // 목차별 부연 설명 (최소 1개 이상의 설명)
        description: z.array(z.string()).min(1),
      })
    )
    .min(1)
    .max(20),
})
```

* **LLM Chain:** Language Model과 Prompt 노드를 연결합니다.

**2.3 세부설정(2)**

* 하단의 **Python 단계 추가 버튼**을 선택합니다.

<figure><img src="/files/IH4OiXZNTIN9Jx9TDUSH" alt=""><figcaption></figcaption></figure>

* Python 창을 활성화하여 코드를 입력합니다.

<figure><img src="/files/MBvYlyCsW01LqAU7foRo" alt=""><figcaption></figcaption></figure>

* 아래의 코드를 입력해줍니다. flowise output parser에서 리턴하는 'json'키를 자동으로 'text'키로 변환하여 보고서 생성 시 올바르게 반영할 수 있도록 하기 위해서입니다.

```python
async def run(data: dict) -> dict:
    # Your custom processing logic here
    data['text'] = data['json'] #  보고서 생성 로직에서 'text'키를 사용, flowise output parser는 'json'키를 리턴
    return data 
```

**2.4 저장**

모든 설정을 마친 후 **리비전 상세 섹션**에 있는 **저장** 버튼을 클릭하여 워크플로우 설정을 저장합니다.

<figure><img src="/files/nZ3OLn5bap5lpgcrIbTz" alt=""><figcaption></figcaption></figure>

[**2.5 배포**](/default/v1.8.4/basic-tutorials/guides/workflow/openapi.md#id-3)

***

### **최종 작성 워크플로우 생성**

#### **1.1 워크플로우 생성 버튼 클릭**

* **워크플로우 생성** 버튼을 클릭하여 새로운 워크플로우를 만듭니다.

<figure><img src="/files/FEkjmgPDgEJUeUg1Zwxy" alt=""><figcaption></figcaption></figure>

**1.2 정보 입력**

* **제목**: 워크플로우의 이름을 입력합니다. 예시: "보고서 생성 - 최종생성"
* **상세 설명**: 워크플로우의 특징이나 목적을 간단히 메모합니다.
* **관리 그룹**: 워크플로우의 편집 권한을 가질 관리 그룹을 지정합니다.

<figure><img src="/files/0xm1pUnKkEh3ali0rizH" alt=""><figcaption></figcaption></figure>

**1.3 워크플로우 목록에서 확인**

* 생성한 워크플로우는 **워크플로우 목록**에서 확인할 수 있습니다. 목록에서 해당 워크플로우를 더블 클릭하여 상세 페이지로 이동합니다. (워크플로우 목록에는 생성된 워크플로우가 ID, 이름, 생성 날짜와 함께 표시됩니다.)

<figure><img src="/files/6O9ZLda8pSIiDiaaDT2N" alt=""><figcaption></figcaption></figure>

#### **2. 워크플로우 편집**

#### **2.1 리비전 정보 설정**

* **리비전 정보** 탭을 클릭합니다.
* **도커 이미지**, **인스턴스 타입**, **복제본** 등을 설정합니다. 이는 워크플로우가 실행될 환경을 결정합니다.
  * **도커 이미지**: 워크플로우 실행에 필요한 환경과 라이브러리가 포함된 컨테이너 이미지를 선택합니다.
  * **인스턴스 타입**: 워크플로우 실행에 할당할 컴퓨팅 리소스(CPU, 메모리)를 선택합니다.
  * **복제본**: 워크플로우를 실행할 인스턴스의 개수를 설정합니다. 복제본 수를 늘리면 병렬 처리 및 부하 분산이 가능합니다.
  * **GPU 할당량** (선택사항): GPU가 필요한 워크플로우의 경우 GPU 리소스를 할당할 수 있습니다.
  * **최대 큐 크기** (선택사항): 동시에 대기할 수 있는 최대 요청 수를 설정합니다.
  * **최대 동시 실행 수** (선택사항): 동시에 실행할 수 있는 최대 워크플로우 인스턴스 수를 제한합니다.
  * **환경 변수** (선택사항): 워크플로우 실행 시 필요한 환경 변수를 키-값 쌍으로 설정할 수 있습니다.
  * 도커 이미지 : `llmops-workflow-api:latest`
  * 인스턴스 타입: `smicro (1 CPU Core, 1 Gb Memory)`
  * 복제본: `1`

<figure><img src="/files/32o9rUcxwynf4QlI35q7" alt="워크플로우 리비전 정보 설정 화면"><figcaption><p>워크플로우 리비전 정보 설정 화면</p></figcaption></figure>

**2.2 세부 설정**

* 하단의 **Flowise Step 추가 버튼** 클릭 후 'Chatflow 2.2.3'을 선택합니다.

<figure><img src="/files/IH4OiXZNTIN9Jx9TDUSH" alt=""><figcaption></figcaption></figure>

* **Flowise 창**에서 '+' 버튼을 클릭하여 노드를 드래그하여 배치합니다. 각 노드의 세부 설정을 조정합니다. 이번엔 노드 구성에 대해서 설명합니다.

<figure><img src="/files/RsrPdrI6msm1tinFFafV" alt=""><figcaption></figcaption></figure>

* **Mnc Inference Embeddings**: Serving을 선택합니다.
  * 이 예시에서는 `bge-m3`를 적용하였습니다.
* **DeepSearfing:** Weaviate Host와 Weaviate Index를 선택합니다.
  * 이 예시에서는 `[MNC QA] 보고서 DB`, `MNC_QA_REPORT`를 적용하였습니다.
* **ChatMNC**: 사용할 Serving과 Max Token, Temperature을 선택합니다. 이 모델은 워크플로우에서 텍스트 생성에 사용됩니다.
  * 이 예시에서는 `Qwen2.5-72B-Instruct,` `Max Token 4000`, `Temperature 0.9`를 적용하였습니다.
* **Prompt Template:** Template를 입력합니다.
  * 이 예시에서는 아래 값을 적용하였습니다.

```
다음 정보(참고 자료, 보고서 정보)를 활용하여, 마크다운(Markdown) 형태의 보고서 내용을 작성해야 합니다.
해당 보고서의 특정 "목차" 내용만 작성하되, 아래 지침을 반드시 준수해주세요.

### 보고서 전체 목차

{table_of_contents}

1.**분량 관련 주의사항**

  -제공된 '글자 수' 또는 '전체 보고서 분량'을 참고하여 적절한 분량으로 작성합니다.

  -하지만 최종 결과물에는 글자 수나 분량 등의 숫자를 절대 표시하지 않습니다.

2.**마크다운 구성**

  -제목(Heading), 부제목(Subheading), 목록(Bullet/Numbered list), 코드 블록(Code block), 표(Table) 등을 적절히 활용하여 가독성을 높입니다.

  -논리적 흐름을 유지하며 전문적이고 깊이 있는 내용을 작성해주세요.

3.**각 목차별 작성 방식**

  -현재 작성할 목차: 전체 {num_of_index}개 목차 중 {index_sequence}번째.

  -목차 정보: {question}.

  -이 목차가 **첫 번째**라면 보고서 제목을 작성하고, 보고서 전체 방향성을 제시해주세요. 또한 전체 구조를 간략히 설명합니다.

  -이 목차가 **마지막**이라면 보고서 전반 내용을 요약하고 결론을 포함합니다.

  -이 목차가 **중간**이라면 별도의 요약이나 결론 없이, 핵심 내용만 알차게 구성합니다.

  -목차가 단 하나인 경우, 전체 방향성과 결론을 모두 포함해 작성해주세요.

  -다른 목차(이미 작성된 내용)와 중복되지 않도록 주의해주세요.

4.**추가 주의사항**

  -"글자 수", "페이지 수" 등 구체적인 숫자는 결과물에 절대 기재하지 않습니다.

  -참고 자료나 보고서 정보의 출처(제공된 텍스트)도 공개하지 않습니다. (내부 정보로만 활용)

---

<|im_start|>system

### 참고 자료

{context}

### 작성 분량 지침

**글자 수**: {word_count}자 내외 (결과물에는 직접 표시 금지)
<|im_end|>

<|im_start|>assistant

### 출력

Output:
```

* **MNC Unified RAG Chain:** Max Context Character를 입력하고 Return Source Documents를 활성화합니다.
  * 이 예시에서는 `7000`을 입력하였습니다.

**2.3 저장**

모든 설정을 마친 후 **리비전 상세 섹션**에 있는 **저장** 버튼을 클릭하여 워크플로우 설정을 저장합니다.

<figure><img src="/files/BW9LmJLpW5Z1hLGAitsS" alt=""><figcaption></figcaption></figure>

[**2.4 배포**](/default/v1.8.4/basic-tutorials/guides/workflow/openapi.md#id-3)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://genos-docs.gitbook.io/default/v1.8.4/basic-tutorials/guides/workflow/dev-report-workflow.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
