python调用openai兼容大模型api实现电脑全局划词问ai和全局快捷键截屏问ai聊天窗口对话框代码
代码语言:python
所属分类:其他
代码描述:python调用openai兼容大模型api实现电脑全局划词问ai和全局快捷键截屏问ai聊天窗口对话框代码,任意位置鼠标划词就能跳出操作按钮,可复制,问ai、总结,改写,甚至按住ctrl+alt+a快捷键还能跳出截屏界面选择截屏问ai,提取截屏图片的文字等功能。
代码标签: python openai 兼容 大模型 api 电脑 全局 划词 问 ai 全局 快捷键 截屏 聊
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
#!/usr/local/python3/bin/python3 # -*- coding: utf-8 -* #!/usr/local/python3/bin/python3 # -*- coding: utf-8 -* import tkinter as tk from tkinter import scrolledtext import threading import time import os import io import base64 import re from pynput import mouse, keyboard import pyperclip from openai import OpenAI from PIL import Image, ImageTk import mss import win32clipboard import win32con import ctypes # --- 0. 初始化与设置 --- # 设置DPI感知,以获得更清晰的UI元素 try: ctypes.windll.shcore.SetProcessDpiAwareness(1) except Exception: pass # --- 0. 初始化与设置 --- api_key = "sk-" if not api_key: print("错误:请设置 OPENAI_API_KEY 环境变量。") exit() client = OpenAI(api_key=api_key,base_url="https://dashscope.aliyuncs.com/compatible-mode/v1") # --- 1. AI 聊天窗口 (升级版,支持Markdown渲染) --- class ChatWindow(tk.Toplevel): def __init__(self, master, initial_text, task_prompt, image: Image.Image = None): print("[DEBUG] 创建AI聊天窗口...") super().__init__(master) self.title("AI助手") self.geometry("600x700") self.chat_history = scrolledtext.ScrolledText(self, wrap=tk.WORD, state='disabled', font=("Arial", 11), padx=5, pady=5) self.chat_history.pack(padx=10, pady=10, expand=True, fill='both') # 定义Markdown渲染标签 self.chat_history.tag_configure("bold", font=("Arial", 11, "bold")) self.chat_history.tag_configure("italic", font=("Arial", 11, "italic")) self.chat_history.tag_configure("code", font=("Courier New", 10), background="#f0f0f0", lmargin1=20, lmargin2=20, relief="raised", borderwidth=1) self.input_frame = tk.Frame(self) self.input_frame.pack(padx=10, pady=5, fill='x') self.entry_box = tk.Entry(self.input_frame, font=("Arial", 11)) self.entry_box.pack(side='left', expand=True, fill='x') self.entry_box.bind("<Return>", self.send_user_message) self.send_button = tk.Button(self.input_frame, text="发送", command=self.send_user_message) self.send_button.pack(side='right', padx=5) self.messages = [{"role": "system", "content": task_prompt}] user_content = [{"type": "text", "text": initial_text}] if image: self.display_image(image) base64_image = self.encode_image_to_base64(image) user_content.insert(0, {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{base64_image}"}}) self.messages.append({"role": "user", "content": user_content}) self.display_message("你", initial_text) self.get_ai_response() def render_markdown(self, text): """简单的Markdown渲染器,支持加粗、斜体和代码块""" self.chat_history.config(state='normal') # 使用正则表达式匹配Markdown语法 # 1. 匹配多行代码块 ```code block``` # 2. 匹配单行代码 `code` # 3. 匹配加粗 **bold** # 4. 匹配斜体 *italic* or _italic_ # 按顺序查找和应用,避免嵌套冲突 # 正则表达式需要小心处理,一个简单的方法是逐行处理 # 为简单起见,我们主要处理行内格式 # 逐行插入和渲染 lines = text.split('\n') for line in lines: start_index = self.chat_history.index(tk.END) self.chat_history.insert(tk.END, line + '\n') # 检测并应用代码块(简单实现,整行) if line.startswith("```"): self.chat_history.tag_add("code", start_index, f"{start_index} + {len(l.........完整代码请登录后点击上方下载按钮下载查看
网友评论0