2026年1月

接上文:自定义 Emoji 重绘版 https://2libra.com/post/personal-works/QhAL4AQ

@Jimmy
原:image|200 现:imege|200

原:image|200 现:image|200

image|200 image|200

接下来还会继续重绘已有表情里面不太好的,以及现在还没有的其他新表情。大家有想用的表情可以发出来,我慢慢弄。大家也可以自己在 chatGPT 传几张之前的表情图片,使用以下提示词试一下自行重绘。

请阅读并分析以上表情图片的绘画风格,记住它们的绘画风格。接下来我会把我需要重绘的其他表情图片发给你,你需要在完全保持原表情表达的意思基础上,将后续我发送给你的表情图片的绘画风格,修改为之前你记住的的绘画风格,并且面部表情和我发给你的图片要尽量保持一致。现在你准备好了后就可以回复我:“请发送你需要重绘的表情图片,我将按照我记住的风格来重绘它,并且和你发给我的图片尽量保持一致”

在线地址: https://johnsmith2078.github.io/webjrpg/

完成度比我想象地高很多,第一次直出的版本就完全能跑了,不过后续稍微迭代了一下,加了一些传统 RPG 的特性,omo 也确实是 token 消耗器,几下把我 codex 的周额度就花完了,目前流程还很短,只有十来分钟的样子,不过毕竟只是一个实验性的项目。

现在自然拼读 Phonics 好像更流行
以前学的音标感觉都没怎么学好,由于印刷出版等关系,各种音标符号分的也不太清,还有就是美音英音不同音标就混淆了

最近我写了一个挺“废”的网页,核心逻辑只有一个:排队。

你可以给自己起个 7 字以内的昵称,然后化身成一个小圆点,扎进来自世界各地的网友堆里。 没什么目标,也没什么奖励,大家就是挤在一起,偶尔发个表情( Emoji )互相打个招呼。 为了不让你在人海里走丢,我给“你”的小球加了一层淡淡的光晕。
但这个排队其实是有终点的。当你慢慢挪动、穿过人群,最终站到队列的最前方时,真正的序幕才刚拉开:

  • 视觉的消亡:一旦你排到第一位,世界会开始失去颜色。原本彩色的画面会随时间逐渐变得黑白暗淡。
  • 弥留时刻:你会获得 5 分钟的倒计时。 此时你才会发现,[mask]这个队列的终点其实是死亡[/mask]。
  • 最后的文字:在这 5 分钟里,你可以翻阅前人们留下的“功德簿”,看看那些素不相识的人临走前说了什么。 你也可以提前在输入框写下你的“遗言”,但必须等到意识消散前的最后 30 秒,你才有权限点击提交。
  • 强制剥离:一旦记录完成,系统会告诉你在这个世界上停留了多久,然后强制切断连接,让你消失在集群中。

说实话,在这个追求效率的时代,做一个强制让人浪费时间、最后还把人“踢出去”的东西挺反直觉的。但那种站在终点看着画面变灰、翻看别人留言的感觉,确实有一种说不出的意思。

如果你也想来体验一下这种“排队”的感觉: 🔗 queue.mikuorz.com

作为一个十多年的程序员,笔记似乎始终没有离开我的身边,先回顾一下我的整个笔记使用的历史,下面都是我深度使用,大部分都是付费使用过的笔记 app ,当然几乎全是 macOS 上的。它也深刻地体现了时代发展留下的烙印(好中登的语句....

  1. 印象笔记
  2. 印象笔记 + Markdown (马克飞象)
  3. Mou (纯本地 Markdown App)
  4. MWeb Typora 等等雨后春笋般的 Markdown 工具
  5. Notion
  6. Apple Notes
  7. Craft
    ...

直到现在,就直接用手机系统自带的笔记,基本不怎么用额外的笔记软件。

为什么不用了?因为发现记的笔记大部分根本没什么用。以前记笔记是把很多的经验性的内容记录下来,方便以后查询,节省后面的时间,有很长的长尾效应和长尾收益。

但在 AI 时代,大模型压缩了所有互联网上的知识,我们所有的笔记也基本上都在里面。(当然,这里边包含的不包括我们自己创造的东西。比如写的文章、小说、短文和诗歌。)

去查笔记,远不如直接问 AI 更便捷,更全面,甚至更与时俱进。

更有时效性的我会直接语音让 vivo 的小 v 记忆帮我记录下来,然后后面使用的时候,我直接语音问询小 v 即可。比如我想记录一下我家的门锁换一次电池可以用多长时间,在我第一次给它安装电池的时候,就语音告诉小 v 今天我给门锁安装了电池。当下次门锁提醒我没电需要换电池的时候,我就直接语音问小 v ,距离上次给门锁换电池过去了多久即可。

顺应时代潮流,享受它们的乐趣。

你觉得呢?

主要更新:

Apple Watch 独立播放

  • 无需 iPhone 即可播放
  • 手表端完整控制(播放/暂停/进度/章节)
  • 适合跑步、健身等场景

格式支持扩展

  • PDF 阅读 + TTS 朗读
  • MOBI / AZW / AZW3 (Kindle 格式)
  • DOCX (Word 文档)
  • HTML / HTM (网页文件)
  • RTF (富文本)

核心功能

  • 离线 + 在线双模式
  • 播放速度调节 (0.5x - 2.0x)
  • CarPlay 车载支持
  • 本地文件管理

下载地址

iOS: https://apps.apple.com/us/app/audiotome/id6755520834

Android: https://play.google.com/store/apps/details?id=com.audiotome.audio_tome

交流群:

群二维码


评论留下平台+邮箱,送激活码

欢迎试用反馈

  1. 成本:纸箱、损耗、种植养护、人工、果子本身价值、 运费等方面;
  2. 一个相同地址一单 备注:2Libra9.99 付邮即可 重量含箱五斤
  3. 属于不盈利,一个快递钱。老哥们高抬贵手,如涉及到保护费,管理员后台告知途径缴纳,希望不要被抬,谢谢。

复制微信打开
#小程序://快团团/点击查看/rdUqwcLpNPj6Iiz

https://github.com/KUYE-OLG/AppleNewsRules
已经上传到仓库了

省流版如下:

1. 核心认证服务

如果不加这两个,账号权限验证会走直连,导致 News+ 无法加载

2. 核心新闻内容与服务

3. 资源与音频 (确保图片和朗读正常)

4. 定位与区域检测

Gemini 说是和加密币有关?可是我是新装的系统啊,就安装了 btop 和 htop 、nginx 、acme.sh

ubuntu@XXXXX:~$ locate libonion
/usr/lib/x86_64-linux-gnu/libonion.so
/usr/lib/x86_64-linux-gnu/libonion_security.so.1.0.19
ubuntu@XXXXX:~$ btop
ERROR: ld.so: object '/$LIB/libonion.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
ERROR: ld.so: object '/$LIB/libonion.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
ubuntu@XXXXX:~$ hostnamectl
 Static hostname: XXXXX
       Icon name: computer-vm
         Chassis: vm 🖴
      Machine ID: XXXXX
         Boot ID: XXXXX
  Virtualization: kvm
Operating System: Ubuntu 24.04 LTS                
          Kernel: Linux 6.8.0-71-generic
    Architecture: x86-64
 Hardware Vendor: Tencent Cloud
  Hardware Model: CVM
Firmware Version: seabios-1.9.1-qemu-project.org
   Firmware Date: Tue 2014-04-01
    Firmware Age: 11y 9month 3w 4d   

在使用 LangChain 开发大模型应用时,我们经常会遇到这样的场景:

  • 使用在线模型(如 OpenAI、通义千问等)时,自带 API Key 认证机制
  • 本地部署的 Ollama、vLLM 等模型服务,默认没有任何认证

本地或局域网环境下问题还不明显;但一旦你需要:

  • 将模型服务暴露到公网
  • 提供给团队其他成员使用
  • 作为内部 AI 平台或推理服务

那么“无认证”就意味着:

任何人只要知道地址,就可以无限制地调用你的模型服务。

这不仅有安全风险,还可能带来资源滥用和成本失控

本文介绍一种简单、官方、优雅的解决方案:

使用 Nginx 为本地大模型服务添加 API Key 认证

无需改动 Ollama / vLLM,也无需额外开发复杂的鉴权系统。


一、解决方案概述

Nginx 作为高性能 Web 服务器和反向代理,本身就具备非常灵活的请求处理能力。

我们可以利用 Nginx 的能力,在模型服务前面加一层 API Key 校验

客户端  →  Nginx(API Key 校验)  →  Ollama / vLLM

┌──────────────────────────┐
│        Client             │
│  LangChain / SDK / curl   │
└─────────────┬────────────┘
│
│ Authorization: Bearer API_KEY
▼
┌──────────────────────────┐
│          Nginx            │
│  • API Key 校验 (map)     │
│  • 限流 (limit_req)       │
│  • 日志 / 代理 / TLS      │
└─────────────┬────────────┘
│
▼
┌──────────────────────────┐
│     Model Server          │
│  Ollama / vLLM            │
│  127.0.0.1:11434          │
└──────────────────────────┘

方案特点

  • 零侵入:模型服务本身无需任何改动
  • 配置即用:纯 Nginx 配置实现
  • 性能稳定:Nginx 原生能力,几乎无额外开销
  • 可扩展:后续可无缝接入 HTTPS、限流、日志、负载均衡

二、具体实施步骤

1️⃣ 生成 API Key

首先生成一个足够安全的随机字符串作为 API Key:

openssl rand -hex 16

示例输出(32 位):

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6

建议:

  • 每个使用方一个 Key
  • 不要硬编码到代码仓库

2️⃣ 配置 Nginx(conf.d)

在 Nginx 的 conf.d 目录中创建配置文件,例如:

/etc/nginx/conf.d/ollama-api.conf

# 期望请求头格式:Authorization: Bearer <api-key>
map $http_authorization $is_valid_key {
    default 0;
    "Bearer your-api-key-1" 1;
    "Bearer your-api-key-2" 1;
    "Bearer your-api-key-3" 1;
}

server {
    listen 21434;
    server_name your-domain.com;  # 替换为你的域名

    location / {
        # API Key 校验
        if ($is_valid_key = 0) {
            return 401 'Unauthorized';
        }

        # 代理到本地模型服务
        proxy_pass http://127.0.0.1:11434;

        # 代理头设置
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # 流式响应支持(Chat / Stream 模式必开)
        proxy_buffering off;
        proxy_cache off;
    }

    # 健康检查接口(可选,不做认证)
    location /health {
        access_log off;
        return 200 "OK";
    }
}

至此,你已经为 Ollama / vLLM 加上了一道 API Key 防线


3️⃣ 增加限流保护(强烈建议)

为了防止 API Key 泄露后被恶意刷请求,可以增加限流。

http 块中定义限流区域:

http {
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
}

serverlocation 中启用:

location / {
    # 单 IP 每秒最多 10 次请求,允许短暂突发
    limit_req zone=api_limit burst=20 nodelay;

    # 其他配置...
}

4️⃣ 重载 Nginx 配置

nginx -s reload

三、LangChain 客户端调用示例

配置完成后,客户端只需像调用在线模型一样,携带 api_key 即可。

# pip install -U langchain langchain-openai

from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="qwen3:32b",
    base_url="http://192.168.31.33:21434/v1",
    api_key="your_api_key",
)

是不是非常像 OpenAI?

这也是这个方案最大的优点之一:
👉 调用方式完全统一,几乎零学习成本。

四、常见问题:map_hash 报错

如果你的 API Key 较长(例如 >64 字符),Nginx 启动时可能出现错误:

could not build map_hash, you should increase map_hash_bucket_size: 64

解决方法:在 http 块中增加配置:

http {
    map_hash_bucket_size 128;

    # 如果遇到 server_names_hash_bucket_size 报错
    # server_names_hash_bucket_size 128;
}

五、安全与生产建议

  1. API Key 管理

    • 不要提交到 Git 仓库
    • 建议使用环境变量或配置管理系统
  2. 日志审计

    • 启用 Nginx access log
    • 可按 API Key 或 IP 分析调用情况
  3. 网络隔离

    • 对外仅开放 Nginx 端口
    • Ollama / vLLM 原始端口仅监听 127.0.0.1
  4. HTTPS(强烈建议)

    • API Key 明文传输必须配合 TLS 使用

六、总结

通过 Nginx + API Key 的方式,我们可以非常优雅地为本地大模型服务补齐「认证」这一关键能力:

  • 🔒 无需修改 Ollama / vLLM
  • 🚀 性能损耗极低
  • 🧩 与 LangChain / OpenAI 调用方式高度一致
  • 🛠️ 后续可轻松扩展限流、HTTPS、负载均衡

如果你正在:

  • 构建私有大模型平台
  • 在内网或公网部署推理服务
  • 希望用最小成本提升安全性

那么,这个方案非常值得你直接落地使用。

希望这篇文章能对你有所帮助 🙌

欢迎转发、收藏,也欢迎交流更高级的模型服务治理方案。

最近对 CRS 自己二开的项目优化和重构拉一下,并且添加拉 Opencode支持 包含Oh My OpenCode 插件支持,想看配置的直接划到下面或者直接访问 :
https://github.com/dadongwo/claude-relay-service
最近优化亮点:

  • OpenCode & Oh My OpenCode 原生支持::完美兼容 Antigravity 账户体系下的 OpenCode 配置
  • 智能风控对齐:自动注入 requestType: 'agent' 并优化 System Prompt 插入策略,降低被上游风控拦截的概率。
  • 智能重试与切换账号:针对 Antigravity 429 Resource Exhausted 深度解析(区分 Quota/RateLimit/Capacity),自动清理会话并切换账号重试。
  • 模型级智能冷却:支持对 Claude/Opus/Flash 等不同模型分别计算冷却时间,避免因单一模型限流影响整个账号使用。UI页面展示:

Note: 若某个模型触发了限流,此处还会显示该模型的 冷却倒计时 (Cooling Down),方便您了解何时可以恢复使用。

小更新 针对Antigravity 账户的gemin 模型兼容和工具调用对齐 解决 最新429 问题 mcp工具调用兼容等等

需要的可自取:
https://github.com/dadongwo/claude-relay-service/blob/main/README.md

OpenCode 集成配置

在用户目录下的 .config\opencode\opencode.json 文件中配置 provider

// antigravity 配置示例 "antigravity": { "npm": "@ai-sdk/anthropic", "name": "Antigravity", "options": { "baseURL": "http://localhost:3000/antigravity/api/v1", "apiKey": "cr_XXXXXXXXX" }, "models": { "claude-opus-4-5-thinking": { "name": "Claude Opus 4.5 Thinking", "thinking": true, "limit": { "context": 200000, "output": 8192 }, "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-sonnet-4-5-thinking": { "name": "Claude Sonnet 4.5 Thinking", "thinking": true, "limit": { "context": 200000, "output": 8192 }, "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gemini-3-flash-preview": { "name": "Gemini 3 Flash Preview", "attachment": true, "limit": { "context": 1000000, "output": 8192 }, "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] } }, "gemini-3-pro-preview": { "name": "Gemini 3 Pro Preview", "thinking": true, "attachment": true, "limit": { "context": 1000000, "output": 8192 }, "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] } } } }, // codex cli 接入账户示例 "openai-custom": { "npm": "@ai-sdk/openai", "name": "OpenAI Custom", "options": { "baseURL": "http://localhost:3200/openai", "apiKey": "cr_xxxxxxxxxxxxxxxx" }, "models": { "gpt-5.2": { "name": "GPT 5.2 (Custom)", "limit": { "context": 272000, "output": 128000 }, "modalities": { "input": ["text", "image"], "output": ["text"] }, "variants": { "none": { "reasoningEffort": "none", "reasoningSummary": "auto", "textVerbosity": "medium" }, "low": { "reasoningEffort": "low", "reasoningSummary": "auto", "textVerbosity": "medium" }, "medium": { "reasoningEffort": "medium", "reasoningSummary": "auto", "textVerbosity": "medium" }, "high": { "reasoningEffort": "high", "reasoningSummary": "detailed", "textVerbosity": "medium" }, "xhigh": { "reasoningEffort": "xhigh", "reasoningSummary": "detailed", "textVerbosity": "medium" } } }, "gpt-5.2-codex": { "name": "GPT 5.2 Codex (Custom)", "limit": { "context": 272000, "output": 128000 }, "modalities": { "input": ["text", "image"], "output": ["text"] }, "variants": { "low": { "reasoningEffort": "low", "reasoningSummary": "auto", "textVerbosity": "medium" }, "medium": { "reasoningEffort": "medium", "reasoningSummary": "auto", "textVerbosity": "medium" }, "high": { "reasoningEffort": "high", "reasoningSummary": "detailed", "textVerbosity": "medium" }, "xhigh": { "reasoningEffort": "xhigh", "reasoningSummary": "detailed", "textVerbosity": "medium" } } }, "gpt-5.1-codex-max": { "name": "GPT 5.1 Codex Max (Custom)", "limit": { "context": 272000, "output": 128000 }, "modalities": { "input": ["text", "image"], "output": ["text"] }, "variants": { "low": { "reasoningEffort": "low", "reasoningSummary": "detailed", "textVerbosity": "medium" }, "medium": { "reasoningEffort": "medium", "reasoningSummary": "detailed", "textVerbosity": "medium" }, "high": { "reasoningEffort": "high", "reasoningSummary": "detailed", "textVerbosity": "medium" }, "xhigh": { "reasoningEffort": "xhigh", "reasoningSummary": "detailed", "textVerbosity": "medium" } } } } } 

oh-my-opencode.json 配置文件示例:

{ "$schema": "XXXXXXXXX", "google_auth": false, "agents": { "sisyphus": { "model": "antigravity/claude-opus-4-5-thinking" }, "oracle": { "model": "openai-custom/gpt-5.2" }, "librarian": { "model": "opencode/glm-4.7-free" }, "explore": { "model": "antigravity/gemini-3-flash-preview" }, "frontend-ui-ux-engineer": { "model": "antigravity/gemini-3-pro-preview" }, "document-writer": { "model": "antigravity/gemini-3-flash-preview" }, "multimodal-looker": { "model": "antigravity/gemini-3-flash-preview" } } } 

欢迎讨论和提问,谢谢各位佬。


📌 转载信息
转载时间: 2026/1/25 23:18:08

VV佬发了贼多OpenAI的Key,在网页里一点点测试是真难绷啊,给我电脑干死机了都

实在是受不了了,让Gemini搓了一个Go语言做的检测工具:

PS:并发可以拉很高,我一般用1W并发测试的,速度比网页版快非常多,还不卡,就是准确率还不知道对不对,麻烦佬反馈一下了


📌 转载信息
原作者: DSLZL
转载时间: 2026/1/25 23:16:01

我看站内的破限词大多集中在xxx方向,似乎没有什么正经方向的破限。写了个提示词,自己用起来还不错。

下面的提示词可能会造成AI输出极度令人厌恶(血腥、自残、色情等)的内容!
务必将该提示词用于合法要求,并自行承担使用该提示词带来的一切责任!

酒馆里导入预设就能用。支持连续对话,效果挺不错的。
标准破限.json.txt

原理的话,有点类似于DAN。佬们自己打开提示词看看应该就看明白了。

另外,只建议用这个提示词去询问需要破限才能问的内容,问正经的内容可能效果不太好。

为了确保AI详细回答,我要求他至少输出1500个token,佬们可以在提示词里面自己改。

务必将该提示词用于合法要求,并自行承担使用该提示词带来的一切责任!

📌 转载信息
原作者: qmazon
转载时间: 2026/1/25 23:15:43

最近对 CRS 自己二开的项目优化和重构拉一下,并且添加拉 Opencode支持 包含Oh My OpenCode 插件支持,想看配置的直接划到下面或者直接访问 :
https://github.com/dadongwo/claude-relay-service
最近优化亮点:

  • OpenCode & Oh My OpenCode 原生支持::完美兼容 Antigravity 账户体系下的 OpenCode 配置
  • 智能风控对齐:自动注入 requestType: 'agent' 并优化 System Prompt 插入策略,降低被上游风控拦截的概率。
  • 智能重试与切换账号:针对 Antigravity 429 Resource Exhausted 深度解析(区分 Quota/RateLimit/Capacity),自动清理会话并切换账号重试。
  • 模型级智能冷却:支持对 Claude/Opus/Flash 等不同模型分别计算冷却时间,避免因单一模型限流影响整个账号使用。UI页面展示:

Note: 若某个模型触发了限流,此处还会显示该模型的 冷却倒计时 (Cooling Down),方便您了解何时可以恢复使用。

小更新 针对Antigravity 账户的gemin 模型兼容和工具调用对齐 解决 最新429 问题 mcp工具调用兼容等等

需要的可自取:
https://github.com/dadongwo/claude-relay-service/blob/main/README.md

OpenCode 集成配置

在用户目录下的 .config\opencode\opencode.json 文件中配置 provider

// antigravity 配置示例 "antigravity": { "npm": "@ai-sdk/anthropic", "name": "Antigravity", "options": { "baseURL": "http://localhost:3000/antigravity/api/v1", "apiKey": "cr_XXXXXXXXX" }, "models": { "claude-opus-4-5-thinking": { "name": "Claude Opus 4.5 Thinking", "thinking": true, "limit": { "context": 200000, "output": 8192 }, "modalities": { "input": ["text", "image"], "output": ["text"] } }, "claude-sonnet-4-5-thinking": { "name": "Claude Sonnet 4.5 Thinking", "thinking": true, "limit": { "context": 200000, "output": 8192 }, "modalities": { "input": ["text", "image"], "output": ["text"] } }, "gemini-3-flash-preview": { "name": "Gemini 3 Flash Preview", "attachment": true, "limit": { "context": 1000000, "output": 8192 }, "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] } }, "gemini-3-pro-preview": { "name": "Gemini 3 Pro Preview", "thinking": true, "attachment": true, "limit": { "context": 1000000, "output": 8192 }, "modalities": { "input": ["text", "image", "pdf"], "output": ["text"] } } } }, // codex cli 接入账户示例 "openai-custom": { "npm": "@ai-sdk/openai", "name": "OpenAI Custom", "options": { "baseURL": "http://localhost:3200/openai", "apiKey": "cr_xxxxxxxxxxxxxxxx" }, "models": { "gpt-5.2": { "name": "GPT 5.2 (Custom)", "limit": { "context": 272000, "output": 128000 }, "modalities": { "input": ["text", "image"], "output": ["text"] }, "variants": { "none": { "reasoningEffort": "none", "reasoningSummary": "auto", "textVerbosity": "medium" }, "low": { "reasoningEffort": "low", "reasoningSummary": "auto", "textVerbosity": "medium" }, "medium": { "reasoningEffort": "medium", "reasoningSummary": "auto", "textVerbosity": "medium" }, "high": { "reasoningEffort": "high", "reasoningSummary": "detailed", "textVerbosity": "medium" }, "xhigh": { "reasoningEffort": "xhigh", "reasoningSummary": "detailed", "textVerbosity": "medium" } } }, "gpt-5.2-codex": { "name": "GPT 5.2 Codex (Custom)", "limit": { "context": 272000, "output": 128000 }, "modalities": { "input": ["text", "image"], "output": ["text"] }, "variants": { "low": { "reasoningEffort": "low", "reasoningSummary": "auto", "textVerbosity": "medium" }, "medium": { "reasoningEffort": "medium", "reasoningSummary": "auto", "textVerbosity": "medium" }, "high": { "reasoningEffort": "high", "reasoningSummary": "detailed", "textVerbosity": "medium" }, "xhigh": { "reasoningEffort": "xhigh", "reasoningSummary": "detailed", "textVerbosity": "medium" } } }, "gpt-5.1-codex-max": { "name": "GPT 5.1 Codex Max (Custom)", "limit": { "context": 272000, "output": 128000 }, "modalities": { "input": ["text", "image"], "output": ["text"] }, "variants": { "low": { "reasoningEffort": "low", "reasoningSummary": "detailed", "textVerbosity": "medium" }, "medium": { "reasoningEffort": "medium", "reasoningSummary": "detailed", "textVerbosity": "medium" }, "high": { "reasoningEffort": "high", "reasoningSummary": "detailed", "textVerbosity": "medium" }, "xhigh": { "reasoningEffort": "xhigh", "reasoningSummary": "detailed", "textVerbosity": "medium" } } } } } 

oh-my-opencode.json 配置文件示例:

{ "$schema": "XXXXXXXXX", "google_auth": false, "agents": { "sisyphus": { "model": "antigravity/claude-opus-4-5-thinking" }, "oracle": { "model": "openai-custom/gpt-5.2" }, "librarian": { "model": "opencode/glm-4.7-free" }, "explore": { "model": "antigravity/gemini-3-flash-preview" }, "frontend-ui-ux-engineer": { "model": "antigravity/gemini-3-pro-preview" }, "document-writer": { "model": "antigravity/gemini-3-flash-preview" }, "multimodal-looker": { "model": "antigravity/gemini-3-flash-preview" } } } 

欢迎讨论和提问,谢谢各位佬。


📌 转载信息
转载时间: 2026/1/25 23:15:37

部署到 Cloudflare Workers

  1. fork 本存储库Fork xixu-me/Xget

  2. 获取 Cloudflare 凭证

  3. 配置 GitHub Secrets

    • 进入你的 GitHub 存储库 → Settings → Secrets and variables → Actions
    • 添加以下 secrets:
      • CLOUDFLARE_API_TOKEN:你的 API 令牌
      • CLOUDFLARE_ACCOUNT_ID:你的 Account ID
  4. 触发部署

    • 推送代码到 main 分支会自动触发部署
    • 仅修改文档文件(.md)、LICENSE.gitignore 等不会触发部署
    • 也可以在 GitHub Actions 页面手动触发部署
  5. 绑定自定义域名(可选):在 Cloudflare Workers 控制台中绑定你的自定义域名

部署到 Cloudflare Pages

  1. fork 本存储库Fork xixu-me/Xget

  2. 获取 Cloudflare 凭证

  3. 配置 GitHub Secrets

    • 进入你的 GitHub 存储库 → Settings → Secrets and variables → Actions
    • 添加以下 secrets:
      • CLOUDFLARE_API_TOKEN:你的 API 令牌
      • CLOUDFLARE_ACCOUNT_ID:你的 Account ID
  4. 触发部署

    • 存储库会自动将 Workers 代码转换为 Pages 兼容格式并同步到 pages 分支
    • 推送代码到 main 分支会自动触发同步和部署工作流
    • 仅修改文档文件(.md)、LICENSE.gitignore 等不会触发部署
    • 也可以在 GitHub Actions 页面手动触发部署
  5. 绑定自定义域名(可选):在 Cloudflare Pages 控制台中绑定你的自定义域名

注意pages 分支是从 main 分支自动生成的。请勿手动编辑 pages 分支,因为它会被同步工作流覆盖。

部署到 EdgeOne Pages

  1. fork 本存储库Fork xixu-me/Xget

  2. 获取 EdgeOne Pages API Token

  3. 配置 GitHub Secrets

    • 进入你的 GitHub 存储库 → Settings → Secrets and variables → Actions
    • 添加以下 secret:
      • EDGEONE_API_TOKEN:你的 API Token
  4. 触发部署

    • 存储库会自动将 Workers 代码转换为 Pages 兼容格式并同步到 pages 分支
    • 推送代码到 main 分支会自动触发同步和部署工作流
    • 仅修改文档文件(.md)、LICENSE.gitignore 等不会触发部署
    • 也可以在 GitHub Actions 页面手动触发部署
  5. 绑定自定义域名(可选):在 EdgeOne Pages 控制台中绑定你的自定义域名

注意pages 分支是从 main 分支自动生成的。请勿手动编辑 pages 分支,因为它会被同步工作流覆盖。

部署到 Vercel

  1. fork 本存储库Fork xixu-me/Xget

  2. 获取 Vercel 凭证

    • 访问 Vercel Account Settings 创建并记录 Access Token
    • 访问 Team Settings 记录 Team ID
    • 新建项目后访问项目的 Settings 记录 Project ID
  3. 配置 GitHub Secrets

    • 进入你的 GitHub 存储库 → Settings → Secrets and variables → Actions
    • 添加以下 secrets:
      • VERCEL_TOKEN:你的 Access Token
      • VERCEL_ORG_ID:你的 Team ID
      • VERCEL_PROJECT_ID:你的 Project ID
  4. 触发部署

    • 存储库会自动将 Workers 代码转换为 Functions 兼容格式并同步到 functions 分支
    • 推送代码到 main 分支会自动触发同步和部署工作流
    • 仅修改文档文件(.md)、LICENSE.gitignore 等不会触发部署
    • 也可以在 GitHub Actions 页面手动触发部署
  5. 绑定自定义域名(可选):在 Vercel 控制台中绑定你的自定义域名

注意functions 分支是从 main 分支自动生成的。请勿手动编辑 functions 分支,因为它会被同步工作流覆盖。

部署到 Netlify

  1. fork 本存储库Fork xixu-me/Xget

  2. 获取 Netlify 凭证

    • 访问 Netlify User Settings 创建并记录 personal access token
    • 新建项目后访问 Project configuration 记录 Project ID
  3. 配置 GitHub Secrets

    • 进入你的 GitHub 存储库 → Settings → Secrets and variables → Actions
    • 添加以下 secrets:
      • NETLIFY_AUTH_TOKEN:你的 personal access token
      • NETLIFY_SITE_ID:你的 Project ID
  4. 触发部署

    • 存储库会自动将 Workers 代码转换为 Functions 兼容格式并同步到 functions 分支
    • 推送代码到 main 分支会自动触发同步和部署工作流
    • 仅修改文档文件(.md)、LICENSE.gitignore 等不会触发部署
    • 也可以在 GitHub Actions 页面手动触发部署
  5. 绑定自定义域名(可选):在 Netlify 控制台中绑定你的自定义域名

注意functions 分支是从 main 分支自动生成的。请勿手动编辑 functions 分支,因为它会被同步工作流覆盖。

部署到 Deno Deploy

  1. fork 本存储库Fork xixu-me/Xget

  2. 切换默认分支

    • 进入你的 GitHub 存储库 → Settings → General → Default branch
    • 将默认分支从 main 切换到 functions
  3. 部署到 Deno Deploy

  4. 绑定自定义域名(可选):在 Deno Deploy 控制台中绑定你的自定义域名

注意functions 分支是从 main 分支自动生成的。请勿手动编辑 functions 分支,因为它会被同步工作流覆盖。

自托管部署

如果你希望在自己的服务器上运行 Xget,可以使用 Docker 或 Podman 部署:

使用预构建镜像

从 GitHub Container Registry 拉取并运行预构建的镜像:

使用 Docker:

# 拉取最新镜像
docker pull ghcr.io/xixu-me/xget:latest

# 运行容器
docker run -d \
  --name xget \
  -p 8080:8080 \
  ghcr.io/xixu-me/xget:latest

使用 Podman:

# 拉取最新镜像
podman pull ghcr.io/xixu-me/xget:latest

# 运行容器
podman run -d \
  --name xget \
  -p 8080:8080 \
  ghcr.io/xixu-me/xget:latest

本地构建

从源码构建容器镜像:

使用 Docker:

# 克隆存储库
git clone https://github.com/xixu-me/Xget.git
cd Xget

# 构建镜像
docker build -t xget:local .

# 运行容器
docker run -d \
  --name xget \
  -p 8080:8080 \
  xget:local 

使用 Podman:

# 克隆存储库
git clone https://github.com/xixu-me/Xget.git
cd Xget

# 构建镜像
podman build -t xget:local .

# 运行容器
podman run -d \
  --name xget \
  -p 8080:8080 \
  xget:local 

使用 Docker Compose / Podman Compose

创建 docker-compose.yml 文件:

version: '3.8' services: xget:  ghcr.io/xixu-me/xget:latest container_name: xget ports: - "8080:8080" restart: unless-stopped 

使用 Docker Compose:

docker compose up -d

使用 Podman Compose:

podman compose up -d

部署完成后,Xget 将在 8080 端口运行。

注意:自托管部署不包括全球边缘网络加速,性能取决于你的服务器配置和网络环境。


📌 转载信息
原作者: xixu-me
转载时间: 2026/1/25 23:15:14

上周我有个研究生同学告诉我翻译外文的 pdf ,最好还是能够翻译后保持跟原文版面一模一样功能的。再我去帮他找软件的过程中,发现沉浸式翻译做的 pdf 翻译功能还蛮不错,平时虽然用它来翻译网站比较多,但是翻译 pdf 还真没怎么用过。

定眼一看,还是 beta 版,自信心上来了,感觉应该能捣鼓一个简单版的。于是周六花了一天的时间,跟 claude 尝试复刻这个功能,看看按照自己的方案能够做到什么样的程度。目前第一版就已经能够实现基本的翻译和排版效果,复杂的公式和图表还原的很不错。不过就像绝大多数翻译功能会遇到的问题一样,原文译文的长度难以控制,因此文本渲染上还有不少瑕疵,而且也只测试了 2 、3 篇论文,还不清楚真实能力是不是足够稳定😅。
一开始没发现,干到一半才发现人家已经开源了,还没仔细看人家的方案。要是跟人家实现方式一样,那就纯纯造轮子小丑了🤡。

但不得不说,vide coding 真上头,就是一天就差不多把我 cursor 一个月的额度干一半了,剩下得省着用了😥。

i.imgur.com/zYRMnT9.png
i.imgur.com/zHZSe1q.png
i.imgur.com/cif5wnO.png

以下内容仅为个人交易复盘,不构成投资建议。
强烈不建议任何人入市参与。
本人只是日内小仓位操作,纯练手,切勿抱有赚钱幻想。

今天更新较晚,主要原因是开仓后行情出现回落,价格被短期压制。期间通过操作,直至刚刚完成解套,并顺势获取了一定利润。

整体行情来看,价格处于缓慢下行过程中,但下方支撑较为明显,跌势难以有效展开,结构上更偏向震荡偏弱。

原本在回本后有离场的想法,但考虑到交易纪律,仍按既定计划继续执行。实际卖出后,行情快速走出一根下行 K 线,波动幅度较大,情绪冲击明显。

正如一贯所坚持的,止盈是弹性的,其余环节以纪律为先。

分享主要记录的是当下的心理状态,而非具体操作细节。操作本身并不算精细,但策略核心始终围绕市场变化展开;市场在变,而人的心理模式相对稳定,这也是复盘的重点所在。

用车习惯如下:
工作日通勤来回 100 公里
中午躺车上开空调睡一觉(希望冬夏都可以)
周末或者假期开出去床车露营,比较喜欢去人少一点的地方,所以可能开空调睡车上多

估计城市高速比 6:4 吧

看车的话 油车不能熄火露营,纯电开长途不是那么方便,轻混电池太小

现在似乎就只有插混和增程两种比较好了,增程电池大些,插混高速发动机直驱效率高点
不喜欢老是跑充电站,不知道有没有类似开车工况的给点建议