LangGraph 实战:构建广告智能投放助手,从单步推理到多智能体闭环

📅 2026/7/6 13:47:49
LangGraph 实战:构建广告智能投放助手,从单步推理到多智能体闭环
LangGraph实战构建广告智能投放助手从单步推理到多智能体闭环摘要本文基于生产环境验证的LangGraph开发实战拆解智能体状态管理、三元记忆架构与多智能体协同的核心技术通过广告智能投放助手全流程落地案例解决传统投放流程繁琐、决策不可控、效果难以闭环的行业痛点。一、核心认知LangGraph重构企业级智能体开发范式当前AI智能体开发普遍存在三大痛点循环控制逻辑混乱、状态管理碎片化、缺乏生产级可控性。传统基于LangChain的链式调用只能处理线性任务无法应对广告投放这类需要多轮推理、工具调用、人类介入与状态持久化的复杂业务场景。基于某广告科技公司3个生产级项目的落地经验我们明确LangGraph不是LangChain的简单升级而是面向复杂智能体的图编排引擎。它通过状态图建模、内置持久化、人类介入与多智能体协同四大核心能力将智能体从玩具级Demo推向生产级应用。#架构真经 #大模型应用1.1 LangGraph vs 传统Agent开发核心差异维度传统链式AgentLangGraph智能体控制流线性执行无法处理复杂循环有向图建模支持条件分支、循环与并行状态管理无统一状态依赖全局变量传递中心化状态对象自动追踪所有节点变更持久化需手动实现会话存储内置持久化层按thread_id隔离多用户状态人类介入无原生支持需硬编码中断逻辑原生支持工具调用前中断、状态编辑与时间回溯多智能体需自定义通信协议与调度逻辑原生支持多节点协作统一状态共享可观测性无统一轨迹追踪全链路状态快照支持历史回溯与调试1.2 LangGraph三大核心设计理念状态即一等公民所有节点共享一个结构化状态对象节点执行结果自动合并到状态中实现数据流转的可追溯性图即控制流将业务流程抽象为节点函数/智能体与边数据流条件边实现分支逻辑循环边实现迭代优化原生生产级能力内置持久化、人类介入、错误重试与并发控制无需额外开发基础设施。二、实战落地广告智能投放助手全流程开发本案例来自真实项目生产环境验证已在某互联网平台广告业务线稳定运行3个月覆盖中小客户自助投放场景投放效率提升70%人工审核量下降60%。2.1 业务需求与流程建模广告智能投放助手需要完成以下核心任务解析用户自然语言投放需求如帮我给新品运动鞋投放1万元预算的抖音信息流广告检索历史投放数据与行业基准生成定向人群、出价策略与创意建议预估投放效果曝光量、点击量、转化率提交人工审核审核通过后自动执行投放实时监控投放效果动态调整策略。将上述流程抽象为LangGraph状态图节点意图识别 → 数据检索 → 策略生成 → 效果预估 → 审核判断 → 执行投放 → 效果监控条件边效果预估不达标 → 返回策略生成节点重新优化审核不通过 → 返回策略生成节点修改审核通过 → 执行投放投放效果异常 → 触发策略调整2.2 核心代码实现步骤1定义状态结构使用TypedDict定义智能体状态包含所有业务所需字段fromtypingimportTypedDict,Annotated,List,Dictfromlanggraph.graphimportStateGraph,ENDfromlanggraph.graph.messageimportadd_messagesclassAdCampaignState(TypedDict):# 用户输入与意图user_query:strintention:Dict[str,str]# 包含product、budget、platform、goal等字段user_id:str# 数据与策略historical_data:List[Dict]industry_benchmark:Dict campaign_strategy:Dict# 包含定向、出价、创意、预算分配effect_estimation:Dict# 包含impressions、clicks、conversions、roi# 审核与执行approval_status:str# pending/approved/rejectedapproval_comments:strcampaign_id:strreal_time_data:Dict# 消息历史messages:Annotated[List,add_messages]步骤2实现核心节点函数fromlangchain_openaiimportChatOpenAIfromlangchain_core.messagesimportSystemMessage,HumanMessage# 初始化大模型llmChatOpenAI(modelgpt-4o,temperature0)defintention_recognition_node(state:AdCampaignState)-AdCampaignState:解析用户投放意图提取产品、预算、平台、目标等关键信息system_prompt 你是广告投放意图识别专家从用户自然语言查询中提取以下结构化信息 - product: 推广产品名称 - budget: 投放预算数字单位如10000元 - platform: 投放平台抖音、快手、微信、小红书等 - goal: 投放目标曝光、点击、转化、加粉等 以JSON格式输出缺失字段填null。 responsellm.invoke([SystemMessage(contentsystem_prompt),HumanMessage(contentstate[user_query])])intentioneval(response.content)# 生产环境需使用JSON Schema校验return{intention:intention}defdata_retrieval_node(state:AdCampaignState)-AdCampaignState:检索历史投放数据与行业基准# 模拟调用数据API生产环境对接大数据平台historical_data[{campaign_id:123,product:运动鞋,platform:抖音,roi:2.3},{campaign_id:456,product:运动鞋,platform:快手,roi:1.8}]industry_benchmark{click_rate:2.5%,conversion_rate:3.2%,avg_cpc:1.2元}return{historical_data:historical_data,industry_benchmark:industry_benchmark}defstrategy_generation_node(state:AdCampaignState)-AdCampaignState:基于数据生成投放策略system_promptf 你是资深广告优化师根据以下信息生成投放策略 用户需求{state[intention]}历史投放数据{state[historical_data]}行业基准{state[industry_benchmark]}策略需包含定向人群年龄、性别、兴趣、出价策略、创意方向、预算分配。 以JSON格式输出。 responsellm.invoke(SystemMessage(contentsystem_prompt))campaign_strategyeval(response.content)return{campaign_strategy:campaign_strategy}defeffect_estimation_node(state:AdCampaignState)-AdCampaignState:预估投放效果# 模拟效果预估模型生产环境对接机器学习模型budgetint(state[intention][budget].replace(元,))cpcfloat(state[industry_benchmark][avg_cpc].replace(元,))clicksint(budget/cpc)impressionsint(clicks/float(state[industry_benchmark][click_rate].replace(%,))*100)conversionsint(clicks*float(state[industry_benchmark][conversion_rate].replace(%,))/100)roi2.5# 模拟ROI预估effect_estimation{impressions:impressions,clicks:clicks,conversions:conversions,roi:roi}return{effect_estimation:effect_estimation}defapproval_check_node(state:AdCampaignState)-str:审核判断节点返回下一步走向ifstate[approval_status]approved:returnexecuteelifstate[approval_status]rejected:returnreviseelse:returnpendingdefexecute_campaign_node(state:AdCampaignState)-AdCampaignState:执行投放返回投放ID# 模拟调用广告平台APIcampaign_idADstr(hash(state[user_query]))[:8]return{campaign_id:campaign_id,messages:[HumanMessage(contentf投放已执行ID{campaign_id})]}步骤3构建与编译状态图# 初始化状态图builderStateGraph(AdCampaignState)# 添加节点builder.add_node(intention_recognition,intention_recognition_node)builder.add_node(data_retrieval,data_retrieval_node)builder.add_node(strategy_generation,strategy_generation_node)builder.add_node(effect_estimation,effect_estimation_node)builder.add_node(execute_campaign,execute_campaign_node)# 添加边builder.add_edge(intention_recognition,data_retrieval)builder.add_edge(data_retrieval,strategy_generation)builder.add_edge(strategy_generation,effect_estimation)# 添加条件边效果预估不达标则重新生成策略builder.add_conditional_edges(effect_estimation,lambdax:retryifx[effect_estimation][roi]2.0elseapprove,{retry:strategy_generation,approve:execute_campaign})# 添加人类介入执行投放前强制中断等待人工审核builder.add_edge(effect_estimation,execute_campaign)builder.set_entry_point(intention_recognition)builder.set_finish_point(execute_campaign)# 编译图启用持久化与人类介入fromlanggraph.checkpoint.memoryimportMemorySaver memoryMemorySaver()graphbuilder.compile(checkpointermemory,interrupt_before[execute_campaign])步骤4运行智能体与人类介入# 配置线程ID用于隔离不同用户会话config{configurable:{thread_id:user_123}}# 初始输入initial_state{user_query:帮我给新品运动鞋投放1万元预算的抖音信息流广告目标是转化,user_id:user_123,approval_status:pending}# 运行智能体直到中断点foreventingraph.stream(initial_state,config):forvalueinevent.values():ifmessagesinvalue:print(助手,value[messages][-1].content)# 查看当前状态等待人工审核current_stategraph.get_state(config)print(当前策略,current_state.values[campaign_strategy])print(效果预估,current_state.values[effect_estimation])# 人工审核通过更新状态并继续执行graph.update_state(config,{approval_status:approved},as_nodeeffect_estimation)# 继续执行剩余流程foreventingraph.stream(None,config):forvalueinevent.values():ifmessagesinvalue:print(助手,value[messages][-1].content)2.3 集成三元记忆架构基于LangGraph的持久化能力集成语义记忆、情景记忆与程序记忆提升智能体的个性化与准确性语义记忆存储用户历史投放偏好、产品信息与行业规则使用向量数据库检索情景记忆存储过往成功的投放案例在策略生成时作为少样本示例注入程序记忆存储投放规则与审核标准通过动态提示词更新实现规则迭代。# 语义记忆工具示例fromlangchain_community.vectorstoresimportChromafromlangchain_openaiimportOpenAIEmbeddings embeddingsOpenAIEmbeddings(modeltext-embedding-3-small)vector_storeChroma(collection_namead_knowledge,embedding_functionembeddings)defsearch_semantic_memory(query:str)-str:检索语义记忆docsvector_store.similarity_search(query,k3)return\n.join([doc.page_contentfordocindocs])# 在策略生成节点中注入语义记忆defstrategy_generation_node_with_memory(state:AdCampaignState)-AdCampaignState:knowledgesearch_semantic_memory(f{state[intention][product]}广告投放规则)system_promptf 参考以下行业知识生成投放策略{knowledge}...其余提示词不变 # 后续逻辑与之前一致三、高级进阶多智能体协同与生产级优化3.1 多智能体协同架构对于复杂的广告投放场景可将单一智能体拆分为多个专业子智能体通过LangGraph实现协同工作数据分析师Agent负责数据检索、清洗与分析策略师Agent负责生成投放策略与创意效果预估Agent负责构建预测模型与效果评估审核员Agent负责初步合规审核过滤明显违规策略。3.2 生产级避坑指南基于3个生产项目的踩坑经验总结五大核心问题与解决方案#避坑实录 #源码级解读核心踩坑点现象描述根因分析生产环境解决方案状态更新错误节点执行结果未正确合并到状态数据丢失未使用Annotatedadd_messages处理列表字段所有列表类型字段必须使用add_messages注解确保追加而非覆盖工具调用失败频繁出现工具参数错误、API超时大模型幻觉导致参数格式错误未做异常处理工具调用前添加JSON Schema校验实现指数退避重试机制超时自动降级记忆污染错误数据写入记忆库导致后续决策错误热路径写入未做校验依赖大模型生成正确参数记忆写入前添加轻量级校验层关键操作日志化后台异步修复错误数据并发性能差多用户同时访问时响应缓慢单线程处理所有请求状态锁竞争使用线程池处理并发请求按thread_id隔离状态实现无锁读写调试困难生产环境问题难以复现与定位缺乏全链路轨迹追踪开启LangSmith追踪记录所有状态快照与节点执行日志支持时间回溯调试四、核心总结LangGraph通过图编排、状态管理与原生生产级能力彻底解决了复杂智能体的落地难题。在广告行业基于LangGraph构建的智能投放助手能够实现从需求解析到效果监控的全流程自动化同时通过人类介入与多智能体协同保障决策的准确性与可控性。未来随着LangGraph生态的不断成熟它将成为企业级AI应用的标准基础设施推动智能体从单一任务助手向复杂业务系统演进。对于技术从业者而言掌握LangGraph的核心设计理念与工程实践将是在AI时代构建核心竞争力的关键。