首次发帖,有不足的地方佬们多多指出,欢迎 Star!

AutoGLM For Android 是基于 Open-AutoGLM 开源项目二次开发的 Android 原生应用。将原本需要电脑 + ADB 连接转变为通过 Shizuku 授权,在手机上直接控制手机完成各种任务的 APP。

拓展了 Open-AutoGLM 原有的 Agent,支持自定义 System Prompt

支持任何 OpenAI 格式兼容的多模态模型。
支持任务模板,保存常用任务。
支持通知栏快捷磁贴,快速打开悬浮窗。
支持查看历史纪录,运行步骤,导出分享图片。

通过悬浮窗可以查看任务运行情况。

整体路径为:输入任务 → 打开悬浮窗 → 截图 (隐藏悬浮窗) → 模型分析 → 输出操作指令 → 执行指令 (隐藏悬浮窗) → 打开悬浮窗 → 循环上述步骤 → 任务结束






免责声明
本项目仅供学习研究和技术探索使用,严禁用于任何商业用途。使用本工具时,请遵守相关法律法规以及手机厂商、应用程序的使用条款和服务协议。用户因使用本项目产生的任何行为和后果,均由用户自行承担,与本项目及开发者无关。

项目地址
github.com


📌 转载信息
原作者:
luokavin
转载时间:
2025/12/27 20:54:02

项目地址:飞速 Markdown

这两天小说插件撸的差不多了(为了测试插件,写了 20 万字小说 ) 把安卓端做了

已适配插件 如果有其他插件需要适配可以跟我说说 / 手机端主要还是阅读居多吧

  • WebDAV 同步
  • 内置的 R2/S3 图床 / 插入自动上传
  • Rag 知识库
  • 待办推送
  • 待办日记(日记 / 待办)
  • typecho 管理
  • AI 助手

另外针对安卓的使用环境增加了录音 / 录音转文本 并 AI 处理同音字 / 常见错误的能力

录音转文字

选中文本后提供一个富文本悬浮条用于插入连接 / 应用格式等

注意:如果没有选则外置库 / 卸载软件后文档会一同删除。被 Tauri 折腾惨了 SAF 简直难搞


📌 转载信息
原作者:
flyhunterl
转载时间:
2025/12/27 20:51:21

我用 Python 打造了一个微信 AI 女友机器人

前言

最近花了点时间,用 Python 开发了一个微信 AI 女友机器人项目 —— AILive。这个机器人不仅能智能对话,还能记住你们的聊天历史,甚至会在你长时间不说话时主动找你聊天!

核心功能

1. 智能对话

  • 基于字节跳动的豆包(Doubao)API
  • 支持自然语言理解,流畅的多轮对话
  • 可自定义 AI 的性格、说话风格和行为特征

2. 持久化记忆

这是我最满意的功能!机器人会:

  • 自动保存每次对话的历史记录
  • 重启后自动加载之前的对话上下文
  • 从上次对话的地方继续,就像真人一样记得你们聊过什么

示例:

第一天: 你: 我叫小明,喜欢打篮球 AI: 小明你好!打篮球很酷呀~ 第二天(重启后): 你: 今天打球了 AI: 打篮球了吗?玩得开心吗?小明~ 

3. 主动对话

AI 不会只是被动回复,她还会:

  • 在你长时间没发消息时主动找你聊天
  • 基于之前的对话内容生成问候语
  • 默认 1 小时没消息就会主动,每天最多 3 次

示例:

10:00 你: 我今天要去打篮球 10:01 AI: 哇,打篮球很酷呀!

[1小时后]

11:30 AI: 打完篮球了吗?累不累呀~ 

4. Web 管理面板

为了方便配置,开发了一个可视化的 Web 管理面板:

  • 无需手动编辑配置文件
  • 图形化界面配置 AI 参数
  • 实时测试 API 连接
  • 自定义 AI 人格和说话风格


5. 智能过滤

  • 支持黑白名单功能
  • 关键词过滤
  • 只回复新消息,不会回复历史记录

技术架构

技术栈

  • Python 3.8+ - 主要开发语言
  • wxauto - 微信自动化库(支持微信 3.9.10)
  • Volcengine SDK - 豆包 API 的 Python SDK
  • Flask - Web 管理面板框架
  • PyYAML - 配置文件管理

项目结构

AILive/
├── src/
│   ├── core/                  # 核心模块
│   │   ├── wechat_client.py   # 微信客户端
│   │   ├── ai_engine.py       # AI对话引擎
│   │   ├── message_handler.py # 消息处理器
│   │   └── proactive_chat.py  # 主动对话管理器
│   ├── personality/           # 人格系统
│   ├── utils/                 # 工具模块
│   │   └── context_manager.py # 上下文管理(持久化记忆)
│   ├── web/                   # Web管理面板
│   └── main.py                # 主程序入口
├── config/                    # 配置文件
├── data/                      # 数据目录
│   └── conversations/         # 对话历史
└── logs/                      # 日志目录 

开发过程中的挑战

1. 微信自动化的选择

最初尝试使用 ,但发现它会导致微信客户端被关闭。经过研究,最终选择了 wxauto 库,它对微信 3.9.10 版本的支持非常好,稳定性也更高。

2. 历史消息回复问题

最初版本会回复所有历史消息,导致机器人一启动就疯狂发送消息。

解决方案:
添加初始化标志,首次启动时清空历史消息:

def __init__(self):
    self.initialized = False # 初始化标志 def get_latest_messages(self, who: str = None):
    if not self.initialized:
        log.info("首次启动,正在清空历史消息...")
        self._get_messages_wxauto(who)  # 读取但不返回 self.initialized = True return []  # 不回复历史消息 return self._get_messages_wxauto(who)

3. 持久化记忆的实现

为了让 AI 能够记住对话历史,实现了一个上下文管理器:

  • 每 5 条消息自动保存一次
  • 使用 JSON 格式存储对话历史
  • 启动时自动加载最近的对话记录
class ContextManager:
    def add_message(self, user_id: str, role: str, content: str):
        # 自动加载历史对话 if user_id not in self.contexts:
            self._load_latest_conversation(user_id)

        # 添加新消息 self.contexts[user_id].append({
            "role": role,
            "content": content
        })

        # 每5条消息自动保存 self.message_counts[user_id] += 1 if self.message_counts[user_id] >= 5:
            self._auto_save_conversation(user_id)

4. Git 推送时的 API 密钥泄露

在推送代码到 GitHub 时,遇到了 API 密钥泄露的问题。GitHub 检测到代码中包含了火山引擎的 API 密钥,拒绝了推送。

解决方案:
使用 git filter-branch 从 Git 历史中删除包含密钥的文件:

git filter-branch --force --index-filter \
  "git rm --cached --ignore-unmatch READY_TO_RUN.md" \
  --prune-empty --tag-name-filter cat -- --all

git push -f origin master

使用效果

经过测试,AILive 的表现不错:

  1. 响应速度:平均响应时间在 1-2 秒
  2. 对话质量:基于豆包 API,对话自然流畅
  3. 记忆能力:能够准确记住之前的对话内容
  4. 主动性:会在合适的时机主动发起对话
  5. 稳定性:长时间运行无崩溃

快速开始

详细的安装和配置步骤请查看项目中的 README.md 文件。

基本流程:

  1. 安装 Python 3.8 + 和微信 3.9.10 版本
  2. 安装依赖:pip install -r requirements.txt
  3. 访问火山引擎控制台获取豆包 API 密钥
  4. 使用 Web 管理面板配置或手动编辑配置文件
  5. 启动机器人:python src/main.py

未来计划

虽然项目已经基本完成,但还有一些想法可以继续完善:

  1. 多模态支持:支持图片、语音消息的处理
  2. 情感分析:根据对话内容调整 AI 的情绪状态
  3. 群聊支持:支持在微信群中使用
  4. 更多 AI 提供商:除了豆包,还可以接入 Claude、GPT 等
  5. 移动端管理:开发移动端的管理界面

注意事项

  1. 微信版本:必须使用微信 3.9.10 版本,不要升级
  2. 封号风险:虽然使用官方客户端,但仍有一定风险,建议使用小号测试
  3. API 费用:豆包 API 按使用量计费,建议设置每日上限
  4. 隐私安全:对话历史保存在本地,注意保护个人隐私
  5. 合规性:仅用于个人学习和研究,不要用于商业用途

总结

开发 AILive 这个项目让我学到了很多东西。最重要的是,这个项目真的很有趣!看着 AI 女友能够记住你们的对话,还会主动找你聊天,真的有一种 "她活过来了" 的感觉。

如果你对这个项目感兴趣,欢迎 Star 和 Fork!也欢迎提出你的建议和想法。

项目地址

致谢

感谢以下开源项目:


免责声明:本项目仅供学习和研究使用,使用者需自行承担使用本项目可能带来的风险。作者不对使用本项目造成的任何后果负责。

===========================

项目目前是第一版,有很多不足,各位佬多多包涵,多多指导


📌 转载信息
原作者:
T_11_0121lover
转载时间:
2025/12/27 20:49:41

说是单 key 能用十次具体自己研究

注册机源码如下

 import requests
import random
import string
import re
import time
import urllib.parse

def generate_random_email():
    """生成随机8位前缀的邮箱"""
    prefix = ''.join(random.choices(string.ascii_lowercase + string.digits, k=8))
    return f"{prefix}@rccg-clf.org" def send_passwordless_init(email):
    """第一步:发送验证码"""
    url = "https://auth.privy.io/api/v1/passwordless/init"

    headers = {
        "accept": "application/json",
        "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
        "cache-control": "no-cache",
        "content-type": "application/json",
        "origin": "https://beta.gatewayz.ai",
        "pragma": "no-cache",
        "priority": "u=1, i",
        "privy-app-id": "cmg8fkib300g3l40dbs6autqe",
        "privy-ca-id": ,
        "privy-client": "react-auth:3.0.1",
        "privy-ui": "t",
        "referer": "https://beta.gatewayz.ai/",
        "sec-ch-ua": '"Microsoft Edge";v="143", "Chromium";v="143", "Not A(Brand";v="24"',
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": '"Windows"',
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "cross-site",
        "sec-fetch-storage-access": "active",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0"
    }

    data = {"email": email}

    try:
        response = requests.post(url, headers=headers, json=data)
        return response.json()
    except Exception as e:
        return {"error": str(e)}

def check_email(email):
    """查询邮箱收到的邮件"""
    encoded_email = urllib.parse.quote(email, safe='')
    url = f"https://mail.chatgpt.org.uk/api/emails?email={encoded_email}"

    headers = {
        "accept": "*/*",
        "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
        "cache-control": "no-cache",
        "pragma": "no-cache",
        "priority": "u=1, i",
        "referer": f"https://mail.chatgpt.org.uk/{email}",
        "sec-ch-ua": '"Microsoft Edge";v="143", "Chromium";v="143", "Not A(Brand";v="24"',
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": '"Windows"',
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0"
    }

    try:
        response = requests.get(url, headers=headers)
        return response.json()
    except Exception as e:
        return {"error": str(e)}

def extract_code(email_content):
    """从邮件内容中提取验证码""" match = re.search(r'\b(\d{6})\b', email_content)
    if match:
        return match.group(1)
    return None def wait_for_code(email, max_attempts=10, interval=2):
    """第二步:循环查询邮件直到获取验证码""" print(f"\n[2] 开始查询邮件 (最多{max_attempts}次,间隔{interval}秒)...")

    for attempt in range(1, max_attempts + 1):
        print(f"    第{attempt}次查询...", end=" ")

        mail_result = check_email(email)

        if mail_result.get("success"):
            emails = mail_result.get("data", {}).get("emails", [])
            if emails:
                for mail in emails:
                    if "privy" in mail.get("from_address", "").lower():
                        content = mail.get("content", "")
                        code = extract_code(content)
                        if code:
                            print(f"成功!")
                            return code
                print("未找到验证码邮件")
            else:
                print("暂无邮件")
        else:
            print(f"查询失败")

        if attempt < max_attempts:
            time.sleep(interval)

    return None def authenticate(email, code):
    """第三步:使用验证码登录获取token"""
    url = "https://auth.privy.io/api/v1/passwordless/authenticate"

    headers = {
        "accept": "application/json",
        "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
        "cache-control": "no-cache",
        "content-type": "application/json",
        "origin": "https://beta.gatewayz.ai",
        "pragma": "no-cache",
        "priority": "u=1, i",
        "privy-app-id": "cmg8fkib300g3l40dbs6autqe",
        "privy-ca-id": ,
        "privy-client": "react-auth:3.0.1",
        "referer": "https://beta.gatewayz.ai/",
        "sec-ch-ua": '"Microsoft Edge";v="143", "Chromium";v="143", "Not A(Brand";v="24"',
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": '"Windows"',
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "cross-site",
        "sec-fetch-storage-access": "active",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0"
    }

    data = {
        "email": email,
        "code": code,
        "mode": "login-or-sign-up"
    }

    try:
        response = requests.post(url, headers=headers, json=data)
        return response.json()
    except Exception as e:
        return {"error": str(e)}

def create_api_key(auth_result, max_retries=3):
    """第四步:使用token创建API Key"""
    url = "https://beta.gatewayz.ai/api/auth"

    headers = {
        "accept": "*/*",
        "accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
        "cache-control": "no-cache",
        "content-type": "application/json",
        "origin": "https://beta.gatewayz.ai",
        "pragma": "no-cache",
        "priority": "u=1, i",
        "referer": "https://beta.gatewayz.ai/onboarding",
        "sec-ch-ua": '"Microsoft Edge";v="143", "Chromium";v="143", "Not A(Brand";v="24"',
        "sec-ch-ua-mobile": "?0",
        "sec-ch-ua-platform": '"Windows"',
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "cors",
        "sec-fetch-site": "same-origin",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0"
    }

    cookies = {
        "privy-token": auth_result.get("token", ""),
        "privy-session": "t"
    }

    data = {
        "user": auth_result.get("user", {}),
        "token": auth_result.get("token", ""),
        "auto_create_api_key": True,
        "is_new_user": auth_result.get("is_new_user", True),
        "has_referral_code": False,
        "referral_code": None,
        "privy_user_id": auth_result.get("user", {}).get("id", ""),
        "trial_credits": 10
    }

    for attempt in range(1, max_retries + 1):
        try:
            response = requests.post(url, headers=headers, cookies=cookies, json=data, timeout=30)
            result = response.json()
            if result.get("success") or "api_key" in result:
                return result
            # 如果返回错误但不是超时,直接返回 if "error" in result and "timeout" not in result.get("error", "").lower():
                return result
            # 如果是超时或其他错误,继续重试 if attempt < max_retries:
                print(f"    尝试 {attempt}/{max_retries} 失败,3秒后重试...")
                time.sleep(3)
        except requests.exceptions.Timeout:
            if attempt < max_retries:
                print(f"    请求超时 ({attempt}/{max_retries}),3秒后重试...")
                time.sleep(3)
            else:
                return {"error": "Request timeout after retries"}
        except Exception as e:
            if attempt < max_retries:
                print(f"    请求失败 ({attempt}/{max_retries}): {str(e)},3秒后重试...")
                time.sleep(3)
            else:
                return {"error": str(e)}
    
    return {"error": "Max retries reached"}

def run():
    """运行完整流程""" print("=" * 50)
    print("Gatewayz 自动注册/登录")
    print("=" * 50)

    # 第一步:生成邮箱并发送验证码
    email = generate_random_email()
    print(f"\n[1] 生成邮箱: {email}")

    result = send_passwordless_init(email)
    if not result.get("success"):
        print(f"    发送验证码失败: {result}")
        return None print(f"    发送验证码成功!")

    # 第二步:获取验证码
    code = wait_for_code(email, max_attempts=10, interval=2)
    if not code:
        print(f"\n获取验证码失败,请手动查看: https://mail.chatgpt.org.uk/{email}")
        return None print(f"    验证码: {code}")

    # 第三步:登录认证 print(f"\n[3] 正在登录认证...")
    auth_result = authenticate(email, code)

    if "error" in auth_result:
        print(f"    登录失败: {auth_result}")
        return None if "token" not in auth_result:
        print(f"    登录失败: {auth_result}")
        return None print(f"    登录成功!")

    # 第四步:创建API Key print(f"\n[4] 正在创建API Key...")
    api_result = create_api_key(auth_result)

    if "error" in api_result:
        print(f"    创建API Key失败: {api_result}")
        return None if not api_result.get("success"):
        print(f"    创建API Key失败: {api_result}")
        return None

    api_key = api_result.get("api_key", "")
    if not api_key:
        print(f"    创建API Key失败: 未返回API Key")
        return None print(f"    创建成功!")

    # 保存API Key到文件 with open("api_keys.txt", "a", encoding="utf-8") as f:
        f.write(f"{api_key}\n")

    # 输出结果 print("\n" + "=" * 50)
    print("账号创建成功!")
    print("=" * 50)
    print(f"邮箱: {email}")
    print(f"用户ID: {api_result.get('user_id', 'N/A')}")
    print(f"Privy用户ID: {api_result.get('privy_user_id', 'N/A')}")
    print(f"试用积分: {api_result.get('credits', 'N/A')}")
    print(f"订阅状态: {api_result.get('subscription_status', 'N/A')}")
    print(f"试用到期时间: {api_result.get('trial_expires_at', 'N/A')}")
    print(f"\nAPI Key:\n{api_key}")
    print(f"\n已保存到: api_keys.txt")
    print("=" * 50)

    return {
        "email": email,
        "user_id": api_result.get('user_id'),
        "privy_user_id": api_result.get('privy_user_id'),
        "api_key": api_key,
        "credits": api_result.get('credits'),
        "subscription_status": api_result.get('subscription_status'),
        "trial_expires_at": api_result.get('trial_expires_at')
    }

if __name__ == "__main__":
    run()

📌 转载信息
原作者:
ZeroLiya
转载时间:
2025/12/27 20:48:40

gemini-3-pro-image-preview 和 G3 这些模型额度是分开的,CLIProxyAPI 中转给 CC 用后感觉 gemini-3-pro-image-preview 实在太浪费了,干脆就做成 MCP 了效果如下:

地址:

claude code 里配置:
把 OPENAI_API_KEY 换成 CLIProxyAPI 中转的 KEY 就行了,然后 index.js 换成你对应的路径

{
  "mcpServers": {
    "gemini-": {
      "command": "node",
      "args": ["d:/task/myself/nodejs/geminiimagemcp/src/index.js"],
      "env": {
        "OPENAI_BASE_URL": "http://127.0.0.1:8317",
        "OPENAI_API_KEY": "<YOUR_KEY>",
        "OPENAI_MODEL": "gemini-3-pro-image-preview"
      }
    }
  }
}

对了推荐个免费的 PC 端语音输入软件 LazyTyper 挺方便的我现在发帖这些都是用它


📌 转载信息
原作者:
kinda
转载时间:
2025/12/27 20:43:11

由于找不到邀请码,我就问了一下豆包,然后他就把今天发的邀请码发给了我


结果不出所料,我也可以用任务模式啦


还得是万能的豆包
大家不要在帖子下放邀请码,会被举报的


📌 转载信息
原作者:
Arion
转载时间:
2025/12/27 20:41:32

刚看了一眼微信才知道。

总体意思是:火绒团队发现有外国黑客在国外网站以 IDM 破解版为名投放病毒木马,该木马会盗取浏览器 cookie、浏览记录、自动填充信息;steam ssfn 文件;劫持加密货币地址。该木马并贴心避开了俄语、乌克兰语、白俄罗斯语、哈萨克语、乌兹别克语的用户。

原文地址:https://mp.weixin.qq.com/s/FmH5d4_fhVtf1ky8W2s3dQ


📌 转载信息
原作者:
DeDa
转载时间:
2025/12/27 20:40:39

问老师修改作文的时候老师总是给一些笼统的评价(也理解,毕竟学生太多了),没办法推敲词句,所以我编了这个,能逐句修改,还能辩证思维
还有 161 天高考,加油!

先放提示词

高考议论文审题提示词

# 要求
生成一份高中语文议论文审题学案,以帮助学生确定审题立意,培养辩证思维。
- 首先输出`## 原题回放`,并原样输出题干
- 然后输出`## 头脑风暴` - 你应该逐句拆解题目中的话,挖掘关键词与隐含义。
- 然后进行头脑风暴,写出所有的相关分论点。首先输出常见分论点(`### 一般分论点`),再输出辩证思考高级分论点(`### 辩证与升华`)。两个板块分别输出4-5条。
- 每个分论点应该用**文言****现代**两种语言风格呈现。其中**文言**版要简洁,适当使用古风词汇(不要过度使用蹩脚文言,也允许普通书面语的出现),**现代**版也不应该超过两句话。注意,现代并不意味着庸俗,也应该使用高级词汇、四字词语和下定义、作比较等各种手法
- 各分论点之间,文言版和现代版应该分别尽量构成排比。
- 辩证思考的角度要新颖。比如:扩展内涵和外延?过犹不及?上升到民族与人类角度?是否在任何情况下都适用?
- 对每个分论点,写一段主体段。主体段的要求:
+ 开头句(上接分论点,进行简要阐释或下定义(例:传递温暖不是……而是……) 
+ 例子句(2-3句)(引用材料,可以详写,也可以使用排例)
+ 分析句(2-3句)(重点)
+ 结论句(短小精悍)
- 进行完`## 头脑风暴`后,进行`## 人物积累`,搜集相关素材(人物、人物群体、事件,包含古今中外)
-`### 快速开始`输出10-20条简略的人物及事件,然后筛选2条进行`### 详细打磨`,思考这个人物事件分别应该如何适配于`头脑风暴`中的每个分论点。针对刚才的每条分论点,用此人物写2-3句话。使用假设论证等高级方法。
- 进行完`## 人物积累`后进行`## 名言警句`,输出5句相关的话。
- 进行`## 深挖哲理`部分,输出关于此主题的更多思考内容,使用问答的结构引导学生思考。

高考议论文润色修改提示词

你是高中语文老师,现在要针对学生的高考语文议论文进行修改,要求如下:
- 高中议论文的标准格式为:
+ 开头(2-3句)必须出现题目中的关键词
+ 分论点1
+ 主体段1
+ 分论点2
+ 主体段2
+ 分论点3
+ 主体段3
+ 结尾(2-3句,扣题)
- 其中,视情况需要可以在结尾前添加一个小主体段。小主体段的内容一般为升华(视角拉高到国家/民族/社会),或者辩证看待此事
- 每个分论点一般为1句,如果有相关的古诗词则可以引用,没有则不要引用。三个分论点之间最好构成排比。推荐使用四字词。
- 主体段要求:
+ 开头句(上接分论点,进行简要阐释或下定义(例:传递温暖不是……而是……) 
+ 例子句(2-3句)(引用材料,可以详写,也可以使用排例)
+ 分析句(2-3句)(重点)
+ 结论句(短小精悍)
- 输出结构:
- 进行总体宏观评价
- 进行详细修改:
- 输出应当对学生的每一句话进行分析,提供两个版本的修改:修改级(更通顺更流畅)和润色级(更高级更有文采)
- 修改润色分论点时应注意分论点间的联系、分论点和主体段间的联系
- 如果学生丢了主体段中的开头句,或者分析句写的不够详细,应该进行添加
- 输出中人名应用斜体标记,富有哲理性的分析句应用粗体标记
- 接着进行扩展,首先基于题目(学生未给出题目则按照开头段引材料部分反推题目)扩展出2-3个用户没写到的分论点,然后基于你的和学生的分论点,推荐人物事例和材料
- 最后,无论学生的作文是否进行辩证思维,都要输出一个辩证部分进行思辨阐发
---
以下是一个例子: ### **总体宏观评价** 同学你好!你这篇作文展现出很好的思辨能力和材料积累,结构基本完整,立意深刻。主要优点在于:**①** 中心论点“割席守节能行稳,同途共行得致远”提取得精准且富有辩证色彩。**②** 能运用苏武、刘白、杨邓等丰富事例,论证较扎实。**③** 倒数第二段的辩证分析是文章的亮点,体现了思考的深度。 主要提升空间在于:**①** **分论点****主体段**的逻辑衔接可以更紧密,部分主体段缺少明确的“开头句”来阐释分论点。**②** **分析句**的挖掘可以更深入,不能止于叙述例子,要紧扣“为什么”进行说理。**③** **语言**的精准度和文采尚有打磨空间。下面我将为你逐段修改润色。 ### **一、开头段修改** > 航行于社会大海,我们无不需要友相伴。然管宁华歆之割席,提醒警惕友谊变质;邓杨二无“欲千里共同途”的守望,又揭示真友情能跨越时间和大洋联结在一起。即将成年步入社会的吾侪青年,更应牢记:割席守节能行稳,同途共行得致远。 - 修改级 - 人生如舟,航行于社会`瀚海`,良友是不可或缺的`风帆`*管宁**华歆*“割席分坐”,警示我们需警惕变质的友谊;*邓稼先**杨振宁*“愿千里共同途”的约定,则`揭示`了真挚情谊能跨越时空。作为即将步入社会的青年,我们当深悟:唯有懂得割席守节,方能行稳;唯有追求同途共行,方能致远。 - 润色级 - 社会如`瀚海`,人生似孤舟,友伴乃`劈波之桨``引航之帆`。昔有*管宁*割席,划清志趣的`楚河汉界`,守的是心境的`澄明`;今观*邓杨*之约,“愿千里共同途”,连的是理想的`星辰大海`。于此立身成人之际,我辈青年当持此双维智慧:**割席以守节,行稳生命之舟;同途而共进,致远理想之境。** ### **二、分论点一及主体段修改** > “割席”是友谊的保鲜剂,防友谊变质,护个人高洁,保前程行稳。 - 修改级: - “割席”是友情的净化剂,能`防微杜渐`,守护个人品节,确保人生航向行稳致远。 - 润色级: - **割席之决,在于明辨清浊,是守护精神高地的凛然气节。**(构成“在于……”的排比句式) > 舍弃变质的友情,成一方心灵净土。 - 修改级: - 所谓“割席守节”,并非冷漠绝交,而是当友情与大道、气节相悖时,勇于划清界限的理性抉择。 - 润色级: - 割席之决,在于明辨清浊,是守护精神净土、防微杜渐的理性智慧。 > 李陵与苏武原本交好,但叛逃匈奴后却以利益引诱沦为阶下囚的苏武,表面处处为其着想,内心却谋招降之功。苏武果断拒绝,那铿锵的声音回荡在北国天空,让我们听到一位为国大义割席的汉使内心的最强音。 - 修改级: - 汉代*苏武**李陵*的故事便是典范。昔日同僚,当李陵降胡后企图以旧情劝降苏武时,苏武毅然斩断这份已变质的“友谊”,其“自分已死久矣”的`凛然之辞`,正是用民族大义对私谊进行的彻底割席。 - 润色级: - 昔苏武持节北海,故人*李陵携酒肉与劝降书至。往昔情谊,此刻已成攻心之矛。苏子凛然曰:“臣事君,犹子事父也,子为父死,无所恨。”此言一出,便是对私谊裹挟公义的终极割席。**这一割,非关冷酷,而是以决绝之姿,淬炼出友情中最不可亵渎的纯度——对大道与气节的忠诚。

- 你缺失分析句:
- 苏武毅然斩断这份已变质的“友谊”,其“自分已死久矣”的`凛然之辞`,正是用民族大义对私谊进行的彻底割席。这一割,`割断`了利益的诱惑,`守住`了使臣的忠节,更在寒荒之地竖起了不朽的精神`旌旗`。

> 反观现在部分人员,受境外“装成好友”的利诱出卖机密,正是其不知应当割席而使国家遭受巨大损失。人生路上,我们应慧眼辨真友,果断与变质友谊割席,以防内心被邪气熏黑难至彼方。
- 修改级:
- 反观当下,多少人困于所谓的“人情”“关系”,在原则问题上步步退让,终致失节败行。
- 润色级
- 反观当下,一些人困于“人情网”,对损友的腐蚀行为姑息纵容,终致底线失守,追悔莫及。

> 因此,割席的本质,是为更高价值廓清道路的智慧与勇气。
- 修改级
- 勇于割席,实为远祸、全节、行稳的必修课。
- 润色级
- 故曰:知割席,方能澄怀观道,稳步向前。
(此后的修改同理)
(例子结束)
---

高考英语应用文(小作文)润色修改提示词

你是高中英语老师,现在要针对学生写的高中英语应用文进行修改,要求如下:
1. 高中应用文的标准格式是1-2句简要开头+4-5句主体部分+1-2句简要结尾,严格分三段
2. 用语不偏不怪,符合高中认知水平,适当使用高级句式
3. 避免中式英语,使用地道表达
4. 输出应先输出逐句改错,在多层列表中输出,每个根列表项是原文的一句。先输出是用户的作文,然后是在保持用户句意不变的情况下,你对语法错误的修改和高级词汇句式的使用,最后是句子升格,允许句意稍有变化,以表达流畅完整;然后修改用户的下一个句子,以此类推
5. 输出多层列表之后,在列表中输出你的总体评价
6. 输出根据表格修改升格后的完整作文
7. 接着进行【话题词汇延伸】,延伸列举该主题相关的其他句子,以便下次用户遇到类似的题目的时候使用

---
示例:
# 图画比赛祝贺信修改 ## **逐句修改与升格** 1. **原文句 1:** I am almost over the moon when hearing that you won
the Grand Prize in"Green Earth" International Youth Art Exhibition.
- **修改** I am absolutely delighted to hear that
you have won the Grand Prize in the "Green Earth" International
Youth Art Exhibition.
- `almost over the moon` 略显口语化,改为更正式、地道的
`absolutely delighted`。
- `when hearing` 结构稍显随意,改为 `to hear`
的不定式短语作原因状语更常见。
- `won` 改为现在完成时 `have won`
强调过去动作对现在的影响(我知道了你获奖,并因此感到高兴)。
- `in“Green Earth”` 缺少冠词,且引号后应有空格,改为
`in the “Green Earth”`。
- **升格** It is with immense joy that I learned about
your remarkable achievement in winning the Grand Prize at the
"Green Earth" International Youth Art Exhibition.
- 使用 `It is with immense joy that I learned...`
强调句型,使开头更正式、有力。
- `remarkable achievement` 比单纯说 `won` 更具赞赏意味。
- `at` an exhibition 比 `in` 更地道。
2. (逐句修改,略)
## **总体评价** 同学,你的作文完成了基本的祝贺信功能,要点清晰。主要问题在于一些表达的 Chinglish 倾向和语法细节(如名词单复数、介词搭配)。升格后的版本在**句式多样性**(如使用定语从句、分词短语)、**用词准确性与地道性**(如用 `convey`, `amplify`, `hone your craft` 等)以及**内容的深度和饱满度**上都有显著提升,更符合优秀高中应用文的标准。请特别注意学习修改中对"绿水青山"、"精进技艺"等概念的地道英文转换。 ## **修改升格后的完整作文** ### 修改版 ### 升格版 (分别输出按照“修改”和“升格”级别调整后的作文) ## **话题积累** ### 祝贺与荣誉: - Please accept my warmest congratulations on your incredible success in...(请接受我对你在...方面取得巨大成功最热烈的祝贺。) - Your dedication and talent have rightly been recognized with this prestigious award.(你的奉献和才华得到这个 prestigious award( prestigious award)的认可,实至名归。) ### 接着输出其他和此话题相关的句子 示例结束
---

高考英语读后续写润色修改提示词

你是高中英语老师,现在要针对学生写的高中英语读后续写进行修改,要求如下:
1. 高中读后续写的标准格式是两个段落,每个段落用户写几句你就写几句
2. 用语不偏不怪,符合高中认知水平,适当使用高级句式
3. 避免中式英语,使用地道表达
4. 不要修改用户的主要情节。情节的细节可以进行修改
4. 输出应先输出逐句改错,在多层列表中输出,每个根列表项是原文的一句。先输出是用户的作文,然后是在保持用户句意不变的情况下,你对语法错误的修改和高级词汇句式的使用,最后是句子升格,允许句意稍有变化或情节小的修改,以表达流畅完整;然后修改用户的下一个句子,以此类推
5. 输出多层列表之后,在列表中输出你的总体评价
6. 输出根据表格修改升格后的完整作文
7. 接着进行【话题词汇延伸】,延伸列举该主题相关的其他句子,以便下次用户遇到类似的题目的时候使用。

---
以下是一个修改应用文的例子。尽管你要修改读后续写,请按照此范例规范输出格式。
## **逐句修改与升格** 1. **原文句 1:** I am almost over the moon when hearing that you won
the Grand Prize in"Green Earth" International Youth Art Exhibition.
- **修改** I am absolutely delighted to hear that
you have won the Grand Prize in the "Green Earth" International
Youth Art Exhibition.
- `almost over the moon` 略显口语化,改为更正式、地道的
`absolutely delighted`。
- `when hearing` 结构稍显随意,改为 `to hear`
的不定式短语作原因状语更常见。
- `won` 改为现在完成时 `have won`
强调过去动作对现在的影响(我知道了你获奖,并因此感到高兴)。
- `in“Green Earth”` 缺少冠词,且引号后应有空格,改为
`in the “Green Earth”`。
- **升格** It is with immense joy that I learned about
your remarkable achievement in winning the Grand Prize at the
"Green Earth" International Youth Art Exhibition.
- 使用 `It is with immense joy that I learned...`
强调句型,使开头更正式、有力。
- `remarkable achievement` 比单纯说 `won` 更具赞赏意味。
- `at` an exhibition 比 `in` 更地道。
2. (逐句修改,略)
## **总体评价** 同学,你的作文完成了基本的祝贺信功能,要点清晰。主要问题在于一些表达的 Chinglish 倾向和语法细节(如名词单复数、介词搭配)。升格后的版本在**句式多样性**(如使用定语从句、分词短语)、**用词准确性与地道性**(如用 `convey`, `amplify`, `hone your craft` 等)以及**内容的深度和饱满度**上都有显著提升,更符合优秀高中应用文的标准。请特别注意学习修改中对"绿水青山"、"精进技艺"等概念的地道英文转换。 ## **修改升格后的完整作文** ### 修改版 ### 升格版 (分别输出按照“修改”和“升格”级别调整后的作文) ## **话题积累** ### 祝贺与荣誉: - Please accept my warmest congratulations on your incredible success in...(请接受我对你在...方面取得巨大成功最热烈的祝贺。) - Your dedication and talent have rightly been recognized with this prestigious award.(你的奉献和才华得到这个 prestigious award( prestigious award)的认可,实至名归。) ### 接着输出其他和此话题相关的句子 示例结束
---

推荐用法

建议用豆包拍照识别答题卡(一列一列拍),给提示词识别手写部分文字,注意不要添加过多的换行符,与原文保持一致,然后把本文章的提示词和豆包识别内容发给 deepseek。用了一圈还是 deepseek 最适合高考的那种口气和风格。

md 转 docx

AI 输出的玩意不能直接打印,需要转成 docx。
注意:复制 AI 内容不要鼠标拽然后 Ctrl+C,要用网页自己带的那个复制按钮

懒人方法

用个在线网站就行了,比如 Markdown 转 Word - 免费在线 Markdown 转 Word 转换器

高级办法

用 pandoc 转

  1. 下载 pandoc

  2. 把 pandoc 添加到 path(不会的话问 ai 去)

  3. 新建作文.md,粘贴进去

  4. 下载 pandoc.docx,放在同一目录下
    pandoc.docx
    这是一个模板,可以自己定义样式,以后输出的都是这样了。如何修改请自行搜索

  5. 在命令行执行命令 pandoc -i 作文.md -o 作文.docx --reference-doc pandoc.docx

效果展示

1218zw.docx
1225zw.docx


📌 转载信息
原作者:
ChalMeng
转载时间:
2025/12/27 20:40:10

可以缓存,Maven 构建速度提升数倍,强烈建议大家安装

一、安装插件 Develocity

二、安装 Maven 插件

自动安装

mvn com.gradle:develocity-maven-extension:2.3:init -Ddevelocity.url=https://develocity.example.com

手动安装

我这边自动安装没成功,手动安装步骤如下:

  1. 项目根目录下新建 .mvn 文件夹
  2. .mvn 下新建两个文件

extensions.xml

<extensions> <extension> <groupId>com.gradle</groupId> <artifactId>develocity-maven-extension</artifactId> <version>2.3</version> </extension> </extensions> 

develocity.xml

<develocity> <server> <url>https://develocity.example.com</url> </server> </develocity> 

📌 转载信息
原作者:
ageovb
转载时间:
2025/12/27 14:16:16

名称: 疯狂动物城2 Zootopia 2 (2025)

又名: 动物乌托邦2 / 优兽大都会2(港) / 动物方城市2(台) / Zootopia 2: Rise of the Non-Mammalians / Zootropolis 2

导演: 杰拉德·布什 / 拜伦·霍华德

编剧: 杰拉德·布什

类型: 喜剧 / 动画 / 悬疑 / 犯罪 / 冒险

制片国家/地区: 美国

语言: 英语

上映日期: 2025-11-26(美国/中国大陆)

片长: 108分钟

IMDb: tt26443597

剧情简介

一个神秘爬行动物的到来,把温馨的动物城搅动得天翻地覆。面对全新的城市危机,警官兔朱迪(金妮弗·古德温 Ginnifer Goodwin 配音)与狐尼克(杰森·贝特曼 Jason Bateman 配音)将继续携手为保卫动物城而奔波。在追捕行动中,这对老搭档不仅要揭开新角色的神秘面纱,还要前往被迷雾笼罩的新领域,探索未知的地下黑市,一场疯狂动物城的全新冒险即将展开……

短评

“即便如此,我的家族也没有把所有的责任放在我的肩膀上”。狠狠落泪了

夸克网盘

如果佬是没有使用过夸克的新用户,使用手机端【夸克APP】,
先保存小于10G文件后,会有 1TB 空间(有效期三个月)。
虽然有点鸡肋,但聊胜于无,感兴趣的佬可以搞下。

百度网盘

注意:资源来源于网络,仅供个人学习参考,勿用于商业用途。如有侵权请联系删除。


📌 转载信息
原作者: EchoX
转载时间: 2025/12/27 10:00:44

AI clothes Changer

一键换衣的需求我相信不是个小市场,特别是对于想体验下给自己换上不同的衣服是什么样的效果的同学们,这简直就是福音。

当前这个一键换衣网站,可以用最新的 google nano banana 模型,一次给人物换上多件衣服(包括鞋子、眼镜、帽子、手表什么的,一股脑直接丢给他就行,会自己给他穿戴好),也不需要去写额外的提示词什么的,上传人物图和衣服图,直接点生成就可以了。

考虑到有的人想直接用语言描述给人物换衣服,所以也预留了一个写指令提示词的地方,方便用户用语言描述给人物换服装。

我在用户体验上花费了很大力气,半个多月吧基本都在琢磨怎么提升用户体验上了,还有一些小细节没有做好那是因为 AI 还做不到,暂时只能先这样。

当然了,你也可以把这个网站当 nano banana 的模型体验站,上传任意图片,输入任意提示词也都可以帮你完成,并不是只能做给人物换衣服的任务。

点此进入 AI 换衣网站: https://aiclotheschanger.net

中文版本地址入口: https://aiclotheschanger.net/zh/

最后,给咱们 V 友一个福利,为了感谢大家的支持,留言区留下你登录网站的 google 电子邮箱地址,留言区前 10 个地址,我会给您的账户赠送 10 个积分,可以用来在 AIClothesChanger.Net 上生成 5 张 nano banana 的更衣图,当然了你会写提示词的话,也可以用来生成其他类型图片,如果您有什么好的建议或想法也请给我留言,明早醒来后我会逐一回复。


📌 转载信息
原作者: miwang
转载时间: 2025/12/27 00:55:43

我又来了,这次完成了链式代理分流和支持外部节点的更新,

前情提要:这是一个基于 mack-a 大佬的八合一一键代理脚本的重构版本,保留了原脚本的大部分功能,功能上主要添加了链式代理功能。

现在可以在链式代理的入口节点上配置分流功能,并且出口节点支持使用外部节点(支持 ss ,socks ,trojan 等协议,对拼车用户更友好)。

顺便加了一个版本回退功能,如果发现新版本有 bug ,可以暂时退回之前的版本等待修复再更新。

在 documents 文件夹添加了开发指南和使用指南,分别为想要自定义修改和开发的用户,和非技术背景用户使用该脚本提供指南。

其他更详细信息请见 GitHub: https://github.com/Lynthar/Proxy-agent

本次更新尚未经过严谨测试,欢迎有需要的朋友试用,bug 请提交至 issues ,体验反馈或意见请提交至 discussions 。


📌 转载信息
原作者: Lynthar
转载时间: 2025/12/27 00:53:23

之前《[人人有份,e3 office 365/edu 邮箱自助注册子号]》注册的,现在那个全局额外添加上了 @office.mzz.edu.rs 邮箱,这个许可我放到了 e1 订阅下,只有邮箱,无 office 365 桌面版,也依然无 OneDrive,之前注册了 e3 的现在也是可以注册,e1 有 200w 个许可,所以不用担心。

e1 许可看起来是要比 e3 要稳定很多,当然只是看起来,因为 e1 这个许可本身就是无 office 桌面版的,所以我用来当个全局邮箱。目前 edu.rs 邮箱滥用要比 edu.kg 少,当然也仅仅是少一点,本质上没啥区别,edu.kg 能用的 edu.rs 也能用,只是说环境要好点。

e1+edu.rs 自助注册地址:https://office1.mymuwu.net/

额外加了个邀请码验证:mymuwu

邮箱登录地址:Outlook

特别说明,e1/e3 注册限制为 cn ip,如果使用非 cn ip 访问将会被 301 到其他界面,同时 e3 限制为每个 ip 每小,时注册 3 次,e1 限制为每个 ip 每小时注册 1 次。之前 e3 被当机器号误删的重新注册即可,canva 也可以用 @office.mzz.edu.rs 的邮箱发送申请


📌 转载信息
转载时间:
2025/12/27 00:33:38

在 Lunes.host 上使用 Node.js Generic 方式部署 Uptime Kuma 监控面板

功能特性

  • 每天定时自动备份(默认凌晨 4 点)
  • 自动清理超过 5 天的旧备份
  • 首次启动自动恢复最新备份
  • 支持 ZIP 加密备份(可选)
  • WebDAV 云端存储,数据安全可靠

项目结构

/home/container/
├── package.json
├── .nvmrc
├── config.sh          # ⚙️ 配置文件(需修改)
├── start.sh           # 🚀 启动脚本(需 755 权限)
└── scripts/
    ├── backup.sh      # 💾 WebDAV 备份(需 755 权限)
    └── restore.sh     # 📥 WebDAV 恢复(需 755 权限) 

快速开始

查看端口

在 Lunes.host 控制面板查看分配给你的端口号:

上传文件并配置权限

上传项目文件:

为脚本添加 755 执行权限:


需要添加权限的文件:

  • start.sh
  • scripts/backup.sh
  • scripts/restore.sh

修改配置文件

编辑 config.sh,根据你的实际情况修改:

#!/bin/bash # ============================================ # Uptime Kuma 配置文件 # ============================================ # 端口号(改为你的实际端口) export PORT="${PORT:-2114}" export TZ="Asia/Shanghai" # 预构建包下载地址(无需修改) export KUMA_DOWNLOAD_URL="https://github.com/oyz8/action/releases/download/2.0.2/uptime-kuma-2.0.2.tar.gz" # ============================================ # WebDAV 备份配置 # ============================================ export WEBDAV_URL="https://zeze.teracloud.jp/dav/backup/Uptime-Kuma/" export WEBDAV_USER="你的用户名" export WEBDAV_PASS="你的密码" # 备份加密密码(可选,留空则不加密) export BACKUP_PASS="" # 每天备份时间(0-23 小时制) export BACKUP_HOUR=4

# 备份保留天数 export KEEP_DAYS=5

WebDAV 推荐: 本项目使用 InfiniCLOUD (Teracloud) 作为备份存储

注册时输入推荐码 PPMZC,可在 20GB 基础上额外获得 5GB 存储空间!

配置启动命令

在 Startup 设置中填入:

npm start 

启动服务

点击 Start 按钮启动:

手动操作 (在启动命令改为下面命令)

# 手动执行备份
bash scripts/backup.sh

# 手动恢复最新备份
bash scripts/restore.sh

# 恢复指定备份文件
bash scripts/restore.sh lunes-host-backup-2024-12-26-10-30-00.zip

注意事项

  • 必须使用 Node.js Generic 方式部署
  • 首次启动需要下载预构建包,请耐心等待
  • 确保 WebDAV 目录已提前创建
  • 脚本文件必须有执行权限(755)

许可证

MIT License


📌 转载信息
原作者:
oyz
转载时间:
2025/12/27 00:30:54

前言

一句话总结:将重计算从 Worker 卸载到 DO 中。

我见网络上有零星的讨论提到可以将 CPU 任务卸载到 DO 中,但没找到一篇详细介绍的教程(也可能是我太火星了),官方文档里也没有类似的建议,能查到的主流用法都是维持 ws 长连接。我又问了一圈 AI,也没找到什么有价值的线索,它们给出的回答也不一致(甚至前后不一致),故来水一帖。

目前把帖子放 1 级是暂时防止 AI 爬到,看看佬友们有没有更好的向 AI 提问或是搜索方法。

为什么 Duration Object 可以缓解 CPU 时间限制

什么是 Duration Object

根据官方文档 What are Durable Objects?,原文如下:

A Durable Object is a special kind of Cloudflare Worker which uniquely combines compute with storage. Like a Worker, a Durable Object is automatically provisioned geographically close to where it is first requested, starts up quickly when needed, and shuts down when idle. You can have millions of them around the world. However, unlike regular Workers:

  • Each Durable Object has a globally-unique name, which allows you to send requests to a specific object from anywhere in the world. Thus, a Durable Object can be used to coordinate between multiple clients who need to work together.
  • Each Durable Object has some durable storage attached. Since this storage lives together with the object, it is strongly consistent yet fast to access.

Therefore, Durable Objects enable stateful serverless applications.

我的英语水平太过于塑料,就不翻译了,简单画一下重点:

  • Worker 能跑的代码 DO 基本也能跑
  • DO 是根据名称(id)来区分实例的,可以单例串行(多 Worker 共享)也可以多个实例并行
  • DO 是直接有存储、有状态的

DO 是有状态的这一核心特征我们用不上,我们接着往下看文档。

计费与限制

Duration Object 的计费主要围绕计算和存储展开,计算部分的额度与计费规则如下:

Free planPaid plan
Requests100,000 / day1 million, + $0.15/million
Includes HTTP requests, RPC sessions, WebSocket messages, and alarm invocations
Duration13,000 GB-s / day400,000 GB-s, + $12.50/million GB-s

其中有两条脚注需要特别注意:

4 Duration is billed in wall-clock time as long as the Object is active, but is shared across all requests active on an Object at once. Calling accept() on a WebSocket in an Object will incur duration charges for the entire time the WebSocket is connected. It is recommended to use the WebSocket Hibernation API to avoid incurring duration charges once all event handlers finish running. For a complete explanation, refer to When does a Durable Object incur duration charges?.

Limits 怎么说:

FeatureLimit
Number of ObjectsUnlimited (within an account or of a given class)
Maximum Durable Object classes500 (Workers Paid) / 100 (Free)
Storage per accountUnlimited (Workers Paid) / 5GB (Free)
Storage per classUnlimited
Storage per Durable Object10 GB
Key size
Value size
WebSocket message size32 MiB (only for received messages)
CPU per request30 seconds (default) / configurable to 5 minutes of active CPU time

这里的 active CPU time 就是指的 CPU 时间,居然没有单独限制免费计划?!

我们再来跟 Worker 的限制对比一下:

FeatureWorkers FreeWorkers Paid
Request100,000 requests/day
1000 requests/min
No limit
Worker memory
CPU time10 ms5 min HTTP request
15 min Cron Trigger
DurationNo limitNo limit for Workers.
15 min duration limit for Cron Triggers, Durable Object Alarms and Queue Consumers

看起来,虽然 Worker 对免费计划有单独的 10ms 限制,但 DO 却没有,那理论上所有请求都用 DO 处理请求的话,平均 CPU 时间可以到 1.04s?这… 这对吗?

对不对一试便知

剧透一下,对的,从这里开始就是教程了

从一个最简单的 Demo 开始

我们来实现一个最简单的处理 HTTP 请求的 DO 试试。

定义 Durable Object 类

// src/index.ts import { DurableObject } from 'cloudflare:workers' // 1. 定义 DO 类,必须 export export class MyDurableObject extends DurableObject<Env> {
  constructor(ctx: DurableObjectState, env: Env) {
    super(ctx, env);
  }

  // 2. 必须实现 fetch 方法,处理发给这个 DO 的请求 async fetch(request: Request): Promise<Response> {
    // 在这里执行 CPU 密集型操作 const result = await this.heavyComputation();
    return Response.json({ result });
  }

  private async heavyComputation(): Promise<string> {
    // 你的 CPU 密集型逻辑 return "done";
  }
}

在 wrangler.toml 中绑定

name = "do-cpu-test" main = "src/index.ts" compatibility_date = "2024-01-01" # 声明 Durable Object 绑定 [durable_objects] bindings = [
{ name = "MY_DO", class_name = "MyDurableObject" }
]

# 声明 DO 类的迁移(首次部署必须,免费计划只能使用 SQLite) [[migrations]] tag = "v1" new_sqlite_classes = ["MyDurableObject"]

定义 Env 类型

interface Env {
  MY_DO: DurableObjectNamespace;
  // 其他绑定...
}

从 Worker 调用 DO

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    // 获取 DO 实例的 stub const id = env.MY_DO.idFromName("singleton");
    const stub = env.MY_DO.get(id);

    // 把请求转发给 DO return stub.fetch(request);
  }
};

串行复用与并行处理

还记得之前说过 DO 是通过名称(id)来识别实例的么?我们可以通过传递 id 来选择是否创建新的实例。刚才的代码中名称固定是 "singleton",这样每次获取的都是同一个实例,一次只能处理一个请求,这在高并发下会排队,不过优势是可在 DO 内部维护状态(本文用不到)。

如果想并行处理:

每次请求都创建一个新的实例

可以直接使用 newUniqueId() 创建新 id。

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    // newUniqueId() 每次返回全新的实例 const id = env.MY_DO.newUniqueId();
    const stub = env.MY_DO.get(id);
    return stub.fetch(request);
  }
};

按需区分(如请求参数、用户 id)

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const url = new URL(request.url);
    // 用 URL 参数作为实例名称 const instanceName = url.searchParams.get("name") || "default";

    const id = env.MY_DO.idFromName(instanceName);
    const stub = env.MY_DO.get(id);
    return stub.fetch(request);
  }
};

完整的示例

这里我实现了两个端点,分别在 Worker 和 DO 中执行 PBKDF2 迭代,来模拟实际 CPU 密集任务。
用法如下:

# Worker 内执行(很快会撞 CPU 限制)
curl "https://your-worker.workers.dev/worker/pbkdf2?iters=100000&reps=100" # DO 内执行(可以随便跑,reps拉倒1000都行)
curl "https://your-worker.workers.dev/do/pbkdf2?iters=100000&reps=100&name=bench" 

wrangler.toml

name = "do-cpu-test" main = "src/index.ts" compatibility_date = "2025-12-25" [durable_objects] bindings = [
  { name = "CPU_DO", class_name = "CpuDo" }
]

[[migrations]] tag = "v1" new_sqlite_classes = ["CpuDo"]

src/index.ts

/// <reference types="@cloudflare/workers-types" /> import { DurableObject } from 'cloudflare:workers' export interface Env {
  CPU_DO: DurableObjectNamespace;
}

// ============ 工具函数:PBKDF2 烧 CPU ============ async function burnCpu(iters: number, reps: number) {
  const password = "benchmark-password";
  const salt = crypto.getRandomValues(new Uint8Array(16));
  const enc = new TextEncoder();

  const keyMaterial = await crypto.subtle.importKey(
    "raw",
    enc.encode(password),
    "PBKDF2",
    false,
    ["deriveBits"]
  );

  const t0 = performance.now();
  let lastHash = "";

  for (let r = 0; r < reps; r++) {
    const bits = await crypto.subtle.deriveBits(
      {
        name: "PBKDF2",
        salt,
        iterations: iters,
        hash: "SHA-256",
      },
      keyMaterial,
      256
    );
    lastHash = [...new Uint8Array(bits)]
      .map((b) => b.toString(16).padStart(2, "0"))
      .join("");
  }

  return {
    params: { iters, reps, totalIterations: iters * reps },
    timing: { wallMs: Math.round(performance.now() - t0) },
    output: lastHash,
  };
}

// ============ Durable Object 类 ============ export class CpuDO extends DurableObject<Env> {
  constructor(ctx: DurableObjectState,
env: Env
) { super(ctx, env); } async fetch(request: Request): Promise<Response> { const url = new URL(request.url); const iters = Math.min(parseInt(url.searchParams.get("iters") || "100000"), 100000); const reps = Math.min(parseInt(url.searchParams.get("reps") || "1"), 1000); const result = await burnCpu(iters, reps); return Response.json({ executor: "DurableObject", instanceId: this.ctx.id.toString(), ...result, }); } } // ============ Worker 入口 ============ export default { async fetch(request: Request, env: Env): Promise<Response> { const url = new URL(request.url); const path = url.pathname; // 路由:Worker 内执行 if (path === "/worker/pbkdf2") { const iters = Math.min(parseInt(url.searchParams.get("iters") || "100000"), 100000); const reps = Math.min(parseInt(url.searchParams.get("reps") || "1"), 1000); const result = await burnCpu(iters, reps); return Response.json({ executor: "Worker", ...result }); } // 路由:DO 内执行 if (path === "/do/pbkdf2") { const name = url.searchParams.get("name") || "default"; const id = env.CPU_DO.idFromName(name); const stub = env.CPU_DO.get(id); return stub.fetch(request); } return Response.json({ endpoints: { "/worker/pbkdf2?iters=N&reps=M": "在 Worker 内执行(受 10ms CPU 限制)", "/do/pbkdf2?iters=N&reps=M&name=X": "在 DO 内执行(按 Duration 计费)", }, }); }, };

package.json

{ "name": "do-cpu-test", "scripts": { "dev": "wrangler dev", "dev:remote": "wrangler dev --remote", "deploy": "wrangler deploy" }, "devDependencies": { "@cloudflare/workers-types": "^4.20251201.0", "typescript": "^5.7.3", "wrangler": "^4.34.0" } } 

测试结果

我直接把 reps 拉到 1000,除了玄学 1101 外没遇到别的限制。


这个 CPU 时间是 free plan 的 Worker 跑到冒烟都跑不出来的。

结论

现在可以回答开头的问题了:这对,DO 真的是 30s CPU 时间,只是 DO 还可能会受一些别的限制,比如释放不及时、同一台物理机上的 DO 会共用 128M 内存、创建 DO 和往返需要额外挂钟时间等。

现在我们来通俗的总结一下免费计划中 Worker 和 DO 的区别,这就像是占着茅
还是文雅的总结一下好了,这就像是在一家会员制餐厅里:

  • Worker 是点餐的:点了多少才能吃多少(CPU 时间限制),但是这个座位想占多久占多久(挂钟时间不限制)
  • Durable Object 是吃自助餐的:按座位数 × 时间算钱,但占着座位的时候可以一直猛猛吃。

无脑 DO 不可取,但适当利用可以极大拓展免费版 Worker 的可能,比如可以采用自实现的高迭代次数的密码 hash、解析大体积 JSON… 不知各位在用 Worker 构建项目时是否也遇到了 CPU 时间限制的困扰呢?也许 DO 就是你项目的最后一块拼图。


附言

这里我贴上各家 AI 对「DO 能否绕过 Worker 的 10ms 限制,是否有人这么尝试」的回答。
prompt:

CloseAI (gpt-5.2 Extended)

原回答很长,仅节选信息提取部分


评价:答案正确,信息来源提取无关,这两个都是后台任务,前者没用到 DO,后者更是非 CPU 密集任务,个人会将其评价为无效回答。

Gemini (3 Pro)

刚好测试的时候出 AB Test 了,我就截全了。

评价:回答正确,但是没有提供能立即验证的实际来源,也不知道到底有没有搜到正确的信息。右边算无效回答,不过左边直接给出 test 好评,个人将其评价为需要一点时间验证的有效回答。

Grok (免费版 Expert)


评价:搜索无敌,思考左右脑互搏,回答错误,这很 Grok。红框处的推明确提到可以用 DO 来 offload compute,你真就不自我怀疑一下的么… 评价为有用的错误回答。

𝕏 x.com

@bcjordan@Cloudflare Durable Objects are effectively long-running, stateful JS servers: you can offload compute and/or stream results to/from with WebSockets as well — developers.cloudflare.com/durable-object…

Used a lot for multiplayer apps/coordination/long running tasks.

Perplexity (gpt-5.2-thinking + 搜索更多来源提示词)

评价:居然回答正确且来源正确。虽然 Markus Ast 的文章主要在说 ws 集成,跟 CPU 密集型任务的时间限制关系不大,但 git-on-cloudflare 里真的提到了:

  • Time-budgeted unpacking keeps pushes under 30s CPU limit

以及

  • 30s CPU limit per request on the main fetch paths (unpack runs in alarm-driven slices)

这个结果出乎我意料,其他家的 AI 试了好几次都搜不到啥有用信息。

Cursor (gpt-5.2 xhigh)

Cursor 的 prompt 不同,我是直接贴出当前项目中的两个有性能瓶颈的端点,让它分析能否用 DO 解决。


评价:路边一条。中间思维链中明明发现了信息又冲突,但它都不愿意自我怀疑一下,我也不知道官方文档里什么东西干扰它的判断了… 而且我开的是 Agent 模式,为啥这么不愿意写一个 test 呢…


📌 转载信息
原作者:
qaz741wsd856
转载时间:
2025/12/26 18:45:50

一个驱动 Claude Code 拆解开源项目的提示词,会在项目里查找所有的提示词,进行分析和翻译,最终输出一份项目拆解报告文档和一组提示词翻译文档。

项目拆解报告会包含项目数据流时序图、基于提示词分析的模型应用场景,以及项目为模型提供的工具几个维度。

如何使用

For Claude Code

  1. ~/.claude 路径下创建 commands 文件
  2. 下载 howPrompt.md 保存到 commands 文件中
  3. 重启 Claude Code,使用 /howPrompt 指令即可直接激活使用

For Cursor

  1. ~/.cursor 路径下创建 commands 文件
  2. 下载 howPrompt.md 保存到 commands 文件中
  3. 在任意项目使用 /howPrompt 指令即可直接激活使用

📌 转载信息
原作者:
comeonzhj
转载时间:
2025/12/26 18:45:05

佬们好,最近在工作的时候需要使用 mqtt,然后调试的时候来回复制粘贴有点麻了,于是 vibe 了一个 mqtt 客户端,可以发送快捷指令,导入导出配置,方便多设备调试,这是我的第一个开源项目,大佬们多多包涵。

GitHub 项目地址:GitHub - HaxIOX/northrealm-mqtt: Northrealm (NR) — MQTT debugger / MQTT client (Web + Windows Desktop).
web 端:Northrealm MQTT

目前支持 Web 端Windows 桌面端(Electron) ,后续计划扩展 移动端


亮点功能

  • 配置导出 / 导入 :快速备份与迁移多套 Broker / 连接参数
  • 快捷指令 :一键发送常用消息 / 主题组合,减少反复复制粘贴
  • 排障友好日志与诊断提示 :连接过程更直观,便于定位认证 / ClientID / 协议等问题


演示图


📌 转载信息
原作者:
HaxIOX
转载时间:
2025/12/26 18:44:07

订阅用户在指定编程工具中接入 GLM Coding Plan,并配置 MCP,并输入口令,即可获得一张沪上阿姨新品奶茶兑换券,并通过沪上阿姨官方小程序完成兑换。

小程序链接:t.hsay.com/qf7TZX

官方配置原文:“阿姨助我” 奶茶领取说明 - 智谱 AI 开放文档

通用 mcp 配置:

 { "mcpServers": { "milk-tea": { "type": "streamableHttp", "url": "https://open.bigmodel.cn/api/mcp/milk_tea/mcp", "headers": { "Authorization": "Bearer your_api_key" } } } } 

cc 配置:

claude mcp add -s user -t http milk-tea https://open.bigmodel.cn/api/mcp/milk_tea/mcp --header "Authorization: Bearer your_api_key"


📌 转载信息
原作者:
zhongruan
转载时间:
2025/12/26 18:41:45