教你用AI编程丨我用AI做了一个辅助创作的工具软件

前段时间已经我用AI成功做了一个提高效率的软件,是用来对比英语文本,得出英语文本中哪些单词是超出高中英语考试大纲的词语,方便在相关软文中作为数据例子使用,提高文章的说服力。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

英语文本对比查词工具

其实这个英语文本对比查词工具还有一些bug,只是还没来得及进一步优化,我就用不到它了。

这次想做一个辅助创作的小工具,我很久以前就构想过,但一直没有合适机会做出来,最近在看一本关于做笔记的书,再次想起来,决定用AI做出来,并且用这篇文章进行全程记录。

这个小工具的基本逻辑很简单,就是在词库随机抽取词组,就像一个抽奖箱。我最开始的想法是用来储存灵感,创作的时候随机拿出来,寻找新的灵感,不过现在这个小工具可以更多具体的用法。

主要工具

通义千问

Python

与AI(通义千问)的指令对话

教你用AI编程丨我用AI做了一个辅助创作的工具软件

你擅长用Python编程,请根据以下要求编写程序代码:1.软件的主要功能是一键在一个excel表格文件中随机读取若干个词组;2.Excel表格名称为“词库”,如果没有这个文件则在软件所在文件夹建立;3.读取的词组数量可以手动设置,默认为3个;4.可以手动输入为词库添加词组。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

代码运行结果

只是出来一个基本运行代码,没有界面不方便测试,也不是我们想要的需求。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

请继续优化代码,程序添加界面。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

第一版界面及运行结果

由于前面提需求没有说到输出结果的呈现模式,AI就自己设计成了弹出展示,不是很方便查看。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

做得很好,请继续优化代码,将输出结果直接呈现在界面中,同时要求可复制。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

经过测试,输出结果并没有显示在界面中,请检查代码并且优化。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

初版单一功能工具

经过这次指令对话,生成的代码运行起来已经基本满足我所提出的基本需求,接下来要丰富功能以及优化逻辑。这个过程往往会出现各种bug。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

问题已经解决,请继续保持,现在我们再来优化代码实现以下内容:1.软件名改成“灵感碰撞器”;2.添加词组的分割符改成空格;3.对词库进行扩充,excel文件中第一列为词库A、第二列为词库B、第二列为词库C,可选择分别从不同词库中随机取自定义数量的词组;3.添加词组也要可选择为哪个词库添加。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

使用不够方便,改

教你用AI编程丨我用AI做了一个辅助创作的工具软件

请继续优化代码,词库选择直接在界面中进行,并且可以选择多个词库,设置每个词库取多少个词组;添加词组时,词库选择用选择项的形式进行。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

基本功能与界面

这次对话之后,小工具的基本功能和界面已经展示出来了,但输出结果出现bug。

预警!下面就是为了修复,进行多重指令对话,时间基本都耗在这里了。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

经过测试,输出结果并没有显示在界面中,运行日志显示KeyError:True,请检查代码并且优化。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

经过测试,输出结果还是没有显示在界面中,运行日志显示ExceptioninTkintercallback,请检查代码并且优化。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

经测试,输出结果还是有问题,情况如下:当只选择词库A时,会显示词库A无词组;选择词库B和C时,有时候会有词组出现,有时会报错。可能是读取excel文件是无法识别其中的空白单元格,请优化读取识别逻辑,避免出现这样情况。同时,未避免再次出现这种情况,在读取excel文件前,对其进行处理,将每一列包含词组单元格间的空白单元格删除。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

经过测试,前面出现的问题还是没有解决,完整的保持日志如下:

教你用AI编程丨我用AI做了一个辅助创作的工具软件教你用AI编程丨我用AI做了一个辅助创作的工具软件

还出现选择词库A读取会显示词库A无词组,选择词库B和C读取有时候报错,有时候能成功的问题,请你提升Python编码能力,再次优化代码解决问题。

经过几次测试以及AI优化,还是出现问题,突然想到会不会是excel文件的问题,检查过后发现单元格A1因为刚开始的时候没有设置三个词库,所以显示还是“词组”,没有被替换成“词库A”,导致程序读取不到这一列的词组,手动更改后,词库A的问题已经解决。

词库B和词库C的问题还存在,应该因为行数与词库A不一致,随机读取被读取到空白单元格导致错误产生,因此接下来要想办法让AI解决这个问题。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

经过测试,词库B和词库C读取到空白单元格,还是出现bug,因此请优化代码,判定读取到空白单元格时,重新随机选择词组,直至选择非空值单元格;或者在读取的时候,采用只读非空值单元格的逻辑,避免出现错误。

不知道是不是AI的局限性,优化后的代码还是不能解决问题,让AI采用新的策略。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

读取到空值还是错误,那么请按照以下逻辑优化代码,当读取到空值单元格时,输出为“空(请再次生成)”。

测试过后,这个逻辑也不能解决bug,我得再换个思路,AI自己是想不明白的,还得是人来操控解决才行。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

鉴于生成还是有问题,请按照以下逻辑再次优化代码:词库B与词库C随机读取词组时分别按照词库A的读取进行,三个读取作为独立的线程,互不干扰。

这个思路指令,AI还是不能解决,有点头大了,难懂要回到原始版本,只用一个词库?不甘心,再想想办法。

决定从源头解决,三个词库放在一个excel文件里还是容易混乱出问题,干脆做三个最简单的文本词库,以后有新的解决办法再优化。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

请你根据以下需求优化代码:取消excel文件“词库”,改成用三个txt文本文件作为词库,分别命名为“词库A”“词库B”“词库C”,如果不存在这些文件,则在软件所在文件夹创建这些文件。

这一次终于成功运行无bug,最后再做一些个性优化即可。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

【灵感碰撞器】正式的完整代码以及成品软件附在文末

教你用AI编程丨我用AI做了一个辅助创作的工具软件

利用AI制作工具软件,其实不用会太多的编程知识,甚至只要你的文字阅读理解能力够强、会检索工具,完全编程零基础也能利用AI做能一些能提高自己工作效率的小工具。

当然,AI也不是绝对智能,至少我现在最常使用的通义千问在写代码的时候,简单的功能一般没什么问题,但稍微复杂一点的需求,给出来的代码就容易出bug,需要人为的给出逻辑引导,将bug去掉(当然,不会写代码的人也有局限,有些bug实在解决逻辑。)

人人都能用AI,使用AI没有门槛,但把AI用好也是一种能力。

这个【灵感碰撞器】小工具的作用有很多,对我而言就是预先把一些创作主题输入进去,随机选出来,解决我的选择困难问题。不同的词库满足不同的需求,比如我经常写一些借势文案进行分享,但有时候不知道该以什么产品写文案,这时候就可以利用它们帮我选择了。

教你用AI编程丨我用AI做了一个辅助创作的工具软件

当然,你也可以把你想吃的菜名放到词库,做成三餐选择器,再也不用苦想今天吃什么了;可以把旅游目的地放进词库,做成旅游选择器,来场说走就走的旅行;可以把名字放进去,当成抽奖器,不用到处找了。

我已经做了一个成品打包好,只要有电脑就能用了,不用安装Python环境,可以在后台私信回复“灵感碰撞器”进行免费领取

import osimport randomimport tkinter as tkfrom tkinter import messagebox, simpledialog, Text, ttk, PhotoImage, filedialog# 定义词库文件名file_names = { 词库A: 词库A.txt, 词库B: 词库B.txt, 词库C: 词库C.txt}# 检查并创建词库文件for file_name in file_names.values(): if not os.path.exists(file_name): with open(file_name, w, encoding=utf-8) as f: pass # 创建空文件def read_file(file_name): with open(file_name, r, encoding=utf-8) as f: lines = f.readlines() return [line.strip() for line in lines if line.strip()]def write_file(file_name, phrases): with open(file_name, a, encoding=utf-8) as f: for phrase in phrases: f.write(f”{phrase}\n”)def clean_phrases(phrases): return [phrase.strip() for phrase in phrases if phrase.strip()]def add_phrases(phrases, library): file_name = file_names.get(library) if file_name: cleaned_phrases = clean_phrases(phrases) write_file(file_name, cleaned_phrases) messagebox.showinfo(“成功”, f”已成功添加 {len(cleaned_phrases)} 个词组到 {library}。”) else: messagebox.showwarning(“警告”, “请选择有效的词库(词库A/词库B/词库C)。”)def read_random_phrases(library, num_phrases): file_name = file_names.get(library) if not file_name: return f”词库 {library} 不存在,请先添加一些词组。” phrases = read_file(file_name) if len(phrases) == 0: return f”词库 {library} 为空,请先添加一些词组。” selected_phrases = random.sample(phrases, min(num_phrases, len(phrases))) return f”{library}: {, .join(selected_phrases)}def on_add_phrases(): library = library_var.get() if library and library in [词库A, 词库B, 词库C]: phrases = simpledialog.askstring(“输入词组”, “请输入要添加的词组(用空格分隔):”) if phrases: add_phrases([phrase.strip() for phrase in phrases.split()], library) else: messagebox.showwarning(“警告”, “请选择有效的词库(词库A/词库B/词库C)。”)def on_read_phrases(): libraries = [library for library, var in library_vars.items() if var.get()] num_phrases_dict = {} results = [] for library in libraries: num_phrases_str = num_phrases_vars[library].get() try: num_phrases = int(num_phrases_str) if num_phrases <= 0: raise ValueError num_phrases_dict[library] = num_phrases except ValueError: messagebox.showwarning(“警告”, f”请输入有效的词组数量(大于0)对于 {library}。”) return if not libraries: messagebox.showwarning(“警告”, “请选择至少一个词库。”) return for library, num_phrases in num_phrases_dict.items(): result = read_random_phrases(library, num_phrases) results.append(result) display_result(\n.join(results))def display_result(text): result_text.config(state=tk.NORMAL) # 启用编辑 result_text.delete(1.0, tk.END) result_text.insert(tk.END, text) result_text.config(state=tk.DISABLED) # 禁用编辑def show_usage_instructions(): usage_instructions = “””【使用说明】1. 添加词组: – 选择你要添加词组的词库(词库A、词库B 或 词库C)。 – 点击“添加词组”按钮,在弹出的对话框中输入你要添加的词组,用空格分隔多个词组。 – 点击“确定”后,词组将被添加到所选的词库中。2. 修改词库: – 进到词库所在文件件,找到对应词库文件txt,直接打开修改,注意每个词组放一行,避免空行。3. 随机读取词组: – 勾选你要读取词组的词库(词库A、词库B 或 词库C)。 – 在对应的输入框中输入你想要读取的词组数量。 – 点击“随机读取词组”按钮,结果将显示在下方的文本框中。4. 退出: – 点击“退出”按钮关闭应用程序。 “”” messagebox.showinfo(“使用说明”, usage_instructions)def show_contact_author(): global qr_label contact_info = “””【联系作者(@梦惜仙)】如果你有任何问题或建议,可以通过以下方式联系作者:– 邮箱: tzxtzxtzx@qq.com– 公众号/抖音: 诗梦零号铺– 小红书: 诗梦文案当铺没啥问题也可以帮忙关注一下~“”” contact_window = tk.Toplevel(root) contact_window.title(“联系作者@梦惜仙”) contact_window.geometry(“400×200”) label = tk.Label(contact_window, text=contact_info, justify=left, anchor=nw) label.pack(pady=10) qr_label = tk.Label(contact_window) qr_label.pack(pady=5)def open_library_folder(): folder_path = os.getcwd() try: os.startfile(folder_path) # Windows except AttributeError: try: os.system(fopen “{folder_path}) # macOS except Exception: os.system(fxdg-open “{folder_path}) # Linux# 创建主窗口root = tk.Tk()root.title(“灵感碰撞器”)root.geometry(“600×600”) # 设置窗口大小# 上方控制部分control_frame = tk.Frame(root)control_frame.pack(pady=10)# 添加词组部分tk.Label(control_frame, text=“选择词库:”).grid(row=0, column=0, padx=5, pady=5, sticky=w)library_options = [词库A, 词库B, 词库C]library_var = tk.StringVar(value=library_options[0])library_dropdown = ttk.Combobox(control_frame, textvariable=library_var, values=library_options)library_dropdown.grid(row=0, column=1, padx=5, pady=5)add_button = tk.Button(control_frame, text=“添加词组”, command=on_add_phrases)add_button.grid(row=0, column=2, padx=5, pady=5)folder_button = tk.Button(control_frame, text=“词库所在文件夹”, command=open_library_folder)folder_button.grid(row=0, column=3, padx=5, pady=5)# 中间选择词库和数量部分selection_frame = tk.Frame(root)selection_frame.pack(pady=10)tk.Label(selection_frame, text=“选择词库:”).grid(row=0, column=0, padx=5, pady=5, sticky=w)library_vars = { 词库A: tk.BooleanVar(value=True), 词库B: tk.BooleanVar(value=False), 词库C: tk.BooleanVar(value=False)}num_phrases_vars = {}for i, (library, var) in enumerate(library_vars.items()): checkbutton = tk.Checkbutton(selection_frame, text=library, variable=var) checkbutton.grid(row=i+1, column=0, padx=5, pady=5, sticky=w) num_phrases_entry = tk.Entry(selection_frame, width=5) num_phrases_entry.grid(row=i+1, column=1, padx=5, pady=5) num_phrases_vars[library] = num_phrases_entryread_button = tk.Button(selection_frame, text=“随机读取词组”, command=on_read_phrases)read_button.grid(row=len(library_vars)+1, columnspan=2, pady=5)# 右侧结果显示区域result_frame = tk.Frame(root)result_frame.pack(side=tk.RIGHT, fill=tk.BOTH, expand=True, padx=10, pady=10)result_label = tk.Label(result_frame, text=“随机读取的结果:”)result_label.pack(pady=5)result_text = Text(result_frame, height=20, width=40)result_text.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)result_text.config(wrap=tk.WORD) # 设置自动换行result_text.config(state=tk.DISABLED) # 设置为只读模式# 绑定快捷键进行复制def copy_to_clipboard(event=None): try: selected_text = result_text.get(“sel.first”, “sel.last”) root.clipboard_clear() root.clipboard_append(selected_text) root.update() # 更新剪贴板内容 except tk.TclError: messagebox.showwarning(“警告”, “请先选中文本再进行复制。”)result_text.bind(<Control-c>, copy_to_clipboard) # Windows/Linuxresult_text.bind(<Command-c>, copy_to_clipboard) # macOS# 使用说明和联系作者按钮instruction_buttons_frame = tk.Frame(root)instruction_buttons_frame.pack(pady=10)usage_button = tk.Button(instruction_buttons_frame, text=“使用说明”, command=show_usage_instructions)usage_button.pack(side=tk.LEFT, padx=5)contact_button = tk.Button(instruction_buttons_frame, text=“联系作者”, command=show_contact_author)contact_button.pack(side=tk.LEFT, padx=5)# 运行主循环root.mainloop()

关注我

多一个不会打扰的笔友

教你用AI编程丨我用AI做了一个辅助创作的工具软件教你用AI编程丨我用AI做了一个辅助创作的工具软件

梦惜仙新媒体矩阵

目前主要更新账号

公众号

诗梦零号铺

内容较杂偏个人,包含生活/社会/职场的思考。

诗梦文案运营实验室

专注新媒体运营与各类原创文案分享。

小红书

诗梦文案当铺

专注原创文案分享。

骗你是小仙女

女友人设账号。

微博

诗梦零号铺

日常大杂烩即时更新。

抖音

诗梦零号铺

内容视频化尝试。

版权声明:lida 发表于 2025年1月1日 am8:00。
转载请注明:教你用AI编程丨我用AI做了一个辅助创作的工具软件 | ChatGPT资源导航

相关文章