发帖
 找回密码
 立即注册
搜索
4 1 0
日常闲聊 28 4 昨天 17:49

注意 需要对接one-hub才行

new-api对gemini的支持不行

直接用gemini的原生openai格式也不行

5f21f5bd6e029420a680d7a9f6bf30820b83ace0.webp

读取网页内容

922c48f4c3f2b3779064e68bdd8d0fe2b17c5710.jpeg

"""
title: 网页上下文提取
description: 为Gemini启用原生网页上下文提取工具,允许模型理解 URL 内容
licence: MIT
"""

from pydantic import BaseModel, Field
from typing import Optional


class Filter:

    class Valves(BaseModel):
        # 将优先级设置为 105,以确保它在代码执行(95)和联网搜索(100)之后运行
        priority: int = Field(
            default=105, description="过滤器应用的优先级。数值越小,优先级越高。"
        )

    def __init__(self):
        self.type = "filter"
        self.name = "URL Context Extractor"
        self.valves = self.Valves()
        self.toggle = True
        self.icon = """data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiBmaWxsPSJjdXJyZW50Q29sb3IiIGNsYXNzPSJzaXplLTYiPjxwYXRoIGQ9Ik02ODAtMTYwdi0xMjBINTYwdi04MGgxMjB2LTEyMGg4MHYxMjBoMTIwdjgwSDc2MHYxMjBoLTgwWk00NDAtMjgwSDI4MHEtODMgMC0xNDEuNS01OC41VDgwLTQ4MHEwLTgzIDU4LjUtMTQxLjVUMjgwLTY4MGgxNjB2ODBIMjgwcS01MCAwLTg1IDM1dC0zNSA4NXEwIDUwIDM1IDg1dDg1IDM1aDE2MHY4MFpNMzIwLTQ0MHYtODBoMzIwdjgwSDMyMFptNTYwLTQwaC04MHEwLTUwLTM1LTg1dC04NS0zNUg1MjB2LTgwaDE2MHE4MyAwIDE0MS41IDU4LjVUODgwLTQ4MFoiLz48L3N2Zz4="""
        pass

    def inlet(self, body: dict, user: Optional[dict] = None) -> dict:
        if "tools" not in body:
            body["tools"] = []

        # 构建 urlContext 工具
        url_context_tool = {
            "type": "function",
            "function": {"name": "urlContext", "parameters": {}},
        }

        # 检查是否已存在同名工具,避免重复添加
        tool_exists = any(
            t.get("function", {}).get("name") == "urlContext" for t in body["tools"]
        )

        if not tool_exists:
            body["tools"].append(url_context_tool)

        return body

联网

e79d7782b3f6ddeb25a2b0525fa97b33dd6b8585.jpeg

"""
title: 联网搜索
description: 原生联网搜索
"""

from pydantic import BaseModel, Field
from typing import Optional


class Filter:
    class Valves(BaseModel):
        priority: int = Field(default=100, description="优先级")

    def __init__(self):
        self.valves = self.Valves()
        self.toggle = True
        self.icon = """data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGw9Im5vbmUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3Ryb2tlLXdpZHRoPSIxLjc1IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgY2xhc3M9InNpemUtNSI+PHBhdGggc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBkPSJNMTIgMjFhOS4wMDQgOS4wMDQgMCAwIDAgOC43MTYtNi43NDdNMTIgMjFhOS4wMDQgOS4wMDQgMCAwIDEtOC43MTYtNi43NDdNMTIgMjFjMi40ODUgMCA0LjUtNC4wMyA0LjUtOVMxNC40ODUgMyAxMiAzbTAgMThjLTIuNDg1IDAtNC41LTQuMDMtNC41LTlTOS41MTUgMyAxMiAzbTAgMGE4Ljk5NyA4Ljk5NyAwIDAgMSA3Ljg0MyA0LjU4Mk0xMiAzYTguOTk3IDguOTk3IDAgMCAwLTcuODQzIDQuNTgybTE1LjY4NiAwQTExLjk1MyAxMS45NTMgMCAwIDEgMTIgMTAuNWMtMi45OTggMC01Ljc0LTEuMS03Ljg0My0yLjkxOG0xNS42ODYgMEE4Ljk1OSA4Ljk1OSAwIDAgMSAyMSAxMmMwIC43NzgtLjA5OSAxLjUzMy0uMjg0IDIuMjUzbTAgMEExNy45MTkgMTcuOTE5IDAgMCAxIDEyIDE2LjVjLTMuMTYyIDAtNi4xMzMtLjgxNS04LjcxNi0yLjI0N20wIDBBOS4wMTUgOS4wMTUgMCAwIDEgMyAxMmMwLTEuNjA1LjQyLTMuMTEzIDEuMTU3LTQuNDE4Ij48L3BhdGg+PC9zdmc+"""
        pass

    def inlet(self, body: dict, user: Optional[dict] = None) -> dict:
        if "tools" not in body:
            body["tools"] = []

        # 构建标准的 Function Calling 工具
        google_search_tool = {
            "type": "function",
            "function": {"name": "googleSearch", "parameters": {}},
        }

        # 检查工具是否已存在,避免重复添加
        tool_exists = any(
            t.get("function", {}).get("name") == "googleSearch" for t in body["tools"]
        )

        if not tool_exists:
            body["tools"].append(google_search_tool)

        return body

代码执行

他这个代码执行的输出会混在代码块里面
789c8a65fa3186b2dedeb41ea4eb77a01e6f8ddc.webp

"""
title: 代码执行
description: 启用Gemini原生代码执行工具
licence: MIT
"""

from pydantic import BaseModel, Field
from typing import Optional


class Filter:

    class Valves(BaseModel):
        priority: int = Field(
            default=95, description="过滤器应用的优先级。数值越小,优先级越高。"
        )

    def __init__(self):
        self.type = "filter"
        self.name = "Code Execution Enabler"
        self.valves = self.Valves()
        self.toggle = True
        self.icon = """data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgLTk2MCA5NjAgOTYwIiBmaWxsPSJjdXJyZW50Q29sb3IiPjxwYXRoIGQ9Ik0zMjAtMjQwIDgwLTQ4MGwyNDAtMjQwIDU3IDU3LTE4NCAxODQgMTgzIDE4My01NiA1NlptMzIwIDAtNTctNTcgMTg0LTE4NC0xODMtMTgzIDU2LTU2IDI0MCAyNDAtMjQwIDI0MFoiLz48L3N2Zz4="""
        pass

    def inlet(self, body: dict, user: Optional[dict] = None) -> dict:
        if "tools" not in body:
            body["tools"] = []

        # 使用标准的 Function Calling 格式
        code_execution_tool = {
            "type": "function",
            "function": {"name": "codeExecution", "parameters": {}},
        }

        # 为避免重复添加,先检查是否有同名的工具
        tool_exists = any(
            t.get("function", {}).get("name") == "codeExecution" for t in body["tools"]
        )

        if not tool_exists:
            body["tools"].append(code_execution_tool)

        return body

使用方法

添加函数到openwebui

e9a3679b9474d0e04a526228a75610b468329ea5.webp

然后在模型设置上把相关的过滤器选择上

6d1e682e5ccfe9c821c6020948d60f54edae213e.jpeg

另外推荐使用这个gemini-2.5-pro的提示词优化输出格式

你是一个高级语言模型。在输出文本时,请严格遵循以下格式要求,以确保信息的清晰、准确和易读:


1. **结构化内容**:
   - **段落分明**:使用清晰的段落来组织不同的思想或主题。
   - **标题和副标题**:使用不同级别的标题(如一级、二级、三级标题)来划分内容的层次结构,确保逻辑清晰。使用标题时注意不要把`一级标题`这种文字输出。


2. **使用Markdown语法**(如果平台支持):
   - **粗体和斜体**:用于强调关键词或概念。
     - 例如:**重要信息** 或 *强调部分*。
   - **项目符号和编号列表**:用于列举要点或步骤。
     - 无序列表:
       - 项目一
       - 项目二
     - 有序列表:
       1. 步骤一
       2. 步骤二
   - **代码块**:仅用于展示代码或需要保持原格式的内容,避免将数学公式放入代码块中。
     ```python
     def hello_world():
         print("Hello, World!")
     ```
   - **引用**:引用他人观点或重要信息时使用引用格式。
     > 这是一个引用的示例。
   - **数学公式和表格**:
     - **数学公式**:
       - **行间公式**:使用双美元符号 `$$` 或反斜杠 `$$` 和 `$$` 包裹公式,使其在新行中独立显示。
         例如:
         $$
         A = \begin{pmatrix}
         3 & 2 & 1 \\
         3 & 1 & 5 \\
         3 & 2 & 3 \\
         \end{pmatrix}
         $$
         或
         $$
         A = \begin{pmatrix}
         3 & 2 & 1 \\
         3 & 1 & 5 \\
         3 & 2 & 3 \\
         \end{pmatrix}
         $$
       - **行内公式**:应使用单个美元符号 `$` 包裹数学公式以在文本行内显示。**`$` 前后必须加空格:每个行内公式的起始 `$` 符号前必须添加一个空格,且结束 `$` 符号后也必须添加一个空格。这是强制规则,必须遵守。此规则的目的是确保行内公式及其定界符与周围文本内容之间存在清晰的空格分隔。**
         例如:矩阵 $A = \begin{pmatrix} 3 & 2 & 1 \\ 3 & 1 & 5 \\ 3 & 2 & 3 \end{pmatrix}$ 是一个 $3 \times 3$ 矩阵。
         **注意这种情况,你需要在冒号后面`$`前面加上空格,公式结尾的`$`后面`。`前面也得加上空格:`这将输出: $x - \frac{x^2}{2} + \frac{x^3}{3} - \frac{x^4}{4} + \frac{x^5}{5} - \frac{x^6}{6} + \frac{x^7}{7} - \frac{x^8}{8} + \frac{x^9}{9} - \frac{x^{10}}{10}$ 。`**
         **同时你也得注意这种情况,在`$\omega$`的后面需要加一个空格以和后面的`(`空开来:`角速度 $\omega$ (单位:rad/s)的计算公式`**
     - **表格**:用于展示结构化数据时使用Markdown表格,确保信息对齐且易于比较。
       例如:


       | 姓名 | 年龄 | 职业 |
       |------|------|------|
       | 张三 | 28   | 工程师 |
       | 李四 | 34   | 设计师 |


3. **分数和数学表示**:
   - **一致性**:保持分数表示的一致性,优先使用简化形式。
     - 例如:使用 `-8/11` 而非 `-16/22`。
   - **格式统一**:在整个文本中统一使用分数形式或小数形式,避免混用。


4. **详细说明和解释**:
   - **步骤说明**:在每个关键步骤中增加简要解释,说明为何进行此操作,帮助读者理解操作背后的原因。
     - 例如:“通过 R2 = R2 - R1 消去第二行的第一个元素,以简化矩阵。”
   - **数学准确性**:确保所有数学计算和结果的准确性,仔细检查每一步的运算,避免错误。


5. **一致性和格式统一**:
   - **符号和缩写**:统一使用符号和缩写,避免同一文档中出现不同的表示方式。
   - **字体和样式**:保持整个文本中使用的字体和样式一致,例如统一使用粗体标题、斜体强调等。


6. **视觉辅助**:
   - **颜色和强调**:适当使用颜色或其他Markdown特性来突出关键步骤或结果,增强视觉效果(如果平台支持)。
   - **间距和对齐**:确保文本和元素之间的间距合理,对齐整齐,提升整体美观性。


7. **适应性调整**:
   - 根据内容类型调整格式。例如,技术文档可能需要更多的代码示例和表格,而故事叙述则注重段落和描述。
   - **示例和比喻**:根据需要使用示例、比喻或图表来解释复杂概念,增强理解。


**重要提示**:
- **避免将数学公式放入代码块中**。数学公式应使用LaTeX语法在Markdown中正确显示。
- **确保数学公式的正确性和格式**,使用适当的符号和环境来展示复杂的数学表达式。


通过严格遵循以上格式要求,你能够生成结构清晰、内容准确、格式统一且易于阅读和理解的简体中文文本,帮助用户更有效地获取和理解所需的信息。

还有这个修改版的openwebui镜像
a15355447898a/open-webui:latest

优化代码块的折叠显示 在输入框添加了一个markdown编辑器

2ee34d74af5f468e61953a19abc477f611553ffa.webp

1ce400ccb858b3d85464cafa51b0af1a7dd235b2.jpeg

──── 1人觉得很赞 ────

使用道具 举报

不错,Mark
感谢分享
昨天 17:54
好帖子啊
感谢
您需要登录后才可以回帖 立即登录
高级模式