無標題文檔

在 VSCode 和 Claude Code 接入 Ling 1T 模型,以及些使用心得

就像我年前提到的,Ring 1T 是个非常有潜力的推理模型,但在实际使用过程中也暴露出了一些问题:

  • 推理过程比较耗费 Token,成本不低
  • 输出的推理结果不太稳定,质量时好时坏
  • 推理速度相对较慢,等待时间较长

在一些目标明确、问题确定的场景下,其实并不需要模型"深度思考"——这时候推理模型的开销反而成了负担。所以我开始寻找一个更适合这类场景的非推理备选方案,于是尝试了 Ling 1T。

Ling 1T 同样是个相对小众的模型,光看名字大概就能猜到和 Ring 1T 出自同一个团队。在 Hugging Face 上查了一下,果然,背后是 InclusionAI 这个团队。

Ling 实际上是一个系列模型,除了 1T 参数的旗舰版,还有专门面向代码场景的 Ling-Coder-Lite——后者才是我真正感兴趣的,但目前还没有线上部署,只能干看着,着实有些遗憾。

目前提供 Ling 1T 在线调用的平台,我知道的只有 ZenMux。顺带一提,官方主页上已经更新到了 Ling V2.5,但 ZenMux 上目前并没有看到对应的版本,不太清楚是还没上线还是我哪里没找对,有些疑惑。

VS Code

上图是使用 Ling 1T 的 GitHub Copilot 插件的截图,从使用的角度上来说代码重构分析和优化都是能胜任的、效果也不错,后面具体说说使用体验。既然是 1T 量级的模型,参数规模本身已经足够大,在这个量级上纠结具体的数据量其实意义不大,更值得关注的还是实际使用体验。

我主要在两个地方使用这个模型:Claude Code 和 VSCode 的 GitHub Copilot 插件。 ZenMux 提供了 Copilot 插件的配置文档,按步骤操作即可,并不复杂,这里就不再重复了,直接参考官方文档就好。

好了,说说实际的体验吧。和 Ring 1T 相比,Ling 1T 最直观的提升是响应明显更快,在需要快速迭代的场景下体验好了不少。

在输出质量上,主观感受是 Ling 1T 相对 Qwen3 还是有一定优势的,至少在我的使用场景里如此。不过个人感觉如果不安排好比较详细的 Prompt,Ling 1T 的输出质量可能会有些波动,甚至有点“放飞自我”。好在我实际使用的几个场景里,整体质量还是比较稳定的,基本能满足日常需求。

另外值得一提的是请求的稳定性。这类相对小众的模型,在调用过程中没有遇到诡异的资源占用或奇怪的限速问题。可能是使用的人太少了,服务器压力不大?

总体来说,Ling 1T 是一个在特定场景下非常值得使用的模型,梳理一下我的使用结论:

  1. 适合确定性场景:对于目标明确、不需要深度推理的任务,Ling 1T 的速度和稳定性比推理模型更有优势
  2. 1T 的参数量打底,输出结果的质量基本能满足日常需求(这个参数量,我们普通用户是部署不起来了…)
  3. 相比一些主流大模型,这类小众模型在调用稳定性上表现不错,也没有奇怪的额外开销
  4. 需要注意的是,这个模型 MCP 的支持还是比较薄弱的,同时不支持搜索功能,所以在一些需要外部知识的场景下可能表现不如预期

如果你也在寻找性价比更高、适合特定场景的模型,同时又不想花太多时间在调优和维护上,Ling 1T 绝对是个不错的选择。

在 Claude Code 中配置使用 Ring 1T 模型

最近收到通知,Gmail 因为“安全的原因”要逐步停止支持 POP3 收取第三方邮件。这对我来说是个小麻烦,因为学校的邮箱和 Gmail 之间的同步需要找替代方案。

想想其实用第三方服务还是不太靠谱,加上事情本身也不大复杂。索性利用假期的时间用 Rust 写了个小工具 mail-forwarder 来自动转发。在这个过程中,我开始大量使用 Claude Code,这个体验还真不错。总体来说,用 Claude Code 写代码的流畅度确实很不错,但有几个点不太满意:

  1. 只能用 Anthropic 自家的模型,没得选
  2. 用官方的有点不划算,有点小贵(当然这也有可能是我自己的问题)
  3. 国内无法直接访问只能挂梯子,导致访问速度不理想

后来发现 Claude Code 的接口其实很简洁,通过改几个环境变量就能接入其他模型提供商。经过一番调研,我选了 ZenMux 这个平台,主要是因为它国内访问快,支持一堆不同的模型,接口文档也写得清楚,总体来说可以作为 OpenRouter 的一个不错的替代方案。

先说结论吧,暂时在 ZenMux 上提供众多模型中,最后挑了 Ring 1T 作为替代方案。主要是它在推理和代码生成上表现确实不错,价格也比较合理,性价比不错。

这篇文章就是把这个折腾过程整理一下,看看能不能帮到有类似需求的人。

开始配置

1. 安装 Claude Code

这个其实不用多说,直接用官方安装脚本最简单,复制粘贴下:

curl -fsSL https://claude.ai/install.sh | bash

装好了可以验证一下:

claude doctor

顺便说一句,我这里碰到了个坑,安装完成后 claude doctor 报错说找不到 ~/.claude/settings.json,后来发现是因为之前用过其他服务的配置文件有冲突,删除掉那个文件重新启动 Claude 就好了。

2. 获取 ZenMux API 密钥

ZenMux 官网 注册个账号。新用户有试用额度,可以拿来直接试用(先说明,这个链接带 AFF 码,注册后你和我都能拿到奖励)。

3. 配置环境变量

这是关键一步。打开你的 Shell 配置文件:

# 如果用 zsh(macOS 默认)
nano ~/.zshrc

# 如果用 bash
nano ~/.bashrc

在文件末尾加上这些:

# ZenMux + Claude Code 配置
export ANTHROPIC_BASE_URL="https://zenmux.ai/api/anthropic"
export ANTHROPIC_AUTH_TOKEN="sk-ss-v1-xxx"  # 改成你的 API 密钥
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC="1"
export API_TIMEOUT_MS="30000000"
export ANTHROPIC_DEFAULT_SONNET_MODEL="inclusionai/ring-1t"

然后重新加载配置即可。

4. 启动试试

打开新终端,进到你的项目目录,输入:

cd /path/to/your/project
claude

第一次启动会要求登录授权,直接用环境变量里配置的 API 密钥就行。

常用的几个命令

启动后就可以开始用了。常见的命令:

  • /model —— 查看当前模型,或者切换模型
  • /status —— 看看连接状态和配置是否正确
  • /help —— 显示所有支持的命令
  • /clear —— 清空对话历史

最简单的用法就是直接问代码问题,像:

请帮我优化这个函数的性能
分析一下这个 bug 的原因
给这个类写 unit tests

最后,该说说下实际用下来的感受了,纯个人体验供参考:

推理能力确实不错

Ring 1T 在理解复杂逻辑上表现还是挺好的。我用它给 mail-forwarder 的某些关键部分做代码审查,它能指出逻辑漏洞、性能瓶颈,建议也都比较中肯。对比之前直接用 Claude,差别说实话不是特别明显,但至少 Ring 1T 的性价比更高。

国内访问速度提升明显

这个是我最满意的一点。之前直接用官方 API,有时候响应会卡顿。现在走 ZenMux 的节点,国内访问流畅多了,尤其是半夜用的时候。网络稳定性也更好。

Token 消耗需要关注

复杂的任务确实会吃很多 token。比如我让它分析整个项目结构、写详细的测试用例这种,token 消耗就比较明显。我测试了下相对 Gemini 这种更大模型,Ring 1T 的消耗还是比较合理的,但是推理复杂度高的时候,还是需要注意一下。

偶尔有延迟

处理特别长的文本,或者特别复杂的推理任务,有时候响应会慢一点。不过这个通常不是 Ring 1T 的问题,主要可能是网络或者任务本身就很重。总体来说可以接受。

国际化的问题

可能 Ring 1T 是国内模型的缘故,在处理一些特定的中文语境或者专业术语时,偶尔会有理解偏差。同时其模型偏好在没有特别指定语言的时候,也可能倾向于中文输出,这时候需要在提示词里明确一下语言要求。

使用场景

好了综述所述,总结下我现在最常用的是这几个:

  1. 快速代码审查方面,丢段代码给它看,通常能发现我没想到的问题。没有心智负担,因为价格便宜很多;
  2. 调试复杂问题:描述现象,让它帮忙分析原因,成功率还是挺高的;
  3. 帮忙写测试和文档,特别省时间,质量也还不错,尤其如果是中文环境下的项目,Ring 1T 的表现会更好一些,而且避免了 Anthropic 非要用英文输出以及生成冗余文档的情况。

总的来说,这个配置折腾一次就行了。目前用下来感觉比直接用官方 Claude 爽,成本更低,国内访问也更稳定(当然也有可能目前只是针对 mail-forwarder 这种小需求的情况)。

这个折腾总体来说其实挺值得的,花杯星巴克的钱订阅 ZenMux,用 Ring 1T 的推理能力,国内访问也快,成本比官方便宜得多。如果你也在用 Claude Code,又对国内访问或者模型选择不太满意,不妨考虑试试这个方案。配置其实很简单,5 分钟就搞定,值得的。

Clear Linux 下 KVM 硬件直通配置

前言

Clear Linux 是针对 Intel 平台的滚动 Linux 发行版。它有很多优势,我个人目前主要用来针对老机型(四代酷睿平台)的裸机运行平台,并主要用来跑虚拟机。

由于 Clear Linux 是过于强调精简的发行版,因此配置方面需要额外的精力,所在这里针对 KVM 虚拟机的配置做个记录。

BIOS 配置

针对硬件直通这块,首先需要 CPU 的支持,四代平台支持 VT-D 功能的不多,主要集中在 i5、i7 的 CPU。个人购买过四代 i3 的 CPU 发现并不支持硬件直通,所以又退款换货非常的折腾。

了解了支持的 CPU 以后,然后在 BIOS 中对应的开启虚拟化以及 VT-D,这里就不表。

内核配置

和其他的发行版不同,Clear Linux 的引导器是 Intel 自己研发的 clr-boot-manager。内核的参数文件具体的文件路径在 /etc/kernel/cmdline.d/ 这个目录中,然后对应的示例文件 iommu.conf:

intel_iommu=on iommu=pt vfio_iommu_type1.allow_unsafe_interrupts=1 vfio-pci.ids=<id>,<id>

这个 ID 是 PCI ID,对应的可以使用 lspci -nn 获得,例如列出网卡的 PCI ID:

$ lspci -nn | grep -i Ether
00:19.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection I217-V [8086:153b] (rev 04)
02:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)

同时,需要注意的是 IOMMU Group 分组是否在一个组中(这个可能需要 PCI 设备的支持),可以使用以下简单的 Shell 脚本查看(来自 Arch 的 Wiki):

#!/bin/bash
shopt -s nullglob
for g in `find /sys/kernel/iommu_groups/* -maxdepth 0 -type d | sort -V`; do
    echo "IOMMU Group ${g##*/}:"
    for d in $g/devices/*; do
        echo -e "\t$(lspci -nns ${d##*/})"
    done;
done;

然后,使用 clr-boot-manager update 生成启动配置,然后 reboot 重启后查看 cat /proc/cmdline 内核引导参数是否已经生效。

Qemu 配置

查看 Qemu 下 PCI 的设备列表,例如

$  virsh nodedev-list | grep pci
pci_0000_00_00_0
pci_0000_00_02_0
pci_0000_00_03_0
pci_0000_00_14_0
pci_0000_00_16_0
pci_0000_00_19_0
pci_0000_00_1a_0
pci_0000_00_1c_0
pci_0000_00_1c_3
pci_0000_00_1d_0
pci_0000_00_1f_0
pci_0000_00_1f_2
pci_0000_00_1f_3
pci_0000_02_00_0

那么根据对并上面

$ lspci -nn | grep -i Ether
00:19.0 Ethernet controller [0200]: Intel Corporation Ethernet Connection I217-V [8086:153b] (rev 04)
02:00.0 Ethernet controller [0200]: Intel Corporation I210 Gigabit Network Connection [8086:1533] (rev 03)

两块网卡的 ID 分别为 pci_0000_00_19_0 和 pci_0000_02_00_0 ,然后我们 dump 出配置来

$ virsh nodedev-dumpxml pci_0000_00_19_0
<device>
  <name>pci_0000_00_19_0</name>
  <path>/sys/devices/pci0000:00/0000:00:19.0</path>
  <parent>computer</parent>
  <driver>
    <name>vfio-pci</name>
  </driver>
  <capability type='pci'>
    <class>0x020000</class>
    <domain>0</domain>
    <bus>0</bus>
    <slot>25</slot>
    <function>0</function>
    <product id='0x153b'>Ethernet Connection I217-V</product>
    <vendor id='0x8086'>Intel Corporation</vendor>
    <iommuGroup number='4'>
      <address domain='0x0000' bus='0x00' slot='0x19' function='0x0'/>
    </iommuGroup>
  </capability>
</device>

例如以上就可以 dump 出具体 PCI 信息的来,可以比较直观的看到 product id 以及生产商 vendor id 等信息。这里需要的几个参数分别是 domainbusslot、以及 function

我们分别记录下来,然后填写到以下的 xml 片段中,例如上面对应的数值就是

<hostdev mode='subsystem' type='pci' managed='yes'>
  <driver name='vfio'/>
  <source>
    <address domain='0' bus='0' slot='25' function='0'/>
  </source>
</hostdev>

可以直接使用十进制数值,因为 virsh edit 在编辑保存的时候会自动计算其原始的十六进制数值。

验证

使用 virsh edit 编辑对应的虚拟机配置,例如 virsh edit <my-machine> 。在编辑器中将上述 的 xml 粘贴入 devices 这个 xml 块中,保存关机然后在启动虚拟机即可生效。

在启动虚拟机以后,例如上述的网卡直通可以使用 ip a 等命令查看虚拟机有无识别到对应的物理网卡。如果一切顺利,那么就可以使用对应的网络配置程序来配置对应网卡的网络信息,这里不在复述。

常见问题

  1. 查看 IOMMU Group 中的设备是否分别在不同的组中,如果多个设备在同个组中,则需要额外的操作(参见 Arch Wiki 的内容);
  2. 如果物理机设备被直通出去,那么就无法使用该设备以及设备树下的子设备。例如,如果直通 USB 控制器给虚拟机,那么这个控制器下的键盘、鼠标都只能在虚拟机下使用;
  3. 直通的内核模块应该优先于其对应的物理设备驱动,否则会造成冲突造成无法直通,因此可以考虑搭配内核 blacklist 使用。

最后,如果服务器是 Intel 平台的,强烈建议尝试下 Clear Linux 你会爱上它的!

参考信息

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章