API 玩出新花样:我如何构建自己的智能翻译助手
文章目录
- 关于蓝耘中的MaaS平台的介绍
- 调用API以及切换model
- 创建自己的API KEY管理
- 软件的编写
关于蓝耘中的MaaS平台的介绍
MaaS(模型即服务)平台为企业开发者、创业者和非技术用户提供开箱即用的AI模型服务。它支持零代码、API集成和灵活计费,简化AI应用开发,助力业务创新。用户无需训练模型即可通过API等方式使用预训练的机器学习模型。
关于蓝耘中的MaaS的详细文档介绍,我们通过这个链接进行查询
文档查询帮助
里面的文档介绍可以帮助我们快速的进行上手,让我们更快的了解自己想要使用的API是什么!!!
如图所示,在需要进入这个平台之前,肯定是需要我们注册的
下面再附上我们的注册链接点击之后即可直接跳转该平台。
调用API以及切换model
在官方文档当中,也告诉了我们如何正确的接入API,让我们更加高效的使用
仅需要将 model 和 api_key 替换成相关配置,不需要对应用做额外修改,即可无缝将您的应用切换到相应的大模型。
即将下图当中的框起来部分进行修改即可
创建自己的API KEY管理
上面对应的就是API_KEY的复制我们需要进行替换的部分
然后将这个API_KEY填写到上面调用代码的api_key里面就行了
model的话就直接选择你想带调用的模型,这里我们可以发现模型广场可以带哦用的类型还是蛮多的
model的话我们选择模型下方的名字就行了
现在我们话又说回来,我现在带着大家完成一下通过这个API调用完成的翻译的软件(并且是可视化的)
现在我调用QwQ-32B的API接口
我们只需要将model=“/maas/qwen/QwQ-32B”
并且每一个API调用的模型都有自己的详细介绍,以及一些tokens的扣费介绍等等。
不过对于费用这种东西,不得不说蓝耘平台考虑的很周到,会给新用户提供充足的tokens额度供新用户体验使用,并且很多模型都是最新上线的,随便我们进行调用API
用不完,根本用不完
通过上面的介绍我们已经了解了蓝耘一些基础,现在我们通过API的调用,来进行编写一个关于翻译的软件
软件的编写
我们可以通过和CodeBuddy进行对话,让他帮我生成想要的效果
帮我生成一个本地翻译软件,有可视化界面,通过调用API来实现翻译效果,我会将需要翻译的内容发给你,然后你将信息通过API调用,让AI进行翻译,然后在可视化界面返回翻译的内容from openai import OpenAI# 构造 client
client = OpenAI(api_key="sk-nlankfqeeubf53ytm26cm4ecuv6zzg3xwxwl224n422zeju7", # APIKeybase_url="https://maas-api.lanyun.net/v1",
)
# 流式
stream = True
# 请求
chat_completion = client.chat.completions.create(model="/maas/qwen/QwQ-32B",messages=[{"role": "user","content": "你是谁",}],stream=stream,
)
if stream:for chunk in chat_completion:# 打印思维链内容if hasattr(chunk.choices[0].delta, 'reasoning_content'):print(f"{chunk.choices[0].delta.reasoning_content}", end="")# 打印模型最终返回的contentif hasattr(chunk.choices[0].delta, 'content'):if chunk.choices[0].delta.content != None and len(chunk.choices[0].delta.content) != 0:print(chunk.choices[0].delta.content, end="")
else:result = chat_completion.choices[0].message.content
下面是我和CodeBuddy进行对话,然后进行API调用的过程,直接可以通过API帮我生成一个想要的软件(提供强大的算力需求)
translator.py
import tkinter as tk
from tkinter import ttk, scrolledtext, messagebox
from openai import OpenAI
import threading
import json
import os
import pyperclipclass TranslatorApp:def __init__(self, root):self.root = rootself.root.title("AI翻译助手")self.root.geometry("800x600")# 默认设置self.config = {"api_key": "sk-nlankfqeeubf53ytm26cm4ecuv6zzg3xwxwl224n422zeju7","base_url": "https://maas-api.lanyun.net/v1","model": "/maas/qwen/QwQ-32B"}# 加载配置self.load_config()# 设置API客户端self.setup_client()# 创建菜单self.create_menu()# 创建主框架self.main_frame = ttk.Frame(self.root, padding="10")self.main_frame.grid(row=0, column=0, sticky=(tk.W, tk.E, tk.N, tk.S))# 创建语言选择区域self.lang_frame = ttk.Frame(self.main_frame)self.lang_frame.grid(row=0, column=0, sticky=(tk.W, tk.E), pady=(0, 10))self.source_lang_label = ttk.Label(self.lang_frame, text="源语言:")self.source_lang_label.grid(row=0, column=0, padx=(0, 5))self.source_lang = tk.StringVar(value="自动检测")self.source_lang_combo = ttk.Combobox(self.lang_frame, textvariable=self.source_lang, values=["自动检测", "中文", "英文", "日文", "韩文", "法文", "德文", "西班牙文", "俄文"])self.source_lang_combo.grid(row=0, column=1, padx=(0, 20))self.source_lang_combo.state(['readonly'])self.target_lang_label = ttk.Label(self.lang_frame, text="目标语言:")self.target_lang_label.grid(row=0, column=2, padx=(0, 5))self.target_lang = tk.StringVar(value="中文")self.target_lang_combo = ttk.Combobox(self.lang_frame, textvariable=self.target_lang,values=["中文", "英文", "日文", "韩文", "法文", "德文", "西班牙文", "俄文"])self.target_lang_combo.grid(row=0, column=3)self.target_lang_combo.state(['readonly'])# 创建输入文本区域self.input_label = ttk.Label(self.main_frame, text="请输入要翻译的文本:")self.input_label.grid(row=1, column=0, sticky=tk.W, pady=(0, 5))self.input_text = scrolledtext.ScrolledText(self.main_frame, height=10, width=80)self.input_text.grid(row=2, column=0, sticky=(tk.W, tk.E), pady=(0, 10))# 创建按钮区域self.button_frame = ttk.Frame(self.main_frame)self.button_frame.grid(row=3, column=0, pady=(0, 10))self.translate_button = ttk.Button(self.button_frame, text="翻译", command=self.start_translation)self.translate_button.grid(row=0, column=0, padx=5)self.clear_button = ttk.Button(self.button_frame, text="清除", command=self.clear_text)self.clear_button.grid(row=0, column=1, padx=5)# 创建输出文本区域self.output_label = ttk.Label(self.main_frame, text="翻译结果:")self.output_label.grid(row=4, column=0, sticky=tk.W, pady=(0, 5))self.output_text = scrolledtext.ScrolledText(self.main_frame, height=10, width=80)self.output_text.grid(row=5, column=0, sticky=(tk.W, tk.E))# 创建复制按钮self.copy_button = ttk.Button(self.main_frame, text="复制结果", command=self.copy_result)self.copy_button.grid(row=6, column=0, pady=(10, 0), sticky=tk.W)# 设置窗口可调整大小self.root.columnconfigure(0, weight=1)self.root.rowconfigure(0, weight=1)self.main_frame.columnconfigure(0, weight=1)# 创建状态标签self.status_label = ttk.Label(self.main_frame, text="就绪")self.status_label.grid(row=7, column=0, sticky=tk.W, pady=(5, 0))def setup_client(self):"""设置API客户端"""self.client = OpenAI(api_key=self.config["api_key"],base_url=self.config["base_url"],)def create_menu(self):"""创建菜单栏"""menubar = tk.Menu(self.root)self.root.config(menu=menubar)# 文件菜单file_menu = tk.Menu(menubar, tearoff=0)menubar.add_cascade(label="文件", menu=file_menu)file_menu.add_command(label="退出", command=self.root.quit)# 设置菜单settings_menu = tk.Menu(menubar, tearoff=0)menubar.add_cascade(label="设置", menu=settings_menu)settings_menu.add_command(label="API设置", command=self.show_api_settings)# 帮助菜单help_menu = tk.Menu(menubar, tearoff=0)menubar.add_cascade(label="帮助", menu=help_menu)help_menu.add_command(label="关于", command=self.show_about)def load_config(self):"""加载配置文件"""config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "translator_config.json")try:if os.path.exists(config_path):with open(config_path, "r") as f:loaded_config = json.load(f)# 更新配置,保留默认值for key, value in loaded_config.items():if key in self.config:self.config[key] = valueexcept Exception as e:print(f"加载配置失败: {e}")def save_config(self):"""保存配置文件"""config_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "translator_config.json")try:with open(config_path, "w") as f:json.dump(self.config, f, indent=4)except Exception as e:print(f"保存配置失败: {e}")def show_api_settings(self):"""显示API设置对话框"""settings_window = tk.Toplevel(self.root)settings_window.title("API设置")settings_window.geometry("500x300")settings_window.resizable(False, False)settings_window.transient(self.root)settings_window.grab_set()# 创建设置框架settings_frame = ttk.Frame(settings_window, padding="20")settings_frame.pack(fill=tk.BOTH, expand=True)# API密钥ttk.Label(settings_frame, text="API密钥:").grid(row=0, column=0, sticky=tk.W, pady=5)api_key_var = tk.StringVar(value=self.config["api_key"])api_key_entry = ttk.Entry(settings_frame, textvariable=api_key_var, width=50)api_key_entry.grid(row=0, column=1, sticky=(tk.W, tk.E), pady=5)# 基础URLttk.Label(settings_frame, text="基础URL:").grid(row=1, column=0, sticky=tk.W, pady=5)base_url_var = tk.StringVar(value=self.config["base_url"])base_url_entry = ttk.Entry(settings_frame, textvariable=base_url_var, width=50)base_url_entry.grid(row=1, column=1, sticky=(tk.W, tk.E), pady=5)# 模型ttk.Label(settings_frame, text="模型:").grid(row=2, column=0, sticky=tk.W, pady=5)model_var = tk.StringVar(value=self.config["model"])model_entry = ttk.Entry(settings_frame, textvariable=model_var, width=50)model_entry.grid(row=2, column=1, sticky=(tk.W, tk.E), pady=5)# 保存按钮def save_settings():self.config["api_key"] = api_key_var.get()self.config["base_url"] = base_url_var.get()self.config["model"] = model_var.get()self.save_config()self.setup_client()settings_window.destroy()messagebox.showinfo("成功", "API设置已保存")ttk.Button(settings_frame, text="保存", command=save_settings).grid(row=3, column=1, sticky=tk.E, pady=20)def show_about(self):"""显示关于对话框"""messagebox.showinfo("关于", "AI翻译助手\n\n一个使用AI进行文本翻译的工具\n\n版本: 1.0")def copy_result(self):"""复制翻译结果到剪贴板"""result = self.output_text.get("1.0", tk.END).strip()if result:pyperclip.copy(result)self.status_label.config(text="已复制到剪贴板")else:self.status_label.config(text="没有可复制的内容")def clear_text(self):"""清除输入和输出文本"""self.input_text.delete("1.0", tk.END)self.output_text.delete("1.0", tk.END)self.status_label.config(text="已清除")def translate_text(self):"""执行翻译操作"""try:# 获取输入文本input_text = self.input_text.get("1.0", tk.END).strip()if not input_text:self.status_label.config(text="请输入要翻译的文本")return# 获取语言设置source_lang = self.source_lang.get()target_lang = self.target_lang.get()# 更新状态self.status_label.config(text="正在翻译...")self.translate_button.state(['disabled'])self.output_text.delete("1.0", tk.END)# 构造翻译提示system_prompt = f"你是一个专业的翻译助手。"if source_lang == "自动检测":system_prompt += f"请将用户输入的文本翻译成{target_lang}。"else:system_prompt += f"请将用户输入的{source_lang}文本翻译成{target_lang}。"system_prompt += "只需要提供翻译结果,不需要解释。"messages = [{"role": "system","content": system_prompt},{"role": "user","content": input_text}]# 调用API进行翻译chat_completion = self.client.chat.completions.create(model=self.config["model"],messages=messages,stream=True)# 处理流式响应for chunk in chat_completion:if hasattr(chunk.choices[0].delta, 'content'):if chunk.choices[0].delta.content:self.output_text.insert(tk.END, chunk.choices[0].delta.content)self.output_text.see(tk.END)self.root.update()# 更新状态self.status_label.config(text="翻译完成")except Exception as e:self.status_label.config(text=f"翻译出错:{str(e)}")messagebox.showerror("错误", f"翻译过程中发生错误:\n{str(e)}")finally:self.translate_button.state(['!disabled'])def start_translation(self):"""在新线程中启动翻译"""threading.Thread(target=self.translate_text, daemon=True).start()def main():root = tk.Tk()app = TranslatorApp(root)root.mainloop()if __name__ == "__main__":main()
requirements.txt
openai>=1.0.0
pyperclip>=1.8.2
最后看看我们想要达到的效果,以及通过API接口调用达到的效果
最后总结一下:通过蓝耘当中各种大模型的调用,可以快速实现我们想要达到的效果,并且蓝耘当中API的调用更加平稳稳定。