계산 업무 설명
계산 목적, 적용 조건, 제외 조건을 말로 적습니다.
계산 목적, 적용 조건, 제외 조건을 말로 적습니다.
사용자가 넣을 값의 이름, 단위, 필수 여부를 정합니다.
계산 후 보여줄 결과, 단위, 소수점 기준을 정합니다.
대표 입력값과 예상 결과로 AI 코드가 맞는지 확인합니다.
계산기 이름, 요약, 설명, 카테고리, 버전 메모와 아이콘을 먼저 입력합니다.
구현 방식에서 Python 함수 또는 HTML/CSS/JS 화면을 선택합니다.
Python 함수는 입력/출력을 먼저 정하는 방식과 기존 코드에서 시작하는 방식 중 선택합니다.
작성 중인 내용은 서버에 임시저장하고, 더 이상 필요 없으면 임시저장 삭제로 정리합니다.
코딩을 모르는 사용자는 먼저 계산 업무를 설명하고, 입력값과 출력값을 표로 정리하면 됩니다. 영문 key와 코드는 AI가 초안을 만들 수 있지만, 계산식과 결과가 업무 기준에 맞는지는 등록자가 확인해야 합니다.
| 구분 | 화면 표시명 | 단위 | 추천 key |
|---|---|---|---|
| 입력값 | 유량 | LPM | flow_lpm |
| 입력값 | 배관 내경 | mm | pipe_diameter_mm |
| 출력값 | 압력손실 | kPa | pressure_loss_kpa |
| 출력값 | 검토 의견 | - | selection_note |
처음 등록할 때 추천
입력값과 출력값을 등록 화면에서 구성하고, 계산 로직만 Python 코드로 실행하는 방식입니다.
등록 가능한 코드 형식을 AI에 전달할 때 사용합니다.
DCS Facility Calc Market에 등록할 Python 코드는 아래 규칙을 반드시 지켜줘.
- 실행 진입점은 main.py의 def calculate(inputs): 함수여야 해.
- inputs는 등록된 입력 key를 담은 dictionary야.
- 입력값은 inputs["key"] 또는 inputs.get("key")로 읽어줘.
- 반환값은 등록된 출력 key를 모두 포함하는 dictionary여야 해.
- 입력과 출력 key는 영문자 또는 밑줄로 시작하고 영문자, 숫자, 밑줄만 사용해줘.
- 입력 type은 Number, Text, Select만 사용해줘.
- 출력 type은 Number, Text, Boolean만 사용해줘.
- Select 입력은 허용되는 value와 화면에 표시할 label을 함께 정의해줘.
- 잘못된 입력값은 ValueError와 이해하기 쉬운 메시지로 처리해줘.
- 외부 파일, 네트워크, 운영체제, 환경 변수에 접근하지 마.
- os, subprocess, socket, pathlib, shutil, requests 모듈을 사용하지 마.
- open, __import__, eval, exec, input, compile을 사용하지 마.
- 외부 패키지에 의존하지 말고 순수 계산 코드로 작성해줘.
- 여러 파일로 작성하면 main.py에 calculate(inputs)를 두고 보조 코드는 Python 파일로 분리해줘.
- 코드에서 입출력 필드를 자동으로 읽을 수 있도록 main.py 상단에 아래 형식의 JSON 계약 블록을 포함해줘.
```python
# --- FCM CONTRACT START ---
# {
# "inputs": [
# {
# "key": "flow_rate",
# "label": "유량",
# "type": "Number",
# "required": true,
# "defaultValue": "10",
# "unit": "m3/h"
# }
# ],
# "outputs": [
# {
# "key": "pressure_loss",
# "label": "압력손실",
# "type": "Number",
# "unit": "kPa",
# "precision": 2
# }
# ]
# }
# --- FCM CONTRACT END ---
```
마지막에는 Python 파일별 전체 코드, 입력 필드 표, 출력 필드 표, 샘플 입력값과 예상 결과를 제공해줘.def calculate(inputs): flow_lpm = float(inputs["flow_lpm"]) if flow_lpm < 0: raise ValueError("유량은 0 이상이어야 합니다.") return { "flow_cmh": round(flow_lpm * 0.06, 2), }