作者:Maris5188

(兼顾技术深度与产品视角,既讲代码实现,更讲落地价值——解决电商搜索“搜不准、不会改、记不住”的核心痛点,直接复用可落地的完整架构方案)

前言:从关键词匹配智能导购,电商搜索的进化必经之路

当用户说“帮我找件适合春天穿的连衣裙”,传统电商搜索只能机械匹配“春天”“连衣裙”两个关键词,返回一堆杂乱无章的商品;而一个真正能落地、能创造价值的购物AI Agent,应该像线下资深导购一样——能读懂模糊需求、能主动调整搜索思路、能记住用户偏好、能从海量商品中精准挑出最优解。

随着AI Agent技术的爆发,LangGraph、CrewAI等开源框架逐渐成为企业落地智能Agent的核心工具,其中LangGraph凭借显式状态管理、原生循环分支支持的优势,成为工程化落地的首选框架之一。本文基于我们在灵机一物智能电商代理协作平台的实战经验,拆解用LangGraph构建“自主进化购物Agent”的完整产品化方案,重点讲解核心的「搜索反馈回路」设计,从架构设计、节点实现、性能优化到生产落地,全程干货可复用,帮你快速避开坑点、落地可用。

一、产品痛点:传统电商搜索的4大核心瓶颈(直接决定用户留存)

做电商技术的都懂:搜索转化率直接影响GMV,而传统搜索的“笨”,本质是无法弥合“用户自然语言意图”与“结构化搜索逻辑”的鸿沟。我们梳理了生产环境中最常见的4类痛点,也是用户流失的重灾区:

用户真实输入

背后核心需求

传统搜索痛点

产品化影响

“年货”

坚果、糖果、礼盒等具体品类,需多样化选择

关键词“年货”太泛,命中率极低

用户找不到心仪商品,直接退出

“除了肉之外的礼盒”

排除肉类,需要其他品类礼盒(坚果、茶叶等)

无法处理否定语义,仍会推荐肉类礼盒

用户觉得“不智能”,体验打折

“送女朋友的礼物”

结合用户偏好(如之前买过美妆),推荐适配女生的商品

无用户记忆,推荐千篇一律

推荐精准度低,转化率上不去

“上次买的那种外套”

检索历史购买记录,匹配相似款式

无历史记忆能力,无法关联过往行为

回头客体验差,复购率受影响

核心结论:用户要的不是“搜索”,而是“精准找到想要的商品”。我们的解决方案是:用LangGraph构建具备自主决策能力的购物Agent,通过「搜索反馈回路」,让Agent实现“理解→搜索→评估→改进→记忆”的闭环,彻底解决上述痛点。

二、产品化架构:7节点状态机,让Agent“自主思考(可直接复用)

不同于简单的Chain链路或隐式决策的ReAct Agent,我们基于LangGraph的StateGraph,设计了一套“可观测、可控制、可复用”的7节点状态机架构,核心是「evaluate→improve→search」的搜索反馈闭环——让Agent搜不到合适结果时,自动换思路再搜,而非直接返回“无结果”,这也是区别于传统搜索的核心竞争力。

2.1 架构总览(产品化视角,而非纯技术堆砌)

整个架构围绕“用户需求”展开,每个节点都承担明确的产品功能,确保工程落地后能直接服务于“提升搜索转化率、优化用户体验”的核心目标,架构流程图如下(可直接用于项目文档):

plain text
┌─────────────────────────────────────────────────────────────────────┐
│                   
购物Agent搜索反馈回路(产品化版)                 │
│                                                                     │
│   START → 记忆检索 → 查询理解 → 执行搜索 → 质量评估 → 条件路由       │
│                                  │                                  │
│                   (改进查询)← |        |→ 精选商品 → 记忆记录 → END
│                                                                     │
└─────────────────────────────────────────────────────────────────────┘

核心设计:7个功能节点+1个条件路由,最多迭代3次,既保证搜索精度,又避免无限循环导致的响应超时(用户可接受的延迟阈值内)。

2.2 核心代码实现(可直接复制落地)

基于LangGraph的StateGraph,我们封装了可复用的工作流函数,无需从零搭建,只需根据自身电商场景调整参数即可:

python
from langgraph.graph import StateGraph, START, END

# 1.
定义状态(Agent的“工作记忆”,产品化核心:所有信息可追溯、可扩展)
class SearchFeedbackState(TypedDict):
    # 输入层(用户相关)
    user_query: str          # 用户原始需求
    user_id: str             # 关联用户,用于记忆绑定
    language: str            # 语言标识,适配多语言场景
   
    # 理解层(意图结构化)
    query_understanding: Optional[QueryUnderstanding]  # 结构化意图结果
    current_keyword: str     # 当前搜索关键词
   
    # 搜索层(迭代核心)
    search_results: list[dict]       # 当前轮搜索结果
    best_results: list[dict]        # 历史最佳结果(不降级)
    best_quality_score: float       # 历史最高质量分
    search_history: Annotated[list, add]  # 搜索历史(自动追加)
    iteration_count: int            # 迭代轮次(≤3)
    search_cache: dict[str, list]   # 关键词缓存,避免重复查询
   
    # 记忆层(个性化核心)
    long_term_memory: str           # 用户偏好摘要
    memory_preferences: list[str]   # 具体偏好列表
   
    # 输出层(用户可见)
    selected_products: list[dict]   # 精选商品列表
    natural_message: str            # 自然语言推荐话术

# 2. 构建工作流(产品化设计:流程可配置、节点可替换)
def build_search_workflow() -> StateGraph:
    workflow = StateGraph(SearchFeedbackState)

    # 注册7个核心节点(每个节点对应一个产品功能)
    workflow.add_node("memory_retrieval", memory_retrieval_node)  # 记忆检索
    workflow.add_node("query_understanding", query_understanding_node)  # 意图理解
    workflow.add_node("search", search_node)  # 执行搜索
    workflow.add_node("evaluate", evaluate_node)  # 质量评估
    workflow.add_node("improve", query_improve_node)  # 查询改进
    workflow.add_node("select", selection_node)  # 商品精选
    workflow.add_node("memory_record", memory_record_node)  # 记忆记录

    # 线性流程(确保用户体验流畅)
    workflow.add_edge(START, "memory_retrieval")
    workflow.add_edge("memory_retrieval", "query_understanding")
    workflow.add_edge("query_understanding", "search")
    workflow.add_edge("search", "evaluate")

    # 核心:条件路由(Agent自主决策的关键,产品化核心逻辑)
    workflow.add_conditional_edges(
        "evaluate",
        should_continue_search,  # 路由判断函数
        {"improve": "improve", "select": "select", END: END}
    )

    # 反馈闭环(改进后重新搜索,形成自主进化)
    workflow.add_edge("improve", "search")
    workflow.add_edge("select", "memory_record")
    workflow.add_edge("memory_record", END)

    return workflow

三、节点产品化拆解:每个环节都要落地可用(避坑重点)

很多技术方案停留在“demo级别”,无法生产落地,核心原因是忽略了“产品体验”和“工程性能”。我们对每个节点做了产品化优化,既保证技术可行性,又兼顾用户体验和系统稳定性,以下是重点节点拆解(附避坑指南)。

3.1 记忆检索节点(memory_retrieval_node):让Agent“认识回头客

产品目标:无需用户重复说明偏好,Agent能自动关联历史购物行为,实现个性化推荐——这是提升复购率的关键。

python
async def memory_retrieval_node(state):
    user_id = state.get("user_id", "")

    #
产品化优化1:300ms硬超时(记忆是加分项,不能拖慢搜索体验)
    try:
        memory_result = await asyncio.wait_for(
            search_memory_safe(
                query=state["user_query"],
                user_id=user_id,
                limit=3,  # 只取3条核心偏好,避免信息过载
                scope="shopping"  # 作用域隔离,不混入无关记忆
            ),
            timeout=0.3
        )
    except asyncio.TimeoutError:
        # 产品化优化2:超时降级,不影响主流程
        return {"long_term_memory": "", "memory_preferences": []}

    return {
        "long_term_memory": memory_result["summary"],
        "memory_preferences": memory_result.get("memories", [])[:3]
    }

避坑重点:记忆检索是“锦上添花”,不是“核心依赖”,必须做超时降级和幂等设计,避免因记忆服务异常导致整个搜索流程挂掉——这是生产落地的关键细节。

3.2 查询理解节点(query_understanding_node):一次LLM调用,解决意图结构化

产品目标:把用户模糊的自然语言,转化为搜索引擎能识别的结构化意图,同时避免LLM幻觉(生成商城不存在的品类),提升搜索精准度。

核心优化:摒弃传统“多次LLM调用”的方案,一次调用完成“核心关键词提取+备选关键词生成+否定意图检测”,将延迟从2s降至0.7s,提升用户体验。

python
async def query_understanding_node(state):
    #
产品化优化:传入真实品类,避免LLM幻觉
    available_categories = await get_available_categories(max_categories=30)

    # 一次LLM调用,输出完整结构化意图
    understanding = unified_query_understanding(
        user_query=state["user_query"],
        available_categories=available_categories,  # 锚定真实数据
        long_term_memory=state.get("long_term_memory", ""),  # 结合用户记忆
        conversation_history=state.get("conversation_history", "")
    )

    # 合并关键词,用于多关键词批量搜索(提升命中率)
    all_keywords = [understanding["primary_keyword"]] + understanding["alternative_keywords"]

    return {
        "query_understanding": understanding,
        "current_keyword": " ".join(all_keywords),
        "is_multi_keyword": True
    }

落地效果示例(用户可感知的“智能”):

用户输入

核心关键词

备选关键词

排除词

用户感知

“年货”

坚果

零食、礼盒、糖果、茶叶

 Agent自动推荐多种年货品类,不用用户再细化

“除了肉的礼盒”

坚果礼盒

茶叶礼盒、零食礼盒、水果礼盒

肉、生鲜、海鲜

自动排除不想要的品类,精准匹配需求

3.3 搜索节点(search_node):三层分词策略,兼顾精准与召回

产品目标:基于结构化意图,用Elasticsearch实现“多关键词、多维度”搜索,既保证精准度,又避免漏搜——核心是“让合适的商品优先展示”。

我们设计了三层分词策略,适配不同搜索场景,彻底解决“搜得到、搜得准”的问题:

分词策略

作用

产品价值

示例

ik_smart + AND

精确匹配所有关键词,不遗漏核心信息

避免“关键词部分匹配”导致的不相关结果

“红色连衣裙” → 必须同时包含“红色”和“连衣裙”

phrase短语匹配

匹配连续词序,保证语义连贯

避免“词序颠倒”导致的误解

作者:Maris5188

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐