首页 / 文章 / 实用提示:Agent即一个while循环

实用提示:Agent即一个while循环

《实用笔记:Agent即While循环》的操作指南:为采用该模式的团队提供的契约、检查项以及可直接插入的代码模块。

1429 词

以下笔记为“智能体即循环结构”这一概念提供了实用实现路径。重点在于契约、校验条件以及可直接插入的代码占位符,而非动机性阐述。 在完成概览阶段时,首先明确契约内容:所需输入、成功信号以及部分失败时的处理方式。这样的清单能确保后续代码修改的透明度。 将此阶段视为输入与已验证输出之间的契约。为相关组件命名,定义成功校验标准,并杜绝默许的部分完成情况。

二十行代码实现完整智能体

在开发阶段,将整个代理系统视为可测量的对象来处理效果最佳。在扩大范围之前,先记录一个成功的用例、一个失败案例以及回滚说明。在功能结果旁同时记录执行时间以及令牌或查询成本。提前了解这些成本信息,就能避免在系统从演示环境过渡到共享环境时出现意外费用。要保持图结构的层次简单且类型明确,嵌套的数据结构会掩盖具体是哪个节点修改了哪个字段,还会在出现中断后导致程序无法继续运行。

messages = [system_prompt, user_question]
while True:
    reply = model(messages, tools=TOOLS)    if not reply.tool_calls:
        return reply.text                    # the model answered; done    for call in reply.tool_calls:
        result = TOOLS[call.name](**call.args)   # your code runs it
        messages.append(tool_result(call.id, result))

先运行一次看看

将“Watch it run once”阶段视为可测量的界面来使用效果最佳。在扩大范围之前,先记录一个成功的案例、一个失败案例以及回滚说明。 将配置与应用程序代码分开。环境文件、密钥存储和功能标志应集中存放于一处,这样操作人员无需查看整个结构即可进行审计。 保持数据结构的层次简单且类型明确。嵌套的数据块会掩盖哪个节点修改了哪个字段的信息,还会在出现中断后导致无法继续处理。

现在让它运行一周

将“Now run it for stage”视为可度量的界面使用效果最佳。在扩大范围之前,需记录一份理想状态下的执行日志、一个故障案例以及回滚说明。同时文档化正常流程与恢复流程。重试机制、人工审核环节以及错误处理都是产品本身的组成部分,而非后续需要补充的内容。保持图表状态简洁且类型明确,嵌套的数据块会掩盖具体是哪个节点修改了哪个字段,还会导致中断后无法继续执行。将“Now run it for stage”视为可度量的界面使用效果最佳。在扩大范围之前,需记录一份理想状态下的执行日志、一个故障案例以及回滚说明。应将此阶段视为输入与经过验证的输出之间的契约,为相关成果命名,明确成功标准,绝不允许出现无声无息的半完成状态。

用框图展示各步骤

在修改代码之前,应先将流程分解为各个阶段,明确每个阶段的输入、负责人员以及结束标准。操作人员应能够从已知的检查点重新运行该阶段,而无需猜测隐藏状态。除了功能结果外,还需记录执行时间以及令牌或查询成本。提前了解这些成本可以避免在流程从演示环境转向共享环境时出现意外费用。对于那些会消耗资金或修改生产数据的操作,必须经过人工审批。仅靠编译时的配置并不足以确保业务的完整性。

LangChain 是什么

在“LangChain 是什么”阶段,应在修改代码之前明确输入内容、各步骤的负责人以及终止标准。操作员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 配置信息应置于应用程序代码之外。环境文件、密钥存储和功能标志应集中存放,以便操作员无需查看整个流程即可进行审核。 对于涉及资金支出或修改生产数据的操作,需经过人工审批。编译时的连接方式并不等同于业务功能的完整性。

from langchain.agents import create_agent
agent = create_agent(
    model="anthropic:claude-sonnet-4-6",
    tools=[search_runbooks, get_release_notes],
    system_prompt="You are the on-call triage assistant.",
)
result = agent.invoke({"messages": [("user", "Why is ERR_4412 failing?")]})

LangGraph 是什么

在“What LangGraph is”阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 需同时记录正常流程与异常恢复路径。重试机制、人工审核环节以及错误处理都是产品功能的一部分,而非后续需要补充的内容。 对于涉及资金支出或修改生产数据的操作,必须经过人工审批。编译时的连接方式并不等同于业务功能的完整性。 在“What LangGraph is”阶段,修改代码之前需明确输入参数、该步骤的负责人以及终止标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏状态。 应将此阶段视为输入与经过验证的输出之间的契约。需为相关输出文件命名,明确成功判定标准,并杜绝无声的半完成状态。

from langgraph.graph import StateGraph
g = StateGraph(TriageState)
g.add_node("classify", classify)
g.add_node("search", search_runbooks)
g.add_node("propose", propose_fix)
g.add_node("approve", ask_human)
g.add_edge("classify", "search")
g.add_conditional_edges("search", route_by_error_type)
g.add_edge("propose", "approve")app = g.compile(checkpointer=PostgresSaver(...))

仅一个任务栈,无需两种选择

在采用“仅一个任务栈,而非两个”方案时,首先需明确相关约定:所需的输入参数、成功信号,以及部分失败时的处理方式。这样的清单能确保后续的代码修改始终符合初始设计。 在功能结果旁记录执行时间以及令牌或查询成本。提前了解成本情况,可避免在从演示环境过渡到共享环境时出现意外费用。 在耗时较高的步骤之后设置检查点。当操作员重新尝试后续节点时,恢复流程不应再次收取相同的LLM调用费用。

你会对团队说些什么

在“你需要说明的内容”阶段,首先写下相关约定:所需的输入参数、成功标志以及部分失败时的处理方式。这样的清单能确保后续的代码修改保持一致性。 将配置信息与应用程序代码分开存放。环境文件、密钥存储以及功能开关应集中管理,这样操作人员无需查看整个系统结构即可进行审计。 在耗时较高的步骤之后设置检查点。当操作人员重新执行后续节点时,恢复流程不应再次调用相同的大型语言模型。

操作检查清单

在“操作检查清单”阶段,应在修改代码之前明确输入参数、该步骤的负责人以及结束标准。操作人员应能够从已知的检查点重新运行该步骤,而无需猜测隐藏的状态信息。

应优先选择小型、可测试的单元,而非庞大的脚本。当某个步骤出错时,故障应指向单一责任点,而非复杂的流程链。

对于涉及资金支出或修改生产数据的环节,必须经过人工审批。编译时的逻辑连接并不等同于业务功能的完整性。

编写简短的操作手册:说明如何轮换密钥、如何清空队列、以及如何回滚上一次的数据导入操作。

将此阶段视为输入数据与经过验证的输出结果之间的契约。为相关产物命名,明确成功标准,绝不允许出现无声的、不完整的处理结果。

对于涉及资金支出或修改生产数据的环节,必须经过人工审批。编译时的逻辑连接并不等同于业务功能的完整性。

在推广该技术栈之前,应先冻结版本,为关键路径生成标准记录,并明确回滚步骤。共享环境需要设置速率限制、租户验证机制,以及明确的密钥轮换负责人。与其展示花哨的一次性演示,不如追求扎实的可靠性。

b7118cb9ca4e版本的批处理说明:不要将提供商密钥放入代码仓库,为每个会话设置令牌使用上限,并将记录与评估用文件放在一起,以便后续模型更换时保持数据可比性。

在处理强化安全性的第0阶段时,首先要明确相关规范:所需输入、成功标志以及部分失败时的处理方式。这样的检查清单能确保后续的代码修改始终符合要求。配置文件应与应用程序代码分开存放,环境配置、密钥存储及功能开关都应集中管理,以便运维人员无需查看全部代码即可进行审计。

强化细节 0/910:测量该记录的耗时、错误类型以及令牌消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。

将强化笔记的第一阶段视为可测量的对象会更为有效。在扩大范围之前,先记录一份最佳处理方案、一个故障案例以及回滚说明。相比复杂的脚本,应优先选择小型且可测试的单元。当某个步骤出现故障时,故障原因应能指向单一责任主体,而非复杂的流程链。

强化细节 1/910:测量该记录的耗时、错误类型以及令牌消耗情况,然后依据固定的问题集而非个人经验来判断是否保留该变更。