新闻详情

新闻详情

首页 / 资讯中心 / 详情

Linux内核级USB观测工具UsbMon原理与实战指南

发布时间:2026/10/2 1:25:45来源:尧图网络
Linux内核级USB观测工具UsbMon原理与实战指南
1. UsbMon不是“抓包工具”而是内核级USB事件观测器很多人第一次听说UsbMon是在查“Linux下怎么抓USB通信数据”时被推荐的。但必须立刻纠正一个普遍误解UsbMon本身不抓包它只是把内核USB子系统内部已经生成的、用于调试和追踪的原始事件流以标准字符设备接口暴露给用户空间。它不像Wireshark那样主动捕获总线信号也不像USB协议分析仪那样物理层采样它更像一个“内核日记本的公开副本”——所有USB设备与主机之间的URBUSB Request Block提交、完成、错误等生命周期事件只要内核开启了USB调试日志UsbMon就原样抄录一份给你看。这个根本定位决定了UsbMon的使用逻辑和能力边界。它不依赖额外硬件零成本启用但数据粒度完全受限于内核USB驱动栈的设计你看到的是URB结构体的快照不是原始USB帧Token/Data/Handshake更不是物理层的NRZI编码波形。这意味着如果你要分析USB枚举阶段的Descriptor请求细节、控制传输的Setup包字段、或者Bulk传输中某个特定数据包的时序抖动UsbMon能提供完整上下文但如果你要逆向一个未公开的私有USB协议或者排查USB PHY层的信号完整性问题UsbMon就无能为力了——它压根不接触那层。我第一次用UsbMon调试一个FT232R USB转串口设备时就栽在这个认知偏差上。设备在Linux下偶尔丢数据我以为是驱动bug于是兴冲冲打开UsbMon过滤出所有相关URB结果满屏都是URB_SUBMIT和URB_COMPLETE状态码全是0成功。折腾半天才发现问题其实在用户态串口库的缓冲区管理逻辑里而UsbMon只告诉你“内核说数据发出去了”并不保证下游设备是否真的处理了。后来才明白UsbMon的价值在于确认“内核视角下发生了什么”而不是替代应用层或硬件层的诊断工具。它是一面镜子照见内核USB子系统的内部状态而非万能的USB问题终结者。正因为这个定位UsbMon的启用方式也迥异于常规用户态工具。它不走apt install或编译安装流程而是直接挂载内核的debugfs虚拟文件系统。这背后是Linux内核设计哲学的体现调试能力是内核自身的一部分不是可选插件。当你执行mount -t debugfs none /sys/kernel/debug时你不是在安装一个程序而是在“打开内核的调试后门”。这个动作需要root权限且要求内核配置中启用了CONFIG_USB_MONy通常主流发行版默认开启。如果/sys/kernel/debug/usbmon目录不存在别急着重装系统先检查zcat /proc/config.gz | grep CONFIG_USB_MON或查看/boot/config-$(uname -r)——大概率是内核模块没加载执行modprobe usbmon即可。这个过程本身就揭示了UsbMon的本质它是内核功能的延伸而非独立应用。提示UsbMon的设备节点如/dev/usbmon0是字符设备读取它就像读取一个实时日志流。但注意它不支持tail -f这种基于文件偏移的追加读取因为内核不会维护文件指针每次cat或dd都是从当前缓冲区头部开始读取新事件。这意味着如果你用cat /dev/usbmon0后按CtrlC中断再重新执行会丢失中断期间发生的事件。生产环境调试务必用dd if/dev/usbmon0 ofusbmon.log bs1M count100这类一次性大块读取避免事件遗漏。2. 从零构建UsbMon观测环境挂载、识别与权限控制搭建UsbMon环境看似简单但实际操作中90%的“打不开”“没数据”问题都源于这一步的疏忽。它不像ping命令敲完就响而是一个需要精确匹配内核状态、文件系统挂载点和用户权限的三重校验过程。下面我将拆解每一个环节包括那些官方文档里轻描淡写、却让新手卡壳数小时的关键细节。2.1 检查内核支持与模块加载首先确认内核是否具备UsbMon能力。最直接的方式是检查/sys/kernel/debug/usbmon是否存在ls /sys/kernel/debug/usbmon如果提示No such file or directory不要立刻怀疑系统损坏。分三步排查验证debugfs是否已挂载UsbMon依赖debugfs而debugfs可能未挂载或挂载在非标准路径。执行mount | grep debugfs正常输出应类似debugfs on /sys/kernel/debug type debugfs (rw,relatime)。若无输出说明debugfs未挂载执行sudo mkdir -p /sys/kernel/debug sudo mount -t debugfs none /sys/kernel/debug注意/sys/kernel/debug是标准路径不要随意改成/debug或其他否则UsbMon设备节点无法生成。检查usbmon模块是否加载即使debugfs挂载了usbmon内核模块也可能处于未加载状态。执行lsmod | grep usbmon若无输出手动加载sudo modprobe usbmon加载成功后/sys/kernel/debug/usbmon目录应立即出现且里面会有数字编号的子目录如0s,1s,2s每个对应一个USB Host ControllerHCD。确认内核配置极少数定制内核可能禁用了UsbMon。检查配置zcat /proc/config.gz 2/dev/null | grep CONFIG_USB_MON # 或从/boot目录查找 grep CONFIG_USB_MON /boot/config-$(uname -r)输出应为CONFIG_USB_MONy或CONFIG_USB_MONm。若为n则需重新编译内核此情况在桌面发行版中几乎不存在。2.2 理解USB Host Controller编号与设备节点映射UsbMon为每个USB Host Controller创建一个独立的数据源节点名为/dev/usbmonXX为数字。但这个X如何与物理USB端口对应这是初学者最大的困惑点。UsbMon不关心“你插在哪个蓝色USB3.0口”它只认内核分配给Host Controller的索引号。例如/dev/usbmon0对应第一个Host Controller通常是主板上的xHCI控制器管理USB3.x端口/dev/usbmon1对应第二个可能是单独的EHCI/OHCI芯片管理USB2.0端口/dev/usbmon2可能是PCIe扩展卡上的控制器如何确定哪个usbmonX监控你的目标设备最可靠的方法是结合lsusb -t树状图与/sys/kernel/debug/usbmon/Xs目录内容# 查看USB设备拓扑重点关注Bus号 lsusb -t # 输出示例 # /: Bus 02.Port 1: Dev 1, Classroot_hub, Driverxhci_hcd/4p, 5000M # |__ Port 1: Dev 2, If 0, ClassVendor Specific Class, Driverftdi_sio, 480M # /: Bus 01.Port 1: Dev 1, Classroot_hub, Driverxhci_hcd/12p, 480M这里Bus 02对应内核中的busnum2而UsbMon的X编号通常与busnum一致但非绝对需验证。接着检查/sys/kernel/debug/usbmon/下的目录ls /sys/kernel/debug/usbmon/ # 输出0s 1s 2s cat /sys/kernel/debug/usbmon/2s # 查看busnum2的控制器信息2s目录下的内容会显示该控制器管理的总线号busnum、端口数等。如果lsusb -t显示目标设备在Bus 02且/sys/kernel/debug/usbmon/2s存在则/dev/usbmon2就是你要监听的节点。切勿凭直觉猜测usbmon0就是主USB口——很多笔记本的雷电/USB4控制器被分配为usbmon0而传统USB2.0口却是usbmon1。2.3 权限与安全策略为什么普通用户读不了/dev/usbmon0默认情况下/dev/usbmon*设备节点权限为crw------- 1 root root只有root可读。强行用sudo cat /dev/usbmon0虽能工作但不符合安全最佳实践且无法集成到普通用户脚本中。解决方案是通过udev规则赋予指定用户组读取权限# 创建udev规则文件 echo SUBSYSTEMusbmon, GROUPplugdev, MODE0640 | sudo tee /etc/udev/rules.d/99-usbmon.rules # 重新加载规则并触发 sudo udevadm control --reload-rules sudo udevadm trigger --subsystem-matchusbmon # 将当前用户加入plugdev组需重新登录生效 sudo usermod -a -G plugdev $USER这里选择plugdev组是因其在多数发行版中已存在且用于USB设备访问。MODE0640表示所有者root可读写组plugdev可读其他用户无权限平衡了可用性与安全性。切记不要设为0666全用户可读——UsbMon日志包含完整的USB数据包可能泄露敏感信息如键盘输入、摄像头帧。注意某些企业环境或加固系统如SELinux Enforcing模式会阻止udev规则生效。若添加规则后仍无权限检查ausearch -m avc -ts recent | grep usbmon确认是否有SELinux拒绝日志。临时解决可执行sudo setsebool -P usbmon_read 1需先定义相应布尔值但生产环境应咨询安全团队。3. UsbMon数据包格式深度解析从十六进制流到可读语义UsbMon输出的原始数据是紧凑的ASCII文本流每行代表一个URB事件。其格式高度结构化但字段含义晦涩官方文档Documentation/usb/usbmon.txt仅列出字段名未解释业务逻辑。下面我将逐字段拆解并结合真实案例说明如何从冰冷的十六进制中还原出USB通信的完整故事。3.1 标准数据行结构8个字段的密码本UsbMon每行固定8个以空格分隔的字段格式如下xx xx xx xx xx xx xx xx字段索引字段名含义与解读要点1d/C/S/E事件类型d数据包Data、C完成Complete、S提交Submit、E错误Error。注意d行只出现在URB_ISOCHRONOUS等时传输中常规控制/批量传输只有S和C。2busnum总线编号对应lsusb -t中的Bus XX用于关联物理设备。3address设备地址USB设备在总线上的唯一ID1-127lsusb输出中的ID xxxx:xxxx前的Dev XX即为此值。4endpoint端点号低4位是端点号0-15第7位为方向0OUT/Host→Device, 1IN/Device→Host。例如810x81表示端点1方向IN020x02表示端点2方向OUT。5type传输类型CControl控制、IIsochronous等时、BBulk批量、IInterrupt中断。这是理解数据语义的关键6flagsURB标志iinIN方向、ooutOUT方向、ssetup仅Control传输的Setup阶段、Zzero-length零长包。s标志出现时后续数据区即为Setup包。7len数据长度URB中transfer_buffer_length的值即本次传输申请的字节数。注意实际传输字节数可能小于此值如短包。8data十六进制数据实际传输的字节以空格分隔的十六进制数。长度由len决定但UsbMon只输出前32字节防止单行过长长数据会被截断并标记...。关键洞察UsbMon不区分“发送”和“接收”它只记录URB的提交S和完成C两个瞬间。因此一个完整的USB事务如控制传输必然由一对S和C行组成且S行的flags含sSetupC行的data才是真正的响应数据。3.2 控制传输Control Transfer的完整解码链路控制传输是USB枚举和设备配置的核心也是UsbMon最常被用于分析的场景。我们以一个真实的FT232R设备获取Descriptor请求为例展示如何串联多行数据还原全过程# S行Host提交Setup包请求Device Descriptor S 2 2 80 6 i 8 01 00 00 00 00 00 00 00 # C行Device返回Descriptor数据64字节UsbMon只显示前32字 C 2 2 00 6 i 64 12 01 00 02 00 00 00 40 86 04 24 01 00 00 00 01 09 02 29 00 00 01 09 04 00 00 00 ...解码步骤识别Setup包S行S事件类型为提交。2总线22设备地址280端点0方向IN因控制传输总是双向但Setup阶段由Host发起故端点0的IN方向用于接收响应。6传输类型为ControlC。i方向IN此处指Host准备接收响应。8Setup包固定8字节。data01 00 00 00 00 00 00 00→ 这是标准USB Setup包格式bmRequestType(1) bRequest(1) wValue(2) wIndex(2) wLength(2)。bmRequestType0x01二进制00000001bit70Host→Devicebit6-500Standardbit4-000001Device→ 标准请求作用于设备。bRequest0x00GET_DESCRIPTOR。wValue0x0001Descriptor Type0x01Device DescriptorIndex0x00。wIndex0x0000Index0设备。wLength0x0040请求64字节。关联响应C行C事件类型为完成。2 2 00同总线、同设备、端点0方向IN。6 i 64Control传输IN方向实际返回64字节。data12 01 ...开头的64字节即Device Descriptor二进制数据。12是Descriptor长度01是Descriptor类型Device完美匹配Setup包请求。避坑经验UsbMon不会自动拼接长Descriptor。若wLength大于32C行data字段会显示...此时需用dd读取完整数据流并用hexdump解析。更重要的是控制传输的Setup、Data、Status三个阶段在UsbMon中表现为三对S/C行Setup-S/C, Data-S/C, Status-S/C但UsbMon默认只记录Setup和Data阶段Status阶段无数据常被忽略。若看到S行后没有C行很可能是Status阶段被省略不代表失败。3.3 批量传输Bulk Transfer与中断传输Interrupt Transfer的模式识别批量和中断传输是数据传输主力其UsbMon模式更简单但也易误读批量传输B常见于U盘读写、USB转串口数据收发。典型模式是SOUT→COUT→SIN→CIN循环。S行data是Host发送的数据C行data是Device返回的数据如串口回显。len字段在此类传输中至关重要——若S行len1024而C行len0说明Device未返回任何数据可能是设备忙或协议错误。中断传输I用于键盘、鼠标等需要低延迟上报的设备。特点是高频、小包通常8-64字节、固定间隔。UsbMon中表现为密集的S I和C I行len恒定如鼠标为8字节。关键技巧用awk $5I $6i {print}过滤所有IN方向中断再用uniq -c统计重复模式可快速发现鼠标移动/点击的特征码。提示UsbMon的data字段是纯十六进制无ASCII转换。若需查看可读字符串如串口AT指令需用xxd -r -p | strings管道处理。但注意strings会过滤非打印字符可能丢失二进制协议关键字段。更稳妥的做法是用Python脚本解析import sys for line in sys.stdin: if line.startswith(C) and len(line.split()) 7: data_hex line.split()[7:] data_bytes bytes.fromhex(.join(data_hex)) print(data_bytes.decode(utf-8, errorsreplace)) # 安全解码4. 实战排错UsbMon在FT232R USB转串口驱动调试中的全流程应用UsbMon的价值在真实故障场景中才真正凸显。我曾为一个工业现场的FT232R USB转串口设备编写定制驱动设备在高负载下频繁断开连接dmesg只显示模糊的usb 2-1.2: device descriptor read/64, error -71。UsbMon成为定位根因的唯一突破口。以下是我完整的排查链路涵盖从数据采集、模式识别到根因锁定的每一步。4.1 高保真数据采集规避UsbMon固有缺陷UsbMon的缓冲区大小有限默认128KB高频率USB事件如1ms间隔的中断传输会导致数据溢出dmesg会出现usbmon: buffer overflow警告丢失关键事件。为捕获完整故障过程增大缓冲区修改内核参数需rootecho 1048576 | sudo tee /sys/module/usbmon/parameters/buffer_size_mb # 设置为1MB需在modprobe usbmon后执行定向监听不监听整个usbmon2而是用grep实时过滤目标设备# 先获取设备busnum和address假设为bus 2, addr 5 sudo cat /dev/usbmon2 2/dev/null | \ awk $22 $35 {print; fflush()} ft232r_debug.log PID$! # 模拟故障如快速发送大数据流 ./stress_test_app # 故障复现后立即停止 kill $PID时间戳对齐UsbMon本身无纳秒级时间戳但可通过dmesg -T获取内核日志时间与UsbMon日志中S/C事件的相对顺序结合定位故障窗口。例如dmesg显示[Wed Jun 12 10:23:45 2024] usb 2-1.2: device descriptor read/64, error -71则在UsbMon日志中搜索10:23:45前后10秒内的S行聚焦于address2的设备。4.2 故障模式识别从海量日志中定位异常序列故障日志中正常FT232R通信模式是规律的S B oHost发数据→C B oHost确认发送→S B iHost轮询→C B iDevice回数据。但在断开前我发现了两种异常模式模式ASetup包超时重试S 2 2 00 6 i 8 01 00 00 00 00 00 00 00 # GET_DESCRIPTOR C 2 2 00 6 i 0 # len0! 表示无响应 S 2 2 00 6 i 8 01 00 00 00 00 00 00 00 # 重试 C 2 2 00 6 i 0 # 连续3次len0后内核放弃触发error -71模式BBulk OUT传输卡死S 2 2 02 4 o 1024 41 42 43 ... # 发送1024字节 # 后续无对应的C B o行等待超时后内核强制取消URB C 2 2 02 4 o 0 -1 # status-1 (URB_CANCELLED)模式A指向设备供电不足或PHY层不稳定Setup包是控制传输对时序最敏感模式B则表明设备固件在处理大数据包时陷入死循环无法响应URB完成。4.3 根因锁定与验证UsbMon 内核源码交叉验证仅凭UsbMon日志只能推测要确认必须结合内核源码。FT232R驱动位于drivers/usb/serial/ftdi_sio.c。查阅代码发现其ftdi_write_bulk_callback函数在URB完成时会调用usb_serial_port_softint触发软中断处理。但日志中C B o缺失说明ftdi_write_bulk_callback根本未被执行。进一步检查dmesg发现故障前有usb 2-1.2: reset high speed USB device number 2 using xhci_hcd。这揭示了真相设备因供电不稳触发USB ResetReset过程中所有Pending URB被内核强制取消导致C行消失。UsbMon的日志缺失本质是内核主动清理的结果而非设备静默。最终验证更换高质量USB线缆降低阻抗并增加本地电容100uF到FT232R板卡VCC引脚故障消失。UsbMon日志恢复为完美的S/C配对无任何len0或status-1。经验总结UsbMon是“现象记录仪”不是“原因分析仪”。它告诉你“哪里断了”但“为什么断”需要结合硬件知识、内核机制和驱动代码。我养成的习惯是拿到UsbMon日志后第一件事是git blame drivers/usb/serial/ftdi_sio.c定位相关回调函数在源码中的位置再对照日志中的S/C/E状态反向推导执行路径。这比盲目查文档高效十倍。5. UsbMon的局限性与替代方案何时该果断放弃尽管UsbMon强大但它绝非万能。在多个项目中我曾因过度依赖UsbMon而延误问题解决。明确其能力边界是专业使用者的必备素养。以下是UsbMon明确无法覆盖的场景以及更优的替代技术方案。5.1 物理层与链路层问题UsbMon的“盲区”UsbMon工作在USB驱动栈的软件层URB层面对物理信号质量、电气特性、链路训练过程完全不可见。当遇到以下问题时UsbMon日志往往“一切正常”实则硬件已濒临崩溃信号完整性问题USB3.x的5Gbps高速信号对PCB走线、连接器质量极度敏感。眼图闭合、抖动超标会导致链路层CRC错误但UsbMon只看到C B iURB完成data字段是正确数据——因为内核USB主机控制器xHCI已通过链路层重传机制修复了错误URB对上层透明。此时dmesg会显示xhci_hcd 0000:00:14.0: WARN Event TRB for slot 1 ep 1 with no TDs queued这才是真实线索。供电不足USB规范规定端口需提供500mAUSB2.0或900mAUSB3.0电流。当设备峰值电流超限时Vbus电压跌落导致设备复位。UsbMon只会记录一连串S/C后突然的EError事件但无法告诉你电压何时跌落。此时需用USB协议分析仪如Total Phase Beagle USB 5000配合电源轨探头或直接用万用表监测Vbus。USB枚举失败初期设备插入后主机首先发送GET_DESCRIPTORDevice请求。若设备因晶振不起振、固件未初始化等原因无法响应UsbMon甚至不会生成任何S行——因为内核尚未为其分配设备地址addressusbmonX节点只对已枚举设备有效。此时dmesg的usb 2-1: device not accepting address才是唯一线索。替代方案对于物理层问题必须回归硬件工具。我常用的组合是低成本USB-A转USB-A延长线内置LED指示灯红灯亮Vbus正常绿灯闪数据通信快速筛查供电和基础连通性。中成本Saleae Logic Pro 16 USB协议分析仪固件可捕获D/D-差分信号解码USB2.0协议定位握手失败点。高成本Teledyne LeCroy WaveRunner系列示波器 USB一致性测试套件进行眼图、抖动、TDR阻抗分析。5.2 高速USB3.x与USB4的UsbMon失效场景UsbMon对USB3.x及更高版本的支持存在根本性缺陷。其设计初衷是为USB2.0EHCI/OHCI调试而USB3.x使用xHCI控制器其URB模型与USB2.0不同。具体表现为xHCI的“Transfer Ring”机制xHCI将多个URB合并为一个Transfer Ring Entry提交给硬件UsbMon无法准确映射单个URB到Ring Entry导致S/C事件时序错乱len字段失真。SuperSpeed专属事件缺失USB3.x的SET_STREAM_ID、GET_SS_ENDPOINT_COMPANION等高速专属请求在UsbMon中被归类为普通Control传输无法识别其特殊语义。USB4的完全不支持USB4基于Thunderbolt协议隧道UsbMon对此毫无感知/sys/kernel/debug/usbmon/下甚至不会为USB4控制器创建节点。替代方案USB3.x及以上必须使用专用工具内核级启用CONFIG_USB_XHCI_HCD_DEBUGGINGy通过dmesg查看xHCI寄存器dump需xhci_dbc模块。用户态usb-devices -v详细设备描述、lsusb -t -v拓扑与配置描述、sudo cat /sys/bus/usb/devices/*/descriptors原始Descriptor二进制。专业工具Ellisys USB Explorer系列专为USB3.x/USB4协议分析设计可解码SSSuperSpeed包、Link Training状态、带宽分配。5.3 用户态应用与驱动交互的“灰色地带”UsbMon只监控内核USB子系统对用户态应用如screen /dev/ttyUSB0与内核驱动ftdi_sio之间的交互无能为力。例如应用层write()系统调用后数据何时被驱动取走驱动的read()回调何时被唤醒TTY层的行规程如ICRNL、ONLCR如何修改原始数据这些问题UsbMon完全不涉及。此时需转向其他内核追踪机制ftracesudo trace-cmd record -e usb:* -e tty:* -e serial:*同时捕获USB、TTY、串口子系统事件分析跨子系统调用链。eBPF编写BPF程序挂载到kprobe/tp/syscalls/sys_enter_write和kretprobe/tp/usb/usb_submit_urb在应用层与内核层埋点计算端到端延迟。stracestrace -e tracewrite,read,ioctl -p pid直接观察用户态系统调用行为。最后一点个人体会UsbMon的最佳使用时机是当你已经排除了硬件、供电、用户态应用问题且dmesg显示内核USB子系统有异常但又无法精确定位到具体URB行为时。它不是第一个该用的工具而是最后一个该用的“显微镜”。我现在的调试流程是先dmesg看全局再lsusb -t看拓扑然后strace看应用最后才祭出UsbMon深挖URB细节。这个顺序让我少走了太多弯路。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

A Comparative Approach to Assessing Linguistic Creativity of Large Language Models and Humans 2026/10/2 2:12:27

A Comparative Approach to Assessing Linguistic Creativity of Large Language Models and Humans

文章主要内容总结 本文设计了一套综合语言创造力测试,旨在比较人类与大型语言模型(LLMs)的语言创造力。测试包含两部分共8项任务,聚焦构词法(派生、复合等)和隐喻语言使用能力,要求参与者生成原创词语或短语。研究对24名19-25岁的非英语母语大学生(英语水平B2及以上)…

阅读更多 →
Marco-Bench-MIF: On Multilingual Instruction-Following Capability of Large Language Models 2026/10/2 2:12:27

Marco-Bench-MIF: On Multilingual Instruction-Following Capability of Large Language Models

文章主要内容和创新点 主要内容 本文针对现有指令遵循能力评估数据集多为单语(以英语为中心)或仅经机器翻译、缺乏多语言场景适用性的问题,提出了一个多语言指令遵循基准测试集Marco-Bench-MIF。该数据集扩展自IFEval,涵盖30种语言,通过“自动翻译+两轮人工验证”的混合…

阅读更多 →
Maestro 跨平台 UI 自动化测试实战:一个 YAML 流程跑通 Android、iOS 与 Web 2026/10/2 2:12:21

Maestro 跨平台 UI 自动化测试实战:一个 YAML 流程跑通 Android、iOS 与 Web

Maestro 跨平台 UI 自动化测试实战:一个 YAML 流程跑通 Android、iOS 与 Web 【免费下载链接】Maestro Painless E2E Automation for Mobile and Web 项目地址: https://gitcode.com/GitHub_Trending/ma/Maestro 你在同一个 App 上各写了一份 Android、iOS 和…

阅读更多 →
Sunshine 完整搭建指南:6 步把游戏 PC 变成 Moonlight 串流主机 2026/10/2 2:12:21

Sunshine 完整搭建指南:6 步把游戏 PC 变成 Moonlight 串流主机

Sunshine 完整搭建指南:6 步把游戏 PC 变成 Moonlight 串流主机 【免费下载链接】Sunshine Self-hosted game stream host for Moonlight. 项目地址: https://gitcode.com/GitHub_Trending/su/Sunshine 游戏主机在书房,想躺在沙发上用电视大屏玩&…

阅读更多 →
Large Language Models in the Travel Domain: An Industrial Experience 2026/10/2 2:12:21

Large Language Models in the Travel Domain: An Industrial Experience

文章主要内容总结 本文是一项关于在旅游领域集成大型语言模型(LLMs)的工业案例研究,以FERVENTO公司开发的酒店预订平台CALEIDOHOTELS为背景,旨在解决第三方数据源中住宿信息不完整、不一致的问题。研究评估了两种LLM模型的表现:通过QLoRA技术微调的Mistral 7B,以及采用优…

阅读更多 →
KROMA: Ontology Matching with Knowledge Retrieval and Large Language Models 2026/10/2 2:12:21

KROMA: Ontology Matching with Knowledge Retrieval and Large Language Models

文章主要内容总结 本文提出了一种名为KROMA的新型本体匹配(Ontology Matching, OM)框架,旨在解决现有本体匹配系统依赖手工规则或专用模型、适应性有限的问题。KROMA将大型语言模型(LLMs)与检索增强生成(RAG) pipeline结合,通过动态富集结构、词汇和定义知识的语义上下…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉