如何将本地模型服务不可用,自动切换调用线上模型?

环境:

qwen

DeepSeek

问题描述:

如何将本地模型服务不可用,自动切换调用线上模型?
在这里插入图片描述

解决方案:

将本地模型调用部分封装到 qw.py,线上模型调用部分封装到 zx.py,并且在主程序 zj.py 中优先调用本地模型,若本地模型不可用则自动切换调用线上模型。

下面方案:


1. qw.py — 本地模型调用模块

import requests
from loguru import logger
import time
from typing import Optional

LOCAL_MODEL_API = "http://192.168.1.9:11434/v1/chat/completions"

def summarize_with_local_model(text: str) -> Optional[str]:
    headers = {"Content-Type": "application/json"}
    payload = {
        "model": "qwen2.5-3bnsfwny",
        "messages": [{"role": "user", "content": text}],
        "max_tokens": 512,
        "temperature": 0.25,
        "stream": False
    }
    try:
        logger.info("调用本地大模型接口,准备发送请求")
        start_time = time.time()
        r = requests.post(LOCAL_MODEL_API, headers=headers, json=payload, timeout=10)
        r.raise_for_status()
        logger.info(f"接口响应状态码:{r.status_code},耗时:{time.time() - start_time:.2f}秒")
        resp_json = r.json()
        content = resp_json.get("choices", [{}])[0].get("message", {}).get("content")

        logger.info(f"模型返回内容长度:{len(content) if content else 0}")
        logger.info(f"模型返回具体内容:{content}")

        return content
    except requests.exceptions.Timeout:
        logger.error("调用本地大模型失败: 请求超时")
        return None
    except Exception as e:
        logger.error(f"调用本地大模型失败: {e}")
        return None

2. zx.py — 线上模型调用模块(示例)

假设线上 DeepSeek 模型接口类似,您需要根据实际接口调整:

import os
from openai import OpenAI
from loguru import logger
from typing import Optional

client = OpenAI(
    api_key="your_real_api_key",
    base_url="https://ark.cn-beijing.volces.com/api/v3",
)

def summarize_with_online_model(text: str) -> Optional[str]:
    """
    调用线上DeepSeek的chat completion接口,非流式调用,
    返回模型文本内容,异常时返回None。
    """
    try:
        logger.info("调用线上DeepSeek模型接口,准备发送请求")
        # 构造消息列表,您可以根据实际需求调整system prompt等
        messages = [
            {"role": "system", "content": "你是人工智能助手"},
            {"role": "user", "content": text},
        ]
        completion = client.chat.completions.create(
            model="ep-20250602174215-fw5hx",
            messages=messages,
            stream=False
        )
        content = completion.choices[0].message.content
        logger.info(f"线上模型返回内容长度:{len(content) if content else 0}")
        logger.info(f"线上模型返回内容:{content}")
        return content
    except Exception as e:
        logger.error(f"调用线上模型失败: {e}")
        return None


3. zj.py — 主逻辑,自动切换调用

from loguru import logger
from typing import Optional

import qw  # 本地模型
import zx  # 线上模型

def summarize(text: str) -> Optional[str]:
    # 优先调用本地模型
    logger.info("优先尝试调用本地模型")
    result = qw.summarize_with_local_model(text)
    if result:
        logger.info("本地模型调用成功,返回结果")
        return result
    else:
        logger.warning("本地模型不可用,切换调用线上模型")
        result_online = zx.summarize_with_online_model(text)
        if result_online:
            logger.info("线上模型调用成功,返回结果")
            return result_online
        else:
            logger.error("线上模型调用也失败,无法获取结果")
            return None


# 下面是使用示例
if __name__ == "__main__":
    test_text = "请告诉我今天北京的天气。"
    answer = summarize(test_text)
    if answer:
        print("模型回答:", answer)
    else:
        print("未能获取模型回答,请稍后重试。")

总结

  • 本地模型调用代码放 qw.py 里,包含请求和异常处理;
  • 线上模型调用代码放 zx.py,类似结构,替换接口地址和认证信息;
  • 主程序 zj.py 负责调用本地模型,失败时自动切换调用线上模型;
  • 方便维护,且切换逻辑集中管理。

### 关于深度学习模型部署的常见面试问题及解决方案 #### 深度学习模型部署的意义 在实际工程环境中,将训练好的深度学习模型部署为可调用服务是一项重要任务。这种做法仅提高了系统的灵活性,还增强了资源利用率和管理效率[^3]。 #### 常见面试问题及其解答 1. **为什么需要将深度学习模型部署为微服务?** 微服务架构提供了诸多优势,例如部署使用分离、合理利用资源以及统一管理监控等功能。通过RPC或Restful接口实现推理操作,使模型更新更加便捷,无需修改代码逻辑即可完成升级。 2. **如何评估同版本的大规模预训练模型的表现差异?** A/B测试是一种有效手段,在此过程中,用户被随机分配至模型组别中,随后依据其行为反馈来衡量各版本的实际效果。这种方法有助于识别哪款模型更能满足现实需求并改善用户体验[^2]。 3. **针对移动终端的小型化应用场景有哪些优化策略可用?** 对于嵌入式设备而言,通常会采用模型剪枝与量化技术减少参数数量;同时还可以借助知识蒸馏方法构建轻量级学生网络以模仿复杂教师网络的行为特征,进而达到提速减负的目的[^4]。 4. **具体实践中应该注意哪些方面才能确保高效稳定的线服务运行状态?** - 性能监测:持续跟踪延迟、吞吐率等关键指标; - 容错机制设计:当某个实例失败时能够迅速切换备用节点继续提供正常响应; - 自动扩展能力配置:根据负载变化动态调整计算资源配置; - 数据安全保护措施落实到位:防止敏感信息泄露风险发生。 ```python import tensorflow as tf from flask import Flask, request, jsonify app = Flask(__name__) # Load your trained model here. model = tf.keras.models.load_model('path_to_your_saved_model') @app.route('/predict', methods=['POST']) def predict(): data = request.get_json(force=True) prediction = model.predict([data['input']]) return jsonify(prediction.tolist()) if __name__ == '__main__': app.run(host='0.0.0.0', port=8080) ``` 上述代码片段展示了一个简单的基于Flask框架搭建REST API的方式用于在线预测请求处理过程演示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玩人工智能的辣条哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值