如何在用python部署的 Open WebUI 中显示 DeepSeek-R1 的思考过程

06-01 1087阅读

如何在用python部署的 Open WebUI 中显示 DeepSeek-R1 的思考过程

一、配置管道连接

  • 在 管理员面板 -> 设置 -> 外部连接 中按 + 添加一个连接。

    如何在用python部署的 Open WebUI 中显示 DeepSeek-R1 的思考过程 点击加号输入阿里云百炼的地址与api密钥 如何在用python部署的 Open WebUI 中显示 DeepSeek-R1 的思考过程 此处输入网址与API-KEY

     如何在用python部署的 Open WebUI 中显示 DeepSeek-R1 的思考过程

    • 网址输入https://dashscope.aliyuncs.com/compatible-mode/v1

    • 密钥输入你在阿里云百炼的api密钥

      二、创建函数

      • 在 管理员面板 -> 函数中按 + 添加一个函数。

        如何在用python部署的 Open WebUI 中显示 DeepSeek-R1 的思考过程

        • 代码输入以下代码
          """
          title: DeepSeek R1
          author: zgccrui
          description: 在OpwenWebUI中显示DeepSeek R1模型的思维链 - 仅支持0.5.6及以上版本
          version: 1.2.10
          licence: MIT
          """
          import json
          import httpx
          import re
          from typing import AsyncGenerator, Callable, Awaitable
          from pydantic import BaseModel, Field
          import asyncio
          class Pipe:
              class Valves(BaseModel):
                  DEEPSEEK_API_BASE_URL: str = Field(
                      default="https://api.deepseek.com/v1",
                      description="DeepSeek API的基础请求地址",
                  )
                  DEEPSEEK_API_KEY: str = Field(
                      default="", description="用于身份验证的DeepSeek API密钥,可从控制台获取"
                  )
                  DEEPSEEK_API_MODEL: str = Field(
                      default="deepseek-reasoner",
                      description="API请求的模型名称,默认为 deepseek-reasoner",
                  )
                  DEEPSEEK_MODEL_DISPLAY_NAME: str = Field(
                      default="deepseek-reasoner-fix",
                      description="模型名称,默认为 deepseek-reasoner-fix",
                  )
              def __init__(self):
                  self.valves = self.Valves()
                  self.data_prefix = "data:"
                  self.emitter = None
              def pipes(self):
                  return [
                      {
                          "id": self.valves.DEEPSEEK_API_MODEL,
                          "name": self.valves.DEEPSEEK_MODEL_DISPLAY_NAME,
                      }
                  ]
              async def pipe(
                  self, body: dict, __event_emitter__: Callable[[dict], Awaitable[None]] = None
              ) -> AsyncGenerator[str, None]:
                  """主处理管道(已移除缓冲)"""
                  thinking_state = {"thinking": -1}  # 使用字典来存储thinking状态
                  self.emitter = __event_emitter__
                  # 验证配置
                  if not self.valves.DEEPSEEK_API_KEY:
                      yield json.dumps({"error": "未配置API密钥"}, ensure_ascii=False)
                      return
                  # 准备请求参数
                  headers = {
                      "Authorization": f"Bearer {self.valves.DEEPSEEK_API_KEY}",
                      "Content-Type": "application/json",
                  }
                  try:
                      # 模型ID提取
                      model_id = body["model"].split(".", 1)[-1]
                      payload = {**body, "model": model_id}
                      # 处理消息以防止连续的相同角色
                      messages = payload["messages"]
                      i = 0
                      while i  str:
                  """更新思考状态机(简化版)"""
                  state_output = ""
                  # 状态转换:未开始 -> 思考中
                  if thinking_state["thinking"] == -1 and delta.get("reasoning_content"):
                      thinking_state["thinking"] = 0
                      state_output = ""
                  # 状态转换:思考中 -> 已回答
                  elif (
                      thinking_state["thinking"] == 0
                      and not delta.get("reasoning_content")
                      and delta.get("content")
                  ):
                      thinking_state["thinking"] = 1
                      state_output = "\n\n\n"
                  return state_output
              def _process_content(self, delta: dict) -> str:
                  """直接返回处理后的内容"""
                  return delta.get("reasoning_content", "") or delta.get("content", "")
              def _format_error(self, status_code: int, error: bytes) -> str:
                  # 如果 error 已经是字符串,则无需 decode
                  if isinstance(error, str):
                      error_str = error
                  else:
                      error_str = error.decode(errors="ignore")
                  try:
                      err_msg = json.loads(error_str).get("message", error_str)[:200]
                  except Exception as e:
                      err_msg = error_str[:200]
                  return json.dumps(
                      {"error": f"HTTP {status_code}: {err_msg}"}, ensure_ascii=False
                  )
              def _format_exception(self, e: Exception) -> str:
                  """异常格式化保持不变"""
                  err_type = type(e).__name__
                  return json.dumps({"error": f"{err_type}: {str(e)}"}, ensure_ascii=False)

           代码原创来自于如何在 Open WebUI 中显示 DeepSeek-R1 的思考过程 | HADB.MEhttps://hadb.me/posts/2025/display-deepseek-r1-thinking

          • 函数配置中,Api URL、Api Key、模型名字和上个教程一样,输入阿里云百炼对应的即可。

            如何在用python部署的 Open WebUI 中显示 DeepSeek-R1 的思考过程

            • 启用该函数

              三、设置新模型

              • 前往 管理员设置 -> 模型,将新的 deepseek-r1-fix 设为启用,还可手动修改 Logo 图片等。
              • 然后就可以在对话中看到思考过程了,出现「正在思考」的时候,可以点击旁边的箭头展开思考过程。 如何在用python部署的 Open WebUI 中显示 DeepSeek-R1 的思考过程 可以看到已经实现出现思考过程的内容了
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码