目标栈与回溯
将子目标压入栈中,完成后弹出,遇到死路时回溯——这是经典的人工智能规划。
目标栈与回溯 是 CoddyKit 上的免费 AI Agents 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 AI Agents 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 AI Agents 课程共包含 4 节课。
本课时的部分内容尚未翻译,以英文显示。
目标栈
经典人工智能规划使用目标栈:遇到子目标时 push,完成后 pop。智能体可以使用相同的数据结构:
goal_stack = []
def push(goal):
goal_stack.append(goal)
def pop():
return goal_stack.pop() if goal_stack else None
def current():
return goal_stack[-1] if goal_stack else None
# --- demo ---
push('write the report')
push('collect the data')
print(f'Current goal: {current()}')
print(f'Popped: {pop()}')
print(f'Current goal after pop: {current()}')
Example: Refactoring Workflow
push('Refactor auth')
while current():
g = current()
if g == 'Refactor auth':
if not done('add_oauth_dep'):
push('Add OAuth dependency')
elif not done('replace_login'):
push('Replace login endpoint')
else:
pop() # done
elif g == 'Add OAuth dependency':
# ...actually do the work...
mark_done('add_oauth_dep')
pop()回溯
当目标失败时:
- 将其标记为失败
- 返回父节点
- 尝试不同的方法(不同的子目标)
Backtracking Example
def attempt(goal):
for approach in [oauth, saml, custom_token]:
try:
return run_with(goal, approach)
except FailedException:
continue
raise NoApproachWorked(goal)跟踪尝试过的方法
避免重试同一个失败的方法。请针对每个目标跟踪已经尝试过的方法:
{
'goal_id': 'refactor-auth',
'tried': ['oauth', 'saml'],
'remaining_options': ['custom_token']
}让 LLM 选择目标
使用 LLM 决定接下来要 push 什么:
next_goal = llm.invoke(f'Current goal: {current()}. Done so far: {done_list}. What sub-goal next?').content
push(next_goal)前置条件与效果
借鉴 STRIPS 规划:每个动作都有前置条件(必须为真的内容)和效果(将变为真的内容):
action = {
'name': 'replace_login',
'preconditions': ['oauth_dep_installed'],
'effects': ['login_endpoint_replaced']
}规划与行动循环
两阶段方法:
- 规划 — 符号规划器构建目标栈
- 行动 — 智能体执行栈顶任务,更新世界状态,并在需要时重新规划
符号方法与 LLM 的混合
对于前置条件明确的任务(文件操作、部署),请使用符号规划器。对于模糊的部分,请使用 LLM。将两者结合可以提高稳健性。
死胡同
有时智能体会到达一种无论采取什么动作都没有帮助的状态。请识别死胡同并进一步回溯:
if no_progress_in_n_steps(5):
pop_to_parent()
try_different_approach()限制回溯深度
不受限制的回溯可能导致无限循环。请限制深度和总迭代次数:
MAX_BACKTRACKS = 10
if backtrack_count >= MAX_BACKTRACKS:
escalate_to_human()向用户展示回溯过程
当智能体进行回溯时,请告诉用户:“OAuth 没有奏效,正在尝试 SAML。”这样可以维持信任,也让用户能够及早介入。
回溯触发条件
智能体应在什么时候从子目标进行回溯?
回顾
目标栈记录智能体“我现在在哪里”。push 子目标,pop 已完成的目标,在遇到死胡同时回溯。将符号规划与 LLM 判断结合起来。
常见问题解答
「目标栈与回溯」课时是免费的吗?
是的 — 「目标栈与回溯」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 AI Agents 课程的其余内容,请升级到 CoddyKit PRO。 AI Agents 课程共包含 4 节课。
「目标栈与回溯」这节课中我会学到什么?
将子目标压入栈中,完成后弹出,遇到死路时回溯——这是经典的人工智能规划。 你通过在浏览器中直接运行的动手代码来练习 AI Agents,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 AI Agents 需要有经验吗?
无需任何先前经验。CoddyKit 上的 AI Agents 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「目标栈与回溯」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 AI Agents 课中编写并运行代码吗?
能。每节 AI Agents 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。