<!-- wp:paragraph -->
<p>파이프는 Open WebUI에 새 모델을&nbsp;<strong>추가하는</strong>&nbsp;방법이라고 생각하면 됩니다&nbsp;. 이 문서에서는 파이프의 정의, 작동 방식, 그리고 Open WebUI 모델에 사용자 지정 로직과 처리 기능을 추가하기 위해 파이프를 만드는 방법을 자세히 설명합니다. 명확한 비유를 사용하고 모든 세부 사항을 자세히 설명하여 포괄적으로 이해할 수 있도록 도와드리겠습니다.</p>
<!-- /wp:paragraph -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="introduction-to-pipes">파이프 소개</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Open WebUI를 데이터가 파이프와 밸브를 통해 흐르는&nbsp;<strong>배관 시스템</strong>&nbsp;으로 상상해 보세요 . 비유하자면 다음과 같습니다.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>파이프는</strong> 데이터가 흐르는 새로운 경로를 도입할 수 있는 <strong>플러그인</strong> 과 같아서 사용자 정의 논리와 처리를 주입할 수 있습니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>밸브는</strong> 파이프의 <strong>구성 가능한 부분</strong> 으로 , 파이프를 통해 데이터가 흐르는 방식을 제어합니다.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p>파이프를 만들면 기본적으로 Open WebUI 프레임워크 내에서 원하는 특정 동작을 갖춘 사용자 지정 모델을 만드는 것입니다.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="understanding-the-pipe-structure">파이프 구조 이해</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>파이프의 구조를 이해하기 위해 기본적이고 간략한 버전부터 시작해 보겠습니다.</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>from pydantic import BaseModel, Field<br><br>class Pipe:<br>    class Valves(BaseModel):<br>        MODEL_ID: str = Field(default="")<br><br>    def __init__(self):<br>        self.valves = self.Valves()<br><br>    def pipe(self, body: dict):<br>        <em># Logic goes here</em><br>        print(self.valves, body)  <em># This will print the configuration options and the input body</em><br>        return "Hello, World!"</code></pre>
<!-- /wp:code -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="the-pipe-class">파이프 클래스</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>정의</strong> : <code>Pipe</code>클래스는 사용자 정의 논리를 정의하는 곳입니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>목적</strong> : 플러그인에 대한 청사진 역할을 하며 Open WebUI 내에서 플러그인이 어떻게 동작하는지 결정합니다.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="valves-configuring-your-pipe">밸브: 파이프 구성</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>정의</strong> : 에서 상속하는 <code>Valves</code>중첩 클래스입니다 .<code>Pipe</code><code>BaseModel</code></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>목적</strong> : 파이프 사용 중에 지속되는 구성 옵션(매개변수)을 포함합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>예</strong> : 위 코드에서 는 <code>MODEL_ID</code>기본적으로 빈 문자열을 갖는 구성 옵션입니다.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:paragraph -->
<p><strong>비유</strong>&nbsp;: 밸브는 실제 파이프 시스템에서 물의 흐름을 제어하는 ​​손잡이라고 생각해 보세요. 파이프에서 밸브를 사용하면 데이터 흐름과 처리 방식에 영향을 미치는 설정을 조정할 수 있습니다.</p>
<!-- /wp:paragraph -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="the-__init__-method">방법<code>__init__</code>​</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>정의</strong> : 클래스의 생성자 메서드입니다 <code>Pipe</code>.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>목적</strong> : 파이프의 상태를 초기화하고 필요한 구성 요소를 설정합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>모범 사례</strong> : 간단하게 유지하고, 주로 <code>self.valves</code>여기에서 초기화하세요.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:code -->
<pre class="wp-block-code"><code>def __init__(self):<br>    self.valves = self.Valves()</code></pre>
<!-- /wp:code -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="the-pipe-function">기능<code>pipe</code>​</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>정의</strong> : 사용자 정의 논리가 있는 핵심 기능입니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>매개변수</strong> :<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><code>body</code>: 입력 데이터를 포함하는 사전입니다.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>목적</strong> : 사용자 정의 논리를 사용하여 입력 데이터를 처리하고 결과를 반환합니다.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:code -->
<pre class="wp-block-code"><code>def pipe(self, body: dict):<br>    <em># Logic goes here</em><br>    print(self.valves, body)  <em># This will print the configuration options and the input body</em><br>    return "Hello, World!"</code></pre>
<!-- /wp:code -->

<!-- wp:paragraph -->
<p><strong>참고</strong>&nbsp;: 항상 클래스&nbsp;<code>Valves</code>맨 위에 를 배치하고&nbsp;<code>Pipe</code>, 그 뒤에&nbsp;<code>__init__</code>, 그리고&nbsp;<code>pipe</code>함수를 배치하세요. 이러한 구조는 명확성과 일관성을 보장합니다.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="creating-multiple-models-with-pipes">파이프를 사용하여 여러 모델 만들기</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Open WebUI 내에서 Pipe를 사용하여&nbsp;<strong>여러 모델을</strong><code>pipes</code>&nbsp;생성하려면 어떻게 해야 할까요? 클래스 내부에 함수나 변수를&nbsp;정의하면 됩니다 . 비공식적으로&nbsp;<strong>매니폴드</strong><code>Pipe</code>&nbsp;라고 불리는 이 설정을 통해&nbsp;Pipe는 여러 모델을 표현할 수 있습니다.<strong></strong></p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>방법은 다음과 같습니다.</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>from pydantic import BaseModel, Field<br><br>class Pipe:<br>    class Valves(BaseModel):<br>        MODEL_ID: str = Field(default="")<br><br>    def __init__(self):<br>        self.valves = self.Valves()<br><br>    def pipes(self):<br>        return &#91;<br>            {"id": "model_id_1", "name": "model_1"},<br>            {"id": "model_id_2", "name": "model_2"},<br>            {"id": "model_id_3", "name": "model_3"},<br>        ]<br><br>    def pipe(self, body: dict):<br>        <em># Logic goes here</em><br>        print(self.valves, body)  <em># Prints the configuration options and the input body</em><br>        model = body.get("model", "")<br>        return f"{model}: Hello, World!"</code></pre>
<!-- /wp:code -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="explanation">설명</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong><code>pipes</code>기능</strong> :<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>사전 목록을 반환합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><code>id</code>각 사전은 고유한 키 를 가진 모델을 나타냅니다 <code>name</code>.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>이러한 모델은 Open WebUI 모델 선택기에 개별적으로 표시됩니다.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>업데이트된 <code>pipe</code>기능</strong> :<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>선택된 모델에 따라 입력을 처리합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>이 예에서는 반환된 문자열에 모델 이름이 포함됩니다.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="example-openai-proxy-pipe">예: OpenAI 프록시 파이프</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>OpenAI API에 대한 요청을 프록시하는 파이프를 생성하는 실제 예제를 살펴보겠습니다. 이 파이프는 OpenAI에서 사용 가능한 모델을 가져와 사용자가 Open WebUI를 통해 해당 모델과 상호 작용할 수 있도록 합니다.</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>from pydantic import BaseModel, Field<br>import requests<br><br>class Pipe:<br>    class Valves(BaseModel):<br>        NAME_PREFIX: str = Field(<br>            default="OPENAI/",<br>            description="Prefix to be added before model names.",<br>        )<br>        OPENAI_API_BASE_URL: str = Field(<br>            default="https://api.openai.com/v1",<br>            description="Base URL for accessing OpenAI API endpoints.",<br>        )<br>        OPENAI_API_KEY: str = Field(<br>            default="",<br>            description="API key for authenticating requests to the OpenAI API.",<br>        )<br><br>    def __init__(self):<br>        self.valves = self.Valves()<br><br>    def pipes(self):<br>        if self.valves.OPENAI_API_KEY:<br>            try:<br>                headers = {<br>                    "Authorization": f"Bearer {self.valves.OPENAI_API_KEY}",<br>                    "Content-Type": "application/json",<br>                }<br><br>                r = requests.get(<br>                    f"{self.valves.OPENAI_API_BASE_URL}/models", headers=headers<br>                )<br>                models = r.json()<br>                return &#91;<br>                    {<br>                        "id": model&#91;"id"],<br>                        "name": f'{self.valves.NAME_PREFIX}{model.get("name", model&#91;"id"])}',<br>                    }<br>                    for model in models&#91;"data"]<br>                    if "gpt" in model&#91;"id"]<br>                ]<br><br>            except Exception as e:<br>                return &#91;<br>                    {<br>                        "id": "error",<br>                        "name": "Error fetching models. Please check your API Key.",<br>                    },<br>                ]<br>        else:<br>            return &#91;<br>                {<br>                    "id": "error",<br>                    "name": "API Key not provided.",<br>                },<br>            ]<br><br>    def pipe(self, body: dict, __user__: dict):<br>        print(f"pipe:{__name__}")<br>        headers = {<br>            "Authorization": f"Bearer {self.valves.OPENAI_API_KEY}",<br>            "Content-Type": "application/json",<br>        }<br><br>        <em># Extract model id from the model name</em><br>        model_id = body&#91;"model"]&#91;body&#91;"model"].find(".") + 1 :]<br><br>        <em># Update the model id in the body</em><br>        payload = {**body, "model": model_id}<br>        try:<br>            r = requests.post(<br>                url=f"{self.valves.OPENAI_API_BASE_URL}/chat/completions",<br>                json=payload,<br>                headers=headers,<br>                stream=True,<br>            )<br><br>            r.raise_for_status()<br><br>            if body.get("stream", False):<br>                return r.iter_lines()<br>            else:<br>                return r.json()<br>        except Exception as e:<br>            return f"Error: {e}"</code></pre>
<!-- /wp:code -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="detailed-breakdown">자세한 분석</h3>
<!-- /wp:heading -->

<!-- wp:heading {"level":4} -->
<h4 class="wp-block-heading" id="valves-configuration">밸브 구성</h4>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong><code>NAME_PREFIX</code></strong>:<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>Open WebUI에 표시되는 모델 이름에 접두사를 추가합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>기본: <code>"OPENAI/"</code>.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong><code>OPENAI_API_BASE_URL</code></strong>:<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>OpenAI API의 기본 URL을 지정합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>기본: <code>"https://api.openai.com/v1"</code>.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong><code>OPENAI_API_KEY</code></strong>:<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li>인증을 위한 OpenAI API 키입니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>기본값: <code>""</code>(빈 문자열; 반드시 제공해야 함).</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":4} -->
<h4 class="wp-block-heading" id="the-pipes-function">기능<code>pipes</code>​</h4>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>목적</strong> : 사용 가능한 OpenAI 모델을 가져와 Open WebUI에서 접근할 수 있도록 합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>프로세스</strong> :<!-- wp:list {"ordered":true} -->
<ol class="wp-block-list"><!-- wp:list-item -->
<li><strong>API 키 확인</strong> : API 키가 제공되었는지 확인합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>모델 가져오기</strong> : OpenAI API에 GET 요청을 보내 사용 가능한 모델을 검색합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>필터 모델</strong> : . <code>"gpt"</code>을 포함 하는 모델을 반환합니다 <code>id</code>.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>오류 처리</strong> : 문제가 있는 경우 오류 메시지를 반환합니다.</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list --></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>반환 형식</strong><code>id</code> : 각 모델에 대한 사전 목록입니다 <code>name</code>.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":4} -->
<h4 class="wp-block-heading" id="the-pipe-function-1">기능<code>pipe</code>​</h4>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>목적</strong> : 선택된 OpenAI 모델에 대한 요청을 처리하고 응답을 반환합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>매개변수</strong> :<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><code>body</code>: 요청 데이터를 포함합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><code>__user__</code>: 사용자 정보가 포함되어 있습니다(이 예에서는 사용되지 않지만 인증이나 로깅에 유용할 수 있음).</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>프로세스</strong> :<!-- wp:list {"ordered":true} -->
<ol class="wp-block-list"><!-- wp:list-item -->
<li><strong>헤더 준비</strong> : API 키와 콘텐츠 유형으로 헤더를 설정합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>모델 ID 추출</strong> : 선택한 모델 이름에서 실제 모델 ID를 추출합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>페이로드 준비</strong> : 올바른 모델 ID로 본체를 업데이트합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>API 요청 만들기</strong> : OpenAI API의 채팅 완료 엔드포인트에 POST 요청을 보냅니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>스트리밍 처리</strong> : <code>stream</code>인 경우 <code>True</code>반복 가능한 줄을 반환합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>오류 처리</strong> : 예외를 포착하고 오류 메시지를 반환합니다.</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list --></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="extending-the-proxy-pipe">프록시 파이프 확장</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><code>pipes</code>API 엔드포인트, 헤더, 함수&nbsp;내의 로직을 조정하여 Anthropic, Perplexity 등의 추가 서비스 공급자를 지원하도록 이 프록시 파이프를 수정할 수 있습니다&nbsp;<code>pipe</code>.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="using-internal-open-webui-functions">내부 Open WebUI 기능 사용</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>Pipe 내에서 Open WebUI의 내부 기능을 활용하고 싶을 때가 있습니다. 이러한 함수는 패키지에서 직접 가져올 수 있습니다&nbsp;<code>open_webui</code>. 드물지만 최적화를 위해 내부 함수가 변경될 수 있으므로 항상 최신 문서를 참조하세요.</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>내부 Open WebUI 기능을 사용하는 방법은 다음과 같습니다.</p>
<!-- /wp:paragraph -->

<!-- wp:code -->
<pre class="wp-block-code"><code>from pydantic import BaseModel, Field<br>from fastapi import Request<br><br>from open_webui.models.users import Users<br>from open_webui.utils.chat import generate_chat_completion<br><br>class Pipe:<br>    def __init__(self):<br>        pass<br><br>    async def pipe(<br>        self,<br>        body: dict,<br>        __user__: dict,<br>        __request__: Request,<br>    ) -&gt; str:<br>        <em># Use the unified endpoint with the updated signature</em><br>        user = Users.get_user_by_id(__user__&#91;"id"])<br>        body&#91;"model"] = "llama3.2:latest"<br>        return await generate_chat_completion(__request__, body, user)</code></pre>
<!-- /wp:code -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="explanation-1">설명</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>수입품</strong> :<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><code>Users</code>from <code>open_webui.models.users</code>: 사용자 정보를 가져옵니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><code>generate_chat_completion</code>from <code>open_webui.utils.chat</code>: 내부 논리를 사용하여 채팅 완성을 생성합니다.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>비동기 <code>pipe</code>함수</strong> :<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>매개변수</strong> :<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><code>body</code>: 모델에 대한 입력 데이터입니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><code>__user__</code>: 사용자 정보를 담고 있는 사전입니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><code>__request__</code>: FastAPI의 요청 객체(필수 <code>generate_chat_completion</code>).</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>프로세스</strong> :<!-- wp:list {"ordered":true} -->
<ol class="wp-block-list"><!-- wp:list-item -->
<li><strong>사용자 객체 가져오기</strong> : ID를 사용하여 사용자 객체를 검색합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>모델 설정</strong> : 사용할 모델을 지정합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>완료 생성</strong> : <code>generate_chat_completion</code>입력을 처리하고 출력을 생성하기 위한 호출입니다.</li>
<!-- /wp:list-item --></ol>
<!-- /wp:list --></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list --></li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="important-notes">중요 참고 사항</h3>
<!-- /wp:heading -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong>함수 시그니처</strong> : 가장 정확한 함수 시그니처와 매개변수에 대해서는 최신 Open WebUI 코드베이스나 문서를 참조하세요.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong>모범 사례</strong> : 원활한 사용자 경험을 보장하기 위해 항상 예외와 오류를 원활하게 처리하세요.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="frequently-asked-questions">자주 묻는 질문</h2>
<!-- /wp:heading -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="q1-why-should-i-use-pipes-in-open-webui">Q1: Open WebUI에서 파이프를 사용해야 하는 이유는 무엇인가요?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>A</strong>&nbsp;: 파이프를 사용하면 Open WebUI에 사용자 정의 로직과 처리 방식을 갖춘 새로운 "모델"을 추가할 수 있습니다. 파이프는 핵심 코드베이스를 변경하지 않고도 외부 API를 통합하고, 모델 동작을 사용자 정의하고, 혁신적인 기능을 개발할 수 있는 유연한 플러그인 시스템입니다.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="q2-what-are-valves-and-why-are-they-important">Q2: 밸브란 무엇이고, 왜 중요한가요?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>A</strong>&nbsp;: 밸브는 파이프의 구성 가능한 매개변수입니다. 파이프의 작동 방식을 결정하는 설정이나 컨트롤과 같은 역할을 합니다. 밸브를 조정하면 기본 코드를 수정하지 않고도 파이프의 동작을 변경할 수 있습니다.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="q3-can-i-create-a-pipe-without-valves">Q3: 밸브 없이 파이프를 만들 수 있나요?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>A</strong>&nbsp;: 네, Pipe에 영구적인 구성 옵션이 필요하지 않다면 Valves 클래스를 정의하지 않고도 간단한 Pipe를 생성할 수 있습니다. 하지만 Valves 클래스를 포함하는 것이 유연성과 향후 확장성을 위해 좋은 방법입니다.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="q4-how-do-i-ensure-my-pipe-is-secure-when-using-api-keys">질문 4: API 키를 사용할 때 파이프의 보안을 어떻게 보장할 수 있나요?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>A</strong>&nbsp;: API 키와 같은 민감한 정보는 Pipe에 하드코딩하지 마세요. 대신 Valves를 사용하여 API 키를 안전하게 입력하고 저장하세요. 코드가 이러한 키를 적절하게 처리하고 로깅이나 노출을 방지하도록 하세요.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="q5-what-is-the-difference-between-the-pipe-and-pipes-functions"><code>pipe</code>Q5: 와 함수&nbsp;의 차이점은 무엇인가요&nbsp;<code>pipes</code>?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>A</strong>&nbsp;:</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><strong><code>pipe</code>기능</strong> : 입력 데이터를 처리하고 출력을 생성하는 주요 기능입니다. 단일 모델의 로직을 처리합니다.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><strong><code>pipes</code>기능</strong> : 파이프가 모델 정의 목록을 반환하여 여러 모델을 표현할 수 있도록 합니다. 각 모델은 Open WebUI에 개별적으로 표시됩니다.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="q6-how-can-i-handle-errors-in-my-pipe">Q6: 파이프에서 발생하는 오류를 어떻게 처리할 수 있나요?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>A</strong><code>pipe</code>&nbsp;: 및 함수&nbsp;내에서 try-except 블록을 사용하여&nbsp;<code>pipes</code>예외를 포착하세요. 의미 있는 오류 메시지를 반환하거나 오류를 적절하게 처리하여 사용자에게 오류 원인을 알리세요.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="q7-can-i-use-external-libraries-in-my-pipe">Q7: Pipe에서 외부 라이브러리를 사용할 수 있나요?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>A</strong>&nbsp;: 네, 필요에 따라 외부 라이브러리를 가져와서 사용할 수 있습니다. 모든 종속성이 사용자 환경 내에서 제대로 설치되고 관리되는지 확인하세요.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="q8-how-do-i-test-my-pipe">Q8: 파이프를 어떻게 테스트하나요?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>A</strong>&nbsp;: 개발 환경에서 Open WebUI를 실행하고 인터페이스에서 사용자 지정 모델을 선택하여 Pipe를 테스트하세요. 다양한 입력 및 구성에서 Pipe가 예상대로 작동하는지 확인하세요.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="q9-are-there-any-best-practices-for-organizing-my-pipes-code">Q9: Pipe 코드를 정리하는 모범 사례가 있나요?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>A</strong>&nbsp;: 네, 다음 지침을 따르세요.</p>
<!-- /wp:paragraph -->

<!-- wp:list -->
<ul class="wp-block-list"><!-- wp:list-item -->
<li><code>Valves</code>반에서 항상 상위권을 유지하세요 <code>Pipe</code>.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>메서드 에서 변수를 초기화합니다 . <code>__init__</code>주로 <code>self.valves</code>.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li><code>pipe</code>메서드 뒤에 함수를 배치합니다 <code>__init__</code>.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>명확하고 설명적인 변수 이름을 사용하세요.</li>
<!-- /wp:list-item -->

<!-- wp:list-item -->
<li>명확성을 위해 코드에 주석을 달아주세요.</li>
<!-- /wp:list-item --></ul>
<!-- /wp:list -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading {"level":3} -->
<h3 class="wp-block-heading" id="q10-where-can-i-find-the-latest-open-webui-documentation">질문 10: 최신 Open WebUI 문서는 어디에서 찾을 수 있나요?</h3>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p><strong>답변</strong>&nbsp;: 함수 서명, 예제, 변경 사항이 있는 경우 마이그레이션 가이드 등 최신 정보를 보려면 공식 Open WebUI 저장소나 문서 사이트를 방문하세요.</p>
<!-- /wp:paragraph -->

<!-- wp:separator -->
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<!-- /wp:separator -->

<!-- wp:heading -->
<h2 class="wp-block-heading" id="conclusion">결론</h2>
<!-- /wp:heading -->

<!-- wp:paragraph -->
<p>이제 Open WebUI에서 파이프를 생성하고 사용하는 방법을 완전히 이해하셨을 것입니다. 파이프는 Open WebUI의 기능을 특정 요구에 맞게 확장하고 사용자 정의할 수 있는 강력한 방법을 제공합니다. 외부 API를 통합하거나, 새로운 모델을 추가하거나, 복잡한 로직을 삽입하는 등 어떤 작업이든 파이프는 유연하게 처리할 수 있도록 지원합니다.</p>
<!-- /wp:paragraph -->