在Google最开始发布Antigravity的时候,就了解到个人可以体验到免费的Gemini和Claude顶级大模型。目前主要的模型已经支持:

主要包含最新的Gemini3.1、Claude 4.6 还有GPT OSS 120B这几个模型。
但是因为众所周知的原因,导致国内无法正常使用Google里的所有内容。

所以,这对于大部分人来说是个难题。我们这期分享下怎么使用Google的Antigravity,当然解决了这些Gemini官网、Google AI Studio、notebookLM就都能使用了。
正常使用就是一句话:良好的网络代理+TUN+全局+地理位置(建议:美国)
01

网络
正常来说,国内有很多网络工具可以正常访问的,在搜索引擎上可以搞定。最开始用了一些免费的网络节点,有些卡还限制时间。
所以建议搞个稳定的网络工具。我这里用的是虚拟主机+网络客户端工具方案:

注意:需要开启TUN和全局模式。
02

地理位置
搞定网络后,可能有些朋友还是不能正常访问,主要原因:Google Antigravity的地理位置要求,该工具对用户Google账号的地区关联有严格限制,并非单纯依赖IP地址,而是需要账号本身与特定国家/地区绑定。
如何查询地理位置
https://policies.google.com/terms

修改地理位置
如果不是美国地区,需要切换下,可以到下方地址申请更改:
https://policies.google.com/country-association-form

等几个小时后,就可以看到自己的位置切换成功了。

03

Antigravity安装
step1:下载安装包安装
官网地址:https://antigravity.google/download

我这里选择的是Windows版本,根据自己的电脑系统而定。
step2:直接找到安装包双击安装

选择我同意此协议继续:

等待安装,直到出现下方的安装完成消息框:

step3:直接双击打开即可进入下方界面:

04

Antigravity登录
我们打开后,软件需要一个Google的账户,

我们可以申请一个,没有的话刚好可以用配置好的网络环境申请。这里我们就不进行说明了,注册的官网地址:
https://accounts.google.com

注册完成后,在回到邮箱验证的环节,我们直接点击验证,他会调整到验证身份界面,当然这里有个短信验证环节,可以直接用+86国内的手机号码:

验证完成就会显示登录成功:

好了,接下来就可以开启在Antigravity里面进行聊天了:

我们简单的对它进行使用:

我们可以看到实际上和VS Code相似,只不过就是可以用这几个顶级模型:

这里以Claude为例来做简单示例,我们输入问题:
I want to Control a tank ,please give me st code !它会思考一会,然后左侧打开后缀为.st的代码文档,具体代码我放下方:
(* ============================================================
Program: TankControl
Description: Liquid Tank Fill / Empty Cycle Controller
Language: IEC 61131-3 Structured Text (ST)
Author: Auto-Generated
Date: 2026-03-02
============================================================
I/O Summary
───────────────────────────────────────────────────
Inputs:
bStart : BOOL – Start pushbutton (NO)
bStop : BOOL – Stop / E-Stop pushbutton (NC)
bManualMode : BOOL – Manual mode selector
rLevelSensor : REAL – Analog level sensor 0-100 %
bHighLevelSwitch : BOOL – Discrete high-level limit switch
bLowLevelSwitch : BOOL – Discrete low-level limit switch
Outputs:
bInletValve : BOOL – Inlet (fill) valve
bOutletValve : BOOL – Outlet (drain) valve
bMixerMotor : BOOL – Agitator / mixer motor
bAlarmOut : BOOL – General alarm output
bRunIndicator : BOOL – Running indicator lamp
============================================================
*)
PROGRAM TankControl
(* ── Variable Declarations ──────────────────────── *)
VAR_INPUT
bStart : BOOL; (* Start button *)
bStop : BOOL; (* Stop / E-Stop button *)
bManualMode : BOOL; (* Manual mode switch *)
rLevelSensor : REAL; (* Tank level 0..100 % *)
bHighLevelSwitch : BOOL; (* High level limit *)
bLowLevelSwitch : BOOL; (* Low level limit *)
END_VAR
VAR_OUTPUT
bInletValve : BOOL; (* Fill valve *)
bOutletValve : BOOL; (* Drain valve *)
bMixerMotor : BOOL; (* Mixer motor *)
bAlarmOut : BOOL; (* Alarm *)
bRunIndicator : BOOL; (* Run lamp *)
END_VAR
VAR
(* ── State machine ── *)
eState : INT := 0; (* Current state *)
ePrevState : INT := -1; (* Previous state for edge detection *)
(* ── Setpoints ── *)
rFillSetpoint : REAL := 90.0; (* Fill target level % *)
rDrainSetpoint : REAL := 10.0; (* Drain target level % *)
rAlarmHigh : REAL := 95.0; (* High-level alarm % *)
rAlarmLow : REAL := 5.0; (* Low-level alarm % *)
(* ── Timers ── *)
tonMixDelay : TON; (* Mixing duration timer *)
tonFillTimeout : TON; (* Fill timeout timer *)
tonDrainTimeout : TON; (* Drain timeout timer *)
tMixDuration : TIME := T
#30S
; (* Mixing time *)
tFillTimeout : TIME := T
#120S
; (* Max fill time *)
tDrainTimeout : TIME := T
#120S
; (* Max drain time *)
(* ── Counters ── *)
nCycleCount : DINT := 0; (* Completed cycle counter *)
(* ── Internal Flags ── *)
bFaultActive : BOOL := FALSE; (* Latched fault flag *)
bFaultReset : BOOL := FALSE; (* Fault reset request *)
bStartEdge : BOOL := FALSE; (* Rising edge memory *)
bStartPrev : BOOL := FALSE; (* Previous start value *)
END_VAR
(* ── State Constants ── *)
VAR CONSTANT
ST_IDLE : INT := 0;
ST_FILLING : INT := 1;
ST_MIXING : INT := 2;
ST_DRAINING : INT := 3;
ST_COMPLETE : INT := 4;
ST_FAULT : INT := 10;
END_VAR
(* ══════════════════════════════════════════════════
MAIN LOGIC
══════════════════════════════════════════════════ *)
(* ── 1. Rising-edge detection on Start button ── *)
bStartEdge := bStart AND NOT bStartPrev;
bStartPrev := bStart;
(* ── 2. Fault Monitoring (always active) ──────── *)
IF rLevelSensor > rAlarmHigh AND eState <> ST_IDLE THEN
bFaultActive := TRUE; (* Over-fill protection *)
END_IF;
IF rLevelSensor < rAlarmLow AND eState = ST_DRAINING THEN
bFaultActive := TRUE; (* Over-drain protection *)
END_IF;
IF bHighLevelSwitch AND eState = ST_FILLING THEN
bFaultActive := TRUE; (* Discrete high-level trip *)
END_IF;
IF tonFillTimeout.Q OR tonDrainTimeout.Q THEN
bFaultActive := TRUE; (* Timeout fault *)
END_IF;
(* Emergency stop *)
IF NOT bStop THEN
bFaultActive := TRUE;
END_IF;
(* Transition to FAULT state if any fault is active *)
IF bFaultActive AND eState <> ST_FAULT THEN
eState := ST_FAULT;
END_IF;
(* ── 3. State Machine ────────────────────────── *)
CASE eState OF
(* ─── IDLE ─────────────────────────────────── *)
ST_IDLE:
bInletValve := FALSE;
bOutletValve := FALSE;
bMixerMotor := FALSE;
bRunIndicator := FALSE;
bAlarmOut := FALSE;
(* Reset timers *)
tonFillTimeout(IN := FALSE, PT := tFillTimeout);
tonDrainTimeout(IN := FALSE, PT := tDrainTimeout);
tonMixDelay(IN := FALSE, PT := tMixDuration);
(* Start condition: rising edge on Start, no fault *)
IF bStartEdge AND NOT bFaultActive THEN
eState := ST_FILLING;
END_IF;
(* ─── FILLING ──────────────────────────────── *)
ST_FILLING:
bInletValve := TRUE;
bOutletValve := FALSE;
bMixerMotor := FALSE;
bRunIndicator := TRUE;
(* Fill timeout watchdog *)
tonFillTimeout(IN := TRUE, PT := tFillTimeout);
(* Transition when level reaches setpoint *)
IF rLevelSensor >= rFillSetpoint THEN
bInletValve := FALSE;
tonFillTimeout(IN := FALSE, PT := tFillTimeout);
eState := ST_MIXING;
END_IF;
(* ─── MIXING ───────────────────────────────── *)
ST_MIXING:
bInletValve := FALSE;
bOutletValve := FALSE;
bMixerMotor := TRUE;
bRunIndicator := TRUE;
tonMixDelay(IN := TRUE, PT := tMixDuration);
IF tonMixDelay.Q THEN
bMixerMotor := FALSE;
tonMixDelay(IN := FALSE, PT := tMixDuration);
eState := ST_DRAINING;
END_IF;
(* ─── DRAINING ─────────────────────────────── *)
ST_DRAINING:
bInletValve := FALSE;
bOutletValve := TRUE;
bMixerMotor := FALSE;
bRunIndicator := TRUE;
tonDrainTimeout(IN := TRUE, PT := tDrainTimeout);
IF rLevelSensor <= rDrainSetpoint THEN
bOutletValve := FALSE;
tonDrainTimeout(IN := FALSE, PT := tDrainTimeout);
nCycleCount := nCycleCount + 1;
eState := ST_COMPLETE;
END_IF;
(* ─── COMPLETE ─────────────────────────────── *)
ST_COMPLETE:
bInletValve := FALSE;
bOutletValve := FALSE;
bMixerMotor := FALSE;
bRunIndicator := FALSE;
(* Auto-restart or return to idle *)
eState := ST_IDLE;
(* ─── FAULT ────────────────────────────────── *)
ST_FAULT:
(* Safe state: all outputs off except alarm *)
bInletValve := FALSE;
bOutletValve := FALSE;
bMixerMotor := FALSE;
bRunIndicator := FALSE;
bAlarmOut := TRUE;
(* Fault acknowledged: operator presses Start while Stop is OK *)
IF bStartEdge AND bStop THEN
bFaultActive := FALSE;
bAlarmOut := FALSE;
eState := ST_IDLE;
END_IF;
END_CASE;
END_PROGRAM中途出了一次错,直接点retry即可继续:

总共输出了几个文档,还有说明:

基本上是一个很完整的项目了!
最后,有兴趣的朋友可以尝试下!
参考链接:
【1】https://blog.csdn.net/qq_75054867/article/details/158384293
【2】https://cloud.tencent.com/developer/article/2616155
▊ 阅读更多(戳下方图片)
