Gemini-cli(Qwen-code)的 Agent 实践流程
Gemini-CLI Agent 是 ReAct 框架的一个具体、针对特定场景(主要是开发者工作流程)的实现。
graph TB
A[开始sendMessageStream方法] --> B[检查是否为新提示]
B --> C[增加会话轮次计数]
C --> D{是否超过最大轮次?}
D -->|是| E[yield最大轮次事件]
D -->|否| F[确保轮次不超过MAX_TURNS]
F --> G[尝试压缩聊天历史]
G --> H{压缩是否成功?}
H -->|是| I[yield压缩事件]
H -->|否| J[继续处理]
I --> J
J --> K{会话令牌限制是否启用?}
K -->|是| L[计算请求令牌数]
L --> M{令牌数是否超过限制?}
M -->|是| N[yield令牌超限事件]
M -->|否| O[继续处理]
N --> P[结束]
O --> Q
K -->|否| Q[继续处理]
Q --> R{是否有待处理的工具调用?}
R -->|否| S[添加IDE上下文到历史记录]
R -->|是| T[跳过IDE上下文添加]
S --> T
T --> U[创建Turn对象]
U --> V{是否跳过循环检测?}
V -->|否| W[执行循环检测]
W --> X{是否检测到循环?}
X -->|是| Y[yield循环检测事件]
X -->|否| Z[继续处理]
Y --> AA[返回Turn对象]
Z --> AB[继续处理]
V -->|是| AB[继续处理]
AB --> AC{是否为新提示?}
AC -->|是| AD[添加系统提醒]
AC -->|否| AE[继续处理]
AD --> AE
AE --> AF[执行turn.run方法]
AF --> AG{循环处理流事件}
AG --> AH[处理每个事件]
AH --> AI{是否跳过循环检测?}
AI -->|否| AJ[添加事件到循环检测器]
AJ --> AK{是否检测到循环?}
AK -->|是| AL[yield循环检测事件]
AK -->|否| AM[继续处理]
AL --> AN[返回Turn对象]
AM --> AO[yield事件]
AO --> AP{事件类型是否为错误?}
AP -->|是| AQ[返回Turn对象]
AP -->|否| AG
AG -->|流结束| AR{是否有待处理的工具调用?}
AR -->|否| AS{信号是否已中止?}
AS -->|否| AT{是否发生配额错误?}
AT -->|是| AU[返回Turn对象]
AT -->|否| AV{是否跳过下一位发言者检查?}
AV -->|是| AW[返回Turn对象]
AV -->|否| AX[检查下一位发言者]
AX --> AY[记录下一位发言者检查事件]
AY --> AZ{下一位发言者是否为模型?}
AZ -->|是| BA[递归调用sendMessageStream]
AZ -->|否| AW
BA --> AG
AR -->|是| AW
AS -->|是| AW
AW --> BB[返回Turn对象]

浙公网安备 33010602011771号