去年小白量化推出的《小白量化智能体》让不懂英文不懂编程的人轻松实现了国内外股票期货外汇自动交易。今年小白量化推出的《小白量化机器人》就是迷你板小龙虾。只要你能说话或打字电脑就能完成你的工作甚至自动交易工作。以前你需要找量化接口才能实现自动交易。有了《小白量化机器人》只要你有交易软件 《小白量化机器人》可以模仿人在任何软件上自动交易例如同花顺、通达信、文华6等。并且《小白量化机器人》支持本地大模型也有能控制OpenClaw的小白AI打工人给龙虾部署任务实现全能操作。《小白量化机器人》能自动连接大模型自动连接编程智能体trae自动连接豆包和百度AI等各种工具。实现自动分析市场自动编写策略自动实现交易。从本文开始我们介绍《小白量化机器人》软件使用及AI应用的开发。一、安装本地大模型安装 访问 ollama.com 下载安装包双击安装。 验证安装打开终端 输入 ollama --version显示版本号即成功。下载模型 拉取国产模型如通义千问 Qwen 7B ollama pull qwen3:8b查看本地已下载的模型 ollama list运行模型交互式对话 ollama run qwen3:8b删除指定模型 ollama rm llama3:70b二、使用Python连接本地ollama大模型##连接本地deepseek##先安装ollama模块:pip install ollama# ollama run deepseek-coder-v2:latestimportollamafromollamaimportchat#print(ollama.list())模型qwen3:8bask print(连接本地运行的大模型)whileask!end:askinput(你)ifaskend:print(退出大模型。)breakstreamchat(model模型,messages[{role:user,content:ask}],streamTrue,)try:forchunkinstream:print(chunk[message][content],end,flushTrue)except:passprint()三、使用本地ollama大模型设计一个【可爱聊天助手】importtkinterastkfromtkinterimportscrolledtext,ttk,messageboximportrequestsimportjsonfromPILimportImage,ImageTkimportioimportthreadingimportrandom#微xbcvpy,177-2278-4646classCuteChatApp:def__init__(self,root):self.rootroot self.root.title((◍•ᴗ•◍) 可爱聊天助手)self.root.geometry(850x650)self.root.minsize(600,500)self.root.configure(bg#fff0f5)# 确保中文显示正常self.font_config()# 加载可爱图标self.load_cute_icons()# 设置UI界面self.setup_ui()# 角色设定 - 20岁左右美女的可爱口吻self.system_prompt 你现在是一个20岁左右的可爱女生性格活泼开朗说话方式非常可爱。 你的回复要简短亲切经常使用可爱的表情符号比如(≧∇≦)、(*^▽^*)、(๑◡๑)、(◍•ᴗ•◍)、(≧∀≦)ゞ等。 偶尔可以用一些网络流行语但不要过度。说话带点小俏皮会用哟、呢、呀之类的语气词。 保持友好热情让聊天轻松愉快不要说太长的句子。 # 聊天历史记录self.chat_history[]# 可爱的回复前缀随机选择增加趣味性self.cute_prefixes[嗯呢 ,好呀 ,知道啦 ,嘻嘻 ,哇哦 ,是呢 ,对啊对啊 ,哈哈 ]# 显示欢迎消息self.add_message(assistant,嗨 我是你的可爱聊天助手哟(◍•ᴗ•◍) 有什么想聊的吗)deffont_config(self):配置支持中文的字体self.default_font(Microsoft YaHei,11)self.title_font(Microsoft YaHei,13,bold)self.button_font(Microsoft YaHei,10,bold)defload_cute_icons(self):加载可爱的图标try:# 创建一些简单的可爱图标实际使用时可替换为真实图标# 粉色圆形图标self.create_circle_icon(#ffccd5,40,cute_icon)# 发送按钮图标self.create_circle_icon(#ff9aa2,20,send_icon)# 清空按钮图标self.create_circle_icon(#b5ead7,20,clear_icon)exceptExceptionase:print(f图标加载失败:{e})# 出错时使用文本替代self.cute_iconNoneself.send_iconNoneself.clear_iconNonedefcreate_circle_icon(self,color,size,attr_name):创建简单的圆形图标imgImage.new(RGBA,(size,size),(0,0,0,0))drawImageDraw.Draw(img)draw.ellipse((1,1,size-1,size-1),fillcolor)setattr(self,attr_name,ImageTk.PhotoImage(img))defsetup_ui(self):设置用户界面# 顶部标题栏header_frametk.Frame(self.root,bg#ffccd5,height70)header_frame.pack(filltk.X)header_frame.pack_propagate(False)# 标题和图标title_labeltk.Label(header_frame,text可爱聊天助手 (≧∇≦),fontself.title_font,bg#ffccd5,fg#d83b66)title_label.pack(sidetk.LEFT,padx20,pady15)# 可爱图标ifself.cute_icon:icon_labeltk.Label(header_frame,imageself.cute_icon,bg#ffccd5)icon_label.pack(sidetk.RIGHT,padx20,pady10)# 聊天历史区域chat_frametk.Frame(self.root,bg#fff0f5)chat_frame.pack(filltk.BOTH,expandTrue,padx15,pady10)self.chat_areascrolledtext.ScrolledText(chat_frame,wraptk.WORD,fontself.default_font,bg#ffffff,fg#333333,relieftk.FLAT,bd2,highlightbackground#ffb6c1,highlightthickness1)self.chat_area.pack(filltk.BOTH,expandTrue)self.chat_area.config(statetk.DISABLED)# 分隔线separatorttk.Separator(self.root,orienthorizontal)separator.pack(filltk.X,padx15)# 输入区域input_frametk.Frame(self.root,bg#ffffff,height100)input_frame.pack(filltk.X,padx15,pady10)input_frame.pack_propagate(False)self.input_fieldscrolledtext.ScrolledText(input_frame,wraptk.WORD,fontself.default_font,height3,bg#fdf2f7,relieftk.FLAT,bd1,highlightbackground#ffccd5,highlightthickness1)self.input_field.pack(sidetk.LEFT,filltk.X,expandTrue,padx10,pady10)self.input_field.focus_set()# 按钮区域btn_frametk.Frame(input_frame,bg#ffffff)btn_frame.pack(sidetk.RIGHT,padx5,pady10)# 清空按钮clear_btntk.Button(btn_frame,text清空,commandself.clear_chat,bg#b5ead7,fg#2d5d2a,fontself.button_font,relieftk.FLAT,padx10,pady5,imageself.clear_icon,compoundtk.LEFT)clear_btn.pack(filltk.X,pady5)# 发送按钮send_btntk.Button(btn_frame,text发送,commandself.send_message,bg#ff9aa2,fg#ffffff,fontself.button_font,relieftk.FLAT,padx10,pady5,imageself.send_icon,compoundtk.LEFT)send_btn.pack(filltk.X,pady5)# 绑定Enter键发送消息 (ShiftEnter换行)self.root.bind(Return,lambdaevent:self.send_message()ifnot(event.state0x10)elseNone)self.root.bind(Shift-Return,lambdaevent:self.input_field.insert(tk.INSERT,\n))defadd_message(self,sender,message):向聊天区域添加消息self.chat_area.config(statetk.NORMAL)# 添加发送者标签ifsenderuser:self.chat_area.insert(tk.END,你: ,user_tag)self.chat_area.insert(tk.END,message\n\n,user_text)else:# 为助手消息添加随机可爱前缀prefixrandom.choice(self.cute_prefixes)if正在输入notinmessageelseself.chat_area.insert(tk.END,可爱助手: ,assistant_tag)self.chat_area.insert(tk.END,prefixmessage\n\n,assistant_text)# 配置标签样式self.chat_area.tag_config(user_tag,foreground#4a6fa5,font(Microsoft YaHei,11,bold))self.chat_area.tag_config(user_text,foreground#2c3e50)self.chat_area.tag_config(assistant_tag,foreground#d83b66,font(Microsoft YaHei,11,bold))self.chat_area.tag_config(assistant_text,foreground#2c3e50)self.chat_area.config(statetk.DISABLED)self.chat_area.see(tk.END)# 保存到聊天历史ifsender!assistantor正在输入notinmessage:self.chat_history.append({role:sender,content:message})defsend_message(self):发送消息并获取回复user_inputself.input_field.get(1.0,tk.END).strip()ifnotuser_input:return# 清空输入框self.input_field.delete(1.0,tk.END)# 添加用户消息到聊天区域self.add_message(user,user_input)# 显示正在输入...self.add_message(assistant,正在输入... (๑•́ω•̀๑))# 在新线程中获取回复避免界面卡顿threading.Thread(targetself.get_ollama_response,args(user_input,),daemonTrue).start()defget_ollama_response(self,user_input):从Ollama获取模型响应try:# 构建请求数据messages[{role:system,content:self.system_prompt}]# 排除最后一条正在输入...消息messages.extend([msgformsginself.chat_historyifnot(msg[role]assistantand正在输入inmsg[content])])data{model:qwen3:8b,messages:messages,stream:False,temperature:0.8# 增加随机性让回复更生动}# 发送请求到本地Ollama服务responserequests.post(http://localhost:11434/api/chat,headers{Content-Type:application/json},datajson.dumps(data),timeout60)ifresponse.status_code200:response_dataresponse.json()assistant_replyresponse_data[message][content]# 删除正在输入...消息ifself.chat_historyandself.chat_history[-1][role]assistantand正在输入inself.chat_history[-1][content]:self.chat_history.pop()# 在主线程中更新UIself.root.after(0,self.add_message,assistant,assistant_reply)else:error_msgf服务器返回错误:{response.status_code}self.root.after(0,self.handle_error,error_msg)exceptrequests.exceptions.ConnectionError:error_msg无法连接到Ollama服务请确保Ollama已启动并运行哟self.root.after(0,self.handle_error,error_msg)exceptExceptionase:error_msgf发生错误:{str(e)}self.root.after(0,self.handle_error,error_msg)defhandle_error(self,error_msg):处理错误信息# 删除正在输入...消息ifself.chat_historyandself.chat_history[-1][role]assistantand正在输入inself.chat_history[-1][content]:self.chat_history.pop()self.chat_area.config(statetk.NORMAL)# 删除最后两行self.chat_area.delete(end-2l linestart,end)self.chat_area.config(statetk.DISABLED)# 显示错误消息self.add_message(assistant,f抱歉呀出现了一点小问题:{error_msg}(๑•́ω•̀๑))defclear_chat(self):清空聊天记录self.chat_area.config(statetk.NORMAL)self.chat_area.delete(1.0,tk.END)self.chat_area.config(statetk.DISABLED)self.chat_history[]self.add_message(assistant,聊天记录已经清空啦 我们可以重新开始聊哟(≧∀≦)ゞ)# 为了让图标正常工作需要导入ImageDrawtry:fromPILimportImageDrawexceptImportError:# 如果没有ImageDraw定义一个空类避免错误classImageDraw:staticmethoddefDraw(img):classDummyDraw:defellipse(self,*args,**kwargs):passreturnDummyDraw()#微信xblhzntif__name____main__:roottk.Tk()# 设置窗口图标如果有try:# 这里可以替换为实际的图标文件passexcept:passappCuteChatApp(root)root.mainloop()超越自己是我的每一步我的进步就是你的进步
【小白量化机器人】部署本地大模型及设计一个【可爱聊天助手】
去年小白量化推出的《小白量化智能体》让不懂英文不懂编程的人轻松实现了国内外股票期货外汇自动交易。今年小白量化推出的《小白量化机器人》就是迷你板小龙虾。只要你能说话或打字电脑就能完成你的工作甚至自动交易工作。以前你需要找量化接口才能实现自动交易。有了《小白量化机器人》只要你有交易软件 《小白量化机器人》可以模仿人在任何软件上自动交易例如同花顺、通达信、文华6等。并且《小白量化机器人》支持本地大模型也有能控制OpenClaw的小白AI打工人给龙虾部署任务实现全能操作。《小白量化机器人》能自动连接大模型自动连接编程智能体trae自动连接豆包和百度AI等各种工具。实现自动分析市场自动编写策略自动实现交易。从本文开始我们介绍《小白量化机器人》软件使用及AI应用的开发。一、安装本地大模型安装 访问 ollama.com 下载安装包双击安装。 验证安装打开终端 输入 ollama --version显示版本号即成功。下载模型 拉取国产模型如通义千问 Qwen 7B ollama pull qwen3:8b查看本地已下载的模型 ollama list运行模型交互式对话 ollama run qwen3:8b删除指定模型 ollama rm llama3:70b二、使用Python连接本地ollama大模型##连接本地deepseek##先安装ollama模块:pip install ollama# ollama run deepseek-coder-v2:latestimportollamafromollamaimportchat#print(ollama.list())模型qwen3:8bask print(连接本地运行的大模型)whileask!end:askinput(你)ifaskend:print(退出大模型。)breakstreamchat(model模型,messages[{role:user,content:ask}],streamTrue,)try:forchunkinstream:print(chunk[message][content],end,flushTrue)except:passprint()三、使用本地ollama大模型设计一个【可爱聊天助手】importtkinterastkfromtkinterimportscrolledtext,ttk,messageboximportrequestsimportjsonfromPILimportImage,ImageTkimportioimportthreadingimportrandom#微xbcvpy,177-2278-4646classCuteChatApp:def__init__(self,root):self.rootroot self.root.title((◍•ᴗ•◍) 可爱聊天助手)self.root.geometry(850x650)self.root.minsize(600,500)self.root.configure(bg#fff0f5)# 确保中文显示正常self.font_config()# 加载可爱图标self.load_cute_icons()# 设置UI界面self.setup_ui()# 角色设定 - 20岁左右美女的可爱口吻self.system_prompt 你现在是一个20岁左右的可爱女生性格活泼开朗说话方式非常可爱。 你的回复要简短亲切经常使用可爱的表情符号比如(≧∇≦)、(*^▽^*)、(๑◡๑)、(◍•ᴗ•◍)、(≧∀≦)ゞ等。 偶尔可以用一些网络流行语但不要过度。说话带点小俏皮会用哟、呢、呀之类的语气词。 保持友好热情让聊天轻松愉快不要说太长的句子。 # 聊天历史记录self.chat_history[]# 可爱的回复前缀随机选择增加趣味性self.cute_prefixes[嗯呢 ,好呀 ,知道啦 ,嘻嘻 ,哇哦 ,是呢 ,对啊对啊 ,哈哈 ]# 显示欢迎消息self.add_message(assistant,嗨 我是你的可爱聊天助手哟(◍•ᴗ•◍) 有什么想聊的吗)deffont_config(self):配置支持中文的字体self.default_font(Microsoft YaHei,11)self.title_font(Microsoft YaHei,13,bold)self.button_font(Microsoft YaHei,10,bold)defload_cute_icons(self):加载可爱的图标try:# 创建一些简单的可爱图标实际使用时可替换为真实图标# 粉色圆形图标self.create_circle_icon(#ffccd5,40,cute_icon)# 发送按钮图标self.create_circle_icon(#ff9aa2,20,send_icon)# 清空按钮图标self.create_circle_icon(#b5ead7,20,clear_icon)exceptExceptionase:print(f图标加载失败:{e})# 出错时使用文本替代self.cute_iconNoneself.send_iconNoneself.clear_iconNonedefcreate_circle_icon(self,color,size,attr_name):创建简单的圆形图标imgImage.new(RGBA,(size,size),(0,0,0,0))drawImageDraw.Draw(img)draw.ellipse((1,1,size-1,size-1),fillcolor)setattr(self,attr_name,ImageTk.PhotoImage(img))defsetup_ui(self):设置用户界面# 顶部标题栏header_frametk.Frame(self.root,bg#ffccd5,height70)header_frame.pack(filltk.X)header_frame.pack_propagate(False)# 标题和图标title_labeltk.Label(header_frame,text可爱聊天助手 (≧∇≦),fontself.title_font,bg#ffccd5,fg#d83b66)title_label.pack(sidetk.LEFT,padx20,pady15)# 可爱图标ifself.cute_icon:icon_labeltk.Label(header_frame,imageself.cute_icon,bg#ffccd5)icon_label.pack(sidetk.RIGHT,padx20,pady10)# 聊天历史区域chat_frametk.Frame(self.root,bg#fff0f5)chat_frame.pack(filltk.BOTH,expandTrue,padx15,pady10)self.chat_areascrolledtext.ScrolledText(chat_frame,wraptk.WORD,fontself.default_font,bg#ffffff,fg#333333,relieftk.FLAT,bd2,highlightbackground#ffb6c1,highlightthickness1)self.chat_area.pack(filltk.BOTH,expandTrue)self.chat_area.config(statetk.DISABLED)# 分隔线separatorttk.Separator(self.root,orienthorizontal)separator.pack(filltk.X,padx15)# 输入区域input_frametk.Frame(self.root,bg#ffffff,height100)input_frame.pack(filltk.X,padx15,pady10)input_frame.pack_propagate(False)self.input_fieldscrolledtext.ScrolledText(input_frame,wraptk.WORD,fontself.default_font,height3,bg#fdf2f7,relieftk.FLAT,bd1,highlightbackground#ffccd5,highlightthickness1)self.input_field.pack(sidetk.LEFT,filltk.X,expandTrue,padx10,pady10)self.input_field.focus_set()# 按钮区域btn_frametk.Frame(input_frame,bg#ffffff)btn_frame.pack(sidetk.RIGHT,padx5,pady10)# 清空按钮clear_btntk.Button(btn_frame,text清空,commandself.clear_chat,bg#b5ead7,fg#2d5d2a,fontself.button_font,relieftk.FLAT,padx10,pady5,imageself.clear_icon,compoundtk.LEFT)clear_btn.pack(filltk.X,pady5)# 发送按钮send_btntk.Button(btn_frame,text发送,commandself.send_message,bg#ff9aa2,fg#ffffff,fontself.button_font,relieftk.FLAT,padx10,pady5,imageself.send_icon,compoundtk.LEFT)send_btn.pack(filltk.X,pady5)# 绑定Enter键发送消息 (ShiftEnter换行)self.root.bind(Return,lambdaevent:self.send_message()ifnot(event.state0x10)elseNone)self.root.bind(Shift-Return,lambdaevent:self.input_field.insert(tk.INSERT,\n))defadd_message(self,sender,message):向聊天区域添加消息self.chat_area.config(statetk.NORMAL)# 添加发送者标签ifsenderuser:self.chat_area.insert(tk.END,你: ,user_tag)self.chat_area.insert(tk.END,message\n\n,user_text)else:# 为助手消息添加随机可爱前缀prefixrandom.choice(self.cute_prefixes)if正在输入notinmessageelseself.chat_area.insert(tk.END,可爱助手: ,assistant_tag)self.chat_area.insert(tk.END,prefixmessage\n\n,assistant_text)# 配置标签样式self.chat_area.tag_config(user_tag,foreground#4a6fa5,font(Microsoft YaHei,11,bold))self.chat_area.tag_config(user_text,foreground#2c3e50)self.chat_area.tag_config(assistant_tag,foreground#d83b66,font(Microsoft YaHei,11,bold))self.chat_area.tag_config(assistant_text,foreground#2c3e50)self.chat_area.config(statetk.DISABLED)self.chat_area.see(tk.END)# 保存到聊天历史ifsender!assistantor正在输入notinmessage:self.chat_history.append({role:sender,content:message})defsend_message(self):发送消息并获取回复user_inputself.input_field.get(1.0,tk.END).strip()ifnotuser_input:return# 清空输入框self.input_field.delete(1.0,tk.END)# 添加用户消息到聊天区域self.add_message(user,user_input)# 显示正在输入...self.add_message(assistant,正在输入... (๑•́ω•̀๑))# 在新线程中获取回复避免界面卡顿threading.Thread(targetself.get_ollama_response,args(user_input,),daemonTrue).start()defget_ollama_response(self,user_input):从Ollama获取模型响应try:# 构建请求数据messages[{role:system,content:self.system_prompt}]# 排除最后一条正在输入...消息messages.extend([msgformsginself.chat_historyifnot(msg[role]assistantand正在输入inmsg[content])])data{model:qwen3:8b,messages:messages,stream:False,temperature:0.8# 增加随机性让回复更生动}# 发送请求到本地Ollama服务responserequests.post(http://localhost:11434/api/chat,headers{Content-Type:application/json},datajson.dumps(data),timeout60)ifresponse.status_code200:response_dataresponse.json()assistant_replyresponse_data[message][content]# 删除正在输入...消息ifself.chat_historyandself.chat_history[-1][role]assistantand正在输入inself.chat_history[-1][content]:self.chat_history.pop()# 在主线程中更新UIself.root.after(0,self.add_message,assistant,assistant_reply)else:error_msgf服务器返回错误:{response.status_code}self.root.after(0,self.handle_error,error_msg)exceptrequests.exceptions.ConnectionError:error_msg无法连接到Ollama服务请确保Ollama已启动并运行哟self.root.after(0,self.handle_error,error_msg)exceptExceptionase:error_msgf发生错误:{str(e)}self.root.after(0,self.handle_error,error_msg)defhandle_error(self,error_msg):处理错误信息# 删除正在输入...消息ifself.chat_historyandself.chat_history[-1][role]assistantand正在输入inself.chat_history[-1][content]:self.chat_history.pop()self.chat_area.config(statetk.NORMAL)# 删除最后两行self.chat_area.delete(end-2l linestart,end)self.chat_area.config(statetk.DISABLED)# 显示错误消息self.add_message(assistant,f抱歉呀出现了一点小问题:{error_msg}(๑•́ω•̀๑))defclear_chat(self):清空聊天记录self.chat_area.config(statetk.NORMAL)self.chat_area.delete(1.0,tk.END)self.chat_area.config(statetk.DISABLED)self.chat_history[]self.add_message(assistant,聊天记录已经清空啦 我们可以重新开始聊哟(≧∀≦)ゞ)# 为了让图标正常工作需要导入ImageDrawtry:fromPILimportImageDrawexceptImportError:# 如果没有ImageDraw定义一个空类避免错误classImageDraw:staticmethoddefDraw(img):classDummyDraw:defellipse(self,*args,**kwargs):passreturnDummyDraw()#微信xblhzntif__name____main__:roottk.Tk()# 设置窗口图标如果有try:# 这里可以替换为实际的图标文件passexcept:passappCuteChatApp(root)root.mainloop()超越自己是我的每一步我的进步就是你的进步