V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
Cloverkit
V2EX  ›  分享创造

🚀 DeepSeek-Ollama Bridge:让你的 AI 对话更快、更稳、更省心!

  •  
  •   Cloverkit · 51 天前 · 1128 次点击
    这是一个创建于 51 天前的主题,其中的信息可能已经有所发展或是发生改变。

    🚀 DeepSeek-Ollama Bridge:让你的 AI 对话更快、更稳、更省心!

    🍻 Github Repo

    https://github.com/shengyanli1982/deepseek-ollama-bridge-release

    😫 你是否遇到过这些烦恼?

    • DeepSeek 模型本地部署后重复计算相同问题,算力资源严重浪费
    • 高并发场景下系统不稳定,响应延迟大幅波动
    • 模型输出夹杂思考标签,影响对话体验
    • 服务器资源告急,性能调优无从下手

    🎯 解决方案来了!

    DeepSeek-Ollama Bridge 是一款专为 DeepSeek 模型打造的高性能桥接服务,让您的 AI 应用如虎添翼!

    🎁 核心特性

    1️⃣ 智能多层缓存系统

    • 🚄 高性能内存热点缓存( 1024 条),极速响应
    • 💾 磁盘持久化存储,不受内存大小限制,支持百万级缓存
    • 🧠 对话上下文感知,智能匹配历史应答
    • 🧹 自动化清理机制,无需人工维护
    • 📦 灵活的缓存参数配置,轻松应对各类场景
    • ⚡ 注意:流式输出模式( stream=true )下不启用缓存功能

    2️⃣ 成熟的流量控制

    • 🚦 令牌桶限流保护,防止系统过载
    • 📊 Prometheus 指标监控,运行状态一目了然

    3️⃣ 容器部署支持

    • 🎯 支持 Kubernetes 集群部署
    • 🔄 优雅启停机制
    • 🌐 跨平台兼容性支持
    • 📈 完整的监控指标

    💪 为什么选择 DeepSeek-Ollama Bridge ?

    • 🎯 为 DeepSeek 模型优化,同时兼容其他 OpenAI API 规范的模型
    • 🛠️ 开箱即用,可以零配置启动
    • 📈 显著提升响应速度,降低计算成本
    • 🔄 自动过滤思考标签(专门针对 DeepSeek 蒸馏模型),输出更清晰专业

    🎬 典型应用场景

    1. 高频对话场景

      • 智能客服系统
      • 教育问答平台
      • API 集成服务
    2. 资源受限环境

      • 个人开发环境
      • 边缘计算设备
      • 共享计算集群
    3. 企业级应用

      • 大规模 AI 服务部署
      • 多租户并发访问
      • 成本敏感型业务

    📚 接口文档

    • /health : 健康检查接口
    • /metrics : Prometheus 指标监控接口

    📊 效果展示

    1. 缓存效果

    缓存效果

    2. 流量控制

    流量控制

    🎁 快速开始

    只需一行命令,即可启动企业级 AI 加速服务:

    deepseek-ollama-bridge --enable-cache --cache-dir ./cache
    

    更多高级配置选项请使用 -h 参数查看帮助文档。

    注:实际性能提升因使用场景和配置而异。欢迎留言反馈问题和改进建议。

    💡 代码示例

    cURL 示例

    curl http://127.0.0.1:3000/v1/chat/completions/chat/completions \
      -H "Content-Type: application/json" \
      -H "Authorization: Bearer sk-xxx" \
      -d '{
        "model": "deepseek-coder",
        "messages": [
          {
            "role": "user",
            "content": "写一个冒泡排序算法"
          }
        ],
        "temperature": 0.7
      }'
    

    Python 示例

    import openai
    
    # 设置 API 基础地址(默认为本地服务)
    openai.api_base = "http://127.0.0.1:3000/v1/chat/completions"
    # 设置一个占位 API Key (本地服务不校验)
    openai.api_key = "sk-xxx"
    
    # 基础对话示例
    def chat_example():
        response = openai.ChatCompletion.create(
            model="deepseek-coder",  # 使用 DeepSeek Coder 模型
            messages=[
                {"role": "user", "content": "写一个 Python 快速排序算法"}
            ],
            temperature=0.7
        )
        print(response.choices[0].message.content)
    
    # 带上下文的对话示例
    def context_chat_example():
        messages = [
            {"role": "system", "content": "你是一个专业的编程助手。"},
            {"role": "user", "content": "我想实现一个 REST API 。"},
            {"role": "assistant", "content": "我可以帮你使用 FastAPI 框架实现。"},
            {"role": "user", "content": "好的,请给出具体示例。"}
        ]
    
        response = openai.ChatCompletion.create(
            model="deepseek-coder",
            messages=messages,
            temperature=0.7
        )
    
        print(response.choices[0].message.content)
    
    if __name__ == "__main__":
        print("基础对话示例:")
        chat_example()
    
        print("\n 带上下文的对话示例:")
        context_chat_example()
    

    Go 示例

    package main
    
    import (
        "context"
        "fmt"
        "log"
    
        openai "github.com/sashabaranov/go-openai"
    )
    
    func main() {
        // 创建客户端(使用本地服务地址)
        client := openai.NewClient("sk-xxx")
        client.BaseURL = "http://127.0.0.1:3000/v1/chat/completions"
    
        // 创建对话请求
        req := openai.ChatCompletionRequest{
            Model: "deepseek-coder",
            Messages: []openai.ChatCompletionMessage{
                {
                    Role:    openai.ChatMessageRoleUser,
                    Content: "用 Go 实现一个简单的 HTTP 服务器",
                },
            },
            Temperature: 0.7,
        }
    
        // 发送请求
        resp, err := client.CreateChatCompletion(context.Background(), req)
        if err != nil {
            log.Printf("对话请求失败: %v\n", err)
            return
        }
    
        // 输出响应
        fmt.Println(resp.Choices[0].Message.Content)
    
        // 带上下文的对话示例
        contextReq := openai.ChatCompletionRequest{
            Model: "deepseek-coder",
            Messages: []openai.ChatCompletionMessage{
                {
                    Role:    openai.ChatMessageRoleSystem,
                    Content: "你是一个专业的 Go 开发专家。",
                },
                {
                    Role:    openai.ChatMessageRoleUser,
                    Content: "解释什么是依赖注入",
                },
            },
            Temperature: 0.7,
        }
    
        contextResp, err := client.CreateChatCompletion(context.Background(), contextReq)
        if err != nil {
            log.Printf("上下文对话请求失败: %v\n", err)
            return
        }
    
        fmt.Println("\n 带上下文的对话响应:")
        fmt.Println(contextResp.Choices[0].Message.Content)
    }
    

    NodeJS 示例

    const { Configuration, OpenAIApi } = require("openai");
    
    // 配置 OpenAI API
    const configuration = new Configuration({
        basePath: "http://127.0.0.1:3000/v1/chat/completions",
        apiKey: "sk-xxx",
    });
    
    const openai = new OpenAIApi(configuration);
    
    // 基础对话示例
    async function basicChatExample() {
        try {
            const response = await openai.createChatCompletion({
                model: "deepseek-coder",
                messages: [{ role: "user", content: "用 Express 实现一个 RESTful API" }],
                temperature: 0.7,
            });
    
            console.log("基础对话响应:", response.data.choices[0].message.content);
        } catch (error) {
            console.error("对话请求失败:", error.message);
        }
    }
    
    // 带上下文的对话示例
    async function contextChatExample() {
        try {
            const response = await openai.createChatCompletion({
                model: "deepseek-coder",
                messages: [
                    { role: "system", content: "你是一个专业的 Node.js 开发专家。" },
                    { role: "user", content: "如何实现一个 WebSocket 服务器?" },
                ],
                temperature: 0.7,
            });
    
            console.log("\n 带上下文的对话响应:");
            console.log(response.data.choices[0].message.content);
        } catch (error) {
            console.error("对话请求失败:", error.message);
        }
    }
    
    // 执行示例
    async function main() {
        console.log("=== 基础对话示例 ===");
        await basicChatExample();
    
        console.log("\n=== 带上下文的对话示例 ===");
        await contextChatExample();
    }
    
    main().catch(console.error);
    
    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   931 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:04 · PVG 05:04 · LAX 14:04 · JFK 17:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.