如何优雅处理电商网站导航中带决策点的动态浏览器自动化
电商浏览器操作决策优化方案
核心思路
放弃单步触发的状态机和独立Agent模式,改用操作单元封装+LLM驱动的状态判断,将每个业务操作(如搜索、加入购物车)封装为原子操作单元,内置操作完成的判定逻辑,再通过统一的LLM状态管理器做路径决策。
具体实现步骤
1. 原子操作单元封装
将每个业务动作封装为独立的操作单元,每个单元包含三个核心部分:
- 执行逻辑:调用
browser_use完成具体操作(比如输入关键词、点击搜索按钮) - 完成判定:通过LLM分析页面内容(而非硬编码HTML元素)判断操作是否完成,例如搜索操作的完成标准是“页面显示与目标关键词相关的商品列表”
- 结果提取:提取操作后的关键业务信息(比如商品列表名称、购物车商品数量)
示例代码:
class SearchUnit: def __init__(self, browser_instance, llm_instance): self.browser = browser_instance self.llm = llm_instance def run(self, keyword): # 执行搜索操作 self.browser.use("输入关键词并触发搜索", {"keyword": keyword}) # 获取页面内容摘要(而非全量HTML) page_summary = self.browser.get_page_content_summary() # 调用LLM判断操作是否完成 completion_check = self.llm.query(f"请判断当前页面是否是'{keyword}'的有效搜索结果页?仅回复'是'或'否'。页面摘要:{page_summary}") if completion_check == "是": # 提取关键结果 item_list = self.llm.query(f"提取当前页面的商品名称列表,用逗号分隔。页面摘要:{page_summary}") return {"status": "success", "data": item_list} else: return {"status": "failed", "reason": "未加载出有效搜索结果"}
2. 全局状态管理器
用一个全局状态管理器维护操作全流程的状态信息,每次原子操作完成后,由它调用LLM做下一步决策:
- 存储内容:当前操作阶段(如「搜索阶段」「商品详情页阶段」「购物车阶段」)、历史操作结果(如搜索到的商品列表、已加入购物车的商品)
- 决策逻辑:基于预设的业务规则(比如“若搜索结果不相关则重新搜索,否则选择第一个商品进入详情页”)和当前状态,让LLM输出明确的下一步操作指令
3. LLM调用效率优化
- 复用实例:全程使用同一个LLM实例,避免每步新建Agent带来的资源开销
- 精简输入:只传入页面关键摘要给LLM,减少token消耗和响应时间
- 固定模板:针对操作完成判定、路径决策等不同场景使用预设prompt模板,提升LLM输出的准确性和一致性
方案优势
- 多站点适配:无需硬编码DOM元素定位规则,依赖LLM分析页面内容,自动适配不同电商网站的页面结构
- 避免误触发:原子操作单元内置完成判定逻辑,只有当操作真正完成后才会触发下一步决策,解决了
on_step_end在操作拆分时的误触发问题 - 架构清晰:原子操作单元负责执行和结果判定,状态管理器负责路径决策,职责分离,便于维护和扩展
- 性能提升:复用LLM实例、精简输入内容,有效解决原方案运行缓慢的问题
内容的提问来源于stack exchange,提问作者Rauf Aliev
相关产品推荐
相关产品推荐

