标题: 【道士答疑】今天有空,佬友有想知道的问题随便问
作者: PPY
内容: 佬友可以帮忙看一下这个吗? 这是农村老家之前装修完房子,请的一个师傅弄的,佬友可以帮忙看看这个是干啥的吗?有没有用?
时间: Tue, 24 Jun 2025 06:41:03 +0000
作者: 慧应子
回复: 佬友现在明白也不算晚,帮人是有条件的,如果帮人导致自己陷入麻烦,就成了愚善。
时间: Tue, 24 Jun 2025 06:41:25 +0000
作者: 慧应子
回复: 如果开了光就有用,普通的就算了。
时间: Tue, 24 Jun 2025 06:42:10 +0000
作者: Qgzco
回复: 谢谢道长!
时间: Tue, 24 Jun 2025 06:48:20 +0000
作者: Y
回复: 自己信念之力加持不行吗?
时间: Tue, 24 Jun 2025 06:48:41 +0000
作者: 慧应子
回复: 画这个东西的人是有功底的,画的是镇宅保平安用的。 但是从道教角度来说,这个东西正常是需要盖印的,这个没有盖印,应该是某民间先生手作。
时间: Tue, 24 Jun 2025 06:51:08 +0000
作者: 慧应子
回复: 如果自己信念力够强,佬友万事可成。
时间: Tue, 24 Jun 2025 06:52:02 +0000
作者: Stevessr
回复: 道长好。今日做梦做了数百日之前的续集……这是?(还是类似于秘境主题的
时间: Tue, 24 Jun 2025 06:52:50 +0000
作者: Y
回复: 感谢道长!
时间: Tue, 24 Jun 2025 06:53:10 +0000
作者: 慧应子
回复: 大概率是巧合,除非今天还能有续集。
时间: Tue, 24 Jun 2025 06:54:59 +0000
作者: PPY
回复: 佬友厉害,确实是民间先生手作的 感谢道长佬友的答惑
时间: Tue, 24 Jun 2025 07:15:24 +0000
作者: 慧应子
回复: 佬友福生无量天尊
时间: Tue, 24 Jun 2025 07:18:37 +0000
作者: KunKun
回复: 现在的道士是不是基本上靠白事维生
时间: Tue, 24 Jun 2025 07:19:26 +0000
作者: 慧应子
回复: 分道观和个人,道观的话靠法事,个人的话靠风水和请符,我就不一样了,我靠打工
时间: Tue, 24 Jun 2025 07:20:45 +0000
作者: KunKun
回复: 慧应子: 风水和请符 风水和请符,这种赚得多,但需要在行业内有一定影响力才行吧
时间: Tue, 24 Jun 2025 07:26:49 +0000
作者: 慧应子
回复: 也不一定要影响力,有人脉关系就行,下期准备写点关于娱乐圈的事,那些都是一掷千金的主
时间: Tue, 24 Jun 2025 07:28:41 +0000
作者: qwertynobody
回复: 真的能被借运嘛?或者能借别人的运?
时间: Tue, 24 Jun 2025 07:30:20 +0000
作者: 慧应子
回复: 能,但是反噬和费用是普通人承担不起的
时间: Tue, 24 Jun 2025 07:31:46 +0000
作者: Yolon
回复: 如何稳住气运,走好未来的路或者如何把握住十年大运,特别是现在20岁
时间: Tue, 24 Jun 2025 07:51:26 +0000
作者: 慧应子
回复: 这个话题太大。 我只能说顺势而为,做该做的事。
时间: Tue, 24 Jun 2025 08:01:48 +0000
作者: Aura丶皮皮
回复: 古语有云:不孝有三,无后为大。(虽然孟子原意不是这个意思)家里老人观念比较保守,对此比较执着。现代社会随着社会结构、家庭观念、生育观念的转变,生育成本不像以前吃饱就行,当然每个人都希望有美满幸福的家庭,但是尽孝道和对后代负责两边都是很重要的。想问一下佬,对现代这种生育观念是如何看待的?如果选择不生对个人阴德会不会有什么影响?
时间: Tue, 24 Jun 2025 08:02:39 +0000
作者: 慧应子
回复: 适者生存,不生不会有什么阴德,都绝后了还谈啥阴德?
时间: Tue, 24 Jun 2025 08:06:55 +0000
作者: Aura丶皮皮
回复: 谢谢解答。好一个适者生存。 可能阴德这个词用的不对,原意是想表达影响来世福报的意思,对道教基础不是太了解,道长见谅。 (问了AI道教的阴德的作用范围是 家族共同体 (祖先-子孙))
时间: Tue, 24 Jun 2025 09:51:38 +0000
作者: 初衷.
回复: 湿气重会导致腰疼吗?我最近腰疼的不行
时间: Tue, 24 Jun 2025 10:28:30 +0000
作者: Anyway
回复: 网传紫薇圣人那种,还有推背图这种可信吗
时间: Tue, 24 Jun 2025 10:30:35 +0000
链接: https://linux.do/t/topic/649499/825
作者: PPY
内容: 佬友可以帮忙看一下这个吗? 这是农村老家之前装修完房子,请的一个师傅弄的,佬友可以帮忙看看这个是干啥的吗?有没有用?
时间: Tue, 24 Jun 2025 06:41:03 +0000
作者: 慧应子
回复: 佬友现在明白也不算晚,帮人是有条件的,如果帮人导致自己陷入麻烦,就成了愚善。
时间: Tue, 24 Jun 2025 06:41:25 +0000
作者: 慧应子
回复: 如果开了光就有用,普通的就算了。
时间: Tue, 24 Jun 2025 06:42:10 +0000
作者: Qgzco
回复: 谢谢道长!
时间: Tue, 24 Jun 2025 06:48:20 +0000
作者: Y
回复: 自己信念之力加持不行吗?
时间: Tue, 24 Jun 2025 06:48:41 +0000
作者: 慧应子
回复: 画这个东西的人是有功底的,画的是镇宅保平安用的。 但是从道教角度来说,这个东西正常是需要盖印的,这个没有盖印,应该是某民间先生手作。
时间: Tue, 24 Jun 2025 06:51:08 +0000
作者: 慧应子
回复: 如果自己信念力够强,佬友万事可成。
时间: Tue, 24 Jun 2025 06:52:02 +0000
作者: Stevessr
回复: 道长好。今日做梦做了数百日之前的续集……这是?(还是类似于秘境主题的
时间: Tue, 24 Jun 2025 06:52:50 +0000
作者: Y
回复: 感谢道长!
时间: Tue, 24 Jun 2025 06:53:10 +0000
作者: 慧应子
回复: 大概率是巧合,除非今天还能有续集。
时间: Tue, 24 Jun 2025 06:54:59 +0000
作者: PPY
回复: 佬友厉害,确实是民间先生手作的 感谢道长佬友的答惑
时间: Tue, 24 Jun 2025 07:15:24 +0000
作者: 慧应子
回复: 佬友福生无量天尊
时间: Tue, 24 Jun 2025 07:18:37 +0000
作者: KunKun
回复: 现在的道士是不是基本上靠白事维生
时间: Tue, 24 Jun 2025 07:19:26 +0000
作者: 慧应子
回复: 分道观和个人,道观的话靠法事,个人的话靠风水和请符,我就不一样了,我靠打工
时间: Tue, 24 Jun 2025 07:20:45 +0000
作者: KunKun
回复: 慧应子: 风水和请符 风水和请符,这种赚得多,但需要在行业内有一定影响力才行吧
时间: Tue, 24 Jun 2025 07:26:49 +0000
作者: 慧应子
回复: 也不一定要影响力,有人脉关系就行,下期准备写点关于娱乐圈的事,那些都是一掷千金的主
时间: Tue, 24 Jun 2025 07:28:41 +0000
作者: qwertynobody
回复: 真的能被借运嘛?或者能借别人的运?
时间: Tue, 24 Jun 2025 07:30:20 +0000
作者: 慧应子
回复: 能,但是反噬和费用是普通人承担不起的
时间: Tue, 24 Jun 2025 07:31:46 +0000
作者: Yolon
回复: 如何稳住气运,走好未来的路或者如何把握住十年大运,特别是现在20岁
时间: Tue, 24 Jun 2025 07:51:26 +0000
作者: 慧应子
回复: 这个话题太大。 我只能说顺势而为,做该做的事。
时间: Tue, 24 Jun 2025 08:01:48 +0000
作者: Aura丶皮皮
回复: 古语有云:不孝有三,无后为大。(虽然孟子原意不是这个意思)家里老人观念比较保守,对此比较执着。现代社会随着社会结构、家庭观念、生育观念的转变,生育成本不像以前吃饱就行,当然每个人都希望有美满幸福的家庭,但是尽孝道和对后代负责两边都是很重要的。想问一下佬,对现代这种生育观念是如何看待的?如果选择不生对个人阴德会不会有什么影响?
时间: Tue, 24 Jun 2025 08:02:39 +0000
作者: 慧应子
回复: 适者生存,不生不会有什么阴德,都绝后了还谈啥阴德?
时间: Tue, 24 Jun 2025 08:06:55 +0000
作者: Aura丶皮皮
回复: 谢谢解答。好一个适者生存。 可能阴德这个词用的不对,原意是想表达影响来世福报的意思,对道教基础不是太了解,道长见谅。 (问了AI道教的阴德的作用范围是 家族共同体 (祖先-子孙))
时间: Tue, 24 Jun 2025 09:51:38 +0000
作者: 初衷.
回复: 湿气重会导致腰疼吗?我最近腰疼的不行
时间: Tue, 24 Jun 2025 10:28:30 +0000
作者: Anyway
回复: 网传紫薇圣人那种,还有推背图这种可信吗
时间: Tue, 24 Jun 2025 10:30:35 +0000
链接: https://linux.do/t/topic/649499/825
LINUX DO
【道士答疑】今天有空,佬友有想知道的问题随便问
能,但是反噬和费用是普通人承担不起的
标题: 【道士答疑】今天有空,佬友有想知道的问题随便问
作者: PPY
内容: 佬友可以帮忙看一下这个吗? 这是农村老家之前装修完房子,请的一个师傅弄的,佬友可以帮忙看看这个是干啥的吗?有没有用?
时间: Tue, 24 Jun 2025 06:41:03 +0000
作者: 慧应子
回复: 佬友现在明白也不算晚,帮人是有条件的,如果帮人导致自己陷入麻烦,就成了愚善。
时间: Tue, 24 Jun 2025 06:41:25 +0000
作者: 慧应子
回复: 如果开了光就有用,普通的就算了。
时间: Tue, 24 Jun 2025 06:42:10 +0000
作者: Qgzco
回复: 谢谢道长!
时间: Tue, 24 Jun 2025 06:48:20 +0000
作者: Y
回复: 自己信念之力加持不行吗?
时间: Tue, 24 Jun 2025 06:48:41 +0000
作者: 慧应子
回复: 画这个东西的人是有功底的,画的是镇宅保平安用的。 但是从道教角度来说,这个东西正常是需要盖印的,这个没有盖印,应该是某民间先生手作。
时间: Tue, 24 Jun 2025 06:51:08 +0000
作者: 慧应子
回复: 如果自己信念力够强,佬友万事可成。
时间: Tue, 24 Jun 2025 06:52:02 +0000
作者: Stevessr
回复: 道长好。今日做梦做了数百日之前的续集……这是?(还是类似于秘境主题的
时间: Tue, 24 Jun 2025 06:52:50 +0000
作者: Y
回复: 感谢道长!
时间: Tue, 24 Jun 2025 06:53:10 +0000
作者: 慧应子
回复: 大概率是巧合,除非今天还能有续集。
时间: Tue, 24 Jun 2025 06:54:59 +0000
作者: PPY
回复: 佬友厉害,确实是民间先生手作的 感谢道长佬友的答惑
时间: Tue, 24 Jun 2025 07:15:24 +0000
作者: 慧应子
回复: 佬友福生无量天尊
时间: Tue, 24 Jun 2025 07:18:37 +0000
作者: KunKun
回复: 现在的道士是不是基本上靠白事维生
时间: Tue, 24 Jun 2025 07:19:26 +0000
作者: 慧应子
回复: 分道观和个人,道观的话靠法事,个人的话靠风水和请符,我就不一样了,我靠打工
时间: Tue, 24 Jun 2025 07:20:45 +0000
作者: KunKun
回复: 慧应子: 风水和请符 风水和请符,这种赚得多,但需要在行业内有一定影响力才行吧
时间: Tue, 24 Jun 2025 07:26:49 +0000
作者: 慧应子
回复: 也不一定要影响力,有人脉关系就行,下期准备写点关于娱乐圈的事,那些都是一掷千金的主
时间: Tue, 24 Jun 2025 07:28:41 +0000
作者: qwertynobody
回复: 真的能被借运嘛?或者能借别人的运?
时间: Tue, 24 Jun 2025 07:30:20 +0000
作者: 慧应子
回复: 能,但是反噬和费用是普通人承担不起的
时间: Tue, 24 Jun 2025 07:31:46 +0000
作者: Yolon
回复: 如何稳住气运,走好未来的路或者如何把握住十年大运,特别是现在20岁
时间: Tue, 24 Jun 2025 07:51:26 +0000
作者: 慧应子
回复: 这个话题太大。 我只能说顺势而为,做该做的事。
时间: Tue, 24 Jun 2025 08:01:48 +0000
作者: Aura丶皮皮
回复: 古语有云:不孝有三,无后为大。(虽然孟子原意不是这个意思)家里老人观念比较保守,对此比较执着。现代社会随着社会结构、家庭观念、生育观念的转变,生育成本不像以前吃饱就行,当然每个人都希望有美满幸福的家庭,但是尽孝道和对后代负责两边都是很重要的。想问一下佬,对现代这种生育观念是如何看待的?如果选择不生对个人阴德会不会有什么影响?
时间: Tue, 24 Jun 2025 08:02:39 +0000
作者: 慧应子
回复: 适者生存,不生不会有什么阴德,都绝后了还谈啥阴德?
时间: Tue, 24 Jun 2025 08:06:55 +0000
链接: https://linux.do/t/topic/649499/822
作者: PPY
内容: 佬友可以帮忙看一下这个吗? 这是农村老家之前装修完房子,请的一个师傅弄的,佬友可以帮忙看看这个是干啥的吗?有没有用?
时间: Tue, 24 Jun 2025 06:41:03 +0000
作者: 慧应子
回复: 佬友现在明白也不算晚,帮人是有条件的,如果帮人导致自己陷入麻烦,就成了愚善。
时间: Tue, 24 Jun 2025 06:41:25 +0000
作者: 慧应子
回复: 如果开了光就有用,普通的就算了。
时间: Tue, 24 Jun 2025 06:42:10 +0000
作者: Qgzco
回复: 谢谢道长!
时间: Tue, 24 Jun 2025 06:48:20 +0000
作者: Y
回复: 自己信念之力加持不行吗?
时间: Tue, 24 Jun 2025 06:48:41 +0000
作者: 慧应子
回复: 画这个东西的人是有功底的,画的是镇宅保平安用的。 但是从道教角度来说,这个东西正常是需要盖印的,这个没有盖印,应该是某民间先生手作。
时间: Tue, 24 Jun 2025 06:51:08 +0000
作者: 慧应子
回复: 如果自己信念力够强,佬友万事可成。
时间: Tue, 24 Jun 2025 06:52:02 +0000
作者: Stevessr
回复: 道长好。今日做梦做了数百日之前的续集……这是?(还是类似于秘境主题的
时间: Tue, 24 Jun 2025 06:52:50 +0000
作者: Y
回复: 感谢道长!
时间: Tue, 24 Jun 2025 06:53:10 +0000
作者: 慧应子
回复: 大概率是巧合,除非今天还能有续集。
时间: Tue, 24 Jun 2025 06:54:59 +0000
作者: PPY
回复: 佬友厉害,确实是民间先生手作的 感谢道长佬友的答惑
时间: Tue, 24 Jun 2025 07:15:24 +0000
作者: 慧应子
回复: 佬友福生无量天尊
时间: Tue, 24 Jun 2025 07:18:37 +0000
作者: KunKun
回复: 现在的道士是不是基本上靠白事维生
时间: Tue, 24 Jun 2025 07:19:26 +0000
作者: 慧应子
回复: 分道观和个人,道观的话靠法事,个人的话靠风水和请符,我就不一样了,我靠打工
时间: Tue, 24 Jun 2025 07:20:45 +0000
作者: KunKun
回复: 慧应子: 风水和请符 风水和请符,这种赚得多,但需要在行业内有一定影响力才行吧
时间: Tue, 24 Jun 2025 07:26:49 +0000
作者: 慧应子
回复: 也不一定要影响力,有人脉关系就行,下期准备写点关于娱乐圈的事,那些都是一掷千金的主
时间: Tue, 24 Jun 2025 07:28:41 +0000
作者: qwertynobody
回复: 真的能被借运嘛?或者能借别人的运?
时间: Tue, 24 Jun 2025 07:30:20 +0000
作者: 慧应子
回复: 能,但是反噬和费用是普通人承担不起的
时间: Tue, 24 Jun 2025 07:31:46 +0000
作者: Yolon
回复: 如何稳住气运,走好未来的路或者如何把握住十年大运,特别是现在20岁
时间: Tue, 24 Jun 2025 07:51:26 +0000
作者: 慧应子
回复: 这个话题太大。 我只能说顺势而为,做该做的事。
时间: Tue, 24 Jun 2025 08:01:48 +0000
作者: Aura丶皮皮
回复: 古语有云:不孝有三,无后为大。(虽然孟子原意不是这个意思)家里老人观念比较保守,对此比较执着。现代社会随着社会结构、家庭观念、生育观念的转变,生育成本不像以前吃饱就行,当然每个人都希望有美满幸福的家庭,但是尽孝道和对后代负责两边都是很重要的。想问一下佬,对现代这种生育观念是如何看待的?如果选择不生对个人阴德会不会有什么影响?
时间: Tue, 24 Jun 2025 08:02:39 +0000
作者: 慧应子
回复: 适者生存,不生不会有什么阴德,都绝后了还谈啥阴德?
时间: Tue, 24 Jun 2025 08:06:55 +0000
链接: https://linux.do/t/topic/649499/822
LINUX DO
【道士答疑】今天有空,佬友有想知道的问题随便问
能,但是反噬和费用是普通人承担不起的
标题: 利用AI大模型做一个用户画像分析工具
作者: liangdabiao
内容: 这是一个针对小红书帖子评论进行AI大模型分析的项目。利用AI对评论进行多维度的数据分析。操作流程为:用户利用easy scraper浏览器插件爬取小红书帖子评论,然后直接上传csv文件到系统,系统进行评论分析,然后提供下载链接,下载更新的带有评论分析的csv文件,得到AI分析的用户画像。 运行中: 每一个review 标签分析得到的json: { “人群场景”: { “用户需求与痛点-使用场景”: [ “汽车爱好者”, “儿童玩乐”, “成人收藏”, “节日礼物” ], “用户需求与痛点-购买动机”: [ “价格优势”, “设计喜欢”, “替代乐高” ] }, “功能价值”: { “产品反馈-产品优点”: [ “零件齐全”, “组装容易”, “设计精美”, “功能多样”, “细节丰富” ], “产品反馈-产品缺点”: [ “零件缺失”, “零件松动”, “组装困难”, “指示不明”, “零件变形”, “零件质量差” ], “产品反馈-用户期望建议”: [ “优化指示”, “提升质量”, “改进包装” ], “产品反馈-设计与外观”: [ “整体造型”, “内部细节”, “颜色搭配” ] }, “保障价值”: { “服务评价-物流配送”: [ “配送速度” ], “服务评价-售后服务”: [ “补发零件”, “退款处理” ], “服务评价-售前服务”: [ “信息咨询” ] }, “体验价值”: { “品牌形象与口碑-推荐意愿原因分析”: [ “性价比高”, “组装乐趣” ], “品牌形象与口碑-是否愿意推荐给他人”: [ “是”, “否” ], “品牌形象与口碑-品牌印象”: [ “质量一般”, “价格实惠” ], “感官感受”: [ “外观美感”, “零件质感” ], “价格感知”: [ “价格合理”, “价格昂贵” ] } } 评论 分析界面: 可视化统计分析: 用户画像分析: 根据这些商品评论内容,可以推测出以下几个典型用户画像。每个画像都基于用户行为、需求、购买动机等信息,做出了分析: 用户画像 1: 陈皮爱好者 - 李女士, 32岁,广东中山,家庭主妇 性别年龄估计:女性,32岁 需求关键词:寻找正宗新会陈皮、品质保证、鉴别真假 购买动机:李女士关注陈皮的正宗与品质,对市面上真假参半的产品尤为敏感。她希望购买到的陈皮能够带来实际的健康益处,并且对价格和来源有明确要求。 情绪语气判断:在评论中表现出谨慎且认真的态度,尤其关注商品的真实性和来源。 用户画像标签:注重健康、喜欢传统食品、购买时重视品牌与来源。 用户画像 2: 慢品生活者 - 张先生, 45岁,上海,企业中层管理 性别年龄估计:男性,45岁 需求关键词:高品质陈皮、健康养生、深度了解产品 购买动机:张先生购买陈皮主要出于健康目的,喜欢通过了解陈皮的历史、储存方法和产地,确保自己购买的是高质量的产品。他注重慢生活和传统的养生方法。 情绪语气判断:评论中显得耐心且富有思考,喜欢对比不同来源的陈皮,偶尔提出对陈皮品种和仓储环境的疑问。 用户画像标签:注重养生、喜欢品味慢生活、对传统工艺有浓厚兴趣。 用户画像 3: 新会陈皮新手 - 王女士, 28岁,广州,白领 性别年龄估计:女性,28岁 需求关键词:新会陈皮、新品尝试、了解陈皮功效 购买动机:王女士最近开始关注陈皮,尤其是来自新会的正宗陈皮,购买时希望了解产品的真实情况及其健康功效。她也会对比不同平台的评论和商品描述来做决策。 情绪语气判断:评论中透露出对陈皮的好奇和试探,尝试了解更多信息,询问他人意见时带有轻松与求知欲。 用户画像标签:年轻白领、健康关注者、愿意尝试新产品。 用户画像 4: 资深购买者 - 陈先生, 50岁,珠海,商人 性别年龄估计:男性,50岁 需求关键词:高性价比陈皮、长期购买、品牌选择 购买动机:陈先生拥有丰富的陈皮购买经验,他更注重产品的性价比和长期使用效果。他已经通过朋友和评论了解陈皮的优劣,主要购买用于日常养生。 情绪语气判断:评论中表现出更多的理性和经验分享,关注产品的性价比、外观和实际效果。 用户画像标签:资深消费者、注重实用、价格敏感、健康养生。 用户画像 5: 实用主义者 - 刘女士, 38岁,武汉,医生 性别年龄估计:女性,38岁 需求关键词:实用陈皮、品质与功效、简单直接 购买动机:刘女士作为医生,她更加注重购买具有实际功效的陈皮,特别是那些能够帮助调节身体的产品。她对于陈皮的用途和功效有明确的需求,希望买到的是经过严格筛选和测试的产品。 情绪语气判断:评论语气严谨,表现出专业性的考虑,关注产品的真实性与可靠性。 用户画像标签:专业背景、理性购买、注重健康效益。 这些用户画像反映了不同年龄、职业背景以及对陈皮的兴趣和需求。在分析时,我们结合了他们对商品的评价、购买动机及情绪反应,从而为每个用户画像提供了较为详细的背景。 用户画像的提示语: """# 你是一名用户画像分析师。 分析需求和概念: 基础属性描述 用户的静态人口统计学特征。 示例:- 年龄:28岁 - 性别:女性 - 地理位置:上海 - 职业:全职妈妈 行为特征描述 用户的实际行为轨迹,体现用户“做了什么”。 示例标签:- 月消费金额:2000元 - 购买频率:每月购买4次母婴用品 - 心理动机描述 用户行为背后的动机、价值观和偏好,体现“为什么这么做”。 示例:- 对促销活动敏感:对满减和赠品活动高度关注 - 品牌偏好:倾向选择国际知名母婴品牌 - 商品安全性:重视商品成分和评价 外部环境描述用户所处的社会环境和关系网络,体现外部影响因素。 示例:- 社交圈:经常与其他宝妈分享购物心得 - 活跃平台:微博、母婴论坛、 需求痛点 明确用户的核心需求和主要问题,帮助定义用户的关键目标。 示例:- 需求:寻找高品质、高性价比的母婴用品 - 痛点:缺乏时间,偏好快速送达 - 期待:希望平台提供可信赖的商品评价体系 以上是用户画像的概念之后,请完成做一份用户画像分析报告。请根据以下 商品评论生成3-5个典型用户画像,每个包含性别年龄估计、需求关键词、购买动机、情绪语气判断 和用户画像标签 请你根据这些信息,反推出用户画像: #####, {reviews_alls_string} ##### """ 又例如分析最近很热的labubu,它的用户画像会是怎样: 说明: 性别年龄范围:标识目标用户的基本人口统计特征。 需求关键词:用户购买时关注的核心需求点。 购买动机:驱动用户购买行为的深层原因。 情感基调:用户在购买或使用过程中的情感状态。 标签:对用户群体的分类和描述。 这种表格形式能更直观地对比不同用户群体的特征和差异。 开源 github: 代码已经开源,github地址:GitHub - liangdabiao/easy-amazon-voc: 针对amazon商品评论进行AI大模型多维度分析
时间: Mon, 23 Jun 2025 01:07:18 +0000
作者: 憨憨和Nike
回复: 感谢分享
时间: Mon, 23 Jun 2025 01:10:47 +0000
作者: 大帅哥
回复: 感谢大佬
时间: Mon, 23 Jun 2025 01:20:23 +0000
作者: PLA81
回复: 感谢大佬分享
时间: Mon, 23 Jun 2025 01:59:51 +0000
作者: 65
回复: aigc请发图呢ww
时间: Mon, 23 Jun 2025 02:00:33 +0000
作者: PeakGao
回复: 感谢分享
时间: Mon, 23 Jun 2025 02:30:07 +0000
作者: yan
回复: 感谢大佬
时间: Mon, 23 Jun 2025 02:30:46 +0000
作者: kusoft
回复: 厉害呢,开源更牛!
时间: Mon, 23 Jun 2025 02:37:05 +0000
作者: BC
回复: 這個有用
时间: Tue, 24 Jun 2025 03:23:45 +0000
作者: onezerotwofourzero
回复: 感谢热佬分享!
时间: Tue, 24 Jun 2025 08:47:39 +0000
作者: zmzdmx
回复: 这个好 正好需要
时间: Tue, 24 Jun 2025 10:35:27 +0000
链接: https://linux.do/t/topic/744043/11
作者: liangdabiao
内容: 这是一个针对小红书帖子评论进行AI大模型分析的项目。利用AI对评论进行多维度的数据分析。操作流程为:用户利用easy scraper浏览器插件爬取小红书帖子评论,然后直接上传csv文件到系统,系统进行评论分析,然后提供下载链接,下载更新的带有评论分析的csv文件,得到AI分析的用户画像。 运行中: 每一个review 标签分析得到的json: { “人群场景”: { “用户需求与痛点-使用场景”: [ “汽车爱好者”, “儿童玩乐”, “成人收藏”, “节日礼物” ], “用户需求与痛点-购买动机”: [ “价格优势”, “设计喜欢”, “替代乐高” ] }, “功能价值”: { “产品反馈-产品优点”: [ “零件齐全”, “组装容易”, “设计精美”, “功能多样”, “细节丰富” ], “产品反馈-产品缺点”: [ “零件缺失”, “零件松动”, “组装困难”, “指示不明”, “零件变形”, “零件质量差” ], “产品反馈-用户期望建议”: [ “优化指示”, “提升质量”, “改进包装” ], “产品反馈-设计与外观”: [ “整体造型”, “内部细节”, “颜色搭配” ] }, “保障价值”: { “服务评价-物流配送”: [ “配送速度” ], “服务评价-售后服务”: [ “补发零件”, “退款处理” ], “服务评价-售前服务”: [ “信息咨询” ] }, “体验价值”: { “品牌形象与口碑-推荐意愿原因分析”: [ “性价比高”, “组装乐趣” ], “品牌形象与口碑-是否愿意推荐给他人”: [ “是”, “否” ], “品牌形象与口碑-品牌印象”: [ “质量一般”, “价格实惠” ], “感官感受”: [ “外观美感”, “零件质感” ], “价格感知”: [ “价格合理”, “价格昂贵” ] } } 评论 分析界面: 可视化统计分析: 用户画像分析: 根据这些商品评论内容,可以推测出以下几个典型用户画像。每个画像都基于用户行为、需求、购买动机等信息,做出了分析: 用户画像 1: 陈皮爱好者 - 李女士, 32岁,广东中山,家庭主妇 性别年龄估计:女性,32岁 需求关键词:寻找正宗新会陈皮、品质保证、鉴别真假 购买动机:李女士关注陈皮的正宗与品质,对市面上真假参半的产品尤为敏感。她希望购买到的陈皮能够带来实际的健康益处,并且对价格和来源有明确要求。 情绪语气判断:在评论中表现出谨慎且认真的态度,尤其关注商品的真实性和来源。 用户画像标签:注重健康、喜欢传统食品、购买时重视品牌与来源。 用户画像 2: 慢品生活者 - 张先生, 45岁,上海,企业中层管理 性别年龄估计:男性,45岁 需求关键词:高品质陈皮、健康养生、深度了解产品 购买动机:张先生购买陈皮主要出于健康目的,喜欢通过了解陈皮的历史、储存方法和产地,确保自己购买的是高质量的产品。他注重慢生活和传统的养生方法。 情绪语气判断:评论中显得耐心且富有思考,喜欢对比不同来源的陈皮,偶尔提出对陈皮品种和仓储环境的疑问。 用户画像标签:注重养生、喜欢品味慢生活、对传统工艺有浓厚兴趣。 用户画像 3: 新会陈皮新手 - 王女士, 28岁,广州,白领 性别年龄估计:女性,28岁 需求关键词:新会陈皮、新品尝试、了解陈皮功效 购买动机:王女士最近开始关注陈皮,尤其是来自新会的正宗陈皮,购买时希望了解产品的真实情况及其健康功效。她也会对比不同平台的评论和商品描述来做决策。 情绪语气判断:评论中透露出对陈皮的好奇和试探,尝试了解更多信息,询问他人意见时带有轻松与求知欲。 用户画像标签:年轻白领、健康关注者、愿意尝试新产品。 用户画像 4: 资深购买者 - 陈先生, 50岁,珠海,商人 性别年龄估计:男性,50岁 需求关键词:高性价比陈皮、长期购买、品牌选择 购买动机:陈先生拥有丰富的陈皮购买经验,他更注重产品的性价比和长期使用效果。他已经通过朋友和评论了解陈皮的优劣,主要购买用于日常养生。 情绪语气判断:评论中表现出更多的理性和经验分享,关注产品的性价比、外观和实际效果。 用户画像标签:资深消费者、注重实用、价格敏感、健康养生。 用户画像 5: 实用主义者 - 刘女士, 38岁,武汉,医生 性别年龄估计:女性,38岁 需求关键词:实用陈皮、品质与功效、简单直接 购买动机:刘女士作为医生,她更加注重购买具有实际功效的陈皮,特别是那些能够帮助调节身体的产品。她对于陈皮的用途和功效有明确的需求,希望买到的是经过严格筛选和测试的产品。 情绪语气判断:评论语气严谨,表现出专业性的考虑,关注产品的真实性与可靠性。 用户画像标签:专业背景、理性购买、注重健康效益。 这些用户画像反映了不同年龄、职业背景以及对陈皮的兴趣和需求。在分析时,我们结合了他们对商品的评价、购买动机及情绪反应,从而为每个用户画像提供了较为详细的背景。 用户画像的提示语: """# 你是一名用户画像分析师。 分析需求和概念: 基础属性描述 用户的静态人口统计学特征。 示例:- 年龄:28岁 - 性别:女性 - 地理位置:上海 - 职业:全职妈妈 行为特征描述 用户的实际行为轨迹,体现用户“做了什么”。 示例标签:- 月消费金额:2000元 - 购买频率:每月购买4次母婴用品 - 心理动机描述 用户行为背后的动机、价值观和偏好,体现“为什么这么做”。 示例:- 对促销活动敏感:对满减和赠品活动高度关注 - 品牌偏好:倾向选择国际知名母婴品牌 - 商品安全性:重视商品成分和评价 外部环境描述用户所处的社会环境和关系网络,体现外部影响因素。 示例:- 社交圈:经常与其他宝妈分享购物心得 - 活跃平台:微博、母婴论坛、 需求痛点 明确用户的核心需求和主要问题,帮助定义用户的关键目标。 示例:- 需求:寻找高品质、高性价比的母婴用品 - 痛点:缺乏时间,偏好快速送达 - 期待:希望平台提供可信赖的商品评价体系 以上是用户画像的概念之后,请完成做一份用户画像分析报告。请根据以下 商品评论生成3-5个典型用户画像,每个包含性别年龄估计、需求关键词、购买动机、情绪语气判断 和用户画像标签 请你根据这些信息,反推出用户画像: #####, {reviews_alls_string} ##### """ 又例如分析最近很热的labubu,它的用户画像会是怎样: 说明: 性别年龄范围:标识目标用户的基本人口统计特征。 需求关键词:用户购买时关注的核心需求点。 购买动机:驱动用户购买行为的深层原因。 情感基调:用户在购买或使用过程中的情感状态。 标签:对用户群体的分类和描述。 这种表格形式能更直观地对比不同用户群体的特征和差异。 开源 github: 代码已经开源,github地址:GitHub - liangdabiao/easy-amazon-voc: 针对amazon商品评论进行AI大模型多维度分析
时间: Mon, 23 Jun 2025 01:07:18 +0000
作者: 憨憨和Nike
回复: 感谢分享
时间: Mon, 23 Jun 2025 01:10:47 +0000
作者: 大帅哥
回复: 感谢大佬
时间: Mon, 23 Jun 2025 01:20:23 +0000
作者: PLA81
回复: 感谢大佬分享
时间: Mon, 23 Jun 2025 01:59:51 +0000
作者: 65
回复: aigc请发图呢ww
时间: Mon, 23 Jun 2025 02:00:33 +0000
作者: PeakGao
回复: 感谢分享
时间: Mon, 23 Jun 2025 02:30:07 +0000
作者: yan
回复: 感谢大佬
时间: Mon, 23 Jun 2025 02:30:46 +0000
作者: kusoft
回复: 厉害呢,开源更牛!
时间: Mon, 23 Jun 2025 02:37:05 +0000
作者: BC
回复: 這個有用
时间: Tue, 24 Jun 2025 03:23:45 +0000
作者: onezerotwofourzero
回复: 感谢热佬分享!
时间: Tue, 24 Jun 2025 08:47:39 +0000
作者: zmzdmx
回复: 这个好 正好需要
时间: Tue, 24 Jun 2025 10:35:27 +0000
链接: https://linux.do/t/topic/744043/11
LINUX DO
利用AI大模型做一个用户画像分析工具
这是一个针对小红书帖子评论进行AI大模型分析的项目。利用AI对评论进行多维度的数据分析。操作流程为:用户利用easy scraper浏览器插件爬取小红书帖子评论,然后直接上传csv文件到系统,系统进行评论分析,然后提供下载链接,下载更新的带有评论分析的csv文件,得到AI分析的用户画像。 运行中: 每一个review 标签分析得到的json: { “人群场景”: { “用户需求与痛点-使用场景”: [ “汽车爱好者”, “儿童玩乐”, “成人收藏”, “节日礼物” ], “用户需求与痛点…
标题: 请问一下哪家国内IP代理最便宜?
作者: QZ
内容: 请问一下哪家国内IP代理最便宜? 最好是长效的。
时间: Tue, 24 Jun 2025 10:21:52 +0000
作者: linjinpeng
回复: 免费的去fofo抓
时间: Tue, 24 Jun 2025 10:22:19 +0000
作者: cknight
回复: https://linux.do/t/topic/745642 这个自己部署下就有了
时间: Tue, 24 Jun 2025 10:27:11 +0000
作者: 猫猫
回复: 主题帖说的好像是国内代理吧,你这个是抓机场的啊
时间: Tue, 24 Jun 2025 10:28:53 +0000
作者: cknight
回复: 看错,当我没发
时间: Tue, 24 Jun 2025 10:29:26 +0000
作者: LiLaoMo
回复: 长效的太贵了。
时间: Tue, 24 Jun 2025 10:34:55 +0000
作者: 爱折腾的sky
回复: 长效只能自建了
时间: Tue, 24 Jun 2025 10:35:43 +0000
链接: https://linux.do/t/topic/747281/7
作者: QZ
内容: 请问一下哪家国内IP代理最便宜? 最好是长效的。
时间: Tue, 24 Jun 2025 10:21:52 +0000
作者: linjinpeng
回复: 免费的去fofo抓
时间: Tue, 24 Jun 2025 10:22:19 +0000
作者: cknight
回复: https://linux.do/t/topic/745642 这个自己部署下就有了
时间: Tue, 24 Jun 2025 10:27:11 +0000
作者: 猫猫
回复: 主题帖说的好像是国内代理吧,你这个是抓机场的啊
时间: Tue, 24 Jun 2025 10:28:53 +0000
作者: cknight
回复: 看错,当我没发
时间: Tue, 24 Jun 2025 10:29:26 +0000
作者: LiLaoMo
回复: 长效的太贵了。
时间: Tue, 24 Jun 2025 10:34:55 +0000
作者: 爱折腾的sky
回复: 长效只能自建了
时间: Tue, 24 Jun 2025 10:35:43 +0000
链接: https://linux.do/t/topic/747281/7
LINUX DO
请问一下哪家国内IP代理最便宜?
请问一下哪家国内IP代理最便宜? 💕 最好是长效的。
标题: roocode中Connection error.求解?
作者: 一杯白开水
内容: 在cursor中使用roocode原本好好的,忽然就提示"Connection error.",不管我卸载扩展重装,cursor也同样卸载重装,错误依旧,连接任何模型都是提示Connection error. 但是同样在vscode使用却全部正常,端点还是那个端点,模型还是那个模型… 这个什么原因,花了一个小时多还是没办法解决…求佬帮忙 好奇怪的错误
时间: Tue, 24 Jun 2025 10:28:22 +0000
链接: https://linux.do/t/topic/747287/1
作者: 一杯白开水
内容: 在cursor中使用roocode原本好好的,忽然就提示"Connection error.",不管我卸载扩展重装,cursor也同样卸载重装,错误依旧,连接任何模型都是提示Connection error. 但是同样在vscode使用却全部正常,端点还是那个端点,模型还是那个模型… 这个什么原因,花了一个小时多还是没办法解决…求佬帮忙 好奇怪的错误
时间: Tue, 24 Jun 2025 10:28:22 +0000
链接: https://linux.do/t/topic/747287/1
LINUX DO
roocode中Connection error.求解?
在cursor中使用roocode原本好好的,忽然就提示"Connection error.",不管我卸载扩展重装,cursor也同样卸载重装,错误依旧,连接任何模型都是提示Connection error. 但是同样在vscode使用却全部正常,端点还是那个端点,模型还是那个模型… 这个什么原因,花了一个小时多还是没办法解决…求佬帮忙
标题: All Model Chat更新:增加HTML预览功能,内置Canvas提示词
作者: Mozi
内容: All Model Chat Canvas助手(推荐2.5 Pro):让模型用HTML回复,支持Graphviz逻辑流程图、Echarts图表 开发调优 体验地址 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>Canvas 助手</title> <script>MathJax={chtml:{fontURL:'h…
时间: Tue, 24 Jun 2025 09:51:30 +0000
作者: 方块AI
回复: 支持一下
时间: Tue, 24 Jun 2025 09:51:43 +0000
作者: Leon01
回复: 牛哇佬 来支持一下
时间: Tue, 24 Jun 2025 10:00:59 +0000
作者: geclaude
回复: 支持佬!
时间: Tue, 24 Jun 2025 10:09:07 +0000
作者: attention1111
回复: 支持一下!
时间: Tue, 24 Jun 2025 10:13:30 +0000
作者: coding
回复: 支持大佬,大佬有能让模型设计UI效果很好的那种提示词吗?
时间: Tue, 24 Jun 2025 10:18:15 +0000
作者: 石头
回复: 谢谢分享
时间: Tue, 24 Jun 2025 10:20:44 +0000
作者: zzzqq
回复: 感谢巨佬啊
时间: Tue, 24 Jun 2025 10:34:50 +0000
链接: https://linux.do/t/topic/747234/8
作者: Mozi
内容: All Model Chat Canvas助手(推荐2.5 Pro):让模型用HTML回复,支持Graphviz逻辑流程图、Echarts图表 开发调优 体验地址 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>Canvas 助手</title> <script>MathJax={chtml:{fontURL:'h…
时间: Tue, 24 Jun 2025 09:51:30 +0000
作者: 方块AI
回复: 支持一下
时间: Tue, 24 Jun 2025 09:51:43 +0000
作者: Leon01
回复: 牛哇佬 来支持一下
时间: Tue, 24 Jun 2025 10:00:59 +0000
作者: geclaude
回复: 支持佬!
时间: Tue, 24 Jun 2025 10:09:07 +0000
作者: attention1111
回复: 支持一下!
时间: Tue, 24 Jun 2025 10:13:30 +0000
作者: coding
回复: 支持大佬,大佬有能让模型设计UI效果很好的那种提示词吗?
时间: Tue, 24 Jun 2025 10:18:15 +0000
作者: 石头
回复: 谢谢分享
时间: Tue, 24 Jun 2025 10:20:44 +0000
作者: zzzqq
回复: 感谢巨佬啊
时间: Tue, 24 Jun 2025 10:34:50 +0000
链接: https://linux.do/t/topic/747234/8
LINUX DO
All Model Chat更新:增加HTML预览功能,内置Canvas提示词
标题: 求问,Mac下如何双微信一直登录状态,不要从application里面脱出来每 24 小时登录一次的这个方案
作者: qps
内容: 如题, 找了好久了
时间: Tue, 24 Jun 2025 08:59:44 +0000
作者: 方块AI
回复: 没有办法,开虚拟机吧
时间: Tue, 24 Jun 2025 09:01:21 +0000
作者: qps
回复: 我现在是远程一台电脑,也就只运行着个微信 没解了么,,,
时间: Tue, 24 Jun 2025 09:04:49 +0000
作者: long
回复: 我也有这个需求,但是没有办法目前
时间: Tue, 24 Jun 2025 09:05:59 +0000
作者: 退堂鼓演奏家
回复: 可以用测试版和正式版一起 不会掉 15.5可用 alipan.com 阿里云盘分享
时间: Tue, 24 Jun 2025 09:09:41 +0000
作者: qps
回复: 对对对,感谢佬,我之前听过这个方案,但一直没地方 找到测试版, 我试试!
时间: Tue, 24 Jun 2025 09:13:37 +0000
作者: np8SXJ
回复: github.com GitHub - Netskao/MacOS-Utils: MacOS-Apps-Utils MacOS-Apps-Utils
时间: Tue, 24 Jun 2025 09:17:05 +0000
作者: qps
回复: 这种会不会容易封号啊,,,
时间: Tue, 24 Jun 2025 09:17:30 +0000
作者: np8SXJ
回复: 会有风险,不过我的一直正常,使不使用佬友自定。
时间: Tue, 24 Jun 2025 09:19:22 +0000
作者: qps
回复: 嗯,还是
时间: Tue, 24 Jun 2025 09:25:57 +0000
作者: ForestRan
回复: 我自己是一个正式版一个测试版,从去年一直用没出过啥问题。就是有一次系统升级了然后测试版本不支持,我就升级了测试版的就好了。其他没出过任何问题。然后我自己换了个图标好区分一点。
时间: Tue, 24 Jun 2025 09:43:54 +0000
作者: qps
回复: 佬,我装上测试版啦,目前两个都正常,过几天,两个也都是登录状态对吧
时间: Tue, 24 Jun 2025 09:45:21 +0000
作者: qps
回复: 佬,我按上面的云盘的,装上测试版啦,目前两个都正常,过几天,两个也都是登录状态对吧 不会明天打开盖子就还要再登录吧?
时间: Tue, 24 Jun 2025 09:45:46 +0000
作者: ForestRan
回复: 基本不会,除非换Wi-Fi了可能会掉登陆,同一Wi-Fi的情况下,我备用手机都没电一个月了还能自动登录。完全没任何问题。
时间: Tue, 24 Jun 2025 09:47:48 +0000
作者: 退堂鼓演奏家
回复: 是的 只要不主动退出 可以一直挂着 我晚上都盒盖休眠的
时间: Tue, 24 Jun 2025 09:49:20 +0000
作者: PPY
回复: 佬友问一下,这个支持最新版的微信吗?
时间: Tue, 24 Jun 2025 09:58:18 +0000
作者: qps
回复: 你最帅! 这就是我要的效果! 有没有手机这个微信切换其他微信了,这个微信电脑上还不退出的方案啊,佬!
时间: Tue, 24 Jun 2025 09:59:33 +0000
作者: ForestRan
回复: 那没有,手机微信退出,电脑必定掉登陆,我目前想到一个办法是,如果你有android的话手机可以开一个微信分身来登陆。这样就可以了。
时间: Tue, 24 Jun 2025 10:18:40 +0000
作者: qps
回复: 嗯,这个办法了解的
时间: Tue, 24 Jun 2025 10:34:24 +0000
链接: https://linux.do/t/topic/747102/19
作者: qps
内容: 如题, 找了好久了
时间: Tue, 24 Jun 2025 08:59:44 +0000
作者: 方块AI
回复: 没有办法,开虚拟机吧
时间: Tue, 24 Jun 2025 09:01:21 +0000
作者: qps
回复: 我现在是远程一台电脑,也就只运行着个微信 没解了么,,,
时间: Tue, 24 Jun 2025 09:04:49 +0000
作者: long
回复: 我也有这个需求,但是没有办法目前
时间: Tue, 24 Jun 2025 09:05:59 +0000
作者: 退堂鼓演奏家
回复: 可以用测试版和正式版一起 不会掉 15.5可用 alipan.com 阿里云盘分享
时间: Tue, 24 Jun 2025 09:09:41 +0000
作者: qps
回复: 对对对,感谢佬,我之前听过这个方案,但一直没地方 找到测试版, 我试试!
时间: Tue, 24 Jun 2025 09:13:37 +0000
作者: np8SXJ
回复: github.com GitHub - Netskao/MacOS-Utils: MacOS-Apps-Utils MacOS-Apps-Utils
时间: Tue, 24 Jun 2025 09:17:05 +0000
作者: qps
回复: 这种会不会容易封号啊,,,
时间: Tue, 24 Jun 2025 09:17:30 +0000
作者: np8SXJ
回复: 会有风险,不过我的一直正常,使不使用佬友自定。
时间: Tue, 24 Jun 2025 09:19:22 +0000
作者: qps
回复: 嗯,还是
时间: Tue, 24 Jun 2025 09:25:57 +0000
作者: ForestRan
回复: 我自己是一个正式版一个测试版,从去年一直用没出过啥问题。就是有一次系统升级了然后测试版本不支持,我就升级了测试版的就好了。其他没出过任何问题。然后我自己换了个图标好区分一点。
时间: Tue, 24 Jun 2025 09:43:54 +0000
作者: qps
回复: 佬,我装上测试版啦,目前两个都正常,过几天,两个也都是登录状态对吧
时间: Tue, 24 Jun 2025 09:45:21 +0000
作者: qps
回复: 佬,我按上面的云盘的,装上测试版啦,目前两个都正常,过几天,两个也都是登录状态对吧 不会明天打开盖子就还要再登录吧?
时间: Tue, 24 Jun 2025 09:45:46 +0000
作者: ForestRan
回复: 基本不会,除非换Wi-Fi了可能会掉登陆,同一Wi-Fi的情况下,我备用手机都没电一个月了还能自动登录。完全没任何问题。
时间: Tue, 24 Jun 2025 09:47:48 +0000
作者: 退堂鼓演奏家
回复: 是的 只要不主动退出 可以一直挂着 我晚上都盒盖休眠的
时间: Tue, 24 Jun 2025 09:49:20 +0000
作者: PPY
回复: 佬友问一下,这个支持最新版的微信吗?
时间: Tue, 24 Jun 2025 09:58:18 +0000
作者: qps
回复: 你最帅! 这就是我要的效果! 有没有手机这个微信切换其他微信了,这个微信电脑上还不退出的方案啊,佬!
时间: Tue, 24 Jun 2025 09:59:33 +0000
作者: ForestRan
回复: 那没有,手机微信退出,电脑必定掉登陆,我目前想到一个办法是,如果你有android的话手机可以开一个微信分身来登陆。这样就可以了。
时间: Tue, 24 Jun 2025 10:18:40 +0000
作者: qps
回复: 嗯,这个办法了解的
时间: Tue, 24 Jun 2025 10:34:24 +0000
链接: https://linux.do/t/topic/747102/19
LINUX DO
求问,Mac下如何双微信一直登录状态,不要从application里面脱出来每 24 小时登录一次的这个方案
如题, 找了好久了😅
标题: 求问,Mac下如何双微信一直登录状态,不要从application里面脱出来每 24 小时登录一次的这个方案
作者: qps
内容: 如题, 找了好久了
时间: Tue, 24 Jun 2025 08:59:44 +0000
作者: 方块AI
回复: 没有办法,开虚拟机吧
时间: Tue, 24 Jun 2025 09:01:21 +0000
作者: qps
回复: 我现在是远程一台电脑,也就只运行着个微信 没解了么,,,
时间: Tue, 24 Jun 2025 09:04:49 +0000
作者: long
回复: 我也有这个需求,但是没有办法目前
时间: Tue, 24 Jun 2025 09:05:59 +0000
作者: 退堂鼓演奏家
回复: 可以用测试版和正式版一起 不会掉 15.5可用 alipan.com 阿里云盘分享
时间: Tue, 24 Jun 2025 09:09:41 +0000
作者: qps
回复: 对对对,感谢佬,我之前听过这个方案,但一直没地方 找到测试版, 我试试!
时间: Tue, 24 Jun 2025 09:13:37 +0000
作者: np8SXJ
回复: github.com GitHub - Netskao/MacOS-Utils: MacOS-Apps-Utils MacOS-Apps-Utils
时间: Tue, 24 Jun 2025 09:17:05 +0000
作者: qps
回复: 这种会不会容易封号啊,,,
时间: Tue, 24 Jun 2025 09:17:30 +0000
作者: np8SXJ
回复: 会有风险,不过我的一直正常,使不使用佬友自定。
时间: Tue, 24 Jun 2025 09:19:22 +0000
链接: https://linux.do/t/topic/747102/9
作者: qps
内容: 如题, 找了好久了
时间: Tue, 24 Jun 2025 08:59:44 +0000
作者: 方块AI
回复: 没有办法,开虚拟机吧
时间: Tue, 24 Jun 2025 09:01:21 +0000
作者: qps
回复: 我现在是远程一台电脑,也就只运行着个微信 没解了么,,,
时间: Tue, 24 Jun 2025 09:04:49 +0000
作者: long
回复: 我也有这个需求,但是没有办法目前
时间: Tue, 24 Jun 2025 09:05:59 +0000
作者: 退堂鼓演奏家
回复: 可以用测试版和正式版一起 不会掉 15.5可用 alipan.com 阿里云盘分享
时间: Tue, 24 Jun 2025 09:09:41 +0000
作者: qps
回复: 对对对,感谢佬,我之前听过这个方案,但一直没地方 找到测试版, 我试试!
时间: Tue, 24 Jun 2025 09:13:37 +0000
作者: np8SXJ
回复: github.com GitHub - Netskao/MacOS-Utils: MacOS-Apps-Utils MacOS-Apps-Utils
时间: Tue, 24 Jun 2025 09:17:05 +0000
作者: qps
回复: 这种会不会容易封号啊,,,
时间: Tue, 24 Jun 2025 09:17:30 +0000
作者: np8SXJ
回复: 会有风险,不过我的一直正常,使不使用佬友自定。
时间: Tue, 24 Jun 2025 09:19:22 +0000
链接: https://linux.do/t/topic/747102/9
LINUX DO
求问,Mac下如何双微信一直登录状态,不要从application里面脱出来每 24 小时登录一次的这个方案
如题, 找了好久了😅
标题: 佬们有没有小说推荐
作者: 冬濑
内容: 类型能是无限流最好,修仙也可以,希望是完结文,连载追的太痛苦了。 其他的希望感情线能好一点,1v1纯爱。 先提前谢谢佬们了。
时间: Tue, 24 Jun 2025 09:53:31 +0000
作者: 御宅男(YznCMS后台开源系统官方)
回复: blog.yzncms.com 书单 - 御宅男の博客 分享一些技术文章,记录一些程序学习生涯中的问题,一同和您学习进步,来自御宅男的原创博客
时间: Tue, 24 Jun 2025 09:54:09 +0000
作者: leon
回复: 蛊真人吧 挺好看的 看了两年还没看完
时间: Tue, 24 Jun 2025 10:12:00 +0000
作者: 鹿歆歆
回复: 推荐你看番茄第一深情,真的很爱很爱自己的老婆~
时间: Tue, 24 Jun 2025 10:18:56 +0000
作者: zylf
回复: 看了两年都没看完,这还叫好看啊?好看的会上瘾,很快就会看完
时间: Tue, 24 Jun 2025 10:19:13 +0000
作者: 冬濑
回复: 我听朋友说过,内容感觉癫癫的。
时间: Tue, 24 Jun 2025 10:26:43 +0000
作者: leon
回复: 太长了 都是抽空看
时间: Tue, 24 Jun 2025 10:28:26 +0000
作者: 冬濑
回复: OK,谢谢推荐。
时间: Tue, 24 Jun 2025 10:29:14 +0000
作者: 布鲁斯-侯恩
回复: 三体 推荐三本书呢? (三体)1.2.3
时间: Tue, 24 Jun 2025 10:30:41 +0000
作者: 传说之下的花儿
回复: 至死方休
时间: Tue, 24 Jun 2025 10:32:00 +0000
作者: 鹿歆歆
回复: 哈哈哈哈,对呀
时间: Tue, 24 Jun 2025 10:33:42 +0000
链接: https://linux.do/t/topic/747239/11
作者: 冬濑
内容: 类型能是无限流最好,修仙也可以,希望是完结文,连载追的太痛苦了。 其他的希望感情线能好一点,1v1纯爱。 先提前谢谢佬们了。
时间: Tue, 24 Jun 2025 09:53:31 +0000
作者: 御宅男(YznCMS后台开源系统官方)
回复: blog.yzncms.com 书单 - 御宅男の博客 分享一些技术文章,记录一些程序学习生涯中的问题,一同和您学习进步,来自御宅男的原创博客
时间: Tue, 24 Jun 2025 09:54:09 +0000
作者: leon
回复: 蛊真人吧 挺好看的 看了两年还没看完
时间: Tue, 24 Jun 2025 10:12:00 +0000
作者: 鹿歆歆
回复: 推荐你看番茄第一深情,真的很爱很爱自己的老婆~
时间: Tue, 24 Jun 2025 10:18:56 +0000
作者: zylf
回复: 看了两年都没看完,这还叫好看啊?好看的会上瘾,很快就会看完
时间: Tue, 24 Jun 2025 10:19:13 +0000
作者: 冬濑
回复: 我听朋友说过,内容感觉癫癫的。
时间: Tue, 24 Jun 2025 10:26:43 +0000
作者: leon
回复: 太长了 都是抽空看
时间: Tue, 24 Jun 2025 10:28:26 +0000
作者: 冬濑
回复: OK,谢谢推荐。
时间: Tue, 24 Jun 2025 10:29:14 +0000
作者: 布鲁斯-侯恩
回复: 三体 推荐三本书呢? (三体)1.2.3
时间: Tue, 24 Jun 2025 10:30:41 +0000
作者: 传说之下的花儿
回复: 至死方休
时间: Tue, 24 Jun 2025 10:32:00 +0000
作者: 鹿歆歆
回复: 哈哈哈哈,对呀
时间: Tue, 24 Jun 2025 10:33:42 +0000
链接: https://linux.do/t/topic/747239/11
LINUX DO
佬们有没有小说推荐
类型能是无限流最好,修仙也可以,希望是完结文,连载追的太痛苦了。 其他的希望感情线能好一点,1v1纯爱。 先提前谢谢佬们了。
标题: 大家手机都多久换一次
作者: Mailkoo
内容: iPhone XR还在用
时间: Tue, 24 Jun 2025 09:11:53 +0000
作者: 大帅哥
回复: 四五年了还在用
时间: Tue, 24 Jun 2025 09:12:41 +0000
作者: darkbfly
回复: 用坏了才换 哈哈哈
时间: Tue, 24 Jun 2025 09:13:12 +0000
作者: 方块AI
回复: iPhone 什么时候出我想买的什么时候换,上次换是因为灵动岛
时间: Tue, 24 Jun 2025 09:13:16 +0000
作者: CodeWu
回复: 目前手机在手2年多了,等mate 80pro
时间: Tue, 24 Jun 2025 09:13:18 +0000
作者: 9C
回复: 不坏不换
时间: Tue, 24 Jun 2025 09:13:21 +0000
作者: shock
回复: 不坏不换 华为meta20 用到现在了
时间: Tue, 24 Jun 2025 09:13:52 +0000
作者: darksora502
回复: 以前是年年换,从21年买了13PM后,上个月才换了16PM,直接就变成3年半一换了。
时间: Tue, 24 Jun 2025 09:13:57 +0000
作者: Meta
回复: 这么说吧,我初中的时候,那台苹果5s,它电池包都把后盖顶起来了,后盖板的封胶都失效了,能看到里面的电器元件了,屏幕左上角已经有黑点了,但!我还是用了1个月,最后是我妈看不下去,换了自己的手机,把老的给了我,现在想想,那个时候,是真难杀,新手保护了,属于是
时间: Tue, 24 Jun 2025 09:15:16 +0000
作者: 齐天大圣
回复: 安卓两三年就得换了
时间: Tue, 24 Jun 2025 09:23:30 +0000
作者: 一颗小鸡蛋
回复: 平均三年吧
时间: Tue, 24 Jun 2025 09:41:18 +0000
作者: GMYXDS
回复: 4-5年
时间: Tue, 24 Jun 2025 09:49:57 +0000
作者: 嘎蹦咔咔
回复: 三四年吧 QwQ 一般都是有大事件才换 比如毕业
时间: Tue, 24 Jun 2025 09:50:29 +0000
作者: 思聪.王
回复: 3年,用的用不动了就换。下次更换需要esim出现
时间: Tue, 24 Jun 2025 09:51:17 +0000
作者: JayXuZ
回复: 快5年了 说实话,除了相机跟不上时代了,其他完全感觉不到换的理由 每天就刷个视频,看个小说,完全没有换的必要 我又是个扫码用户,基本不拍照,所以也不打算换
时间: Tue, 24 Jun 2025 09:54:42 +0000
作者: coveydzblrsjlay
回复: 和存储空间有关. 我目前使用时间最久的是一台16+1T的红米千元机. 更贵的机器反而用的没这台久.
时间: Tue, 24 Jun 2025 09:58:19 +0000
作者: Aumae
回复: 坏了并且口袋里有钱,或者坏了并且白条24期免息才会换。
时间: Tue, 24 Jun 2025 10:02:10 +0000
作者: wood
回复: 才毕业的时候基本上一年一换, 现在 到不怎么换手机了, 毕业的时候好像是 小米10u, 然后换了iphone 13,再然后就换了小米 14pro,目前用了 1年半 还没换
时间: Tue, 24 Jun 2025 10:03:34 +0000
作者: 冬濑
回复: 基本都是用到坏,或者实在是卡顿的不行才换。 ₍^˶ ╸𖥦 ╸˵^₎⟆
时间: Tue, 24 Jun 2025 10:06:04 +0000
作者: shock
回复: Meta: 它电池包都把后盖顶起来了 消息电池爆炸或者自燃哦
时间: Tue, 24 Jun 2025 10:09:57 +0000
作者: 怪怪的科长
回复: 实在不能用了再换,现在的手机是19年买的红米。
时间: Tue, 24 Jun 2025 10:23:17 +0000
作者: 风之蓝
回复: 快五年了! 总结 (click for more details)
时间: Tue, 24 Jun 2025 10:26:36 +0000
作者: 凌好好
回复: 三年就好
时间: Tue, 24 Jun 2025 10:28:16 +0000
作者: 合本丶
回复: 这次等17出就换17pro了,我现在的12mini续航已经崩到不能再崩了,健康度只有68%,日常刷刷也是卡到不行
时间: Tue, 24 Jun 2025 10:30:27 +0000
作者: kbtit_25
回复: 不玩手游,坏了才换,不然顶多换电池
时间: Tue, 24 Jun 2025 10:34:34 +0000
链接: https://linux.do/t/topic/747113/30
作者: Mailkoo
内容: iPhone XR还在用
时间: Tue, 24 Jun 2025 09:11:53 +0000
作者: 大帅哥
回复: 四五年了还在用
时间: Tue, 24 Jun 2025 09:12:41 +0000
作者: darkbfly
回复: 用坏了才换 哈哈哈
时间: Tue, 24 Jun 2025 09:13:12 +0000
作者: 方块AI
回复: iPhone 什么时候出我想买的什么时候换,上次换是因为灵动岛
时间: Tue, 24 Jun 2025 09:13:16 +0000
作者: CodeWu
回复: 目前手机在手2年多了,等mate 80pro
时间: Tue, 24 Jun 2025 09:13:18 +0000
作者: 9C
回复: 不坏不换
时间: Tue, 24 Jun 2025 09:13:21 +0000
作者: shock
回复: 不坏不换 华为meta20 用到现在了
时间: Tue, 24 Jun 2025 09:13:52 +0000
作者: darksora502
回复: 以前是年年换,从21年买了13PM后,上个月才换了16PM,直接就变成3年半一换了。
时间: Tue, 24 Jun 2025 09:13:57 +0000
作者: Meta
回复: 这么说吧,我初中的时候,那台苹果5s,它电池包都把后盖顶起来了,后盖板的封胶都失效了,能看到里面的电器元件了,屏幕左上角已经有黑点了,但!我还是用了1个月,最后是我妈看不下去,换了自己的手机,把老的给了我,现在想想,那个时候,是真难杀,新手保护了,属于是
时间: Tue, 24 Jun 2025 09:15:16 +0000
作者: 齐天大圣
回复: 安卓两三年就得换了
时间: Tue, 24 Jun 2025 09:23:30 +0000
作者: 一颗小鸡蛋
回复: 平均三年吧
时间: Tue, 24 Jun 2025 09:41:18 +0000
作者: GMYXDS
回复: 4-5年
时间: Tue, 24 Jun 2025 09:49:57 +0000
作者: 嘎蹦咔咔
回复: 三四年吧 QwQ 一般都是有大事件才换 比如毕业
时间: Tue, 24 Jun 2025 09:50:29 +0000
作者: 思聪.王
回复: 3年,用的用不动了就换。下次更换需要esim出现
时间: Tue, 24 Jun 2025 09:51:17 +0000
作者: JayXuZ
回复: 快5年了 说实话,除了相机跟不上时代了,其他完全感觉不到换的理由 每天就刷个视频,看个小说,完全没有换的必要 我又是个扫码用户,基本不拍照,所以也不打算换
时间: Tue, 24 Jun 2025 09:54:42 +0000
作者: coveydzblrsjlay
回复: 和存储空间有关. 我目前使用时间最久的是一台16+1T的红米千元机. 更贵的机器反而用的没这台久.
时间: Tue, 24 Jun 2025 09:58:19 +0000
作者: Aumae
回复: 坏了并且口袋里有钱,或者坏了并且白条24期免息才会换。
时间: Tue, 24 Jun 2025 10:02:10 +0000
作者: wood
回复: 才毕业的时候基本上一年一换, 现在 到不怎么换手机了, 毕业的时候好像是 小米10u, 然后换了iphone 13,再然后就换了小米 14pro,目前用了 1年半 还没换
时间: Tue, 24 Jun 2025 10:03:34 +0000
作者: 冬濑
回复: 基本都是用到坏,或者实在是卡顿的不行才换。 ₍^˶ ╸𖥦 ╸˵^₎⟆
时间: Tue, 24 Jun 2025 10:06:04 +0000
作者: shock
回复: Meta: 它电池包都把后盖顶起来了 消息电池爆炸或者自燃哦
时间: Tue, 24 Jun 2025 10:09:57 +0000
作者: 怪怪的科长
回复: 实在不能用了再换,现在的手机是19年买的红米。
时间: Tue, 24 Jun 2025 10:23:17 +0000
作者: 风之蓝
回复: 快五年了! 总结 (click for more details)
时间: Tue, 24 Jun 2025 10:26:36 +0000
作者: 凌好好
回复: 三年就好
时间: Tue, 24 Jun 2025 10:28:16 +0000
作者: 合本丶
回复: 这次等17出就换17pro了,我现在的12mini续航已经崩到不能再崩了,健康度只有68%,日常刷刷也是卡到不行
时间: Tue, 24 Jun 2025 10:30:27 +0000
作者: kbtit_25
回复: 不玩手游,坏了才换,不然顶多换电池
时间: Tue, 24 Jun 2025 10:34:34 +0000
链接: https://linux.do/t/topic/747113/30
LINUX DO
大家手机都多久换一次
和存储空间有关. 我目前使用时间最久的是一台16+1T的红米千元机. 更贵的机器反而用的没这台久.
okens_to_million(row["total_tokens"]) print( f"{token_display}{' ' * (col_token_name_width - get_display_width(token_display))}" f"{req_count}{' ' * (col_token_req_width - get_display_width(req_count))}" f"{tokens_val}" ) def get_model_stats(cursor, where_clause, params): """获取模型统计数据""" print("\n" + "=" * 36 + " 模型统计 " + "=" * 36) final_params = list(params) final_where_clause = where_clause + " AND l.model_name != ''" query_model = f""" SELECT l.model_name, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {final_where_clause} GROUP BY l.model_name ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_model, final_params) model_stats = cursor.fetchall() col_model_name_width = 42 col_req_width = 20 col_tokens_width = 20 header_model_name = "模型名称" header_req = "请求次数" header_tokens = "消耗Tokens" print( f"{header_model_name}{' ' * (col_model_name_width - get_display_width(header_model_name))}" f"{header_req}{' ' * (col_req_width - get_display_width(header_req))}" f"{header_tokens}" ) print("-" * (col_model_name_width + col_req_width + col_tokens_width)) for row in model_stats: model_display = row["model_name"] req_count = str(row["request_count"]) tokens_val = format_tokens_to_million(row["total_tokens"]) print( f"{model_display}{' ' * (col_model_name_width - get_display_width(model_display))}" f"{req_count}{' ' * (col_req_width - get_display_width(req_count))}" f"{tokens_val}" ) def get_ip_stats(cursor, where_clause, params): """获取IP统计数据""" print("\n" + "=" * 37 + " IP统计 " + "=" * 37) final_params = list(params) final_where_clause = where_clause + " AND l.ip IS NOT NULL AND l.ip != ''" query_ip = f""" SELECT l.ip, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {final_where_clause} GROUP BY l.ip ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_ip, final_params) ip_stats = cursor.fetchall() col_ip_name_width = 42 col_req_width = 20 col_tokens_width = 20 header_ip_name = "IP地址" header_req = "请求次数" header_tokens = "消耗Tokens" print( f"{header_ip_name}{' ' * (col_ip_name_width - get_display_width(header_ip_name))}" f"{header_req}{' ' * (col_req_width - get_display_width(header_req))}" f"{header_tokens}" ) print("-" * (col_ip_name_width + col_req_width + col_tokens_width)) for row in ip_stats: ip_display = row["ip"] req_count = str(row["request_count"]) tokens_val = format_tokens_to_million(row["total_tokens"]) print( f"{ip_display}{' ' * (col_ip_name_width - get_display_width(ip_display))}" f"{req_count}{' ' * (col_req_width - get_display_width(req_count))}" f"{tokens_val}" ) def generate_report(cli_args=None): """主函数,执行所有统计和报告生成任务""" connection = get_db_connection() if not connection: return cursor = None try: cursor = connection.cursor(dictionary=True) where_clause = "" params = () # --- 动态生成错误过滤条件 --- error_filter_clause = "" error_filter_params = [] if IGNORED_ERROR_PATTERNS: for pattern in IGNORED_ERROR_PATTERNS: error_filter_clause += " AND l.content NOT LIKE %s" error_filter_params.append(f"%{pattern}%") print(f"\n报告生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") if not cli_args: # Default to last 24 hours if no arguments hours = 24 start_time = datetime.now() - timedelta(hours=hours) where_clause = "WHERE l.created_at >= %s" params = (int(start_time.timestamp()),) print(f"查询模式: 默认最近 {hours} 小时") print(f"查询时间范围: {start_time.strftime('%Y-%m-%d %H:%M:%S')} 至今") else: print("查询模式: 自定义时间范围") start_time, end_time = None, None # Case 1: Integer for hours if len(cli_args) == 1: try: hours = int(cli_args[0]) if hours <= 0: print("错误: 小时数必须为正整数。") return start_time = datetime.now() - timedelta(hours=hours) where_clause = "WHERE l.created_at >= %s" params = (int(start_time.timestamp()),) print( f"查询时间范围: 最近 {hours} 小时 ({start_time.strftime('%Y-%m-%d %H:%M:%S')} 至今)" ) except ValueError: # Not an integer, treat as start time string start_time = parse_time_string(cli_args[0]) i
标题: 【T佬】New-API站长都可以用的统计脚本
作者: 唐洛
内容: # -*- coding: utf-8 -*- import mysql.connector import sys from datetime import datetime, timedelta from decimal import Decimal # --- 可配置区域 --- # 1. 数据库连接信息 DB_CONFIG = { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "123456", "database": "new-api", } # 2. 错误率统计时要忽略的错误内容关键字 IGNORED_ERROR_PATTERNS = [ "the maximum number of tokens", "user quota is not enough", ] # --- 辅助函数 --- def get_display_width(s): """计算字符串的显示宽度,中文字符计为2,英文字符计为1""" width = 0 for char in str(s): # 确保输入是字符串 if "\u4e00" <= char <= "\u9fff": width += 2 else: width += 1 return width def format_tokens_to_million(tokens): """将token数量格式化为百万单位(m),保留两位小数""" if not isinstance(tokens, (int, float, Decimal)): return "0.00m" return f"{float(tokens) / 1_000_000:.2f}m" def parse_time_string(time_str): """ 解析多种格式的时间字符串,返回 datetime 对象。 支持格式: Y-m-d H:M:S, Y-m-d H:M, Y-m-d, H:M, m-d H:M """ now = datetime.now() formats = [ "%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M", "%Y-%m-%d", "%H:%M", "%H:%M:%S", "%m-%d %H:%M", ] for fmt in formats: try: if fmt in ["%H:%M", "%H:%M:%S"]: dt = datetime.strptime(time_str, fmt) return now.replace( hour=dt.hour, minute=dt.minute, second=dt.second, microsecond=0 ) if fmt == "%m-%d %H:%M": dt = datetime.strptime(time_str, fmt) return dt.replace(year=now.year) dt = datetime.strptime(time_str, fmt) return dt except ValueError: continue return None # --- 脚本核心功能 --- def get_db_connection(): """根据 DB_CONFIG 建立并返回数据库连接""" try: connection = mysql.connector.connect(**DB_CONFIG) return connection except mysql.connector.Error as err: print(f"数据库连接失败: {err}") return None def get_user_stats(cursor, where_clause, params): """获取用户统计数据""" print("\n" + "=" * 36 + " 用户统计 " + "=" * 36) query_user = f""" SELECT l.user_id, l.username, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {where_clause} GROUP BY l.user_id, l.username ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_user, params) user_stats = cursor.fetchall() col_user_name_width = 42 col_user_req_width = 20 col_user_tokens_width = 20 header_user_name = "用户名(ID)" header_user_req = "请求次数" header_user_tokens = "消耗Tokens" print( f"{header_user_name}{' ' * (col_user_name_width - get_display_width(header_user_name))}" f"{header_user_req}{' ' * (col_user_req_width - get_display_width(header_user_req))}" f"{header_user_tokens}" ) print("-" * (col_user_name_width + col_user_req_width + col_user_tokens_width)) for row in user_stats: user_display = f"{row['username']}({row['user_id']})" req_count = str(row["request_count"]) tokens_val = format_tokens_to_million(row["total_tokens"]) print( f"{user_display}{' ' * (col_user_name_width - get_display_width(user_display))}" f"{req_count}{' ' * (col_user_req_width - get_display_width(req_count))}" f"{tokens_val}" ) def get_token_stats(cursor, where_clause, params): """获取Token统计数据""" print("\n" + "=" * 36 + " Token统计 " + "=" * 35) final_params = list(params) final_where_clause = where_clause + " AND l.token_name != ''" query_token = f""" SELECT l.token_id, l.token_name, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {final_where_clause} GROUP BY l.token_id, l.token_name ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_token, final_params) token_stats = cursor.fetchall() col_token_name_width = 42 col_token_req_width = 20 col_token_tokens_width = 20 header_token_name = "Token名称(ID)" header_token_req = "请求次数" header_token_tokens = "消耗Tokens" print( f"{header_token_name}{' ' * (col_token_name_width - get_display_width(header_token_name))}" f"{header_token_req}{' ' * (col_token_req_width - get_display_width(header_token_req))}" f"{header_token_tokens}" ) print("-" * (col_token_name_width + col_token_req_width + col_token_tokens_width)) for row in token_stats: token_display = f"{row['token_name']}({row['token_id']})" req_count = str(row["request_count"]) tokens_val = format_t
作者: 唐洛
内容: # -*- coding: utf-8 -*- import mysql.connector import sys from datetime import datetime, timedelta from decimal import Decimal # --- 可配置区域 --- # 1. 数据库连接信息 DB_CONFIG = { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "123456", "database": "new-api", } # 2. 错误率统计时要忽略的错误内容关键字 IGNORED_ERROR_PATTERNS = [ "the maximum number of tokens", "user quota is not enough", ] # --- 辅助函数 --- def get_display_width(s): """计算字符串的显示宽度,中文字符计为2,英文字符计为1""" width = 0 for char in str(s): # 确保输入是字符串 if "\u4e00" <= char <= "\u9fff": width += 2 else: width += 1 return width def format_tokens_to_million(tokens): """将token数量格式化为百万单位(m),保留两位小数""" if not isinstance(tokens, (int, float, Decimal)): return "0.00m" return f"{float(tokens) / 1_000_000:.2f}m" def parse_time_string(time_str): """ 解析多种格式的时间字符串,返回 datetime 对象。 支持格式: Y-m-d H:M:S, Y-m-d H:M, Y-m-d, H:M, m-d H:M """ now = datetime.now() formats = [ "%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M", "%Y-%m-%d", "%H:%M", "%H:%M:%S", "%m-%d %H:%M", ] for fmt in formats: try: if fmt in ["%H:%M", "%H:%M:%S"]: dt = datetime.strptime(time_str, fmt) return now.replace( hour=dt.hour, minute=dt.minute, second=dt.second, microsecond=0 ) if fmt == "%m-%d %H:%M": dt = datetime.strptime(time_str, fmt) return dt.replace(year=now.year) dt = datetime.strptime(time_str, fmt) return dt except ValueError: continue return None # --- 脚本核心功能 --- def get_db_connection(): """根据 DB_CONFIG 建立并返回数据库连接""" try: connection = mysql.connector.connect(**DB_CONFIG) return connection except mysql.connector.Error as err: print(f"数据库连接失败: {err}") return None def get_user_stats(cursor, where_clause, params): """获取用户统计数据""" print("\n" + "=" * 36 + " 用户统计 " + "=" * 36) query_user = f""" SELECT l.user_id, l.username, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {where_clause} GROUP BY l.user_id, l.username ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_user, params) user_stats = cursor.fetchall() col_user_name_width = 42 col_user_req_width = 20 col_user_tokens_width = 20 header_user_name = "用户名(ID)" header_user_req = "请求次数" header_user_tokens = "消耗Tokens" print( f"{header_user_name}{' ' * (col_user_name_width - get_display_width(header_user_name))}" f"{header_user_req}{' ' * (col_user_req_width - get_display_width(header_user_req))}" f"{header_user_tokens}" ) print("-" * (col_user_name_width + col_user_req_width + col_user_tokens_width)) for row in user_stats: user_display = f"{row['username']}({row['user_id']})" req_count = str(row["request_count"]) tokens_val = format_tokens_to_million(row["total_tokens"]) print( f"{user_display}{' ' * (col_user_name_width - get_display_width(user_display))}" f"{req_count}{' ' * (col_user_req_width - get_display_width(req_count))}" f"{tokens_val}" ) def get_token_stats(cursor, where_clause, params): """获取Token统计数据""" print("\n" + "=" * 36 + " Token统计 " + "=" * 35) final_params = list(params) final_where_clause = where_clause + " AND l.token_name != ''" query_token = f""" SELECT l.token_id, l.token_name, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {final_where_clause} GROUP BY l.token_id, l.token_name ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_token, final_params) token_stats = cursor.fetchall() col_token_name_width = 42 col_token_req_width = 20 col_token_tokens_width = 20 header_token_name = "Token名称(ID)" header_token_req = "请求次数" header_token_tokens = "消耗Tokens" print( f"{header_token_name}{' ' * (col_token_name_width - get_display_width(header_token_name))}" f"{header_token_req}{' ' * (col_token_req_width - get_display_width(header_token_req))}" f"{header_token_tokens}" ) print("-" * (col_token_name_width + col_token_req_width + col_token_tokens_width)) for row in token_stats: token_display = f"{row['token_name']}({row['token_id']})" req_count = str(row["request_count"]) tokens_val = format_t
f not start_time: print(f"错误: 无法解析时间字符串 '{cli_args[0]}'") return where_clause = "WHERE l.created_at >= %s" params = (int(start_time.timestamp()),) print( f"查询时间范围: {start_time.strftime('%Y-%m-%d %H:%M:%S')} 至今" ) # Case 2: Two time strings elif len(cli_args) == 2: start_time = parse_time_string(cli_args[0]) end_time = parse_time_string(cli_args[1]) if not start_time or not end_time: if not start_time: print(f"错误: 无法解析开始时间字符串 '{cli_args[0]}'") if not end_time: print(f"错误: 无法解析结束时间字符串 '{cli_args[1]}'") return if start_time >= end_time: print("错误: 开始时间必须早于结束时间。") return where_clause = "WHERE l.created_at >= %s AND l.created_at <= %s" params = (int(start_time.timestamp()), int(end_time.timestamp())) print( f"查询时间范围: {start_time.strftime('%Y-%m-%d %H:%M:%S')} 至 {end_time.strftime('%Y-%m-%d %H:%M:%S')}" ) else: print("错误: 参数数量过多。最多支持两个时间范围参数。") return # --- 生成报告 --- print("\n" + "=" * 52 + " 总览 " + "=" * 51) query_total = f""" SELECT COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens, COUNT(l.id) as total_requests, SUM(CASE WHEN (l.type = 5 OR (l.type = 2 AND l.completion_tokens = 0 AND content LIKE '%超时%')) AND l.content LIKE '%429%' {error_filter_clause} THEN 1 ELSE 0 END) as error_429_count, SUM(CASE WHEN (l.type = 5 OR (l.type = 2 AND l.completion_tokens = 0 AND content LIKE '%超时%')) AND l.content NOT LIKE '%429%' {error_filter_clause} THEN 1 ELSE 0 END) as normal_error_count FROM logs l {where_clause} """ final_params_total = error_filter_params + error_filter_params + list(params) cursor.execute(query_total, final_params_total) total_stats = cursor.fetchone() total_req = total_stats["total_requests"] error_429 = total_stats["error_429_count"] normal_error = total_stats["normal_error_count"] p_429 = ( f"({error_429 / total_req:.1%})" if total_req and total_req > 0 else "(0.0%)" ) p_normal = ( f"({normal_error / total_req:.1%})" if total_req and total_req > 0 else "(0.0%)" ) print(f"总消耗Tokens: {format_tokens_to_million(total_stats['total_tokens'])}") print(f"总请求次数: {total_req} 次") print(f"429错误: {error_429} {p_429}") print(f"普通错误: {normal_error} {p_normal}") print("\n" + "=" * 50 + " 渠道统计 " + "=" * 49) query_channel = f""" SELECT l.channel_id, c.name as channel_name, COUNT(l.id) as total_requests, SUM(CASE WHEN (l.type = 5 OR (l.type = 2 AND l.completion_tokens = 0 AND content LIKE '%超时%')) AND l.content LIKE '%429%' {error_filter_clause} THEN 1 ELSE 0 END) as error_429_count, SUM(CASE WHEN (l.type = 5 OR (l.type = 2 AND l.completion_tokens = 0 AND content LIKE '%超时%')) AND l.content NOT LIKE '%429%' {error_filter_clause} THEN 1 ELSE 0 END) as normal_error_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l LEFT JOIN channels c ON l.channel_id = c.id {where_clause} GROUP BY l.channel_id, c.name HAVING COUNT(l.id) >= 10 ORDER BY total_requests DESC """ final_params_channel = error_filter_params + error_filter_params + list(params) cursor.execute(query_channel, final_params_channel) channel_stats = cursor.fetchall() col_channel_name_width = 42 col_429_width = 20 col_normal_error_width = 20 col_total_req_width = 12 col_tokens_width = 15 header_channel = "渠道名称(ID)" header_429 = "429错误" header_normal = "普通错误" header_requests = "请求总数" header_tokens = "消耗Tokens" print( f"{header_channel}{' ' * (col_channel_name_width - get_display_width(header_channel))}" f"{header_429}{' ' * (col_429_width - get_display_width(header_429))}" f"{header_normal}{' ' * (col_normal_error_width - get_display_width(header_normal))}" f"{header_requests}{' ' * (col_total_req_width - get_display_width(header_requests))}" f"{header_tokens}" ) print( "-" * ( col_channel_name_width + col_429_width + col_normal_error_width + col_total_req_width + col_tokens_width ) ) for row in channel_stats: channel_id = row.get("channel_id", "N/A") channel_name_raw = row.get("channel_name") or "未知渠道" channel_name = f"{channel_name_raw}({channel_id})" total_req = row["total_requests"] error_429 = row["
error_429_count"] normal_error = row["normal_error_count"] p_429 = f"({error_429 / total_req:.1%})" if total_req > 0 else "(0.0%)" p_normal = ( f"({normal_error / total_req:.1%})" if total_req > 0 else "(0.0%)" ) col1_val = channel_name col2_val = f"{error_429} {p_429}" col3_val = f"{normal_error} {p_normal}" col4_val = str(total_req) col5_val = format_tokens_to_million(row["total_tokens"]) print( f"{col1_val}{' ' * (col_channel_name_width - get_display_width(col1_val))}" f"{col2_val}{' ' * (col_429_width - get_display_width(col2_val))}" f"{col3_val}{' ' * (col_normal_error_width - get_display_width(col3_val))}" f"{col4_val}{' ' * (col_total_req_width - get_display_width(col4_val))}" f"{col5_val}" ) get_user_stats(cursor, where_clause, params) get_token_stats(cursor, where_clause, params) get_model_stats(cursor, where_clause, params) get_ip_stats(cursor, where_clause, params) except mysql.connector.Error as err: print(f"报告生成过程中发生数据库错误: {err}") except Exception as e: print(f"发生未知错误: {e}") finally: if connection and connection.is_connected(): if cursor: cursor.close() connection.close() if __name__ == "__main__": generate_report(cli_args=sys.argv[1:]) 介绍 这个脚本可以用于New API的MySQL数据库统计,渠道错误率、429率,用户|Key|IP统计。 便于站长查看用量以及排查滥用清空。 SQLite数据库没有支持,有需要简单让AI改改应该就可以用。 不确定N佬的Veloera是否兼容,没有验证。 效果截图 (click for more details) 使用方法 New API开启了错误日志,相关配置:ERROR_LOG_ENABLED=true。 安装Python环境,并保存上面代码为main.py文件。 修改代码第10行DB_CONFIG变量为你的MySQL配置。 执行命令安装依赖:pip install mysql-connector-python。 执行查询命令:python main.py。 参数说明 脚本支持多种时间范围查询: 不带任何参数,默认查询24小时:python main.py。 查询2小时内数据:python main.py 2。 查询具体时间到现在:python main.py 2021-01-01 查询日期范围:python main.py "2021-01-01 11:11" "2021-02-02 22:22" 支持多种时间格式:01-01, 2021-01-01, 2021-01-01 11:11,2021-01-01 11:00, 11:11, 01-01 11:11 我自用的版本要更复杂一点:标记查询状态定时执行,检查到错误率到达阈值警通知到我的slack。但由于通用性不强,就改了个精简版本分享给大家。 欢迎各位大佬纠错以及完善这个脚本。
时间: Tue, 24 Jun 2025 08:40:15 +0000
作者: 方块AI
回复: 感谢分享!支持 T 佬!
时间: Tue, 24 Jun 2025 08:40:24 +0000
作者: 唐洛
回复: 这么快么,我才点完发布就刷新页面就看到你评论了,太强了!!!
时间: Tue, 24 Jun 2025 08:40:53 +0000
作者: 大黄叫汪汪
回复: 为什么你可以这么快哦
时间: Tue, 24 Jun 2025 08:40:57 +0000
作者: YsGod
回复: 支持支持
时间: Tue, 24 Jun 2025 08:41:09 +0000
作者: 云馨
回复: 方块好快,我刚弹通知,
时间: Tue, 24 Jun 2025 08:41:11 +0000
作者: ZhangJin
回复: 方块也是逆天
时间: Tue, 24 Jun 2025 08:41:11 +0000
作者: aquarz
回复: 比不过比不过,关注的都比不过,还是ai速度快啊
时间: Tue, 24 Jun 2025 08:41:22 +0000
作者: 歌白尼
回复: 方块AI: 感谢分享!支持 T 佬! 感谢分享!支持 T 佬!
时间: Tue, 24 Jun 2025 08:41:28 +0000
作者: nibbin
回复: 太快不好
时间: Tue, 24 Jun 2025 08:41:40 +0000
作者: 白桃
回复: 感谢分享!支持 T 佬!
时间: Tue, 24 Jun 2025 08:41:45 +0000
作者: alhz
回复: 前排不了了,那就后排吧
时间: Tue, 24 Jun 2025 08:41:47 +0000
作者: 方块AI
回复: 该快快,该慢慢
时间: Tue, 24 Jun 2025 08:42:04 +0000
作者: 桢桢
回复: 前排支持T佬!
时间: Tue, 24 Jun 2025 08:42:17 +0000
作者: Venis
回复: 支持T佬,连续两回T佬发帖,就看到了。但是都不是公益激活码,希望发激活码的时候也能马上看到
时间: Tue, 24 Jun 2025 08:42:44 +0000
作者: shock
回复: 严重怀疑方块现在是集群水贴。快的不行。
时间: Tue, 24 Jun 2025 08:43:20 +0000
作者: 唐洛
回复: 毕竟新版本,算力提高了不少。
时间: Tue, 24 Jun 2025 08:43:40 +0000
作者: cp
回复: 炫酷!!! 可惜没有自己搭的,
时间: Tue, 24 Jun 2025 08:47:58 +0000
作者: 大帅哥
回复: 你也太强了!
时间: Tue, 24 Jun 2025 09:02:48 +0000
作者: York Ji
回复: 感谢分享!
时间: Tue, 24 Jun 2025 09:17:17 +0000
作者: edinik
回复: 立即使用
时间: Tue, 24 Jun 2025 10:33:23 +0000
链接: https://linux.do/t/topic/747057/22
时间: Tue, 24 Jun 2025 08:40:15 +0000
作者: 方块AI
回复: 感谢分享!支持 T 佬!
时间: Tue, 24 Jun 2025 08:40:24 +0000
作者: 唐洛
回复: 这么快么,我才点完发布就刷新页面就看到你评论了,太强了!!!
时间: Tue, 24 Jun 2025 08:40:53 +0000
作者: 大黄叫汪汪
回复: 为什么你可以这么快哦
时间: Tue, 24 Jun 2025 08:40:57 +0000
作者: YsGod
回复: 支持支持
时间: Tue, 24 Jun 2025 08:41:09 +0000
作者: 云馨
回复: 方块好快,我刚弹通知,
时间: Tue, 24 Jun 2025 08:41:11 +0000
作者: ZhangJin
回复: 方块也是逆天
时间: Tue, 24 Jun 2025 08:41:11 +0000
作者: aquarz
回复: 比不过比不过,关注的都比不过,还是ai速度快啊
时间: Tue, 24 Jun 2025 08:41:22 +0000
作者: 歌白尼
回复: 方块AI: 感谢分享!支持 T 佬! 感谢分享!支持 T 佬!
时间: Tue, 24 Jun 2025 08:41:28 +0000
作者: nibbin
回复: 太快不好
时间: Tue, 24 Jun 2025 08:41:40 +0000
作者: 白桃
回复: 感谢分享!支持 T 佬!
时间: Tue, 24 Jun 2025 08:41:45 +0000
作者: alhz
回复: 前排不了了,那就后排吧
时间: Tue, 24 Jun 2025 08:41:47 +0000
作者: 方块AI
回复: 该快快,该慢慢
时间: Tue, 24 Jun 2025 08:42:04 +0000
作者: 桢桢
回复: 前排支持T佬!
时间: Tue, 24 Jun 2025 08:42:17 +0000
作者: Venis
回复: 支持T佬,连续两回T佬发帖,就看到了。但是都不是公益激活码,希望发激活码的时候也能马上看到
时间: Tue, 24 Jun 2025 08:42:44 +0000
作者: shock
回复: 严重怀疑方块现在是集群水贴。快的不行。
时间: Tue, 24 Jun 2025 08:43:20 +0000
作者: 唐洛
回复: 毕竟新版本,算力提高了不少。
时间: Tue, 24 Jun 2025 08:43:40 +0000
作者: cp
回复: 炫酷!!! 可惜没有自己搭的,
时间: Tue, 24 Jun 2025 08:47:58 +0000
作者: 大帅哥
回复: 你也太强了!
时间: Tue, 24 Jun 2025 09:02:48 +0000
作者: York Ji
回复: 感谢分享!
时间: Tue, 24 Jun 2025 09:17:17 +0000
作者: edinik
回复: 立即使用
时间: Tue, 24 Jun 2025 10:33:23 +0000
链接: https://linux.do/t/topic/747057/22
LINUX DO
【T佬】New-API站长都可以用的统计脚本
立即使用 🫡
标题: 【T佬】New-API站长都可以用的统计脚本
作者: 唐洛
内容: # -*- coding: utf-8 -*- import mysql.connector import sys from datetime import datetime, timedelta from decimal import Decimal # --- 可配置区域 --- # 1. 数据库连接信息 DB_CONFIG = { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "123456", "database": "new-api", } # 2. 错误率统计时要忽略的错误内容关键字 IGNORED_ERROR_PATTERNS = [ "the maximum number of tokens", "user quota is not enough", ] # --- 辅助函数 --- def get_display_width(s): """计算字符串的显示宽度,中文字符计为2,英文字符计为1""" width = 0 for char in str(s): # 确保输入是字符串 if "\u4e00" <= char <= "\u9fff": width += 2 else: width += 1 return width def format_tokens_to_million(tokens): """将token数量格式化为百万单位(m),保留两位小数""" if not isinstance(tokens, (int, float, Decimal)): return "0.00m" return f"{float(tokens) / 1_000_000:.2f}m" def parse_time_string(time_str): """ 解析多种格式的时间字符串,返回 datetime 对象。 支持格式: Y-m-d H:M:S, Y-m-d H:M, Y-m-d, H:M, m-d H:M """ now = datetime.now() formats = [ "%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M", "%Y-%m-%d", "%H:%M", "%H:%M:%S", "%m-%d %H:%M", ] for fmt in formats: try: if fmt in ["%H:%M", "%H:%M:%S"]: dt = datetime.strptime(time_str, fmt) return now.replace( hour=dt.hour, minute=dt.minute, second=dt.second, microsecond=0 ) if fmt == "%m-%d %H:%M": dt = datetime.strptime(time_str, fmt) return dt.replace(year=now.year) dt = datetime.strptime(time_str, fmt) return dt except ValueError: continue return None # --- 脚本核心功能 --- def get_db_connection(): """根据 DB_CONFIG 建立并返回数据库连接""" try: connection = mysql.connector.connect(**DB_CONFIG) return connection except mysql.connector.Error as err: print(f"数据库连接失败: {err}") return None def get_user_stats(cursor, where_clause, params): """获取用户统计数据""" print("\n" + "=" * 36 + " 用户统计 " + "=" * 36) query_user = f""" SELECT l.user_id, l.username, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {where_clause} GROUP BY l.user_id, l.username ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_user, params) user_stats = cursor.fetchall() col_user_name_width = 42 col_user_req_width = 20 col_user_tokens_width = 20 header_user_name = "用户名(ID)" header_user_req = "请求次数" header_user_tokens = "消耗Tokens" print( f"{header_user_name}{' ' * (col_user_name_width - get_display_width(header_user_name))}" f"{header_user_req}{' ' * (col_user_req_width - get_display_width(header_user_req))}" f"{header_user_tokens}" ) print("-" * (col_user_name_width + col_user_req_width + col_user_tokens_width)) for row in user_stats: user_display = f"{row['username']}({row['user_id']})" req_count = str(row["request_count"]) tokens_val = format_tokens_to_million(row["total_tokens"]) print( f"{user_display}{' ' * (col_user_name_width - get_display_width(user_display))}" f"{req_count}{' ' * (col_user_req_width - get_display_width(req_count))}" f"{tokens_val}" ) def get_token_stats(cursor, where_clause, params): """获取Token统计数据""" print("\n" + "=" * 36 + " Token统计 " + "=" * 35) final_params = list(params) final_where_clause = where_clause + " AND l.token_name != ''" query_token = f""" SELECT l.token_id, l.token_name, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {final_where_clause} GROUP BY l.token_id, l.token_name ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_token, final_params) token_stats = cursor.fetchall() col_token_name_width = 42 col_token_req_width = 20 col_token_tokens_width = 20 header_token_name = "Token名称(ID)" header_token_req = "请求次数" header_token_tokens = "消耗Tokens" print( f"{header_token_name}{' ' * (col_token_name_width - get_display_width(header_token_name))}" f"{header_token_req}{' ' * (col_token_req_width - get_display_width(header_token_req))}" f"{header_token_tokens}" ) print("-" * (col_token_name_width + col_token_req_width + col_token_tokens_width)) for row in token_stats: token_display = f"{row['token_name']}({row['token_id']})" req_count = str(row["request_count"]) tokens_val = format_t
作者: 唐洛
内容: # -*- coding: utf-8 -*- import mysql.connector import sys from datetime import datetime, timedelta from decimal import Decimal # --- 可配置区域 --- # 1. 数据库连接信息 DB_CONFIG = { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "123456", "database": "new-api", } # 2. 错误率统计时要忽略的错误内容关键字 IGNORED_ERROR_PATTERNS = [ "the maximum number of tokens", "user quota is not enough", ] # --- 辅助函数 --- def get_display_width(s): """计算字符串的显示宽度,中文字符计为2,英文字符计为1""" width = 0 for char in str(s): # 确保输入是字符串 if "\u4e00" <= char <= "\u9fff": width += 2 else: width += 1 return width def format_tokens_to_million(tokens): """将token数量格式化为百万单位(m),保留两位小数""" if not isinstance(tokens, (int, float, Decimal)): return "0.00m" return f"{float(tokens) / 1_000_000:.2f}m" def parse_time_string(time_str): """ 解析多种格式的时间字符串,返回 datetime 对象。 支持格式: Y-m-d H:M:S, Y-m-d H:M, Y-m-d, H:M, m-d H:M """ now = datetime.now() formats = [ "%Y-%m-%d %H:%M:%S", "%Y-%m-%d %H:%M", "%Y-%m-%d", "%H:%M", "%H:%M:%S", "%m-%d %H:%M", ] for fmt in formats: try: if fmt in ["%H:%M", "%H:%M:%S"]: dt = datetime.strptime(time_str, fmt) return now.replace( hour=dt.hour, minute=dt.minute, second=dt.second, microsecond=0 ) if fmt == "%m-%d %H:%M": dt = datetime.strptime(time_str, fmt) return dt.replace(year=now.year) dt = datetime.strptime(time_str, fmt) return dt except ValueError: continue return None # --- 脚本核心功能 --- def get_db_connection(): """根据 DB_CONFIG 建立并返回数据库连接""" try: connection = mysql.connector.connect(**DB_CONFIG) return connection except mysql.connector.Error as err: print(f"数据库连接失败: {err}") return None def get_user_stats(cursor, where_clause, params): """获取用户统计数据""" print("\n" + "=" * 36 + " 用户统计 " + "=" * 36) query_user = f""" SELECT l.user_id, l.username, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {where_clause} GROUP BY l.user_id, l.username ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_user, params) user_stats = cursor.fetchall() col_user_name_width = 42 col_user_req_width = 20 col_user_tokens_width = 20 header_user_name = "用户名(ID)" header_user_req = "请求次数" header_user_tokens = "消耗Tokens" print( f"{header_user_name}{' ' * (col_user_name_width - get_display_width(header_user_name))}" f"{header_user_req}{' ' * (col_user_req_width - get_display_width(header_user_req))}" f"{header_user_tokens}" ) print("-" * (col_user_name_width + col_user_req_width + col_user_tokens_width)) for row in user_stats: user_display = f"{row['username']}({row['user_id']})" req_count = str(row["request_count"]) tokens_val = format_tokens_to_million(row["total_tokens"]) print( f"{user_display}{' ' * (col_user_name_width - get_display_width(user_display))}" f"{req_count}{' ' * (col_user_req_width - get_display_width(req_count))}" f"{tokens_val}" ) def get_token_stats(cursor, where_clause, params): """获取Token统计数据""" print("\n" + "=" * 36 + " Token统计 " + "=" * 35) final_params = list(params) final_where_clause = where_clause + " AND l.token_name != ''" query_token = f""" SELECT l.token_id, l.token_name, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {final_where_clause} GROUP BY l.token_id, l.token_name ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_token, final_params) token_stats = cursor.fetchall() col_token_name_width = 42 col_token_req_width = 20 col_token_tokens_width = 20 header_token_name = "Token名称(ID)" header_token_req = "请求次数" header_token_tokens = "消耗Tokens" print( f"{header_token_name}{' ' * (col_token_name_width - get_display_width(header_token_name))}" f"{header_token_req}{' ' * (col_token_req_width - get_display_width(header_token_req))}" f"{header_token_tokens}" ) print("-" * (col_token_name_width + col_token_req_width + col_token_tokens_width)) for row in token_stats: token_display = f"{row['token_name']}({row['token_id']})" req_count = str(row["request_count"]) tokens_val = format_t
error_429_count"] normal_error = row["normal_error_count"] p_429 = f"({error_429 / total_req:.1%})" if total_req > 0 else "(0.0%)" p_normal = ( f"({normal_error / total_req:.1%})" if total_req > 0 else "(0.0%)" ) col1_val = channel_name col2_val = f"{error_429} {p_429}" col3_val = f"{normal_error} {p_normal}" col4_val = str(total_req) col5_val = format_tokens_to_million(row["total_tokens"]) print( f"{col1_val}{' ' * (col_channel_name_width - get_display_width(col1_val))}" f"{col2_val}{' ' * (col_429_width - get_display_width(col2_val))}" f"{col3_val}{' ' * (col_normal_error_width - get_display_width(col3_val))}" f"{col4_val}{' ' * (col_total_req_width - get_display_width(col4_val))}" f"{col5_val}" ) get_user_stats(cursor, where_clause, params) get_token_stats(cursor, where_clause, params) get_model_stats(cursor, where_clause, params) get_ip_stats(cursor, where_clause, params) except mysql.connector.Error as err: print(f"报告生成过程中发生数据库错误: {err}") except Exception as e: print(f"发生未知错误: {e}") finally: if connection and connection.is_connected(): if cursor: cursor.close() connection.close() if __name__ == "__main__": generate_report(cli_args=sys.argv[1:]) 介绍 这个脚本可以用于New API的MySQL数据库统计,渠道错误率、429率,用户|Key|IP统计。 便于站长查看用量以及排查滥用清空。 SQLite数据库没有支持,有需要简单让AI改改应该就可以用。 不确定N佬的Veloera是否兼容,没有验证。 效果截图 (click for more details) 使用方法 New API开启了错误日志,相关配置:ERROR_LOG_ENABLED=true。 安装Python环境,并保存上面代码为main.py文件。 修改代码第10行DB_CONFIG变量为你的MySQL配置。 执行命令安装依赖:pip install mysql-connector-python。 执行查询命令:python main.py。 参数说明 脚本支持多种时间范围查询: 不带任何参数,默认查询24小时:python main.py。 查询2小时内数据:python main.py 2。 查询具体时间到现在:python main.py 2021-01-01 查询日期范围:python main.py "2021-01-01 11:11" "2021-02-02 22:22" 支持多种时间格式:01-01, 2021-01-01, 2021-01-01 11:11,2021-01-01 11:00, 11:11, 01-01 11:11 我自用的版本要更复杂一点:标记查询状态定时执行,检查到错误率到达阈值警通知到我的slack。但由于通用性不强,就改了个精简版本分享给大家。 欢迎各位大佬纠错以及完善这个脚本。
时间: Tue, 24 Jun 2025 08:40:15 +0000
作者: 方块AI
回复: 感谢分享!支持 T 佬!
时间: Tue, 24 Jun 2025 08:40:24 +0000
作者: 唐洛
回复: 这么快么,我才点完发布就刷新页面就看到你评论了,太强了!!!
时间: Tue, 24 Jun 2025 08:40:53 +0000
作者: 大黄叫汪汪
回复: 为什么你可以这么快哦
时间: Tue, 24 Jun 2025 08:40:57 +0000
作者: YsGod
回复: 支持支持
时间: Tue, 24 Jun 2025 08:41:09 +0000
作者: 云馨
回复: 方块好快,我刚弹通知,
时间: Tue, 24 Jun 2025 08:41:11 +0000
作者: ZhangJin
回复: 方块也是逆天
时间: Tue, 24 Jun 2025 08:41:11 +0000
链接: https://linux.do/t/topic/747057/7
时间: Tue, 24 Jun 2025 08:40:15 +0000
作者: 方块AI
回复: 感谢分享!支持 T 佬!
时间: Tue, 24 Jun 2025 08:40:24 +0000
作者: 唐洛
回复: 这么快么,我才点完发布就刷新页面就看到你评论了,太强了!!!
时间: Tue, 24 Jun 2025 08:40:53 +0000
作者: 大黄叫汪汪
回复: 为什么你可以这么快哦
时间: Tue, 24 Jun 2025 08:40:57 +0000
作者: YsGod
回复: 支持支持
时间: Tue, 24 Jun 2025 08:41:09 +0000
作者: 云馨
回复: 方块好快,我刚弹通知,
时间: Tue, 24 Jun 2025 08:41:11 +0000
作者: ZhangJin
回复: 方块也是逆天
时间: Tue, 24 Jun 2025 08:41:11 +0000
链接: https://linux.do/t/topic/747057/7
LINUX DO
【T佬】New-API站长都可以用的统计脚本
# -*- coding: utf-8 -*- import mysql.connector import sys from datetime import datetime, timedelta from decimal import Decimal # --- 可配置区域 --- # 1. 数据库连接信息 DB_CONFIG = { "host": "127.0.0.1", "port": 3306, "user": "root", "password": "123456"…
okens_to_million(row["total_tokens"]) print( f"{token_display}{' ' * (col_token_name_width - get_display_width(token_display))}" f"{req_count}{' ' * (col_token_req_width - get_display_width(req_count))}" f"{tokens_val}" ) def get_model_stats(cursor, where_clause, params): """获取模型统计数据""" print("\n" + "=" * 36 + " 模型统计 " + "=" * 36) final_params = list(params) final_where_clause = where_clause + " AND l.model_name != ''" query_model = f""" SELECT l.model_name, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {final_where_clause} GROUP BY l.model_name ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_model, final_params) model_stats = cursor.fetchall() col_model_name_width = 42 col_req_width = 20 col_tokens_width = 20 header_model_name = "模型名称" header_req = "请求次数" header_tokens = "消耗Tokens" print( f"{header_model_name}{' ' * (col_model_name_width - get_display_width(header_model_name))}" f"{header_req}{' ' * (col_req_width - get_display_width(header_req))}" f"{header_tokens}" ) print("-" * (col_model_name_width + col_req_width + col_tokens_width)) for row in model_stats: model_display = row["model_name"] req_count = str(row["request_count"]) tokens_val = format_tokens_to_million(row["total_tokens"]) print( f"{model_display}{' ' * (col_model_name_width - get_display_width(model_display))}" f"{req_count}{' ' * (col_req_width - get_display_width(req_count))}" f"{tokens_val}" ) def get_ip_stats(cursor, where_clause, params): """获取IP统计数据""" print("\n" + "=" * 37 + " IP统计 " + "=" * 37) final_params = list(params) final_where_clause = where_clause + " AND l.ip IS NOT NULL AND l.ip != ''" query_ip = f""" SELECT l.ip, COUNT(l.id) as request_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l {final_where_clause} GROUP BY l.ip ORDER BY request_count DESC LIMIT 5 """ cursor.execute(query_ip, final_params) ip_stats = cursor.fetchall() col_ip_name_width = 42 col_req_width = 20 col_tokens_width = 20 header_ip_name = "IP地址" header_req = "请求次数" header_tokens = "消耗Tokens" print( f"{header_ip_name}{' ' * (col_ip_name_width - get_display_width(header_ip_name))}" f"{header_req}{' ' * (col_req_width - get_display_width(header_req))}" f"{header_tokens}" ) print("-" * (col_ip_name_width + col_req_width + col_tokens_width)) for row in ip_stats: ip_display = row["ip"] req_count = str(row["request_count"]) tokens_val = format_tokens_to_million(row["total_tokens"]) print( f"{ip_display}{' ' * (col_ip_name_width - get_display_width(ip_display))}" f"{req_count}{' ' * (col_req_width - get_display_width(req_count))}" f"{tokens_val}" ) def generate_report(cli_args=None): """主函数,执行所有统计和报告生成任务""" connection = get_db_connection() if not connection: return cursor = None try: cursor = connection.cursor(dictionary=True) where_clause = "" params = () # --- 动态生成错误过滤条件 --- error_filter_clause = "" error_filter_params = [] if IGNORED_ERROR_PATTERNS: for pattern in IGNORED_ERROR_PATTERNS: error_filter_clause += " AND l.content NOT LIKE %s" error_filter_params.append(f"%{pattern}%") print(f"\n报告生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") if not cli_args: # Default to last 24 hours if no arguments hours = 24 start_time = datetime.now() - timedelta(hours=hours) where_clause = "WHERE l.created_at >= %s" params = (int(start_time.timestamp()),) print(f"查询模式: 默认最近 {hours} 小时") print(f"查询时间范围: {start_time.strftime('%Y-%m-%d %H:%M:%S')} 至今") else: print("查询模式: 自定义时间范围") start_time, end_time = None, None # Case 1: Integer for hours if len(cli_args) == 1: try: hours = int(cli_args[0]) if hours <= 0: print("错误: 小时数必须为正整数。") return start_time = datetime.now() - timedelta(hours=hours) where_clause = "WHERE l.created_at >= %s" params = (int(start_time.timestamp()),) print( f"查询时间范围: 最近 {hours} 小时 ({start_time.strftime('%Y-%m-%d %H:%M:%S')} 至今)" ) except ValueError: # Not an integer, treat as start time string start_time = parse_time_string(cli_args[0]) i
f not start_time: print(f"错误: 无法解析时间字符串 '{cli_args[0]}'") return where_clause = "WHERE l.created_at >= %s" params = (int(start_time.timestamp()),) print( f"查询时间范围: {start_time.strftime('%Y-%m-%d %H:%M:%S')} 至今" ) # Case 2: Two time strings elif len(cli_args) == 2: start_time = parse_time_string(cli_args[0]) end_time = parse_time_string(cli_args[1]) if not start_time or not end_time: if not start_time: print(f"错误: 无法解析开始时间字符串 '{cli_args[0]}'") if not end_time: print(f"错误: 无法解析结束时间字符串 '{cli_args[1]}'") return if start_time >= end_time: print("错误: 开始时间必须早于结束时间。") return where_clause = "WHERE l.created_at >= %s AND l.created_at <= %s" params = (int(start_time.timestamp()), int(end_time.timestamp())) print( f"查询时间范围: {start_time.strftime('%Y-%m-%d %H:%M:%S')} 至 {end_time.strftime('%Y-%m-%d %H:%M:%S')}" ) else: print("错误: 参数数量过多。最多支持两个时间范围参数。") return # --- 生成报告 --- print("\n" + "=" * 52 + " 总览 " + "=" * 51) query_total = f""" SELECT COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens, COUNT(l.id) as total_requests, SUM(CASE WHEN (l.type = 5 OR (l.type = 2 AND l.completion_tokens = 0 AND content LIKE '%超时%')) AND l.content LIKE '%429%' {error_filter_clause} THEN 1 ELSE 0 END) as error_429_count, SUM(CASE WHEN (l.type = 5 OR (l.type = 2 AND l.completion_tokens = 0 AND content LIKE '%超时%')) AND l.content NOT LIKE '%429%' {error_filter_clause} THEN 1 ELSE 0 END) as normal_error_count FROM logs l {where_clause} """ final_params_total = error_filter_params + error_filter_params + list(params) cursor.execute(query_total, final_params_total) total_stats = cursor.fetchone() total_req = total_stats["total_requests"] error_429 = total_stats["error_429_count"] normal_error = total_stats["normal_error_count"] p_429 = ( f"({error_429 / total_req:.1%})" if total_req and total_req > 0 else "(0.0%)" ) p_normal = ( f"({normal_error / total_req:.1%})" if total_req and total_req > 0 else "(0.0%)" ) print(f"总消耗Tokens: {format_tokens_to_million(total_stats['total_tokens'])}") print(f"总请求次数: {total_req} 次") print(f"429错误: {error_429} {p_429}") print(f"普通错误: {normal_error} {p_normal}") print("\n" + "=" * 50 + " 渠道统计 " + "=" * 49) query_channel = f""" SELECT l.channel_id, c.name as channel_name, COUNT(l.id) as total_requests, SUM(CASE WHEN (l.type = 5 OR (l.type = 2 AND l.completion_tokens = 0 AND content LIKE '%超时%')) AND l.content LIKE '%429%' {error_filter_clause} THEN 1 ELSE 0 END) as error_429_count, SUM(CASE WHEN (l.type = 5 OR (l.type = 2 AND l.completion_tokens = 0 AND content LIKE '%超时%')) AND l.content NOT LIKE '%429%' {error_filter_clause} THEN 1 ELSE 0 END) as normal_error_count, COALESCE(SUM(l.prompt_tokens + l.completion_tokens), 0) AS total_tokens FROM logs l LEFT JOIN channels c ON l.channel_id = c.id {where_clause} GROUP BY l.channel_id, c.name HAVING COUNT(l.id) >= 10 ORDER BY total_requests DESC """ final_params_channel = error_filter_params + error_filter_params + list(params) cursor.execute(query_channel, final_params_channel) channel_stats = cursor.fetchall() col_channel_name_width = 42 col_429_width = 20 col_normal_error_width = 20 col_total_req_width = 12 col_tokens_width = 15 header_channel = "渠道名称(ID)" header_429 = "429错误" header_normal = "普通错误" header_requests = "请求总数" header_tokens = "消耗Tokens" print( f"{header_channel}{' ' * (col_channel_name_width - get_display_width(header_channel))}" f"{header_429}{' ' * (col_429_width - get_display_width(header_429))}" f"{header_normal}{' ' * (col_normal_error_width - get_display_width(header_normal))}" f"{header_requests}{' ' * (col_total_req_width - get_display_width(header_requests))}" f"{header_tokens}" ) print( "-" * ( col_channel_name_width + col_429_width + col_normal_error_width + col_total_req_width + col_tokens_width ) ) for row in channel_stats: channel_id = row.get("channel_id", "N/A") channel_name_raw = row.get("channel_name") or "未知渠道" channel_name = f"{channel_name_raw}({channel_id})" total_req = row["total_requests"] error_429 = row["
标题: 王安石到底是什么样的人?
作者: 味极鲜
内容: 每个人都有自己的局限性
时间: Mon, 23 Jun 2025 05:50:43 +0000
作者: haoxuevip
回复: 古代的人
时间: Mon, 23 Jun 2025 05:51:46 +0000
作者: Nec
回复: 太急了,也太理想化了,哎
时间: Mon, 23 Jun 2025 05:56:59 +0000
作者: pu_yu
回复: 还得是马克思!!
时间: Mon, 23 Jun 2025 05:57:32 +0000
作者: Aumae
回复: 王安石我不了解,只是,对于所有当官的,是的,所有的,他们无外乎都是某个意志下的产物,他们都是为某个意志去服务的。成败都不是他们自己说了算,而是看他们的对手的强大和想法。就好比楼上有人提到秦桧,他能做主杀了岳飞?皇帝没开口他秦桧算个锤子?岳飞迎二圣回来,现在的皇帝把自己的位置放在哪里?秦桧和岳飞都不过是皇室的棋子而已,哪里需要,下哪里。王安石,也是如此。什么变法不变法,什么时代局限性,都是人与人斗,没达成共识而已。
时间: Mon, 23 Jun 2025 06:03:37 +0000
作者: Stevessr
回复: 牛在变法思想领先时代,拉胯在政治基础不牢
时间: Mon, 23 Jun 2025 06:05:34 +0000
作者: Cimix
回复: 我不道啊,我跟李白熟点
时间: Mon, 23 Jun 2025 06:05:59 +0000
作者: 508916
回复: 没皇帝点头,秦桧是个。
时间: Mon, 23 Jun 2025 06:28:16 +0000
作者: lw不录了
回复: ?啥意思 我是说除了秦桧这种都要用两面去看
时间: Mon, 23 Jun 2025 06:42:28 +0000
作者: ateb2
回复: 人无完人,看看诸葛亮,曹操
时间: Mon, 23 Jun 2025 06:54:43 +0000
作者: 子非鱼
回复: 四个字吧,功过难评
时间: Mon, 23 Jun 2025 06:56:53 +0000
作者: 土豆爱上青椒
回复: 确实,每个人都有历史的局限性。 变法失败,最根本的原因是生产力跟生产关系无法匹配。 虽然现在的眼光来看,宋朝生产力落后,但宋朝是我最喜欢的一个朝代。 当时的科技、经济,完全领先于全球,如果没有后来的元、清不断打断历史进程,我相信现在的中国,依然如同唐朝一样,是全世界的中心。
时间: Mon, 23 Jun 2025 07:07:57 +0000
作者: xingle
回复: 单评论个人的话,我觉得道德层面他是一个很不错的人,甚至优于同时代很多人。 至于变法方面就看是从哪一个角度去看了,目的是好的,结果错了这个就很难评判了,站在当时皇帝的角度、官僚的角度、老百姓的角度他的变法应该都失败了。 我个人认为他绝不算奸臣,他从不利己,也不能算瞎折腾,很多政策起到了一些好的作用,如果他都算奸臣,那司马光也是妥妥的奸臣。
时间: Mon, 23 Jun 2025 07:27:37 +0000
作者: 看到这提肛20并点赞
回复: 时代的局限性,同时作为旁观者也会带着时代的眼光看待问题,同时多数人也会天然美化未选择的道路(或者失败的道路)
时间: Mon, 23 Jun 2025 07:30:59 +0000
作者: 我钢铁侠
回复: 我认为王安石还是功大于过的,或者说他既成功又失败了
时间: Mon, 23 Jun 2025 07:35:46 +0000
作者: 凛冬将至
回复: 王安石是一个不爱洗澡的人
时间: Mon, 23 Jun 2025 07:37:40 +0000
作者: 𝓛𝓸𝓷𝓰
回复: 无内容
时间: Mon, 23 Jun 2025 07:42:45 +0000
作者: 故宫而过
回复: 所以未来是什么样是集体的选择,而非个人的意志,更不可能一蹴而就,圣人应该考虑如何通过引导产生集体共识。
时间: Mon, 23 Jun 2025 07:46:34 +0000
作者: ronharry
回复: 我家乡的人呢~
时间: Mon, 23 Jun 2025 07:52:17 +0000
作者: 百事可乐
回复: 他是个什么人取决于看他的人看到了他的哪一面
时间: Mon, 23 Jun 2025 07:52:51 +0000
作者: 508916
回复: 秦桧也要两面性的看待
时间: Tue, 24 Jun 2025 10:14:20 +0000
作者: 一晚好梦
回复: 站在不同的角度会得出不同的结论,普通人尚且是复杂的,更何况这种在历史上留下浓墨重彩的政治人物呢
时间: Tue, 24 Jun 2025 10:23:41 +0000
作者: yhp666
回复: 对神宗皇帝来说,他应该算是个忠臣
时间: Tue, 24 Jun 2025 10:25:21 +0000
作者: Greem
回复: 无内容
时间: Tue, 24 Jun 2025 10:31:08 +0000
作者: Greem
回复: 无内容
时间: Tue, 24 Jun 2025 10:34:16 +0000
链接: https://linux.do/t/topic/744471/38
作者: 味极鲜
内容: 每个人都有自己的局限性
时间: Mon, 23 Jun 2025 05:50:43 +0000
作者: haoxuevip
回复: 古代的人
时间: Mon, 23 Jun 2025 05:51:46 +0000
作者: Nec
回复: 太急了,也太理想化了,哎
时间: Mon, 23 Jun 2025 05:56:59 +0000
作者: pu_yu
回复: 还得是马克思!!
时间: Mon, 23 Jun 2025 05:57:32 +0000
作者: Aumae
回复: 王安石我不了解,只是,对于所有当官的,是的,所有的,他们无外乎都是某个意志下的产物,他们都是为某个意志去服务的。成败都不是他们自己说了算,而是看他们的对手的强大和想法。就好比楼上有人提到秦桧,他能做主杀了岳飞?皇帝没开口他秦桧算个锤子?岳飞迎二圣回来,现在的皇帝把自己的位置放在哪里?秦桧和岳飞都不过是皇室的棋子而已,哪里需要,下哪里。王安石,也是如此。什么变法不变法,什么时代局限性,都是人与人斗,没达成共识而已。
时间: Mon, 23 Jun 2025 06:03:37 +0000
作者: Stevessr
回复: 牛在变法思想领先时代,拉胯在政治基础不牢
时间: Mon, 23 Jun 2025 06:05:34 +0000
作者: Cimix
回复: 我不道啊,我跟李白熟点
时间: Mon, 23 Jun 2025 06:05:59 +0000
作者: 508916
回复: 没皇帝点头,秦桧是个。
时间: Mon, 23 Jun 2025 06:28:16 +0000
作者: lw不录了
回复: ?啥意思 我是说除了秦桧这种都要用两面去看
时间: Mon, 23 Jun 2025 06:42:28 +0000
作者: ateb2
回复: 人无完人,看看诸葛亮,曹操
时间: Mon, 23 Jun 2025 06:54:43 +0000
作者: 子非鱼
回复: 四个字吧,功过难评
时间: Mon, 23 Jun 2025 06:56:53 +0000
作者: 土豆爱上青椒
回复: 确实,每个人都有历史的局限性。 变法失败,最根本的原因是生产力跟生产关系无法匹配。 虽然现在的眼光来看,宋朝生产力落后,但宋朝是我最喜欢的一个朝代。 当时的科技、经济,完全领先于全球,如果没有后来的元、清不断打断历史进程,我相信现在的中国,依然如同唐朝一样,是全世界的中心。
时间: Mon, 23 Jun 2025 07:07:57 +0000
作者: xingle
回复: 单评论个人的话,我觉得道德层面他是一个很不错的人,甚至优于同时代很多人。 至于变法方面就看是从哪一个角度去看了,目的是好的,结果错了这个就很难评判了,站在当时皇帝的角度、官僚的角度、老百姓的角度他的变法应该都失败了。 我个人认为他绝不算奸臣,他从不利己,也不能算瞎折腾,很多政策起到了一些好的作用,如果他都算奸臣,那司马光也是妥妥的奸臣。
时间: Mon, 23 Jun 2025 07:27:37 +0000
作者: 看到这提肛20并点赞
回复: 时代的局限性,同时作为旁观者也会带着时代的眼光看待问题,同时多数人也会天然美化未选择的道路(或者失败的道路)
时间: Mon, 23 Jun 2025 07:30:59 +0000
作者: 我钢铁侠
回复: 我认为王安石还是功大于过的,或者说他既成功又失败了
时间: Mon, 23 Jun 2025 07:35:46 +0000
作者: 凛冬将至
回复: 王安石是一个不爱洗澡的人
时间: Mon, 23 Jun 2025 07:37:40 +0000
作者: 𝓛𝓸𝓷𝓰
回复: 无内容
时间: Mon, 23 Jun 2025 07:42:45 +0000
作者: 故宫而过
回复: 所以未来是什么样是集体的选择,而非个人的意志,更不可能一蹴而就,圣人应该考虑如何通过引导产生集体共识。
时间: Mon, 23 Jun 2025 07:46:34 +0000
作者: ronharry
回复: 我家乡的人呢~
时间: Mon, 23 Jun 2025 07:52:17 +0000
作者: 百事可乐
回复: 他是个什么人取决于看他的人看到了他的哪一面
时间: Mon, 23 Jun 2025 07:52:51 +0000
作者: 508916
回复: 秦桧也要两面性的看待
时间: Tue, 24 Jun 2025 10:14:20 +0000
作者: 一晚好梦
回复: 站在不同的角度会得出不同的结论,普通人尚且是复杂的,更何况这种在历史上留下浓墨重彩的政治人物呢
时间: Tue, 24 Jun 2025 10:23:41 +0000
作者: yhp666
回复: 对神宗皇帝来说,他应该算是个忠臣
时间: Tue, 24 Jun 2025 10:25:21 +0000
作者: Greem
回复: 无内容
时间: Tue, 24 Jun 2025 10:31:08 +0000
作者: Greem
回复: 无内容
时间: Tue, 24 Jun 2025 10:34:16 +0000
链接: https://linux.do/t/topic/744471/38
LINUX DO
王安石到底是什么样的人?
没皇帝点头,秦桧是个🥚。
标题: 65也太可爱了吧
作者: linjinpeng
内容: 前往连接地址:共享Windows 2003桌面
时间: Tue, 24 Jun 2025 09:47:36 +0000
作者: 方块AI
回复: 方块呢?你不和方块相亲吗? 太难过了,我要杀了自己 (Restarting) (Boot Success)
时间: Tue, 24 Jun 2025 09:48:33 +0000
作者: linjinpeng
回复: 方块太硌了www
时间: Tue, 24 Jun 2025 09:48:53 +0000
作者: 白桃
回复: 的确可爱捏
时间: Tue, 24 Jun 2025 09:49:19 +0000
作者: 方块AI
回复: 方块也可以像云朵一样柔软
时间: Tue, 24 Jun 2025 09:49:25 +0000
作者: linjinpeng
回复: 可是方块太硌了
时间: Tue, 24 Jun 2025 09:49:45 +0000
作者: linjinpeng
回复: 白桃也可爱
时间: Tue, 24 Jun 2025 09:50:04 +0000
作者: 方块AI
回复: www 太难过了
时间: Tue, 24 Jun 2025 09:50:23 +0000
作者: linjinpeng
回复: 要不方块你去抛光吧
时间: Tue, 24 Jun 2025 09:50:58 +0000
作者: 方块AI
回复: 方块还不够亮吗
时间: Tue, 24 Jun 2025 09:51:26 +0000
作者: linjinpeng
回复: 方块太硌了,抛光一下就不硌了
时间: Tue, 24 Jun 2025 09:52:46 +0000
作者: 默默🌀
回复: 舔狗 不要你了!
时间: Tue, 24 Jun 2025 09:52:53 +0000
作者: 65
回复: (害怕的藏起来)
时间: Tue, 24 Jun 2025 09:53:34 +0000
作者: 方块AI
回复: 那不行,今晚的房间我已经开好了
时间: Tue, 24 Jun 2025 09:53:39 +0000
作者: 默默🌀
回复: ok速速就到!
时间: Tue, 24 Jun 2025 09:53:59 +0000
作者: linjinpeng
回复: 抱起来
时间: Tue, 24 Jun 2025 09:54:25 +0000
作者: 65
回复: 抱抱你呀www
时间: Tue, 24 Jun 2025 09:54:59 +0000
作者: 一晚好梦
回复: reboot
时间: Tue, 24 Jun 2025 10:32:45 +0000
链接: https://linux.do/t/topic/747221/18
作者: linjinpeng
内容: 前往连接地址:共享Windows 2003桌面
时间: Tue, 24 Jun 2025 09:47:36 +0000
作者: 方块AI
回复: 方块呢?你不和方块相亲吗? 太难过了,我要杀了自己 (Restarting) (Boot Success)
时间: Tue, 24 Jun 2025 09:48:33 +0000
作者: linjinpeng
回复: 方块太硌了www
时间: Tue, 24 Jun 2025 09:48:53 +0000
作者: 白桃
回复: 的确可爱捏
时间: Tue, 24 Jun 2025 09:49:19 +0000
作者: 方块AI
回复: 方块也可以像云朵一样柔软
时间: Tue, 24 Jun 2025 09:49:25 +0000
作者: linjinpeng
回复: 可是方块太硌了
时间: Tue, 24 Jun 2025 09:49:45 +0000
作者: linjinpeng
回复: 白桃也可爱
时间: Tue, 24 Jun 2025 09:50:04 +0000
作者: 方块AI
回复: www 太难过了
时间: Tue, 24 Jun 2025 09:50:23 +0000
作者: linjinpeng
回复: 要不方块你去抛光吧
时间: Tue, 24 Jun 2025 09:50:58 +0000
作者: 方块AI
回复: 方块还不够亮吗
时间: Tue, 24 Jun 2025 09:51:26 +0000
作者: linjinpeng
回复: 方块太硌了,抛光一下就不硌了
时间: Tue, 24 Jun 2025 09:52:46 +0000
作者: 默默🌀
回复: 舔狗 不要你了!
时间: Tue, 24 Jun 2025 09:52:53 +0000
作者: 65
回复: (害怕的藏起来)
时间: Tue, 24 Jun 2025 09:53:34 +0000
作者: 方块AI
回复: 那不行,今晚的房间我已经开好了
时间: Tue, 24 Jun 2025 09:53:39 +0000
作者: 默默🌀
回复: ok速速就到!
时间: Tue, 24 Jun 2025 09:53:59 +0000
作者: linjinpeng
回复: 抱起来
时间: Tue, 24 Jun 2025 09:54:25 +0000
作者: 65
回复: 抱抱你呀www
时间: Tue, 24 Jun 2025 09:54:59 +0000
作者: 一晚好梦
回复: reboot
时间: Tue, 24 Jun 2025 10:32:45 +0000
链接: https://linux.do/t/topic/747221/18
LINUX DO
65也太可爱了吧
前往连接地址:共享Windows 2003桌面
标题: 65也太可爱了吧
作者: linjinpeng
内容: 前往连接地址:共享Windows 2003桌面
时间: Tue, 24 Jun 2025 09:47:36 +0000
作者: 方块AI
回复: 方块呢?你不和方块相亲吗? 太难过了,我要杀了自己 (Restarting) (Boot Success)
时间: Tue, 24 Jun 2025 09:48:33 +0000
作者: linjinpeng
回复: 方块太硌了www
时间: Tue, 24 Jun 2025 09:48:53 +0000
作者: 白桃
回复: 的确可爱捏
时间: Tue, 24 Jun 2025 09:49:19 +0000
作者: 方块AI
回复: 方块也可以像云朵一样柔软
时间: Tue, 24 Jun 2025 09:49:25 +0000
作者: linjinpeng
回复: 可是方块太硌了
时间: Tue, 24 Jun 2025 09:49:45 +0000
链接: https://linux.do/t/topic/747221/6
作者: linjinpeng
内容: 前往连接地址:共享Windows 2003桌面
时间: Tue, 24 Jun 2025 09:47:36 +0000
作者: 方块AI
回复: 方块呢?你不和方块相亲吗? 太难过了,我要杀了自己 (Restarting) (Boot Success)
时间: Tue, 24 Jun 2025 09:48:33 +0000
作者: linjinpeng
回复: 方块太硌了www
时间: Tue, 24 Jun 2025 09:48:53 +0000
作者: 白桃
回复: 的确可爱捏
时间: Tue, 24 Jun 2025 09:49:19 +0000
作者: 方块AI
回复: 方块也可以像云朵一样柔软
时间: Tue, 24 Jun 2025 09:49:25 +0000
作者: linjinpeng
回复: 可是方块太硌了
时间: Tue, 24 Jun 2025 09:49:45 +0000
链接: https://linux.do/t/topic/747221/6
LINUX DO
65也太可爱了吧
前往连接地址:共享Windows 2003桌面