服务器部署deepseek

主要是想要提供一个api,供自己玩。

一般配置需求如下图,但是可以用cpu跑。实际上,我在锐龙8845HS上跑14B模型绰绰有余,虽然效率不高但基本可用。而且这是考虑到几乎纯CPU在跑(and gpu暂无好的适配)

步骤分成两个部分,一是部署,二是api服务。草履虫都会做

本地部署

去下载,找自己的系统https://ollama.com

下载完成后https://ollama.com/search去找模型。目前开源综合性能最好是deepseek

复制哪一行,ok可以跑了

ollama run deepseek-r1:14b

对话即可。

Web服务

ollama贴心的提供了web接口,RESTful

这个肯定不暴露的,返回值是流式的,结束后会提示done。

稍微写个(gpt)py前端,防火墙关一下外部就可以访问了。实现了外部接口和整体返回。

from flask import Flask, request, jsonify, Response
import requests
import json  # 使用 JSON 解析而非 eval()

app = Flask(__name__)

# 假设 Ollama 模型运行在本地,端口为 11434
OLLAMA_API_URL = "http://localhost:11434/api/generate"

@app.route('/api/query', methods=['POST'])
def query_model():
    try:
        # 从请求中获取输入
        data = request.json
        model = data.get("model", "deepseek-r1:14b")  # 默认使用 deepseek-r1:14b 模型
        prompt = data.get("prompt", "")

        if not prompt:
            return jsonify({"error": "No prompt provided"}), 400

        # 向 Ollama 的 /api/generate 发送请求
        ollama_response = requests.post(
            OLLAMA_API_URL,
            json={"model": model, "prompt": prompt},
            stream=True  # 开启流式处理
        )

        # 检查请求是否成功
        if ollama_response.status_code != 200:
            return jsonify({"error": f"Ollama API error: {ollama_response.status_code}"}), ollama_response.status_code

        # 流式读取 Ollama 的响应并拼接完整的结果
        def generate_response():
            full_response = ""
            try:
                for chunk in ollama_response.iter_lines(decode_unicode=True):
                    if chunk:  # 确保 chunk 不为空
                        # 使用 json.loads() 安全解析 JSON 数据
                        try:
                            data = json.loads(chunk)
                        except json.JSONDecodeError:
                            yield "[Error: Invalid JSON received from Ollama]\n"
                            break
                        
                        # 从解析的数据中提取响应片段
                        response_segment = data.get("response", "")
                        full_response += response_segment
                        yield response_segment  # 实时返回生成的片段
                        
                        # 检查是否完成
                        if data.get("done", False):
                            break
            except Exception as e:
                yield f"[Error: {str(e)}]\n"

        # 返回流式响应给客户端
        return Response(generate_response(), content_type='text/plain')

    except Exception as e:
        # 捕获所有其他异常并返回错误信息
        return jsonify({"error": str(e)}), 500

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8080)

apifox测一测,非常好👍

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇