跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 浅色
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • 深色
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(不使用皮肤)
  • 不使用皮肤
折叠
品牌标识

抡锤者

williamlouisW

williamlouis

@williamlouis
关于
帖子
150
主题
7
分享
0
群组
0
粉丝
0
关注
0

帖子

最新 最佳 有争议的

  • 求助 win11系統下如何實現瀏覽器實時託管
    williamlouisW williamlouis

    @陳瑋 你在台湾?那边的行业形势怎么样?

    AI Agent

  • 站点开放了zip格式上传,有其他格式需求的可以提意见
    williamlouisW williamlouis

    @terry 真给力啊。老特。gz的压缩率 嘎嘎给力。

    站点公告

  • M5pro 64G LLM性能参考.
    williamlouisW williamlouis

    Mac 适合 用 在线算力。做一个 API集合路由 狂剽 免费API。生产力肯定不行。办公室 缩减开资是可以实现的。chat生态推荐。

    AI硬件

  • 5700G AX370 +32G 内存、系统linux mint 想入手RX 7900XTX 跑本地大模型写代码,玩文生图,文生视频,各位大佬看看这套配置可以吗,欢迎各位大神来喷,显卡到货长期更新此贴,实战报告奉上!!
    williamlouisW williamlouis

    @woaikuancheng0 Hermes 论坛中比较成熟的卡了。上吧。小霸王学习机 你值得拥有。

    AI硬件

  • 请教各路大神, 有没有全linux生态的使用经验?
    williamlouisW williamlouis

    @Tony-Wang 输入法 有 fix5 原生的。没广告。

    AI硬件

  • 请教各路大神, 有没有全linux生态的使用经验?
    williamlouisW williamlouis

    linux mint 让 AI推荐个版本给你。linux mint有笔记本的专用版。对品牌做了 电源优化。其他的没什么特别的。装就行了。优化版主要针对 盒盖不灭屏。休眠睡不醒。这些问题。用不上就直接上最新版就行了。应该是23

    AI硬件

  • LTX2.3工作流分享,刘悦大神出品
    williamlouisW williamlouis

    沙发坐坐。先下了看看。感谢老特的分享。

    AI音视频画图

  • 站点开放了zip格式上传,有其他格式需求的可以提意见
    williamlouisW williamlouis

    沙发坐坐。我的包都是这个格式:tar.gz

    站点公告

  • Mac 丐版 低配篇。大众基本都是这个版本的用户。敬请参考!
    williamlouisW williamlouis

    @eddie-hk 硬盘可以咸鱼,不过得你过保的。不过。别人插了。用不了。反正是有收的。

    LLM讨论区

  • 请教大家M5 Max 128G MacBook Pro上的oMLX如何优化
    williamlouisW williamlouis

    @zorg 作用不一样。我的一直在干活。列队很长。干不完的干。主要就靠功耗低活着。服务器都靠这个小ai 干活。人是干不过来的。过一段在给它雇一个 伙伴吧。还没想好是继续Mac 还是换 塔式主机了。这段学习考量。老特的配置 应该一个能顶Mac 4个还得多了。不考虑功耗和噪音。塔式是ztmd 合适啊。想研究搞一个 托管到 本地机房。有空研究下。本地 联通和移动应该都有对外业务。

    AI硬件

  • 大佬们你 这3090 这成色能入吗? 5500
    williamlouisW williamlouis

    @applejuice 看就不用了。太费劲了。直接上机开烤吧。因为只保留原卡的核心。能看出来不行了。一般 这种大厂直接就 pass了。很良心的不能给你用。只有小作坊出品可能有。小作坊的主要进货渠道之一也是大厂挑剩的配件。

    AI硬件

  • 【紧急】Nginx潜伏18年漏洞!不用密码直接远程控制,30%服务器中招 | CVE-2026-42945 Nginx Rift漏洞。
    williamlouisW williamlouis

    @Tony-Wang 你服务器太少。网站也少。被攻击是常态。被打进来了。也是常态。最有效的方式是备份。有防火墙后。我都不想看。一天就好几万。因为是多域名。被扫。被打。被入侵。固态防御就行了。反正它什么也干不了。
    小技巧。不维护就给文件降权。特定就需要脚本了。给 AI 一点权限 让他把活干了。

    网络技术

  • 请教大家M5 Max 128G MacBook Pro上的oMLX如何优化
    williamlouisW williamlouis

    @zorg 更新了个中间件。你可以去看看。应该有效果。我的硬盘应该是没你的贵。带宽不一样。

    AI硬件

  • Mac 丐版 低配篇。大众基本都是这个版本的用户。敬请参考!
    williamlouisW williamlouis

    在 Hermes 和 OMLX 之间插一个本地代理,自动数对话轮数,第 15 轮时后台调用 35B 自身做静默总结,把前 14 轮压成一段系统记忆,KV Cache 瞬间从 15 轮降到 2 轮。Hermes 完全无感知。


    1. 保存代理脚本

    cat > ~/omlx_compress_proxy.py << 'EOF'
    #!/usr/bin/env python3
    import json, time, copy
    from http.server import HTTPServer, BaseHTTPRequestHandler
    from urllib.request import Request, urlopen
    from urllib.error import HTTPError
    
    OMLX_BASE = "http://127.0.0.1:8201"   # OMLX 新地址
    PROXY_PORT = 8200                     # 接管 Hermes 原来的端口
    COMPRESS_EVERY = 15
    KEEP_RECENT = 1
    SUMMARY_MAX_TOKENS = 400
    SUMMARY_TEMP = 0.1
    
    SUMMARY_SYSTEM = (
        "你是后台上下文压缩器。请用中文极度精简地总结以下对话,"
        "保留所有关键决策、代码、数据、未完成任务。只输出总结内容,"
        "不要任何解释、问候、格式标记。"
    )
    
    class Store:
        def __init__(self):
            self.sessions = {}
        def get(self, body):
            key = body.get("conversation_id") or body.get("session_id") or body.get("user") or "default"
            return self.sessions.get(key, []), key
        def set(self, key, messages):
            self.sessions[key] = messages
        def count(self, messages):
            return sum(1 for m in messages if m.get("role") in ("user", "assistant"))
    
    store = Store()
    
    def call_omlx(messages, max_tokens=None, temperature=None):
        payload = {"model": "Qwen3.5-35b-a3b-4bit-mlx", "messages": messages, "stream": False}
        if max_tokens: payload["max_tokens"] = max_tokens
        if temperature is not None: payload["temperature"] = temperature
        req = Request(f"{OMLX_BASE}/v1/chat/completions",
                      data=json.dumps(payload).encode(), headers={"Content-Type": "application/json"}, method="POST")
        return json.loads(urlopen(req, timeout=300).read().decode())
    
    def compress(messages):
        sys_msgs = [m for m in messages if m.get("role") == "system"]
        non_sys = [m for m in messages if m.get("role") != "system"]
        if len(non_sys) <= KEEP_RECENT: return messages
        to_compress = non_sys[:-KEEP_RECENT]
        keep = non_sys[-KEEP_RECENT:]
        prompt = []
        if not sys_msgs: prompt.append({"role": "system", "content": SUMMARY_SYSTEM})
        prompt.append({"role": "user", "content": "\n\n".join(f"[{m['role']}] {m['content'][:2000]}" for m in to_compress)})
        summary = call_omlx(prompt, max_tokens=SUMMARY_MAX_TOKENS, temperature=SUMMARY_TEMP)["choices"][0]["message"]["content"].strip()
        new_msgs = list(sys_msgs)
        new_msgs.append({"role": "system", "content": f"[历史压缩] {summary}"})
        new_msgs.extend(keep)
        return new_msgs
    
    class H(BaseHTTPRequestHandler):
        def log_message(self, *args): pass
        def do_POST(self):
            if self.path != "/v1/chat/completions": return self._proxy()
            body = json.loads(self.rfile.read(int(self.headers.get("Content-Length", 0))).decode())
            history, key = store.get(body)
            history = body.get("messages", [])
            if store.count(history) >= COMPRESS_EVERY:
                t0 = time.time()
                history = compress(history)
                print(f"[Compress] {key}: done in {time.time()-t0:.1f}s")
            store.set(key, history)
            omlx_body = copy.deepcopy(body)
            omlx_body["messages"] = history
            for k in ["conversation_id", "session_id", "user"]: omlx_body.pop(k, None)
            req = Request(f"{OMLX_BASE}/v1/chat/completions",
                          data=json.dumps(omlx_body).encode(), headers={"Content-Type": "application/json"}, method="POST")
            try:
                with urlopen(req, timeout=600) as r:
                    data = r.read()
                    self.send_response(r.status)
                    for k, v in r.headers.items():
                        if k.lower() != "transfer-encoding": self.send_header(k, v)
                    self.end_headers(); self.wfile.write(data)
                    try:
                        msg = json.loads(data.decode())["choices"][0]["message"]
                        history.append(msg); store.set(key, history)
                    except: pass
            except HTTPError as e:
                self.send_response(e.code); self.send_header("Content-Type", "application/json"); self.end_headers(); self.wfile.write(e.read())
        def _proxy(self):
            body = self.rfile.read(int(self.headers.get("Content-Length", 0))) if int(self.headers.get("Content-Length", 0)) else b""
            req = Request(f"{OMLX_BASE}{self.path}", data=body, headers={k:v for k,v in self.headers.items()}, method="POST" if body else "GET")
            try:
                with urlopen(req) as r: self.send_response(r.status); [self.send_header(k,v) for k,v in r.headers.items()]; self.end_headers(); self.wfile.write(r.read())
            except HTTPError as e: self.send_response(e.code); self.end_headers(); self.wfile.write(e.read())
    
    if __name__ == "__main__":
        print(f"Proxy http://127.0.0.1:{PROXY_PORT}/v1 -> {OMLX_BASE}")
        print(f"Compress every {COMPRESS_EVERY} turns")
        HTTPServer(("127.0.0.1", PROXY_PORT), H).serve_forever()
    EOF
    chmod +x ~/omlx_compress_proxy.py
    

    2. 调整端口(核心)

    假设你之前 Hermes 连的是 127.0.0.1:8200:

    # 先停掉 OMLX
    pkill -f "omlx serve"
    
    # OMLX 改绑到 8201(让出 8200 给代理)
    omlx serve --port 8201 --model Qwen3.5-35b-a3b-4bit-mlx
    

    3. 启动代理(占原端口 8200)

    另开一个终端:

    python3 ~/omlx_compress_proxy.py
    

    日志应显示:

    Proxy http://127.0.0.1:8200/v1 -> http://127.0.0.1:8201/v1
    Compress every 15 turns
    

    4. Hermes 配置(保持不变)

    你在 Hermes SSH 终端界面里不要改任何端口,保持原来的 127.0.0.1:8200。因为代理已经占了 8200,Hermes 的请求会先经过代理,代理再转发给 OMLX 的 8201。

    如果你之前在 Hermes 里配的是其他端口(比如 11434 或 5001),把上面脚本里的 PROXY_PORT 和 OMLX_BASE 对应改一下即可。


    5. 验证压缩触发

    正常聊天到第 15 轮,代理终端会打印:

    [Compress] default: done in 1.8s
    

    此时 KV Cache 从 15 轮瞬间降到 2 轮,内存压力解除。Hermes 前端看不到任何异常。


    关键提醒

    项目 说明
    第 15 轮延迟 35B 总结前 14 轮需 1-3 秒,这是物理限制(OMLX 单线程)。建议 COMPRESS_EVERY 设 12~15,别设太小。
    总结质量 SUMMARY_TEMP=0.1 已锁死,防止总结时模型发散。
    内存效果 压缩后 KV Cache 从 ~15 轮降到 ~2 轮,按 35B 每轮 300MB 算,瞬间释放 3-4GB。
    失败回退 如果代理挂了,Hermes 直接连不上;OMLX 本身不受影响,重启代理即可。

    按这个顺序部署:先改 OMLX 端口 → 启动代理 → Hermes 保持原配置继续用。
    16和24 需要改小总结轮数测试。测试机型32G M4。
    请勿直接使用。

    LLM讨论区

  • 用3090如果只跑llm, 平均一个月用多少kwh 的电?好像比订阅的费用还要贵
    williamlouisW williamlouis

    @mankit-fu 又不是 intel 显卡。 关机后 再开机到底多久你是机主。你现场看看。不就知道多久了。 远程启动的时候你再看看表。OK?

    AI硬件

  • Openclaw與Hermes的一個小比較
    williamlouisW williamlouis

    安装 PowerShell 7 重来试试

    AI Agent

  • 零刻GTI15+显卡坞+蓝宝石9700XTX从组装开始求帮助
    williamlouisW williamlouis

    51559834-a5a1-412e-8999-c7cb1a33af3c-image.jpeg

    65f2fbdc-457e-441e-b770-637b2f1e597b-image.jpeg
    实在怕炸就再买一个电源 单独给显卡供电。只买一个电源就行。这个省钱。但是不能和电脑统一管理了。
    短接后 电源就工作了。
    需要和主板连通一起控制需要动手能力。不建议。或不采纳。

    AI硬件

  • 【紧急】Nginx潜伏18年漏洞!不用密码直接远程控制,30%服务器中招 | CVE-2026-42945 Nginx Rift漏洞。
    williamlouisW williamlouis

    @Tony-Wang 嗯。我用的是付费破解版。😊 GitHub 有开源项目。

    网络技术

  • 虽迟但到,交作业了
    williamlouisW williamlouis

    @pilipala 够用就是最好的。不用折腾了。

    AI硬件

  • 【紧急】Nginx潜伏18年漏洞!不用密码直接远程控制,30%服务器中招 | CVE-2026-42945 Nginx Rift漏洞。
    williamlouisW williamlouis

    @Tony-Wang 宝塔付费版有防火墙。在waf 固化机制下。这个漏洞无法进入更深层。免费版就躺了。

    网络技术
  • 登录

  • 没有帐号? 注册

  • 登录或注册以进行搜索。
  • 第一个帖子
    最后一个帖子
0
  • 版块
  • 最新
  • 标签
  • 热门
  • 用户
  • 群组