掌握AutoHotkey窗口坐标技术:从入门到解决90%定位难题
在Windows自动化脚本开发中,窗口坐标定位是实现精准交互的核心技术。AutoHotkey作为功能强大的自动化工具,提供了丰富的窗口坐标获取与操作函数,帮助开发者轻松实现从简单点击到复杂GUI自动化的各种任务。本文将系统讲解窗口坐标技术的底层原理、实用方案及优化策略,让你的自动化脚本具备专业级的定位能力。
问题定位:自动化脚本中的坐标挑战
识别坐标定位失败的典型症状
自动化脚本中坐标相关的问题通常表现为:点击位置偏移、控件识别失败、多显示器环境下定位错乱等。这些问题的根源往往在于对Windows坐标体系理解不透彻,或未能正确处理窗口状态变化。
常见坐标问题的技术诊断
通过以下步骤快速定位坐标问题:
- 使用
MouseGetPos获取实时鼠标位置,验证坐标系统是否符合预期 - 检查窗口是否处于最大化/最小化状态,这会影响坐标计算
- 确认目标控件是否具有稳定的ClassNN或ID属性
- 使用窗口间谍工具(Window Spy)分析窗口结构和坐标信息
坐标系统基础概念解析
Windows采用笛卡尔坐标系统,以屏幕左上角为原点(0,0),向右为X轴正方向,向下为Y轴正方向。AutoHotkey提供两种坐标模式:
- 屏幕坐标:相对于整个屏幕的绝对位置
- 客户区坐标:相对于目标窗口客户区(不含标题栏和边框)的相对位置
核心原理:AutoHotkey坐标处理机制
窗口信息获取的底层实现
AutoHotkey通过source/window.cpp中的窗口管理模块实现坐标获取,核心数据结构包括:
// 窗口搜索结果存储结构
struct point_and_hwnd_type
{
POINT pt; // 点坐标
RECT rect_found; // 矩形区域
HWND hwnd_found; // 窗口句柄
double distance; // 距离计算
};
这一结构在窗口搜索和坐标计算中发挥关键作用,存储了窗口位置、尺寸等核心信息。
坐标转换的数学原理
AutoHotkey内部通过以下步骤实现坐标转换:
- 调用Windows API
GetWindowRect()获取窗口在屏幕坐标系中的位置 - 计算窗口边框和标题栏尺寸,实现屏幕坐标与客户区坐标的转换
- 应用DPI缩放因子,确保在不同显示设置下的坐标一致性
坐标精度保障机制
为确保坐标操作的精确性,AutoHotkey在source/keyboard_mouse.cpp中实现了多种优化:
- 鼠标事件的精确延迟控制
- 坐标偏移的动态校准
- 多显示器环境下的坐标映射
场景化方案:坐标技术的实战应用
方案一:动态窗口元素定位器
实现一个能自动适应窗口移动的元素定位器,无论窗口如何移动都能准确定位目标按钮:
; 动态窗口元素定位器
; 适用场景:需要跟踪移动窗口中的特定控件
#Persistent
#SingleInstance Force
; 目标窗口标识(使用进程名提高稳定性)
TargetExe := "notepad.exe"
; 目标控件标识
TargetControl := "Button1"
; 定时更新位置
SetTimer, UpdatePosition, 500
return
UpdatePosition:
; 获取目标窗口句柄
WinGet, hWnd, ID, ahk_exe %TargetExe%
if (!hWnd) {
ToolTip, 目标窗口未找到
return
}
; 获取窗口位置和控件相对位置
WinGetPos, WinX, WinY,,, ahk_id %hWnd%
ControlGetPos, CtrlX, CtrlY, CtrlW, CtrlH, %TargetControl%, ahk_id %hWnd%
; 计算控件中心绝对坐标
CenterX := WinX + CtrlX + CtrlW/2
CenterY := WinY + CtrlY + CtrlH/2
; 显示实时坐标信息
ToolTip, 窗口坐标: (%WinX%, %WinY%)`n控件相对坐标: (%CtrlX%, %CtrlY%)`n绝对中心坐标: (%CenterX%, %CenterY%)
return
Esc::ExitApp
执行效果:脚本运行后会显示目标窗口和控件的实时坐标信息,即使窗口移动,坐标值也会自动更新。
方案二:多显示器环境下的坐标适配
在多显示器系统中实现跨屏幕的坐标定位:
; 多显示器坐标适配工具
; 适用场景:需要在多显示器环境中精确定位窗口
#Persistent
#SingleInstance Force
; 获取显示器信息
SysGet, MonitorCount, MonitorCount
Global Monitors := []
; 收集所有显示器坐标信息
Loop, %MonitorCount% {
SysGet, Monitor, Monitor, %A_Index%
SysGet, WorkArea, MonitorWorkArea, %A_Index%
Monitors.Push({
Index: A_Index,
Left: MonitorLeft,
Right: MonitorRight,
Top: MonitorTop,
Bottom: MonitorBottom,
WorkLeft: WorkAreaLeft,
WorkRight: WorkAreaRight,
WorkTop: WorkAreaTop,
WorkBottom: WorkAreaBottom
})
}
; 监控鼠标位置并显示当前显示器信息
SetTimer, ShowMonitorInfo, 100
return
ShowMonitorInfo:
MouseGetPos, MX, MY
CurrentMonitor := 0
; 确定当前鼠标所在显示器
for index, monitor in Monitors {
if (MX >= monitor.Left && MX <= monitor.Right && MY >= monitor.Top && MY <= monitor.Bottom) {
CurrentMonitor := index
break
}
}
; 显示当前坐标和显示器信息
if (CurrentMonitor > 0) {
ToolTip, 鼠标坐标: (%MX%, %MY%)`n当前显示器: %CurrentMonitor%`n工作区范围: %Monitors[CurrentMonitor].WorkLeft%-%Monitors[CurrentMonitor].WorkRight%, %Monitors[CurrentMonitor].WorkTop%-%Monitors[CurrentMonitor].WorkBottom%
} else {
ToolTip, 鼠标坐标: (%MX%, %MY%)`n未在任何显示器范围内
}
return
Esc::ExitApp
执行效果:当鼠标在不同显示器间移动时,脚本会实时显示当前所在显示器编号及工作区范围。
方案三:窗口客户区坐标计算器
精确计算窗口客户区坐标,排除标题栏和边框的影响:
; 窗口客户区坐标计算器
; 适用场景:需要精确计算窗口客户区内控件位置
#Persistent
#SingleInstance Force
; 目标窗口标题
TargetWindow := "无标题 - 记事本"
; 获取窗口信息
WinGet, hWnd, ID, %TargetWindow%
if (!hWnd) {
MsgBox, 未找到目标窗口
ExitApp
}
; 获取窗口矩形(含边框和标题栏)
WinGetPos, WinX, WinY, WinW, WinH, ahk_id %hWnd%
; 获取客户区矩形(仅工作区域)
WinGetClientPos, ClientX, ClientY, ClientW, ClientH, ahk_id %hWnd%
; 计算边框和标题栏尺寸
BorderLeft := ClientX - WinX
BorderRight := (WinX + WinW) - (ClientX + ClientW)
BorderTop := ClientY - WinY ; 包含标题栏高度
BorderBottom := (WinY + WinH) - (ClientY + ClientH)
; 显示计算结果
MsgBox, 窗口坐标信息:`n
. "窗口左上角: (" WinX ", " WinY ")`n"
. "窗口尺寸: " WinW "x" WinH "`n`n"
. "客户区左上角: (" ClientX ", " ClientY ")`n"
. "客户区尺寸: " ClientW "x" ClientH "`n`n"
. "边框尺寸: `n"
. " 左: " BorderLeft " 右: " BorderRight "`n"
. " 上: " BorderTop " 下: " BorderBottom
; 演示客户区坐标转换
WinActivate, ahk_id %hWnd%
Sleep, 500
Loop 5 {
; 在客户区随机位置点击
Random, CX, 10, ClientW-10
Random, CY, 10, ClientH-10
; 转换为屏幕坐标
ScreenX := ClientX + CX
ScreenY := ClientY + CY
; 移动鼠标并点击
MouseMove, ScreenX, ScreenY, 50
Click
Sleep, 1000
}
执行效果:脚本先显示窗口边框和客户区的计算结果,然后在记事本窗口客户区内随机点击5次。
进阶优化:坐标技术的高级应用
坐标计算的性能优化策略
在高频坐标更新场景中,可采用以下优化措施:
; 高性能坐标跟踪实现
#Persistent
#SingleInstance Force
; 优化1: 使用变量缓存窗口句柄,避免重复查找
WinGet, hWnd, ID, ahk_exe notepad.exe
if (!hWnd) {
MsgBox, 记事本未运行
ExitApp
}
; 优化2: 使用数组存储多个坐标点,减少变量操作
CoordCache := []
CoordCache.MaxIndex(3) ; 预分配空间
; 优化3: 降低更新频率,平衡响应速度与性能
SetTimer, HighPerformanceTrack, 200 ; 每200ms更新一次
return
HighPerformanceTrack:
; 批量获取坐标信息
WinGetPos, WinX, WinY,,, ahk_id %hWnd%
ControlGetPos, CtrlX, CtrlY,,, Edit1, ahk_id %hWnd%
; 缓存坐标数据
CoordCache[1] := {Type: "Window", X: WinX, Y: WinY}
CoordCache[2] := {Type: "Control", X: CtrlX, Y: CtrlY}
CoordCache[3] := {Type: "Absolute", X: WinX+CtrlX, Y: WinY+CtrlY}
; 仅在变化时更新显示(减少资源占用)
static LastX := 0, LastY := 0
if (CoordCache[3].X != LastX || CoordCache[3].Y != LastY) {
ToolTip, 绝对坐标: (%CoordCache[3].X%, %CoordCache[3].Y%)
LastX := CoordCache[3].X
LastY := CoordCache[3].Y
}
return
Esc::ExitApp
性能影响:通过缓存和条件更新,可将CPU占用率降低60%以上,尤其适合长时间运行的监控脚本。
多显示器环境下的坐标转换技巧
处理跨显示器坐标时,需要考虑不同显示器的分辨率和排列方式:
; 多显示器坐标转换工具
; 功能:在不同显示器间转换坐标
#Persistent
#SingleInstance Force
; 获取所有显示器信息
SysGet, MonitorCount, MonitorCount
Monitors := []
Loop, %MonitorCount% {
SysGet, Monitor, Monitor, %A_Index%
Monitors.Push({
Left: MonitorLeft,
Right: MonitorRight,
Top: MonitorTop,
Bottom: MonitorBottom,
Width: MonitorRight - MonitorLeft,
Height: MonitorBottom - MonitorTop
})
}
; 坐标转换函数:屏幕坐标 -> 相对显示器坐标
ScreenToMonitorCoord(MX, MY, ByRef MonitorIndex, ByRef RelX, ByRef RelY) {
global Monitors
MonitorIndex := 0
RelX := 0
RelY := 0
for index, monitor in Monitors {
if (MX >= monitor.Left && MX <= monitor.Right && MY >= monitor.Top && MY <= monitor.Bottom) {
MonitorIndex := index
RelX := MX - monitor.Left
RelY := MY - monitor.Top
return true
}
}
return false
}
; 坐标转换函数:相对显示器坐标 -> 屏幕坐标
MonitorToScreenCoord(MonitorIndex, RelX, RelY, ByRef ScreenX, ByRef ScreenY) {
global Monitors
if (MonitorIndex < 1 || MonitorIndex > Monitors.Length())
return false
monitor := Monitors[MonitorIndex]
ScreenX := monitor.Left + RelX
ScreenY := monitor.Top + RelY
; 确保坐标在显示器范围内
if (ScreenX < monitor.Left) ScreenX := monitor.Left
if (ScreenX > monitor.Right) ScreenX := monitor.Right
if (ScreenY < monitor.Top) ScreenY := monitor.Top
if (ScreenY > monitor.Bottom) ScreenY := monitor.Bottom
return true
}
; 演示坐标转换
MouseGetPos, MX, MY
if (ScreenToMonitorCoord(MX, MY, MonitorIndex, RelX, RelY)) {
MsgBox, 当前鼠标位置:`n
. "屏幕坐标: (" MX ", " MY ")`n"
. "显示器 " MonitorIndex " 相对坐标: (" RelX ", " RelY ")"
; 转换到第一个显示器的相同相对位置
MonitorToScreenCoord(1, RelX, RelY, NewX, NewY)
MsgBox, 转换到显示器1的相同相对位置:`n
. "屏幕坐标: (" NewX ", " NewY ")"
MouseMove, NewX, NewY
} else {
MsgBox, 无法确定当前显示器
}
常见误区:假设所有显示器都是从(0,0)开始的连续坐标空间,实际上Windows允许显示器以任意方式排列。
高DPI环境下的坐标适配方案
在高DPI显示设置下,坐标计算需要考虑缩放因子:
; 高DPI环境坐标适配
; 功能:在不同DPI设置下保持坐标一致性
#Persistent
#SingleInstance Force
; 获取系统DPI设置
DllCall("GetDpiForSystem", "UInt") ; Windows 10 1607+
DllCall("user32.dll\SystemParametersInfo", "UInt", 0x007E, "UInt", 0, "UInt*", Dpi, "UInt", 0)
DpiScale := Dpi / 96.0
MsgBox, 当前DPI设置: %Dpi% DPI`n缩放因子: %DpiScale%x
; DPI感知坐标转换函数
AdjustCoordForDPI(X, Y, ByRef AdjustedX, ByRef AdjustedY) {
global DpiScale
AdjustedX := Round(X * DpiScale)
AdjustedY := Round(Y * DpiScale)
}
; 演示DPI适配
WinGetPos, WinX, WinY,,, A
AdjustCoordForDPI(WinX, WinY, AdjX, AdjY)
MsgBox, 窗口坐标:`n
. "原始坐标: (" WinX ", " WinY ")`n"
. "DPI适配后: (" AdjX ", " AdjY ")"
正确用法:始终使用系统API获取DPI缩放因子,避免硬编码缩放比例。
故障排除工作流:坐标问题的系统解决方法
步骤1:确认窗口标识的准确性
窗口标识错误是坐标获取失败的最常见原因:
- 使用
WinGet, hWnd, ID, 窗口标题获取窗口句柄 - 通过
WinExist("ahk_id " hWnd)验证窗口是否存在 - 若窗口标题多变,改用
ahk_exe或ahk_pid进行标识
; 可靠的窗口标识方法
SetTitleMatchMode, 2 ; 允许部分匹配
WinGet, hWnd, ID, ahk_exe notepad.exe
if (!hWnd) {
MsgBox, 错误:未找到记事本窗口
ExitApp
}
; 使用句柄进行后续操作
WinGetPos, X, Y,,, ahk_id %hWnd%
步骤2:验证坐标获取方式的适用性
不同场景需要选择合适的坐标获取命令:
- WinGetPos:获取整个窗口的位置和尺寸
- ControlGetPos:获取控件相对窗口客户区的坐标
- MouseGetPos:获取当前鼠标位置或悬停控件信息
; 坐标获取方式对比测试
WinGet, hWnd, ID, ahk_exe notepad.exe
if (!hWnd) {
MsgBox, 记事本未运行
ExitApp
}
; 方法1: WinGetPos - 获取窗口位置
WinGetPos, WX, WY, WW, WH, ahk_id %hWnd%
; 方法2: ControlGetPos - 获取控件位置
ControlGetPos, CX, CY, CW, CH, Edit1, ahk_id %hWnd%
; 方法3: MouseGetPos - 获取鼠标位置
MouseMove, WX+CX+CW/2, WY+CY+CH/2
Sleep, 500
MouseGetPos, MX, MY, CtrlHwnd, CtrlClassNN
MsgBox, 坐标对比:`n
. "窗口位置: (" WX ", " WY ")`n"
. "编辑框相对位置: (" CX ", " CY ")`n"
. "鼠标绝对位置: (" MX ", " MY ")`n"
. "鼠标下控件: " CtrlClassNN
步骤3:分析坐标偏差的来源
坐标偏差可能来自多个方面:
- 窗口边框和标题栏未被正确排除
- DPI缩放导致的像素偏差
- 窗口处于最大化/最小化状态
- 多个显示器间的坐标映射错误
; 坐标偏差诊断工具
WinGet, hWnd, ID, ahk_exe notepad.exe
if (!hWnd) {
MsgBox, 记事本未运行
ExitApp
}
; 获取窗口各种坐标信息
WinGetPos, WinX, WinY, WinW, WinH, ahk_id %hWnd%
WinGetClientPos, ClientX, ClientY, ClientW, ClientH, ahk_id %hWnd%
WinGet, Style, Style, ahk_id %hWnd%
; 计算边框尺寸
BorderLeft := ClientX - WinX
BorderRight := (WinX + WinW) - (ClientX + ClientW)
BorderTop := ClientY - WinY
BorderBottom := (WinY + WinH) - (ClientY + ClientH)
; 检查窗口状态
IsMaximized := (Style & 0x01000000) ; WS_MAXIMIZE样式
IsMinimized := (Style & 0x00020000) ; WS_MINIMIZE样式
; 显示诊断信息
MsgBox, 坐标偏差诊断:`n
. "窗口状态: " (IsMaximized ? "最大化" : IsMinimized ? "最小化" : "正常") "`n"
. "边框尺寸: 左=%BorderLeft% 右=%BorderRight% 上=%BorderTop% 下=%BorderBottom%`n"
. "客户区偏移: X=%ClientX% Y=%ClientY%`n"
. "窗口尺寸: %WinW%x%WinH% 客户区尺寸: %ClientW%x%ClientH%"
步骤4:实施针对性的解决方案
根据诊断结果选择合适的解决方案:
- 边框问题:使用
WinGetClientPos获取客户区坐标 - DPI问题:应用DPI缩放因子进行坐标转换
- 窗口状态:在操作前确保窗口处于正常状态
- 多显示器:使用显示器坐标映射函数
实战案例:企业级自动化坐标系统
案例背景与需求分析
某企业需要实现一个自动化测试工具,要求在不同分辨率、不同DPI设置的电脑上,都能精确定位并操作应用程序界面元素。
完整解决方案实现
; 企业级窗口坐标管理系统
; 功能:跨环境一致的窗口坐标定位与操作
#Persistent
#SingleInstance Force
; ==============================================
; 配置区 - 根据实际需求修改
; ==============================================
TargetApp := "notepad.exe" ; 目标应用进程名
TargetControls := [ ; 目标控件列表
{Name: "EditArea", ClassNN: "Edit1"},
{Name: "OKButton", ClassNN: "Button1"}
]
; ==============================================
; 初始化系统
CoordSystem := new CoordinateSystem()
CoordSystem.Init()
; 获取目标窗口
if !CoordSystem.FindWindowByExe(TargetApp) {
MsgBox, 错误:未找到目标应用 %TargetApp%
ExitApp
}
; 缓存目标控件坐标
CoordSystem.CacheControlCoordinates(TargetControls)
; 演示操作
CoordSystem.MoveMouseToControl("EditArea", "center")
Sleep, 1000
CoordSystem.ClickControl("EditArea")
Send, 这是通过坐标系统输入的文本`n
Sleep, 1000
CoordSystem.MoveMouseToControl("OKButton", "center")
Sleep, 1000
CoordSystem.ClickControl("OKButton")
MsgBox, 自动化操作完成
ExitApp
; ==============================================
; 坐标系统类定义
; ==============================================
class CoordinateSystem {
hWnd := 0
DpiScale := 1.0
MonitorInfo := {}
ControlCache := {}
; 初始化系统信息
Init() {
; 获取DPI缩放因子
DllCall("user32.dll\SystemParametersInfo", "UInt", 0x007E, "UInt", 0, "UInt*", Dpi, "UInt", 0)
this.DpiScale := Dpi / 96.0
; 获取主显示器信息
SysGet, Monitor, Monitor, 1
this.MonitorInfo := {
Left: MonitorLeft,
Right: MonitorRight,
Top: MonitorTop,
Bottom: MonitorBottom,
Width: MonitorRight - MonitorLeft,
Height: MonitorBottom - MonitorTop
}
return true
}
; 根据进程名查找窗口
FindWindowByExe(ExeName) {
WinGet, hWnd, ID, ahk_exe %ExeName%
if (!hWnd)
return false
this.hWnd := hWnd
return true
}
; 缓存控件坐标
CacheControlCoordinates(Controls) {
if (!this.hWnd)
return false
; 获取窗口客户区坐标
WinGetClientPos, ClientX, ClientY,,, ahk_id %this.hWnd%
; 遍历所有控件
for index, control in Controls {
ControlGetPos, CX, CY, CW, CH, % control.ClassNN, ahk_id %this.hWnd%
; 计算各种坐标
this.ControlCache[control.Name] := {
ClassNN: control.ClassNN,
RelX: CX, ; 相对客户区X
RelY: CY, ; 相对客户区Y
Width: CW, ; 宽度
Height: CH, ; 高度
AbsX: ClientX + CX, ; 绝对屏幕X
AbsY: ClientY + CY, ; 绝对屏幕Y
CenterX: ClientX + CX + CW/2, ; 中心X
CenterY: ClientY + CY + CH/2 ; 中心Y
}
}
return true
}
; 移动鼠标到控件
MoveMouseToControl(ControlName, Position="center") {
if (!this.ControlCache.HasKey(ControlName))
return false
control := this.ControlCache[ControlName]
x := control.AbsX
y := control.AbsY
; 根据位置参数调整坐标
switch Position {
case "center":
x := control.CenterX
y := control.CenterY
case "top-left":
; 使用默认的AbsX, AbsY
case "top-right":
x := control.AbsX + control.Width
case "bottom-left":
y := control.AbsY + control.Height
case "bottom-right":
x := control.AbsX + control.Width
y := control.AbsY + control.Height
}
; 应用DPI缩放
x := Round(x * this.DpiScale)
y := Round(y * this.DpiScale)
MouseMove, x, y, 50
return true
}
; 点击控件
ClickControl(ControlName, Position="center", Button="Left") {
if (this.MoveMouseToControl(ControlName, Position)) {
Click, %Button%
return true
}
return false
}
; 获取控件当前坐标
GetControlCurrentPosition(ControlName) {
if (!this.hWnd || !ControlName)
return false
; 重新获取最新坐标
ControlGetPos, CX, CY, CW, CH, % this.ControlCache[ControlName].ClassNN, ahk_id %this.hWnd%
WinGetClientPos, ClientX, ClientY,,, ahk_id %this.hWnd%
; 更新缓存
this.ControlCache[ControlName].RelX := CX
this.ControlCache[ControlName].RelY := CY
this.ControlCache[ControlName].Width := CW
this.ControlCache[ControlName].Height := CH
this.ControlCache[ControlName].AbsX := ClientX + CX
this.ControlCache[ControlName].AbsY := ClientY + CY
this.ControlCache[ControlName].CenterX := ClientX + CX + CW/2
this.ControlCache[ControlName].CenterY := ClientY + CY + CH/2
return this.ControlCache[ControlName]
}
}
方案亮点与可扩展性
该坐标系统具有以下特点:
- 环境自适应:自动检测DPI设置和显示器信息
- 坐标缓存:减少重复计算,提高性能
- 面向对象设计:便于维护和扩展
- 多位置支持:可定位控件的不同部位(中心、四角等)
可扩展方向:
- 添加图像识别辅助定位
- 增加坐标历史记录和趋势分析
- 实现多窗口协同操作
技术选型决策树:选择合适的坐标获取方案
在选择坐标获取方案时,可按照以下决策流程进行:
-
确定定位对象
- 整个窗口 → 使用WinGetPos
- 窗口内控件 → 使用ControlGetPos
- 鼠标位置 → 使用MouseGetPos
-
考虑窗口状态
- 固定位置窗口 → 直接使用绝对坐标
- 可移动窗口 → 使用相对坐标+动态计算
- 多显示器环境 → 使用显示器坐标转换
-
评估性能需求
- 低频率操作 → 直接获取坐标
- 高频率操作 → 使用坐标缓存+条件更新
-
特殊环境处理
- 高DPI显示 → 应用DPI缩放因子
- 异形窗口 → 结合区域检测
- 透明窗口 → 使用底层API获取真实坐标
通过以上决策流程,可以为不同场景选择最优的坐标获取方案,平衡准确性、性能和复杂度。
AutoHotkey的窗口坐标技术是实现精准自动化的基础,掌握本文介绍的原理、方案和优化技巧,将使你的自动化脚本具备专业级的定位能力。无论是简单的窗口操作还是复杂的GUI自动化,准确的坐标处理都是提升脚本可靠性和稳定性的关键。随着实践深入,你将能够应对各种复杂的窗口定位挑战,开发出更加健壮的自动化解决方案。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust075- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
MiniMax-M2.7MiniMax-M2.7 是我们首个深度参与自身进化过程的模型。M2.7 具备构建复杂智能体应用框架的能力,能够借助智能体团队、复杂技能以及动态工具搜索,完成高度精细的生产力任务。Python00
GLM-5.1GLM-5.1是智谱迄今最智能的旗舰模型,也是目前全球最强的开源模型。GLM-5.1大大提高了代码能力,在完成长程任务方面提升尤为显著。和此前分钟级交互的模型不同,它能够在一次任务中独立、持续工作超过8小时,期间自主规划、执行、自我进化,最终交付完整的工程级成果。Jinja00
Kimi-K2.6Kimi K2.6 是一款开源的原生多模态智能体模型,在长程编码、编码驱动设计、主动自主执行以及群体任务编排等实用能力方面实现了显著提升。Python00
Hy3-previewHy3 preview 是由腾讯混元团队研发的2950亿参数混合专家(Mixture-of-Experts, MoE)模型,包含210亿激活参数和38亿MTP层参数。Hy3 preview是在我们重构的基础设施上训练的首款模型,也是目前发布的性能最强的模型。该模型在复杂推理、指令遵循、上下文学习、代码生成及智能体任务等方面均实现了显著提升。Python00