跳转至

Filter 插件

Filter 插件会在消息发送到 LLM 之前或响应生成之后处理和修改内容。

什么是 Filters?

Filter 充当消息管线中的中间件:

  • Inlet:在消息到达 LLM 前处理用户消息
  • Outlet:在展示前处理 LLM 响应
  • :material-stream: Stream:对流式响应进行实时处理

可用的 Filter 插件

  • Async Context Compression


    通过智能总结减少长对话的 token 消耗,同时保持连贯性。

    版本: 1.2.2

    查看文档

  • Context Enhancement


    为聊天增加额外信息,提升回复质量。

    版本: 0.2

    查看文档

  • Folder Memory


    自动从文件夹内的对话中提取一致性的“项目规则”,并将其回写到文件夹的系统提示词中。

    版本: 0.1.0

    查看文档

  • Markdown Normalizer


    修复 LLM 输出中常见的 Markdown 格式问题,包括 Mermaid 语法、代码块和 LaTeX 公式。

    版本: 1.2.4

    查看文档


Filter 工作流程

graph LR
    A[User Message] --> B[Inlet Filter]
    B --> C[LLM]
    C --> D[Outlet Filter]
    D --> E[Display to User]

Inlet 处理

inlet 方法在消息到达 LLM 前处理:

async def inlet(self, body: dict, __metadata__: dict) -> dict:
    # 在发送到 LLM 前修改请求
    messages = body.get("messages", [])
    # 添加上下文、调整 prompt 等
    return body

Outlet 处理

outlet 方法在响应生成后处理:

async def outlet(self, body: dict, __metadata__: dict) -> dict:
    # 在展示前修改响应
    messages = body.get("messages", [])
    # 格式化输出、追加引用等
    return body

快速安装

  1. 下载需要的 Filter .py 文件
  2. 前往 Admin PanelSettingsFunctions
  3. 上传文件并配置
  4. 在聊天设置或全局启用该过滤器

开发模板

"""
title: My Custom Filter
author: Your Name
version: 1.0.0
description: Description of your filter plugin
"""

from pydantic import BaseModel, Field
from typing import Optional

class Filter:
    class Valves(BaseModel):
        priority: int = Field(
            default=0,
            description="Filter priority (lower = earlier execution)"
        )
        enabled: bool = Field(
            default=True,
            description="Enable/disable this filter"
        )

    def __init__(self):
        self.valves = self.Valves()

    async def inlet(
        self,
        body: dict,
        __user__: Optional[dict] = None,
        __metadata__: Optional[dict] = None
    ) -> dict:
        """Process messages before sending to LLM."""
        if not self.valves.enabled:
            return body

        # 你的 inlet 逻辑
        messages = body.get("messages", [])

        return body

    async def outlet(
        self,
        body: dict,
        __user__: Optional[dict] = None,
        __metadata__: Optional[dict] = None
    ) -> dict:
        """Process responses before displaying."""
        if not self.valves.enabled:
            return body

        # 你的 outlet 逻辑

        return body

更多细节见 插件开发指南