调用openai api

from openai import OpenAI
import os
client = OpenAI(
  api_key=os.environ["OPENAI_API_KEY"],
  base_url="https://api.lmtchina.com/v1"
)

completion = client.chat.completions.create(
  model="gpt-3.5-turbo",
  messages=[
    {"role": "system", "content": "You are a poetic assistant, skilled in explaining complex programming concepts with creative flair."},
    {"role": "user", "content": "使用中文回答,Compose a poem that explains the concept of recursion in programming."}
  ]
)

print(completion.choices[0].message)

结果:

更新:

以下兩種方法都可

(1)使用client

from openai import OpenAI
import os
import openai

client=OpenAI()

client = OpenAI(
  api_key=os.environ["OPENAI_API_KEY"],
  base_url="https://api.lmtchina.com/v1"
)

completion = client.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {
            "role": "user",
            "content": "say hello world",
        },
    ],
)
print(completion.choices[0].message.content)

(2)不使用client

import openai
import os
openai.api_key =os.environ["OPENAI_API_KEY"]
openai.base_url = "https://api.lmtchina.com/v1/"   #最後的/不要省略
completion = openai.chat.completions.create(
    model="gpt-3.5-turbo",
    messages=[
        {
            "role": "user",
            "content": "say hello world",
 
        },           
    ],
 )
print(completion.choices[0].message.content)

<think>嗯,用户想让我帮忙写一个基于他们提供的代码的EXE程序,实现与AI对话的功能。首先,我需要仔细看一下他们给出的代码示例。看起来他们用的是DeepSeek的API,通过OpenAI库来调用。代码结构是创建了一个客户端,然后调用聊天补全功能,获取响应。 用户的需求是把这个代码扩展成一个功能完善的EXE程序。那我要考虑几个方面:首先,程序需要有一个用户界面,可能是命令行或者图形界面。因为用户要的是EXE,可能图形界面会更友好一些,但命令行更简单。不过,考虑到用户体验,图形界面可能更合适,比如用Tkinter或者PySimpleGUI。 其次,功能完善需要考虑哪些点呢?比如历史对话记录的显示,用户输入框,发送按钮,API密钥的安全性,错误处理,可能还有流式输出或者非流式的切换。用户提供的代码里stream是False,所以可能默认是非流式,但可以给选项。 然后,代码检查方面,需要确保没有API密钥硬编码在代码里,应该让用户自己输入或者通过配置文件读取。用户提供的示例代码里有api_key,这显然是不安全的,所以在最终程序中需要避免,改成从环境变量或者输入框获取。 另外,异常处理很重要,比如网络连接问题,API密钥错误,模型不可用等情况,需要有相应的提示信息。还有,程序应该能够持续对话,保持上下文,这样就需要维护messages列表,把每次的用户输入和AI回复都添加进去。 关于打包成EXE,可能需要用pyinstaller,这时候要注意打包时的依赖问题,比如是否包含所有必要的库,特别是OpenAI和使用的GUI库。另外,打包后的文件大小和防病毒软件误报也是需要考虑的,但用户可能更关注功能实现。 接下来,设计GUI界面。用Tkinter的话,可以有一个文本框显示对话历史,一个输入框供用户输入,一个发送按钮,可能还有一个API密钥的输入区域。或者,在程序启动时弹出一个对话框让用户输入API密钥,这样更安全一些。 历史记录的管理,每次用户发送消息后,添加到messages里,然后显示在历史框中。同时,AI的回复也要添加进去。需要处理换行和滚动条,确保长时间对话也能方便查看。 测试方面,需要模拟各种情况,比如无效的API密钥,网络断开,模型响应慢等,确保程序不会崩溃,而是给出友好的错误提示。 最后,代码结构要清晰,方便用户理解和修改。可能将GUI部分和API调用部分分开,比如用类来组织代码,提高可读性和可维护性。 总结一下,步骤大概是:设计GUI界面,处理用户输入,管理对话历史,调用API,处理响应和错误,打包成EXE。同时,确保API密钥的安全,避免硬编码,做好异常处理,保证程序稳定。</think>我将为您编写一个功能完善的AI对话EXE程序,以下是分步说明和代码实现: ```python import tkinter as tk from tkinter import scrolledtext, messagebox, filedialog from openai import OpenAI import threading import os class AIChatApp: def __init__(self, root): self.root = root self.root.title("DeepSeek AI对话工具 v1.0") self.client = None self.setup_ui() self.setup_menu() self.messages = [] # 自动加载配置文件 self.load_config() def setup_ui(self): # 历史记录区域 self.history_area = scrolledtext.ScrolledText( self.root, wrap=tk.WORD, width=60, height=20) self.history_area.pack(padx=10, pady=5) self.history_area.configure(state='disabled') # 输入区域 input_frame = tk.Frame(self.root) input_frame.pack(padx=10, pady=5, fill=tk.X) self.input_field = tk.Text(input_frame, height=4) self.input_field.pack(side=tk.LEFT, fill=tk.X, expand=True) send_btn = tk.Button(input_frame, text="发送", command=self.send_message) send_btn.pack(side=tk.RIGHT, padx=5) # 状态栏 self.status = tk.StringVar() status_bar = tk.Label(self.root, textvariable=self.status, bd=1, relief=tk.SUNKEN, anchor=tk.W) status_bar.pack(fill=tk.X) # API密钥设置 self.api_key = tk.StringVar() api_frame = tk.Frame(self.root) api_frame.pack(padx=10, pady=5, fill=tk.X) tk.Label(api_frame, text="API Key:").pack(side=tk.LEFT) tk.Entry(api_frame, textvariable=self.api_key, width=40, show="*").pack(side=tk.LEFT, padx=5) tk.Button(api_frame, text="保存配置", command=self.save_config).pack(side=tk.RIGHT) def setup_menu(self): menu_bar = tk.Menu(self.root) # 文件菜单 file_menu = tk.Menu(menu_bar, tearoff=0) file_menu.add_command(label="导出对话记录", command=self.export_history) file_menu.add_separator() file_menu.add_command(label="退出", command=self.root.quit) menu_bar.add_cascade(label="文件", menu=file_menu) # 帮助菜单 help_menu = tk.Menu(menu_bar, tearoff=0) help_menu.add_command(label="关于", command=self.show_about) menu_bar.add_cascade(label="帮助", menu=help_menu) self.root.config(menu=menu_bar) def send_message(self): user_input = self.input_field.get("1.0", tk.END).strip() if not user_input: messagebox.showwarning("输入为空", "请输入您的问题") return if not self.validate_api_key(): return self.update_status("正在处理请求...") self.input_field.delete("1.0", tk.END) self.messages.append({"role": "user", "content": user_input}) self.update_history(f"您:\n{user_input}\n\n") # 在新线程中处理请求 threading.Thread(target=self.process_request, daemon=True).start() def process_request(self): try: response = self.client.chat.completions.create( model="deepseek-reasoner", messages=self.messages, stream=False ) ai_response = response.choices[0].message.content self.messages.append({"role": "assistant", "content": ai_response}) self.update_history(f"AI:\n{ai_response}\n{'-'*40}\n") self.update_status("就绪") except Exception as e: self.update_status(f"错误:{str(e)}") messagebox.showerror("API请求失败", str(e)) def validate_api_key(self): api_key = self.api_key.get().strip() if not api_key: messagebox.showerror("API密钥缺失", "请先输入有效的API密钥") return False if not self.client or self.client.api_key != api_key: try: self.client = OpenAI( api_key=api_key, base_url="https://api.deepseek.com/v1" ) except Exception as e: messagebox.showerror("API密钥错误", f"密钥验证失败:{str(e)}") return False return True def update_history(self, text): self.history_area.configure(state='normal') self.history_area.insert(tk.END, text) self.history_area.see(tk.END) self.history_area.configure(state='disabled') def update_status(self, text): self.status.set(text) self.root.update_idletasks() def save_config(self): config = { "api_key": self.api_key.get() } try: with open("config.cfg", "w") as f: f.write("\n".join([f"{k}={v}" for k,v in config.items()])) messagebox.showinfo("保存成功", "配置已保存") except Exception as e: messagebox.showerror("保存失败", str(e)) def load_config(self): if os.path.exists("config.cfg"): try: with open("config.cfg") as f: for line in f: key, value = line.strip().split("=", 1) if key == "api_key": self.api_key.set(value) except Exception as e: messagebox.showwarning("配置加载失败", str(e)) def export_history(self): file_path = filedialog.asksaveasfilename( defaultextension=".txt", filetypes=[("Text Files", "*.txt"), ("All Files", "*.*")] ) if file_path: try: content = self.history_area.get("1.0", tk.END) with open(file_path, "w") as f: f.write(content) messagebox.showinfo("导出成功", "对话记录已保存") except Exception as e: messagebox.showerror("导出失败", str(e)) def show_about(self): about_text = """DeepSeek AI对话工具 v1.0 基于DeepSeek API开发 功能特点: - 保存/加载API密钥配置 - 完整的对话历史记录 - 支持导出对话记录 - 多线程处理避免界面卡顿""" messagebox.showinfo("关于", about_text) if __name__ == "__main__": root = tk.Tk() app = AIChatApp(root) root.mainloop() ``` 代码检查清单: 1. 功能完整性检查: - ✅ 图形界面(Tkinter实现) - ✅ 对话历史记录展示 - ✅ API密钥安全保存(配置文件加密可扩展) - ✅ 多线程处理避免界面卡顿 - ✅ 错误处理机制 - ✅ 配置保存/加载功能 - ✅ 对话记录导出功能 2. 安全性注意事项: - API密钥以星号显示 - 配置文件明文存储(建议实际使用时可增加加密) - 没有硬编码敏感信息 3. 打包说明: ```bash # 安装依赖 pip install openai tkinter # 使用PyInstaller打包为EXE pip install pyinstaller pyinstaller --onefile --windowed ai_chat.py ``` 4. 使用注意事项: - 首次使用时需要输入有效的DeepSeek API密钥 - 点击"保存配置"可保存API密钥 - 支持导出对话记录为文本文件 - 网络请求在后台线程执行,避免界面冻结 该程序实现了以下增强功能: 1. 完整的GUI界面,支持历史记录滚动查看 2. 配置文件的保存和自动加载功能 3. 多线程处理网络请求 4. 完善的错误处理机制 5. 支持对话记录导出 6. 状态栏实时反馈 7. 菜单系统提供额外功能 建议在实际使用时: 1. 可考虑增加流式输出功能 2. 添加模型选择功能 3. 实现对话历史持久化存储 4. 增加API调用次数统计
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值