100个使用工具2-DeepSeek-WeChat: 微信风格的本地AI聊天应用实现文档

内容分享20小时前发布
0 0 0

DeepSeek-WeChat: 微信风格的本地AI聊天应用实现文档
100个使用工具2-DeepSeek-WeChat: 微信风格的本地AI聊天应用实现文档
100个使用工具2-DeepSeek-WeChat: 微信风格的本地AI聊天应用实现文档

项目概述

DeepSeek-WeChat是一个基于PySide6开发的桌面聊天应用,具有类似微信的用户界面风格,集成了Ollama本地AI模型服务。该应用支持创建多个对话、动态头像生成、消息气泡显示等功能,为用户提供流畅的本地AI对话体验。

技术架构

核心技术栈
Python 3.7+: 编程语言
PySide6: GUI框架,用于构建桌面应用界面
Ollama: 本地AI模型服务,提供模型推理能力
Requests: HTTP客户端库,用于与Ollama API通信

项目结构


plaintext
deepseek_wechat_app.py
├── 常量定义
├── 枚举类型
├── OllamaWorker (QThread)
├── ContactItem (QWidget)
├── MessageBubble (QWidget)
└── ChatWindow (QMainWindow)

核心功能实现

1. 联系人管理

联系人列表项 (ContactItem)
python


class ContactItem(QWidget):
    """联系人列表项"""
    clicked = Signal(str)
    rename_requested = Signal(str)
    delete_requested = Signal(str)
    signature_requested = Signal(str)

主要特性:
动态圆形头像生成,使用QPainter绘制带字母标识的头像
支持右键菜单进行重命名、删除和设置个性签名
显示最后一条消息摘要
选中状态高亮显示

头像生成算法
python


def create_circular_avatar(self, color, size, text=""):
    """创建带字母的圆形头像"""
    pixmap = QPixmap(size, size)
    pixmap.fill(Qt.GlobalColor.transparent)
    
    painter = QPainter(pixmap)
    painter.setRenderHint(QPainter.RenderHint.Antialiasing)
    painter.setPen(Qt.PenStyle.NoPen)
    painter.setBrush(QBrush(color))
    painter.drawEllipse(0, 0, size, size)
    
    # 绘制字母
    if text:
        painter.setPen(QColor(255, 255, 255))  # 白色文字
        font = QFont("Microsoft YaHei", size // 2 - 2, QFont.Weight.Bold)
        painter.setFont(font)
        painter.drawText(pixmap.rect(), Qt.AlignmentFlag.AlignCenter, text)
    
    painter.end()
    return pixmap

2. 消息气泡系统

消息气泡组件 (MessageBubble)


python
class MessageBubble(QWidget):
    """消息气泡"""

布局策略:
接收方消息: 头像 + 气泡 (左对齐)
发送方消息: 气泡 + 头像 (右对齐)
使用QHBoxLayout.Direction.RightToLeft确保发送方消息紧贴右侧头像
样式特点:
圆角气泡设计
微信绿发送气泡 (#4CAF50)
白色接收气泡
时间戳居中显示

3. Ollama集成

异步工作线程 (OllamaWorker)


python
class OllamaWorker(QThread):
    """Ollama API工作线程"""
    response_received = Signal(str)
    error_occurred = Signal(str)
    token_received = Signal(str)  # 实时传输token

流式响应处理:
**


python
# 启用流式传输
data = {
    "model": self.model,
    "messages": self.messages,
    "stream": True
}

**

实时处理响应token
for line in response.iter_lines():
if line:
decoded_line = line.decode(‘utf-8’)
json_data = json.loads(decoded_line)
if ‘message’ in json_data and ‘content’ in json_data[‘message’]:
content = json_data[‘message’][‘content’]
full_response += content
self.token_received.emit(full_response)

4. 对话管理

新增对话功能
点击”+ 新增对话”按钮创建新对话
自动生成基于对话名称首字的头像标识
支持对话重命名和删除
保存对话历史记录
对话历史显示
显示最后一条消息摘要
时间戳显示
个性签名展示
UI/UX设计
界面布局
左侧联系人面板 (240px)
搜索框
新增对话按钮
联系人列表
中间聊天区域 (自适应)
聊天标题栏
消息显示区域
输入框和发送按钮
右侧资料面板 (280px)
用户头像
名称和备注
个性签名
模型信息
主题支持
浅色主题 (默认)
深色主题 (可切换)
微信风格配色方案

核心算法

1. 动态头像生成


python
# 根据联系人类型生成不同颜色头像
if self.name == "DeepSeek AI":
    color = QColor(76, 175, 80)  # 微信绿
    text = "D"
elif "对话" in self.name or self.contact_id.startswith("conv_"):
    hash_val = hash(self.contact_id) % 360
    color = QColor.fromHsv(hash_val, 200, 200)
    text = self.name[0] if self.name else ""

2. 消息气泡自适应大小


python
bubble_label.setMaximumWidth(MSG_BUBBLE_MAX_WIDTH)  # 480px
bubble_label.setWordWrap(True)
bubble_label.setSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Minimum)

3. 流式响应更新


python
def update_ai_response(self, response):
    """实时更新AI响应显示"""
    # 更新最后一条消息的内容而不是添加新消息
    if self.chat_history and self.chat_history[-1]["role"] == "assistant":
        self.chat_history[-1]["content"] = response
    else:
        # 如果没有最后一条消息,添加新的临时消息
        self.chat_history.append({
            "role": "assistant",
            "content": response
        })

部署与运行
环境要求
Python 3.10+
Ollama服务 (默认端口11434)
依赖包:
plaintext
pip install PySide6 requests
运行步骤
启动Ollama服务
拉取所需模型:
plaintext
ollama pull deepseek-r1:7b
运行应用:
plaintext
python deepseek_wechat_app.py

扩展功能

1. 模型管理

支持多种Ollama模型
模型信息显示
对话级别模型切换

2. 个性化设置

对话重命名
个性签名设置
备注显示

3. 用户体验优化

Shift+Enter换行
Enter发送消息
自动滚动到底部
消息选择和复制

性能优化

1. 内存管理

使用deleteLater()正确释放QWidget资源
及时清理布局中的子项

2. UI响应性

异步处理Ollama API调用
流式显示AI响应
非阻塞界面操作

3. 网络优化

HTTP连接复用
流式传输减少延迟
错误重试机制

总结

DeepSeek-WeChat通过结合PySide6的GUI能力和Ollama的本地AI模型服务,为用户提供了一个功能完整、界面美观的本地AI聊天应用。其微信风格的界面设计和流畅的交互体验,使得与AI的对话更加自然和直观。项目采用模块化设计,易于扩展和维护,为本地AI应用开发提供了良好的参考范例。

© 版权声明

相关文章

暂无评论

none
暂无评论...