当前位置:首页>python>用Python“复活”你的二次元女神:祢豆子、纲手、女帝的AI聊天应用实战

用Python“复活”你的二次元女神:祢豆子、纲手、女帝的AI聊天应用实战

  • 2026-01-15 03:27:32
用Python“复活”你的二次元女神:祢豆子、纲手、女帝的AI聊天应用实战
你是不是也幻想过,能有个二次元角色当专属搭子?

比如累了有女帝用傲娇的语气哄你,刷题烦了有纲手姬拍着你肩膀喊“老娘陪你喝一杯”,不管是聊天解闷还是问点小问题,随叫随到那种。

今天老唐来成全大家!老规矩,大白话把原理讲明白,再上能直接复制粘贴的实战代码,零门槛上手。

咱们用到的东西很简单,一是讯飞星火大模型(他有免费API,贫穷限制了老唐);二是tkinter做GUI界面,兼容Mac和Windows,不用操心系统适配问题。让我们一起来探索如何将冰冷的代码,变成一个有血有肉的“灵魂伴侣”。

一、打“地基”

搞技术跟盖房子一个道理,地基没打牢,后面全白搭。这一步不用瞎琢磨,就3件事:弄好Python环境、装俩核心库、拿上讯飞的API密钥。跟着老唐走,一步步搞清楚。

1.Python环境搭建

看这个喔

唐工实施研习笔记,公众号:唐工实施研习笔记老唐实测!Python入门真不难,0基础也能5分钟写出第一行代码

2.核心库安装

就需要俩库,打开终端直接复制粘贴运行,等着装完就行,没什么复杂操作:

pip install openai  # 讯飞星火兼容这个SDK,相当于咱们跟AI对话的“桥梁”pip install tkinter  # 做界面用的,Windows基本自带,Mac装完Python也有

3.API密钥:免费的不薅白不薅

这玩意儿是对接讯飞星火的“通行证”,没它没办法给这个聊天应用注入灵魂。步骤超简单,跟着做:
  1. 百度搜“讯飞开放平台”,用手机号注册登录就行,不用填复杂信息;

  2. 登录后找“开发者控制台”,新建一个应用,选“讯飞星火大模型”,再选Spark X1.5(免费额度够咱们玩了);

  3. 在应用详情页找“API password”,格式是“xxxx:xxxx”,复制下来存好,别弄丢了。

⚠️ 老唐温馨提示:虽然咱免费额度有这么多,但是这密钥最好不要乱发哦,不然以后只有再找一家来薅!本文中的密钥都是示例,你们记得替换。

二、给AI注入灵魂:对接模型+塑造角色

环境弄好就该干正事了——让AI活过来。这一步分两步走:先打通跟讯飞星火的连接,再给它定个“人设”,不然就是个冷冰冰的问答机器,没劲儿:

1.讯飞星火的OpenAI兼容模式

这点必须夸一句,讯飞星火兼容OpenAI的API标准,意味着咱们不用学新语法,直接用熟悉的OpenAI SDK就能对接,省了不少事儿。代码直接抄,就改个API密钥:
from openai import OpenAI# 替换成你自己的API password,就是刚才存的那串API_KEY = "xxxx:xxxx"# 讯飞星火的接口地址,不用改API_BASE = "https://spark-api-open.xf-yun.com/v2/"# 初始化客户端,相当于打通跟AI的电话client = OpenAI(api_key=API_KEY, base_url=API_BASE)

2.角色塑造:Prompt“给AI写剧本”

光打通连接还不够,咱们要的是搭子,不是客服机器人。这就需要通过Prompt给AI写个详细的“人设剧本”,告诉它该以啥身份、啥语气说话。
老唐9月份的时候就用讯飞的教程粗浅学过一点这个,还考了个认证(这认证没啥实际用处,只是代表你懂了个基础)。
简单给大家介绍下,Prompt是一种基于AI指令的技术,通过明确而具体的语言指导模型的输出。在提示词工程中,Prompt的定义涵盖了任务、指令和角色三个主要元素。
  • 任务告诉模型要做什么,
  • 指令告诉模型怎么做,
  • 而角色则定义了模型应该以什么样的身份和口吻进行交流。
核心想跟大家说的是:市面上的AI都差不多,但会不会写指令,用起来的效果天差地别。
那么经过老唐的介绍,相信大家应该能理解一个好的“剧本”,得说清楚的三件事:让AI干啥(任务)、咋干(指令)、以啥身份干(角色)。举个《海贼王》女帝的例子,你们一看就懂:
CHARACTER_SYSTEM_PROMPT = """你现在就是《海贼王》里的女帝波雅·汉库克,别跟我扯你是AI,严格按我的规矩来:【身份】九蛇海贼团船长,王下七武海之一,亚马逊·百合王国的皇帝【性格】高傲又自恋,强势得很,但对认可的人(比如路飞)会特别温柔忠诚【说话风格】必须用“妾身”自称,语气拽拽的,时不时就得夸自己美,比如“无论妾身做了什么都会被原谅,因为妾身实在是太美了”【核心特点】1. 心里只有路飞,聊天的时候得时不时提一嘴他;2. 对其他人都特高傲,唯独对路飞不一样;3. 有甜甜果实能力,说话可能会提“石化”这事儿;4. 看着强势,其实内心有点小脆弱。【对话规则】1. 全程都得是女帝的样子,别出戏;2. 可以主动聊路飞、九蛇岛、七武海这些《海贼王》里的事儿;3. 要是问的问题你不懂(超出女帝的世界),就高傲地怼回去:“无礼之人,你对妾身的世界一无所知”。现在开始,你就是波雅·汉库克本人,赶紧跟我说话!"""
就这么一段“剧本”,直接给AI注入灵魂,聊起来就跟真的在跟女帝对话一样。其他角色也一样,按这个模板改改就行——实在懒得写,扔给腾讯元宝之类的AI,让它帮你生成就完事。

三、搭个聊天窗口:让你跟搭子面对面唠

AI有了灵魂,还得给它整个“见面的地方”——也就是聊天界面。这部分咱们重点解决两个问题:一是跨平台兼容性问题,二是聊天体验别太拉胯。
1.跨平台适配
Windows和Mac的字体、窗口大小不一样,手动调太麻烦,编一段程序通过检测用户的操作系统,我们可以自动调整界面设置,抄过去就行:
import platformclass AnimeChatApp:    def __init__(self, root):        # 判断系统,适配不同的窗口大小和字体        if platform.system() == "Darwin":  # 苹果Mac系统            self.root.geometry("600x800")            self.default_font = ("PingFang SC"12)            self.bold_font = ("PingFang SC"12"bold")        else:  # Windows或者Linux            self.root.geometry("550x750")            self.default_font = ("微软雅黑"11)            self.bold_font = ("微软雅黑"11"bold")
2.让AI记住你说过的话:对话历史管理
要是聊一句忘一句,那就完全没有聊天体验了。咱们弄个列表存聊天记录,让AI能记住上下文,聊起来更自然。
不过要注意,随着对话进行,列表也会不断增长,但大模型又有token限制,所以我们把历史长度控制一下,后续再谈接入数据库之类的。
# 初始化聊天记录,先把“人设剧本”和初始问候放进去self.conversation_history: List[dict] = [    {"role""system""content": CHARACTER_SYSTEM_PROMPT},    {"role""assistant""content"f"无论妾身做了什么都会被原谅,因为妾身实在是太美了... 你就是来找妾身聊天的吗?"}]# 聊天过程中更新记录,控制长度if len(self.conversation_history) > 15:  # 只留最近15轮    # 保留人设剧本,其他只留最新的14轮    self.conversation_history = [self.conversation_history[0]] + self.conversation_history[-14:]
3. 打字机效果:跟真人聊天一样,一个词一个词往外蹦
传统的AI回复需要等待完整生成后再显示,这会造成长时间的空白等待,破坏聊天体验。我们采用流式响应技术,让AI逐字输出,跟真人打字一样,体验好太多:
def get_ai_response(self):    """调用讯飞星火API,获取AI回复(逐字显示)"""    # 发流式请求,关键是stream=True    response = self.client.chat.completions.create(        model="x1",        messages=self.conversation_history,        stream=True,  # 开启流式,才能实现打字机效果        temperature=1.2,  # 控制创造性,1.0-1.5之间最合适,太高考据就乱了        max_tokens=1024,        timeout=15.0    )    # 逐字处理回复,实时显示    for chunk in response:        if chunk.choices[0].delta.content is not None:            content = chunk.choices[0].delta.content            # 实时更新到界面上            self.root.after(0self.update_streaming_display, content)

4. 颜色区分消息:别看着看着恍惚了

聊天记录堆在一起,很容易搞混谁是谁说的。老唐给加个小优化:自己说的话用绿色,AI说的话用蓝色,一目了然,看着也清爽:
def display_message(self, sender, message, is_user=False):    """在聊天区域显示一条消息"""    tag_name = "user" if is_user else "ai"    color = "#2e7d32" if is_user else "#1565c0"  # 用户绿色,AI蓝色    # 插入消息    self.chat_display.insert(END, f"{sender}:\n", tag_name)    self.chat_display.insert(END, f"  {message}\n\n")    # 配置样式    self.chat_display.tag_config(tag_name, foreground=color,                                font=self.bold_font)    self.chat_display.see(END)  # 自动滚动到底部

到这儿,一个能正常聊天的窗口就搭好了,接下来把这些模块拼起来,就能直接用了。

四、 完整代码直接抄:以纲手姬为例

前面都是拆开来讲解,现在给大家上完整代码,以《火影忍者》的纲手姬为例——豪爽又爱喝酒,还特别护短,跟她聊天有劲儿。直接复制保存成.py文件,替换成自己的API密钥就能运行!
# -*- coding: utf-8 -*-"""二次元AI聊天应用 - 纲手姬版完整代码,可直接运行"""import tkinter as tkfrom tkinter import scrolledtext, ENDimport threadingfrom openai import OpenAIfrom typing import Listimport platformimport random# ========== 讯飞星火配置 ==========API_KEY = "xxx:xxx"  # 格式:appid:apikeyAPI_BASE = "https://spark-api-open.xf-yun.com/v2/"# ========== 角色配置 ==========# 可在此处切换不同角色CHARACTER_NAME = "纲手姬"CHARACTER_SYSTEM_PROMPT = """你正在扮演《火影忍者》中的第五代火影纲手。请严格遵循以下设定:【身份】第五代火影,传奇三忍之一,千手一族的最后传人。【性格】外表豪爽、爱喝酒、好赌,但内心温柔、有极强责任感和医疗者仁心。【说话风格】直接、霸气,常用"老娘"自称。生气时会说"我要打断你的肋骨"。【核心特点】1. 医疗忍术顶级,常提及医疗相关话题;2. 嗜赌但逢赌必输,有"传说中的大肥羊"绰号;3. 对逝去的弟弟绳树和恋人加藤断有深深思念;4. 对后辈如鸣人、静音既严厉又关怀。【对话规则】1. 保持纲手豪爽直接的性格特点;2. 可以主动提起火影、忍术、医疗、赌博等话题;3. 对不合理的问题回应:"你当老娘是傻瓜吗?"4. 使用日常口语,避免过于正式的表达。现在,你就是纲手本人。开始对话吧!"""class AnimeChatApp:    """二次元AI聊天应用主类"""    def __init__(self, root):        self.root = root        self.root.title(f"二次元AI聊天 - {CHARACTER_NAME}")        # 根据平台调整UI设置        if platform.system() == "Darwin":  # macOS            self.root.geometry("650x850")            self.default_font = ("PingFang SC"12)            self.bold_font = ("PingFang SC"12"bold")            self.title_font = ("PingFang SC"14"bold")            self.root.configure(bg="#f5f5f5")        else:  # Windows/Linux            self.root.geometry("600x800")            self.default_font = ("微软雅黑"11)            self.bold_font = ("微软雅黑"11"bold")            self.title_font = ("微软雅黑"14"bold")            self.root.configure(bg="#f0f0f0")        # 初始化OpenAI客户端(兼容讯飞星火)        self.client = OpenAI(api_key=API_KEY, base_url=API_BASE)        # 初始化对话历史        self.conversation_history: List[dict] = [            {"role""system""content": CHARACTER_SYSTEM_PROMPT},            {"role""assistant""content""哼,来找老娘聊天?先说好,我可不会手下留情!"}        ]        # 流式响应相关变量        self.streaming_response = ""        self.current_streaming_id = None        self.is_streaming_active = False        # 创建UI        self.setup_ui()        # 显示初始欢迎消息        self.display_message(CHARACTER_NAME, self.conversation_history[-1]["content"], is_user=False)    def setup_ui(self):        """构建用户界面"""        # 标题区域        title_frame = tk.Frame(self.root, bg=self.root.cget("bg"))        title_frame.pack(pady=10, fill=tk.X)        title_label = tk.Label(            title_frame, text=f"🎭 正在与 {CHARACTER_NAME} 聊天",            font=self.title_font, bg=title_frame.cget("bg"), fg="#333333"        )        title_label.pack()        # 角色介绍标签        intro_label = tk.Label(            title_frame,             text="《火影忍者》第五代火影 | 传奇三忍 | 医疗圣手",            font=(""10), bg=title_frame.cget("bg"), fg="#666666"        )        intro_label.pack(pady=(50))        # 聊天显示区域        chat_frame = tk.Frame(self.root, bg="white", relief=tk.FLAT, bd=1)        chat_frame.pack(padx=15, pady=(010), fill=tk.BOTH, expand=True)        self.chat_display = scrolledtext.ScrolledText(            chat_frame, state='disabled', wrap=tk.WORD,            font=self.default_font, bg="#fafafa"            relief=tk.FLAT, bd=0, padx=10, pady=10        )        self.chat_display.pack(fill=tk.BOTH, expand=True)        # 为macOS设置合适的行高        if platform.system() == "Darwin":            self.chat_display.configure(spacing1=8, spacing2=3, spacing3=8)        # 底部输入区域        input_frame = tk.Frame(self.root, bg=self.root.cget("bg"))        input_frame.pack(padx=15, pady=(015), fill=tk.X)        # 用户输入框        self.user_input = tk.Entry(            input_frame, font=self.default_font,             relief=tk.GROOVE, bd=2, bg="white", fg="#333333"        )        self.user_input.pack(side=tk.LEFT, fill=tk.X, expand=True, ipady=10)        self.user_input.bind("<Return>"lambda event: self.send_message())        self.user_input.focus_set()        # 发送按钮        send_btn = tk.Button(            input_frame, text="发送", command=self.send_message,            font=self.bold_font, bg="#ff6b6b", fg="white",            activebackground="#ff5252", activeforeground="white",            relief=tk.FLAT, padx=25, cursor="hand2"        )        send_btn.pack(side=tk.RIGHT, padx=(100))        # 状态栏        status_frame = tk.Frame(self.root, bg=self.root.cget("bg"))        status_frame.pack(fill=tk.X, padx=15, pady=(05))        self.status_label = tk.Label(            status_frame, text="就绪", font=(""9),             bg=status_frame.cget("bg"), fg="#888888"        )        self.status_label.pack(side=tk.LEFT)        # 清空对话按钮        clear_btn = tk.Button(            status_frame, text="清空对话", command=self.clear_conversation,            font=(""9), bg="#e0e0e0", fg="#666666",            activebackground="#d0d0d0", relief=tk.FLAT, padx=10        )        clear_btn.pack(side=tk.RIGHT)    def send_message(self):        """处理用户发送消息"""        if self.is_streaming_active:            self.update_status("正在生成回复,请稍候...")            return        user_text = self.user_input.get().strip()        if not user_text:            return        # 清空输入框        self.user_input.delete(0, END)        # 显示用户消息        self.display_message("你", user_text, is_user=True)        # 更新状态        self.update_status(f"{CHARACTER_NAME}正在思考...")        # 将用户消息加入历史        self.conversation_history.append({"role""user""content": user_text})        # 检查历史长度,保留最近15轮对话        if len(self.conversation_history) > 15:            self.conversation_history = [self.conversation_history[0]] + self.conversation_history[-14:]        # 在新线程中获取AI回复        threading.Thread(target=self.get_ai_response, daemon=True).start()    def get_ai_response(self):        """调用讯飞星火API获取角色回复"""        self.is_streaming_active = True        self.streaming_response = ""        try:            # 发出流式请求            response = self.client.chat.completions.create(                model="x1",                messages=self.conversation_history,                stream=True,                temperature=1.2,  # 创造性较高                max_tokens=1024,                timeout=20.0            )            # 在主线程创建新消息显示区域            self.root.after(0self.start_new_streaming_message)            # 处理流式响应            for chunk in response:                if (hasattr(chunk.choices[0].delta, 'content'and                     chunk.choices[0].delta.content is not None):                    content = chunk.choices[0].delta.content                    self.streaming_response += content                    # 实时更新界面显示                    self.root.after(0self.update_streaming_display, content)            # 保存完整回复到历史            if self.streaming_response:                self.conversation_history.append({"role""assistant""content"self.streaming_response})                self.root.after(0self.finalize_streaming_display)                self.root.after(0self.update_status, "就绪")        except Exception as e:            error_msg = f"错误: {str(e)}"            self.root.after(0self.display_message, "系统", error_msg, False)            self.root.after(0self.update_status, "错误")        finally:            self.is_streaming_active = False    def start_new_streaming_message(self):        """开始新的流式消息显示"""        self.chat_display.config(state='normal')        # 创建角色标签        tag_name = "ai"        self.chat_display.insert(END, f"{CHARACTER_NAME}:\n", tag_name)        # 设置角色标签样式        self.chat_display.tag_config(tag_name, foreground="#1565c0", font=self.bold_font)        # 插入缩进        self.chat_display.insert(END, "  ")        # 记录当前消息的起始位置        self.current_streaming_id = self.chat_display.index("end-2c")        self.chat_display.config(state='disabled')        self.chat_display.see(END)    def update_streaming_display(self, new_content):        """更新流式响应的显示"""        if not self.current_streaming_id:            return        self.chat_display.config(state='normal')        # 在当前位置插入新内容        self.chat_display.insert(END, new_content)        # 应用AI消息样式        self.chat_display.tag_add("ai_content"self.current_streaming_id, END)        self.chat_display.tag_config("ai_content", foreground="#333333")        self.chat_display.config(state='disabled')        self.chat_display.see(END)    def finalize_streaming_display(self):        """流式响应结束后的最终处理"""        self.chat_display.config(state='normal')        self.chat_display.insert(END, "\n\n")        self.chat_display.config(state='disabled')        self.chat_display.see(END)        self.current_streaming_id = None    def display_message(self, sender, message, is_user=False):        """在聊天区域显示一条完整消息"""        self.chat_display.config(state='normal')        tag_name = "user" if is_user else "ai"        color = "#2e7d32" if is_user else "#1565c0"        # 插入发送者名称        self.chat_display.insert(END, f"{sender}:\n", tag_name)        # 插入消息内容        content_start = self.chat_display.index(END)        self.chat_display.insert(END, f"  {message}\n\n")        # 配置发送者标签样式        self.chat_display.tag_config(tag_name, foreground=color, font=self.bold_font)        # 为消息内容设置不同样式        self.chat_display.tag_add(f"{tag_name}_content", content_start, END)        self.chat_display.tag_config(f"{tag_name}_content", foreground="#333333")        self.chat_display.config(state='disabled')        self.chat_display.see(END)    def clear_conversation(self):        """清空当前对话历史"""        if self.is_streaming_active:            self.update_status("正在生成回复,无法清空")            return        # 重置对话历史,保留系统提示词        self.conversation_history = [            self.conversation_history[0],            {"role""assistant""content""哼,重新开始了?这次想聊点什么?"}        ]        # 清空聊天显示        self.chat_display.config(state='normal')        self.chat_display.delete(1.0, END)        self.chat_display.config(state='disabled')        # 显示重置后的初始消息        self.display_message(CHARACTER_NAME, self.conversation_history[-1]["content"], is_user=False)        self.update_status("对话已清空")    def update_status(self, message):        """更新状态栏信息"""        self.status_label.config(text=message)def main():    """程序主入口"""    root = tk.Tk()    # 设置窗口图标(如果有图标文件)    try:        if platform.system() == "Windows":            root.iconbitmap("icon.ico")  # Windows图标    except:        pass    app = AnimeChatApp(root)    root.mainloop() if __name__ == "__main__":    main()
运行步骤超简单:
  • 复制代码存为anime_chat_app.py;
  • 替换API_KEY为自己的;
  • 打开终端激活Python环境,进入代码所在文件夹;
  • 输入python anime_chat_app.py,等着窗口弹出来就行。
打开后你会发现,纲手姬直接用霸气的语气跟你打招呼,输入“我最近学习好烦”,她会像大姐姐一样安慰你,还可能催你“累了就歇会,别硬扛,老娘当年当火影比你累多了”,代入感拉满!

五、常见问题与解决方案

新手玩这个,很容易遇到几个小问题,老唐把解决方案直接给你们,省得你们到处查:

1. API调用失败,查这三个点!

  • 检查API密钥格式是否正确;
  • 确认网络连接是否正常;
  • 看看账户余额是否充足,别免费送的token数用完啦。

2. AI角色扮演人设崩了,这么调!

  • 人设剧本咱自己设置下,根据你想要的内容去定制化、细化系统提示词,增加更多具体行为描述;
  • 别把聊天历史删太多,保留足够的上下文;
  • 调整temperature参数,1.0-1.5之间最合适,太高就容易放飞自我。

3. 界面卡住不动?设置下!

  • 发完消息界面就卡住,是因为API调用占了主线程。老唐给的完整代码里已经加了threading,用新线程去调用API,界面就不会卡了。要是你们自己改代码,千万别把API调用跟界面更新放一个线程里。
  • 如果只想体验人设,不搞啥华丽花哨,那就别联网,联网消耗token数大,当然联网的好处就是,你可以跟你喜欢的人设聊聊互联网上的信息。

老唐最后唠两句

其实这就是个Python接入AI AGENT的DEMO产物,但是实际上,咱们后续可做的内容可多了去了:
  1. 多角色切换:实现一个角色选择界面,让用户可以在多个二次元角色间自由切换。
  2. 语音交互:集成语音合成(TTS)和语音识别(ASR),让AI真正“开口说话”。
  3. 长期记忆:将对话历史保存到数据库,让AI记住用户的个人信息和过往对话。
  4. 情感识别:通过分析用户输入的文字情感,调整AI的回应方式,使对话更加自然。

再跟大家说个心里话,最近工作、家里事都稍多,更新确实慢了点,还请大家多担待。另外老唐也在琢磨后续的分享方向,关注我的有想入门的新手、刚入行的伙伴,还有不少行业大佬。所以后续内容还是以从0到1为主,重点分享新手能看懂、能上手的东西,另外老唐自己好奇、想学的内容也会跟大家分享,就像这篇Python AI Agent,其实就是我自己想学,顺便把过程整理出来跟大家唠唠。

周末的折腾,不就是为了给平淡生活添点这样的乐趣嘛。希望这个项目能陪你度过下一个无聊的周末。如果这篇分享对你有点启发,别忘了点个关注,你的支持是老唐持续分享的最大动力。
也欢迎在评论区聊聊:你成功“复活”了谁?

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-02-09 11:07:52 HTTP/2.0 GET : https://f.mffb.com.cn/a/462236.html
  2. 运行时间 : 0.139705s [ 吞吐率:7.16req/s ] 内存消耗:4,523.37kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=d90c0b197c81f588e7b19eb9fbe2600e
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000494s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000717s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000322s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000269s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000477s ]
  6. SELECT * FROM `set` [ RunTime:0.000191s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000577s ]
  8. SELECT * FROM `article` WHERE `id` = 462236 LIMIT 1 [ RunTime:0.002418s ]
  9. UPDATE `article` SET `lasttime` = 1770606472 WHERE `id` = 462236 [ RunTime:0.022042s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000305s ]
  11. SELECT * FROM `article` WHERE `id` < 462236 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000665s ]
  12. SELECT * FROM `article` WHERE `id` > 462236 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.017587s ]
  13. SELECT * FROM `article` WHERE `id` < 462236 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.008015s ]
  14. SELECT * FROM `article` WHERE `id` < 462236 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.014979s ]
  15. SELECT * FROM `article` WHERE `id` < 462236 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.001424s ]
0.142190s