403 字
2 分钟
基于Ollama本地部署DeepSeek模型的API开发实践
思考
自从上次用Ollama本地部署了DeepSeek后,我就想能不能自己做个API,然后自己使用? 然后就开始瞎琢磨,琢磨出了以下内容。
API代码展示
这里用了deepseek-r1:1.5b作为示例。
from flask import Flask, request, jsonifyimport requests
app = Flask(__name__)OLLAMA_API = "http://localhost:11434/api/generate"
def query_deepseek(prompt, model="deepseek-r1:1.5b", stream=False): headers = {"Content-Type": "application/json"} data = { "model": model, "prompt": prompt, "stream": stream } try: response = requests.post(OLLAMA_API, headers=headers, json=data) response.raise_for_status() return response.json() except Exception as e: return {"error": str(e)}
@app.route('/chat', methods=['POST'])def chat(): data = request.json prompt = data.get("prompt", "") if not prompt: return jsonify({"error": "Prompt is required"}), 400 result = query_deepseek(prompt) if "error" in result: return jsonify(result), 500 return jsonify({"response": result.get("response", "")})
if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)处理发问和回答代码展示
import requestsimport json
def call_deepseek(prompt, model="deepseek-r1:1.5b"): url = "http://localhost:11434/api/generate" headers = {"Content-Type": "application/json"} data = { "model": model, "prompt": prompt, "stream": True # 保持流式输出 }
full_response = "" try: response = requests.post(url, headers=headers, json=data, stream=True) response.raise_for_status()
for line in response.iter_lines(): if line: chunk = json.loads(line.decode('utf-8')) # 处理Unicode转义字符 text = chunk['response'].encode('utf-8').decode('unicode_escape') full_response += text
except Exception as e: return f"Error: {str(e)}"
return full_response
# 测试调用if __name__ == "__main__": response = call_deepseek("你好,介绍一下你自己") print("完整回复:\n", response)回顾
目前代码有很多槽点,不过因为我所学不多,暂时就这样子吧
目前进度如下:
已完成以下关键步骤:
- 本地模型部署:通过Ollama成功运行DeepSeek-1.5B模型
- API基础调用:验证了通过cURL直接调用
http://localhost:11434/api/generate接口的可行性 - 初步响应获取:已获得模型的分块流式响应(streaming response)
咨询了DeepSeek,了解到下一步操作:
- 处理流式响应(关键步骤)
- 客户端测试
- 完善API功能
- 部署准备
后面再来了。。。
基于Ollama本地部署DeepSeek模型的API开发实践
https://blog.youyer.top/posts/ollama_apply/