开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1259|回复: 83
收起左侧

[其它源码] python:对接Deepseek接口实现流式对话

[复制链接]
结帖率:96% (24/25)
发表于 2025-2-12 11:52:50 | 显示全部楼层 |阅读模式   上海市上海市
分享源码
界面截图: -
是否带模块: -
备注说明: -
本帖最后由 KD飞飞 于 2025-2-12 11:54 编辑

QQ截图20250212115355.png

146ze-f3i5r.gif

  
import tkinter as tk
import threading
from openai import OpenAI
# 替换为你的 DeepSeek API Key
api_key = "你的秘钥"
# 替换为正确的 Base URL
base_url = "https://api.deepseek.com"
# 初始化对话历史
messages = []
# 窗口标题变量
window_title = "AI对话窗口程序"
# 初始化 OpenAI 客户Duan
client = OpenAI (api_key=api_key, base_url=base_url)
def chat_with_model (user_input):
"""
与模型进行对话,支持多轮对话和流式输出
"""
# 将用户输入添加到对话历史中
messages.append ({"role": "user", "content": user_input})

# 调用 API 进行对话
response = client.chat.completions.create (
model="deepseek-chat",
messages=messages,
stream=True  # 启用流式输出
)

# 处理流式返回的内容
for chunk in response:
if hasattr (chunk.choices[0], "finish_reason") and chunk.choices[0].finish_reason == "stop":
break
if hasattr (chunk.choices[0].delta, "content") and chunk.choices[0].delta.content:
content = chunk.choices[0].delta.content
# 替换 LaTeX 格式为更友好的形式
content = content.replace ( ' \\boxed', '」').replace('{', '「').replace('}', '」')
content = content.replace ( ' \\(', '').replace('\\)', '')
root.after (0, update_display_with_stream, content)  # 在主线程中更新显示框
# 流式输出结束后,插入换行
root.after (0, lambda: display_text.insert (tk.END, ' \n'))  # 插入换行
def update_display_with_stream (content):
display_text.insert (tk.END, content)
# 自动滚动到最底部
display_text.see (tk.END)
def send_message (event=None):
user_input = input_entry.get ("1.0", tk.END).strip ()  # 获取输入框中的内容
if user_input:
# 将用户输入显示在对话框中
display_text.insert (tk.END, f"你: {user_input}\n", "user")
display_text.insert (tk.END, "deepseek: ", "assistant")
display_text.see (tk.END)  # 自动滚动到最底部

# 启动线程处理模型请求
threading.Thread (target=chat_with_model, args= (user_input,), daemon=True).start ()

# 清空输入框
input_entry.delete ("1.0", tk.END)
def clear_chat ():
"""
清空对话历史和显示框
"""
# 清空显示框
display_text.delete ("1.0", tk.END)
# 清空对话历史
messages.clear ()
# 清空输入框
input_entry.delete ("1.0", tk.END)
# 创建主窗口
root = tk.Tk ()
root.title (window_title)
root.geometry ("800x600")  # 设置窗口尺寸
# 配置 grid 布局权重
root.grid_rowconfigure (0, weight=1)
root.grid_rowconfigure (1, weight=0)  # 输入框行不扩展
root.grid_columnconfigure (0, weight=1)
# 创建显示文字的编辑框
display_text = tk.Text (root, wrap=tk.NONE)  # 禁用自动换行
display_text.grid (row=0, column=0, padx=10, pady=10, sticky="nsew")
# 创建垂直滚动条并绑定到显示框
vertical_scrollbar = tk.Scrollbar (root, command=display_text.yview)
vertical_scrollbar.grid (row=0, column=1, sticky= ' ns')
display_text.config (yscrollcommand=vertical_scrollbar.set)
# 创建水平滚动条并绑定到显示框
horizontal_scrollbar = tk.Scrollbar (root, orient=tk.HORIZONTAL, command=display_text.xview)
horizontal_scrollbar.grid (row=1, column=0, sticky= ' ew')
display_text.config (xscrollcommand=horizontal_scrollbar.set)
# 配置文本样式
display_text.tag_configure ("user", foreground="blue")
display_text.tag_configure ("assistant", foreground="green")
display_text.tag_configure ("bold", font= ("Arial", 12, "bold"))
# 创建输入文字的多行编辑框
input_entry = tk.Text (root, height=5, wrap=tk.NONE)  # 禁用自动换行
input_entry.grid (row=2, column=0, padx=10, pady=10, sticky="nsew")  # 调整到第三行
# 创建输入框的垂直滚动条
input_vertical_scrollbar = tk.Scrollbar (root, command=input_entry.yview)
input_vertical_scrollbar.grid (row=2, column=1, sticky= ' ns')
input_entry.config (yscrollcommand=input_vertical_scrollbar.set)
# 创建输入框的水平滚动条
input_horizontal_scrollbar = tk.Scrollbar (root, orient=tk.HORIZONTAL, command=input_entry.xview)
input_horizontal_scrollbar.grid (row=3, column=0, sticky= ' ew')
input_entry.config (xscrollcommand=input_horizontal_scrollbar.set)
# 按键绑定
input_entry.bind ("", lambda event: send_message ())  # 普通回车键发送消息
input_entry.bind ("", lambda event: input_entry.insert (tk.END, "\n"))  # Ctrl+回车换行
# 创建发送按钮
send_button = tk.Button (root, text="点击发送", command=send_message, width=10, height=2)  # 调小按钮大小
send_button.grid (row=2, column=2, padx=10, pady=10, sticky="ns")  # 调整行到 row=2
# 创建清空对话按钮
clear_button = tk.Button (root, text="清空对话", command=clear_chat, width=10, height=2)
clear_button.grid (row=3, column=2, padx=10, pady=10, sticky="ns")  # 位于发送按钮下方,row=3
# 主循环
root.mainloop ()


发表于 2025-3-13 08:31:50 | 显示全部楼层   广西壮族自治区南宁市
试一下看看能看懂不
回复 支持 反对

使用道具 举报

签到天数: 3 天

发表于 2025-3-13 07:08:35 | 显示全部楼层   山东省青岛市
哇,对接Deepseek接口实现流式对话,听起来好高级啊。不知道难不难学,有没有小伙伴一起研究下?哈。
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 2025-3-13 03:45:15 | 显示全部楼层   河南省南阳市
66666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2025-3-12 17:47:22 | 显示全部楼层   福建省龙岩市
非常感谢,支持哦
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 3 天

发表于 2025-3-11 15:49:39 | 显示全部楼层   河南省鹤壁市
111111111111111111
回复 支持 反对

使用道具 举报

结帖率:78% (25/32)
发表于 2025-3-6 16:49:19 | 显示全部楼层   福建省南平市
RE: python:对接Deepseek接口实现流式对话 [修改]
回复 支持 反对

使用道具 举报

结帖率:0% (0/5)
发表于 2025-3-6 14:56:25 | 显示全部楼层   广东省广州市
回复 支持 反对

使用道具 举报

发表于 2025-3-4 22:04:04 | 显示全部楼层   河南省郑州市
看看学习下。
回复 支持 反对

使用道具 举报

发表于 2025-2-28 00:44:20 | 显示全部楼层   广西壮族自治区贺州市
deepseep试试看
回复 支持 反对

使用道具 举报

发表于 2025-2-27 21:37:15 | 显示全部楼层   江西省赣州市
学习一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表