Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >💬 使用 Django + Ollama 打造本地私有化对话网站(全功能详解版)

💬 使用 Django + Ollama 打造本地私有化对话网站(全功能详解版)

原创
作者头像
IT蜗壳-Tango
发布于 2025-04-07 14:36:04
发布于 2025-04-07 14:36:04
16502
代码可运行
举报
文章被收录于专栏:机器学习机器学习
运行总次数:2
代码可运行

本教程将从零开始,带你构建一个支持 WebSocket 流式响应、用户登录、模型选择、Docker 一键部署的本地 AI 对话系统。


一、项目背景与技术选型

1.1 项目背景

当前大模型应用如雨后春笋,但很多用户对云端模型(如 GPT、Claude)存在数据隐私和成本担忧。Ollama 提供了本地运行主流大模型的能力,而 Django 是稳定、可扩展的 Web 框架。结合两者,我们可以打造一套完全离线、可控、安全的 AI 对话系统

1.2 技术选型优势

组件

作用

优点

Django

后端框架

全栈支持、ORM、认证系统齐全、适合中大型项目

Ollama

大模型运行平台

本地部署、支持多模型、统一 API、开箱即用

Channels

WebSocket 实现组件

Django 官方推荐、兼容性强

DRF

构建 RESTful API 接口

与前端分离良好,方便接口扩展

Docker

环境隔离与一键部署

本地开发方便、生产部署一致


二、使用架构的优势与劣势分析

2.1 优势

  1. 隐私安全:所有数据本地处理,适用于医疗、教育、政府等敏感场景。
  2. 本地部署灵活:模型自由更换,不依赖 API Key,响应速度可控。
  3. 扩展性强:可拓展用户系统、知识库、日志系统等模块。
  4. 前后端分离友好:支持 Vue、React 等前端对接。
  5. 支持流式响应:用户体验佳,生成内容实时显示。

2.2 不足

  1. 资源需求高:模型如 LLaMA3 至少需要 16G 内存 + 8G 显存。
  2. 复杂性增加:涉及模型管理、WebSocket、并发处理等。
  3. 调优困难:比起 GPT-4、Claude 等闭源模型,开源模型能力仍有差距。

三、Ollama 与 Django 基础知识

3.1 Ollama 快速了解

Ollama 是一个轻量级的本地大模型运行平台,核心能力包括:

  • ✅ 本地运行主流开源模型(如 LLaMA、Mistral、Gemma、Phi)
  • ✅ 支持 curlPython requestsWebSocket 接口访问
  • ✅ 支持流式输出(stream: true)
API 示例

请求:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "model": "llama3",
  "prompt": "你好,介绍一下你自己",
  "stream": true
}

响应(流式 JSON 每行返回):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"response": "你好,"}
{"response": "我是一个本地运行的大模型..."}

3.2 Django 简要知识

  • Model(模型):用于定义数据结构
  • View(视图):处理请求逻辑。
  • Template(模板):渲染前端页面。
  • Channels:用于实现 WebSocket 交互。
  • DRF:构建 REST API 的核心工具集。

四、项目实战:搭建本地对话系统

4.1 初始化项目

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
django-admin startproject ollama_chat
cd ollama_chat
python manage.py startapp chat

4.2 安装依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install django djangorestframework channels aiohttp

修改 settings.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSTALLED_APPS = [
    ...
    'rest_framework',
    'chat',
    'channels',
]

ASGI_APPLICATION = 'ollama_chat.asgi.application'

添加 asgi.py 支持:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# ollama_chat/asgi.py
import os
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
from chat.routing import websocket_urlpatterns

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ollama_chat.settings')

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "websocket": URLRouter(websocket_urlpatterns),
})

五、实现核心功能

5.1 WebSocket 消费者(流式返回)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# chat/consumers.py
import aiohttp
import json
from channels.generic.websocket import AsyncWebsocketConsumer

class ChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.accept()

    async def disconnect(self, _):
        pass

    async def receive(self, text_data):
        data = json.loads(text_data)
        prompt = data['prompt']
        model = data.get('model', 'llama3')

        async with aiohttp.ClientSession() as session:
            async with session.post(
                "http://localhost:11434/api/generate",
                json={"model": model, "prompt": prompt, "stream": True}
            ) as resp:
                async for line in resp.content:
                    if not line:
                        continue
                    try:
                        content = json.loads(line.decode())
                        await self.send(json.dumps({'response': content.get('response', '')}))
                    except:
                        pass

5.2 WebSocket 路由绑定

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# chat/routing.py
from django.urls import re_path
from . import consumers

websocket_urlpatterns = [
    re_path(r'ws/chat/$', consumers.ChatConsumer.as_asgi()),
]

六、创建前端页面

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- templates/chat.html -->
<!DOCTYPE html>
<html>
<head><title>Ollama Chat</title></head>
<body>
  <h2>与 Ollama 聊天</h2>
  <textarea id="prompt"></textarea>
  <button onclick="send()">发送</button>
  <pre id="response"></pre>
  <script>
    const socket = new WebSocket("ws://" + window.location.host + "/ws/chat/");
    socket.onmessage = function(event) {
        document.getElementById("response").textContent += event.data.replace(/^"|"$/g, '');
    };
    function send() {
        const prompt = document.getElementById("prompt").value;
        socket.send(JSON.stringify({prompt: prompt}));
    }
  </script>
</body>
</html>

七、进阶:用户登录 + 聊天记录保存

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# chat/models.py
from django.contrib.auth.models import User
from django.db import models

class ChatHistory(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    prompt = models.TextField()
    response = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)

八、Docker 一键部署

8.1 Dockerfile

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FROM python:3.10
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["daphne", "ollama_chat.asgi:application"]

8.2 docker-compose.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
version: '3'
services:
  django:
    build: .
    ports:
      - "8000:8000"
    volumes:
      - .:/app
    depends_on:
      - ollama
  ollama:
    image: ollama/ollama
    ports:
      - "11434:11434"
    volumes:
      - ollama:/root/.ollama
volumes:
  ollama:

九、未来可拓展方向(可选功能)

  1. ✅ 多用户角色管理与权限控制
  2. ✅ 多模型切换 + 参数调整界面(temperature, top_k 等)
  3. ✅ 引入向量知识库(RAG)系统
  4. ✅ 多轮上下文记忆与对话摘要
  5. ✅ 前端使用 Vue/React 实现多会话记录

🔚 总结

这套 Django + Ollama 架构适用于以下场景:

  • 私有部署的大模型交互系统
  • 教育、科研、政企数据本地处理场景
  • 可离线运行的大模型助手

如果你正在寻找一个从 0 到 1 的大模型应用开发实践,这将是一个非常扎实的起点。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
快速上手 LiteLLM:打造高效、稳定、面向生产的 LLM 应用程序
LiteLLM 是一个 Python 库,旨在简化多种大型语言模型(LLM)API 的集成。通过支持来自众多提供商的超过 100 种 LLM 服务,它使用户能够使用标准化的 OpenAI API 格式与这些模型进行交互。提供商包括 Azure、AWS Bedrock、Anthropic、HuggingFace、Cohere、OpenAI、Ollama 和 Sagemaker 等主要品牌。
汀丶人工智能
2025/05/21
2310
快速上手 LiteLLM:打造高效、稳定、面向生产的 LLM 应用程序
实战 | 使用 Python 开发一个在线聊天室
在线聊天室在如今的互联网是一个很常见的产品,在各类电商的网页客服中,我们都可以接触到在线聊天。还有一个培训机构,你一打开他的网页,立马就弹出一个在线聊天框,防不胜防。
州的先生
2021/09/08
4.1K1
Django框架完全指南:从入门到高级应用
Django是一个高效、功能强大的Python Web框架,它被广泛用于构建各种规模的Web应用程序。无论是初学者还是有经验的开发人员,都可以从入门到掌握Django的高级技巧。在本指南中,我们将带你逐步了解Django的核心概念和高级功能,通过代码实例和解析来详细说明。
一键难忘
2024/03/14
4.2K0
Django3+websocket+paramiko实现web页面实时输出
在上一篇文章中,简单在浏览器测试了websocket,链接如下:https://www.cnblogs.com/xiao987334176/p/13615170.html
py3study
2020/10/14
3.6K0
Django使用Channels实现WebSocket--上篇
WebSocket是一种在单个TCP连接上进行全双工通讯的协议。WebSocket允许服务端主动向客户端推送数据。在WebSocket协议中,客户端浏览器和服务器只需要完成一次握手就可以创建持久性的连接,并在浏览器和服务器之间进行双向的数据传输。
37丫37
2019/04/25
4.1K0
Django使用Channels实现WebSocket--上篇
119K star!无需GPU轻松本地部署多款大模型,DeepSeek支持!这个开源神器绝了
119K star!无需GPU轻松本地部署多款大模型,DeepSeek支持!这个开源神器绝了
小华同学ai
2025/04/10
2940
119K star!无需GPU轻松本地部署多款大模型,DeepSeek支持!这个开源神器绝了
LangChain+Ollama+DeepSeek AI 应用开发:LangChain 模型 IO 模块认知
Lang Chain 是在 LLM 爆发之后,最早有一定知名度的开源工具,其他生态大部分工具也都基于 Lang Chain 的架构方式,所以通过学习 Lang Chain 可以了解 大部分的 AI 应用工具,今天和小伙伴分享 Lang Chain 模块中的 模型 IO
山河已无恙
2025/03/13
5790
LangChain+Ollama+DeepSeek AI 应用开发:LangChain 模型 IO 模块认知
Django使用Channels实现WebSocket--下篇
通过上一篇《Django使用Channels实现WebSocket--上篇》的学习应该对Channels的各种概念有了清晰的认知,可以顺利的将Channels框架集成到自己的Django项目中实现WebSocket了,本篇文章将以一个Channels+Celery实现web端tailf功能的例子更加深入的介绍Channels
37丫37
2019/05/06
1.7K0
Django使用Channels实现WebSocket--下篇
【玩转全栈】—— Django+vue3+讯飞星火API 实现前端页面实时AI答复
技术栈:vue3 + element-plus + axios + pinia + router + Django5 + websocket + 讯飞星火API
用户11404404
2025/04/17
1890
解锁本地大模型的潜力:Ollama API 调用深度解析与实践指南
用ChatGPT、Claude、Gemini辅助学习更高效!注册ChatGPT、Claude、Gemini等账号,推荐使用https://yeka.ai/i/SUCCESS,输入推荐码SUCCESS,开卡费88折。 随着大语言模型(LLM)的快速发展,如何在本地高效部署和调用这些模型成为开发者关注的焦点。Ollama 作为一个轻量级开源框架,提供了一套简单而强大的 API 接口,支持本地运行多种预训练模型。本文深入探讨 Ollama API 的调用方法,包括生成补全、聊天对话、模型管理等功能,并通过丰富的代码示例展示其实践应用。从基础的安装配置到高级的流式响应处理,本文不仅详细解析了 API 的请求格式与参数,还结合 Python 编程语言,提供了大量带中文注释的代码,帮助读者快速上手。此外,文章还探讨了 Ollama 的架构优势及其在本地化场景中的潜力,适合希望在无 GPU 环境下运行大模型的开发者。通过本文,读者将掌握如何利用 Ollama API 构建本地化 AI 应用,解锁大模型的无限可能。
蒙娜丽宁
2025/04/13
1K0
解锁本地大模型的潜力:Ollama API 调用深度解析与实践指南
【全栈开发】---- 一文掌握 Websocket 原理,并用 Django 框架实现
WebSocket是一种先进的通信协议,旨在通过单个长时间运行的连接实现实时双向数据交换,极大地提升了Web应用程序的交互性和响应速度。不同于传统的HTTP请求-响应模型,WebSocket在客户端与服务器之间开启了一个持久化的连接,使得双方可以随时发送文本或二进制数据,无需为每次通信重新建立连接,从而减少了延迟并提高了效率。这种特性特别适用于需要实时更新的应用场景,如在线游戏、即时通讯、金融交易监控等。WebSocket协议不仅简化了开发流程,还确保了更高效的数据传输,支持更高的并发量和更低的资源消耗,成为现代Web开发中不可或缺的技术之一。此外,随着互联网技术的发展,WebSocket正逐渐成为构建高度互动和动态Web应用的标准选择,为企业提供前所未有的用户体验改进机会。
用户11404404
2025/03/06
1940
详解几种常见本地大模型个人知识库工具部署、微调及对比选型(2)
这里首先介绍的是大模型侧的工具安装部署实践,至于为什么先提大模型侧后提知识库侧呢?这是因为大模型通常是知识库操作和应用的基础与核心,是提供智能决策的引擎。它们构建了理解和生成文本、图像、语音等多模态反应的基础能力,是整个智能应用的心脏,同时,由于这次主题是本地大模型个人知识库,所以大模型的安装、配置、优化和部署是首要步骤,也是确保知识库工具能够顺畅运行的基石。
zhouzhou的奇妙编程
2024/06/12
4.4K0
django-channels实现群聊
Layer是一种通信系统。它允许多个消费者实例相互交谈,以及与 Django 的其他部分交谈。借助Layer可以很方便的实现群聊功能。无需我们手动管理websocket连接。
zy010101
2021/12/08
1.8K0
Django中WebSocket的实现与优化策略,包括断线重连机制
WebSocket技术在现代Web应用程序中越来越受欢迎,它提供了一种双向通信的方式,使得实时性应用程序的开发变得更加容易。在Django中,使用WebSocket可以实现实时通信,例如聊天应用、实时更新等。本文将介绍如何在Django中实现WebSocket以及一些优化策略。
一键难忘
2024/07/08
1.8K0
使用Ollama部署本地LLM:构建AI REST API的简易指南
利用Ollama本地LLM(大语言模型)搭建AI的REST API服务是一个实用的方法。下面是一个简单的工作流程。
TechLead
2024/09/27
7550
使用Ollama部署本地LLM:构建AI REST API的简易指南
Django Channels配置
Channels包装了Django的原生异步视图支持(Django3之后支持异步视图),允许Django项目不仅可以处理HTTP,还可以处理WebSockets,MQTT等。Channels提供了与Django的身份验证系统,会话系统等的集成,使得将纯HTTP项目扩展到其他协议比以往任何时候都更容易。因此,通常我们在Django3上实现websocket还是会使用channels
zy010101
2021/12/07
1.2K0
Django Channels配置
Django基于websocket实现群聊功能
Django支持http协议和websocket协议,并且可以识别不同协议请求的原因是channels的ProtocolTypeRouter类的下面代码:
GH
2020/03/19
1.1K0
Django Channels websocket 搭建实践(实现长链接消息通知功能)
信道层是一种通信系统。它允许多个消费者实例彼此交谈,以及与 Django 的其他部分交谈。 通道层提供以下抽象: 通道是一个可以将邮件发送到的邮箱。每个频道都有一个名称。任何拥有频道名称的人都可以向频道发送消息。 一组是一组相关的通道。一个组有一个名称。任何具有组名称的人都可以按名称向组添加/删除频道,并向组中的所有频道发送消息。无法枚举特定组中的通道。 每个使用者实例都有一个自动生成的唯一通道名,因此可以通过通道层进行通信。 在我们的聊天应用程序中,我们希望同一个房间中的多个聊天消费者实例相互通信。为此,我们将让每个聊天消费者将其频道添加到一个组,该组的名称基于房间名称。这将允许聊天用户向同一房间内的所有其他聊天用户发送消息。 我们将使用一个使用 redis 作为后备存储的通道层。要在端口 6379 上启动 Redis 服务器,首先系统上安装 redis,并启动。
卓越笔记
2023/02/18
2.4K0
Django Channels websocket 搭建实践(实现长链接消息通知功能)
20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
在生成式AI技术蓬勃发展的今天,大语言模型已成为企业智能化转型和个人效率提升的核心驱动力。作为国产大模型的优秀代表,DeepSeek凭借其卓越的中文语义理解能力和开发者友好的API生态,正在成为构建本土化AI应用的首选平台。本文将以Spring Boot3+Vue2全栈技术为基础,手把手带你打造一个具备以下特性的AI对话系统:
全干程序员demo
2025/03/18
5060
20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
Ollama 本地CPU部署开源大模型
如 Facebook的llama3, 谷歌的gemma, 微软的phi3,阿里的qwen2 等模型。
lyhue1991
2024/06/26
2.6K0
Ollama 本地CPU部署开源大模型
推荐阅读
相关推荐
快速上手 LiteLLM:打造高效、稳定、面向生产的 LLM 应用程序
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验