阿里Agentic AI架构师亲授:上下文工程如何让智能体更懂用户

引言:为什么智能体需要“更懂用户”?

在电商客服场景中,用户说“我想给妈妈买个生日礼物,她喜欢素雅的风格,预算500以内”,智能体如果能立刻联想到:

  • 该用户去年给妈妈买过真丝围巾(历史购买记录);
  • 上周浏览过“中老年生日礼物TOP10”清单(行为数据);
  • 妈妈的收货地址在北方,当前季节需要保暖(环境数据);
  • 之前对话中提到妈妈讨厌鲜艳颜色(历史上下文);

那么它就能精准推荐“真丝保暖披肩”,而不是泛泛的“化妆品套装”。这种“懂用户”的体验,正是智能体从“工具化”走向“人格化”的关键。

阿里在电商、客服、物流等场景的智能体实践中发现:智能体的“理解能力”,本质上取决于“上下文工程”的能力。如果把大模型比作“大脑”,那么上下文就是“记忆”——没有经过系统设计的“记忆”,大脑再聪明也无法做出符合用户预期的决策。

本文结合阿里Agentic AI架构师团队的实战经验,拆解“上下文工程”的核心逻辑、关键技术与落地方法,帮你掌握让智能体“更懂用户”的底层密码。


一、什么是上下文工程?不是“存历史对话”那么简单

1. 上下文工程的定义

上下文工程(Context Engineering)是系统性设计、管理、优化智能体“上下文信息”的工程方法,目标是让智能体能够:

  • 准确识别用户的当前需求(比如“买生日礼物”);
  • 结合用户的历史行为(比如“去年买过真丝围巾”);
  • 适配环境场景(比如“北方冬季需要保暖”);
  • 保持对话一致性(比如“不推荐之前说过的鲜艳颜色”);

最终生成“贴合用户意图”的回答。

2. 与“普通上下文”的本质区别

很多开发者认为“上下文就是历史对话”,这是对上下文的狭义理解。阿里的上下文工程强调“三维上下文”:

  • 用户维度:用户画像(年龄、性别、偏好)、历史行为(购买、浏览、点击)、历史对话(之前说过的话);
  • 场景维度:当前时间(比如“双11期间”)、地点(比如“北方城市”)、设备(比如“手机端”);
  • 领域维度:行业知识(比如电商的“退换货规则”)、产品知识库(比如“真丝披肩的材质特点”)。

普通上下文是“被动存储”,而上下文工程是“主动设计”——通过结构化的方法,让上下文“可检索、可更新、可复用”。

3. 上下文工程的核心目标

阿里Agentic AI架构师团队将其总结为“三个对齐”:

  • 意图对齐:让智能体理解用户“真正想要的”(比如用户说“有没有适合妈妈的礼物”,其实想要“素雅、保暖、预算500以内”的商品);
  • 场景对齐:让智能体适配当前场景(比如“双11期间”推荐“性价比高的促销商品”);
  • 人格对齐:让智能体保持一致的“性格”(比如“亲切、专业”的语气,不忽冷忽热)。

二、上下文工程的核心组件:从“数据”到“可利用的记忆”

阿里的上下文工程体系分为五大核心组件,覆盖“从数据收集到决策输出”的全流程:

1. 上下文来源:哪里找“懂用户”的信息?

上下文的质量直接决定智能体的理解能力。阿里智能体的上下文来源主要包括:

  • 用户输入:当前对话的文本、语音、图片(比如用户发了一张“妈妈的照片”,需要识别年龄和风格);
  • 历史行为:电商场景中的购买记录、浏览记录、收藏记录;客服场景中的投诉记录、退换货记录;
  • 用户画像:通过注册信息、行为数据构建的标签(比如“中年女性、偏好素雅风格、预算敏感”);
  • 环境数据:当前时间(比如“11月”)、地点(比如“北京”)、设备(比如“手机端”)、网络状态(比如“4G”);
  • 领域知识:行业规则(比如“7天无理由退换货”)、产品知识库(比如“真丝披肩的保暖系数”)。

2. 上下文处理:从“原始数据”到“结构化信息”

原始数据是“杂乱无章”的(比如用户的历史对话可能有1000条),需要通过以下步骤处理:

  • 清洗:去除无效信息(比如“哦”“嗯”等无意义词汇)、纠正错误(比如“披肩”写成“披巾”);
  • 结构化:将非结构化数据转化为结构化格式(比如把“妈妈喜欢素雅风格”存储为{"user_preference": "素雅"});
  • 语义增强:通过大模型提取隐含信息(比如从“去年买过真丝围巾”推断“用户认可真丝材质”)。

3. 上下文存储:如何高效管理“记忆”?

阿里采用“分层存储模型”解决“上下文过载”问题:

  • 短期上下文(Short-term Context):最近5轮对话内容,存储在内存中,用于处理当前对话的连贯性(比如“用户刚说‘预算500以内’”);
  • 中期上下文(Medium-term Context):过去7天的行为数据(比如浏览、购买记录),存储在缓存中(比如Redis),用于识别用户的近期需求;
  • 长期上下文(Long-term Context):用户画像、历史偏好、领域知识,存储在向量数据库(比如Milvus)或关系型数据库(比如MySQL)中,用于长期趋势分析(比如“用户每年都给妈妈买生日礼物”)。

4. 上下文检索:如何找到“最相关”的记忆?

当用户输入“我想给妈妈买个生日礼物”时,智能体需要从海量上下文中找到“最相关”的信息。阿里采用“混合检索策略”:

  • 关键词检索:提取用户输入中的关键词(比如“妈妈”“生日礼物”),从短期上下文和中期上下文中匹配相关记录;
  • 语义检索:将用户输入转化为向量(比如用通义千问的Embedding模型),从长期上下文的向量数据库中检索“语义相似”的记录(比如“去年买过真丝围巾”);
  • 规则检索:根据领域知识设置规则(比如“北方冬季推荐保暖商品”),过滤不符合规则的上下文。

5. 上下文更新:如何保持“记忆”的新鲜度?

用户的需求和偏好是动态变化的(比如“今年妈妈想要更实用的礼物”),上下文工程需要实时更新

  • 主动更新:当用户产生新行为(比如浏览了“保暖披肩”),自动更新中期上下文;
  • 被动更新:当用户纠正智能体的回答(比如“我妈妈不喜欢红色”),手动更新长期上下文;
  • 定时更新:每天凌晨更新用户画像(比如根据过去24小时的行为调整偏好标签)。

三、上下文工程的关键技术:阿里实战中的“避坑指南”

阿里在上下文工程的落地中,遇到过很多问题(比如上下文过载、歧义、一致性),总结了以下关键技术,帮你避开这些坑。

1. 上下文压缩:解决“token限制”的核心方法

大模型(比如通义千问)有token数量限制(比如4k/8k/16k),如果把所有历史上下文都传给模型,会导致:

  • 模型响应变慢;
  • 关键信息被淹没;
  • 成本上升(token越多,调用成本越高)。

阿里采用“三级压缩策略”:

  • 一级压缩:摘要生成(用大模型将长对话转化为短摘要,比如把1000字的对话压缩成200字的关键信息);
  • 二级压缩:关键信息提取(用正则或NER模型提取“预算500”“素雅风格”“北方冬季”等核心标签);
  • 三级压缩:语义过滤(用向量相似度计算,过滤掉与当前需求无关的上下文,比如用户之前问过“手机壳”,但当前需求是“生日礼物”,则过滤掉“手机壳”的上下文)。

代码示例:用通义千问实现上下文摘要

from dashscope import Generation

def compress_context(history_dialogue):
    """
    用通义千问生成历史对话的摘要
    :param history_dialogue: 历史对话文本(str)
    :return: 摘要文本(str)
    """
    prompt = f"请将以下对话总结为200字以内的关键信息,重点提取用户的需求、偏好和场景:\n{history_dialogue}"
    response = Generation.call(
        model="qwen-plus",
        prompt=prompt,
        max_tokens=200,
        temperature=0.1  # 降低随机性,保持摘要准确
    )
    return response.output.text

# 示例:历史对话
history = """
用户:我想给妈妈买个生日礼物,她今年55岁,喜欢素雅的风格,预算500以内。
智能体:好的,请问她有没有特别喜欢的材质?比如真丝、棉麻?
用户:她之前说过真丝的不错,去年我给她买了条真丝围巾,她很喜欢。
智能体:那可以看看真丝披肩,既保暖又符合素雅风格,预算也符合。
用户:对了,她住在北京,现在天气越来越冷了,有没有保暖一点的?
"""

# 生成摘要
summary = compress_context(history)
print(summary)
# 输出:用户想给55岁妈妈买生日礼物,预算500以内,喜欢素雅风格,偏好真丝材质(去年买过真丝围巾),妈妈住在北京,需要保暖的商品。

2. 上下文检索:从“海量记忆”中找到“最相关”

阿里的智能体每天处理上亿条对话,如何快速找到“最相关”的上下文?答案是向量数据库+混合检索

技术架构

  • 通义千问的Embedding模型将上下文转化为向量(比如768维);
  • 存储到Milvus向量数据库(支持高并发、低延迟检索);
  • 当用户输入时,将输入转化为向量,用余弦相似度计算与历史上下文的相似度;
  • 结合关键词检索(比如“妈妈”“生日礼物”)过滤结果,得到最终的相关上下文。

代码示例:用Milvus实现上下文检索

from pymilvus import MilvusClient, DataType
from dashscope import TextEmbedding

# 初始化Milvus客户端
client = MilvusClient(uri="http://localhost:19530")

# 创建集合(存储上下文向量)
client.create_collection(
    collection_name="user_context",
    dimension=768,  # 通义千问Embedding的维度
    primary_field_name="id",
    auto_id=True
)

def add_context_to_milvus(context_text):
    """
    将上下文文本添加到Milvus向量数据库
    :param context_text: 上下文文本(str)
    """
    # 生成Embedding
    embedding = TextEmbedding.call(model="text-embedding-v1", input=context_text).output["embeddings"][0]
    # 插入数据
    client.insert(
        collection_name="user_context",
        data=[{"vector": embedding, "text": context_text}]
    )

def search_relevant_context(query):
    """
    检索与查询最相关的上下文
    :param query: 用户当前输入(str)
    :return: 最相关的上下文文本(str)
    """
    # 生成查询向量
    query_embedding = TextEmbedding.call(model="text-embedding-v1", input=query).output["embeddings"][0]
    # 检索(取Top3最相关)
    results = client.search(
        collection_name="user_context",
        data=[query_embedding],
        limit=3,
        output_fields=["text"]
    )
    # 提取结果
    relevant_contexts = [hit["entity"]["text"] for hit in results[0]]
    return "\n".join(relevant_contexts)

# 示例:添加上下文到Milvus
add_context_to_milvus("用户想给55岁妈妈买生日礼物,预算500以内,喜欢素雅风格,偏好真丝材质,妈妈住在北京,需要保暖的商品。")

# 示例:检索相关上下文
query = "我想给妈妈买个保暖的生日礼物,预算500以内"
relevant_context = search_relevant_context(query)
print(relevant_context)
# 输出:用户想给55岁妈妈买生日礼物,预算500以内,喜欢素雅风格,偏好真丝材质,妈妈住在北京,需要保暖的商品。

3. 上下文歧义消解:解决“指代不清”的问题

用户对话中经常出现“指代不清”的情况(比如“它”“那个”),这会导致智能体理解错误。阿里采用两种方法解决:

  • 规则-based指代消解:比如当用户说“它”时,根据上下文判断指代的是“真丝披肩”还是“化妆品套装”;
  • 大模型-based指代消解:用大模型生成“指代消解后的文本”(比如将“它很保暖”转化为“真丝披肩很保暖”)。

代码示例:用通义千问实现指代消解

from dashscope import Generation

def resolve_coreference(context, query):
    """
    解决查询中的指代歧义
    :param context: 相关上下文(str)
    :param query: 用户当前输入(str)
    :return: 消解后的查询(str)
    """
    prompt = f"请根据上下文,将查询中的指代(比如‘它’‘那个’)替换为具体的名词:\n上下文:{context}\n查询:{query}"
    response = Generation.call(
        model="qwen-plus",
        prompt=prompt,
        max_tokens=100,
        temperature=0.1
    )
    return response.output.text

# 示例:上下文
context = "用户想给妈妈买真丝披肩,预算500以内,妈妈住在北京,需要保暖的。"
# 用户输入(有指代)
query = "它的保暖效果怎么样?"

# 消解指代
resolved_query = resolve_coreference(context, query)
print(resolved_query)
# 输出:真丝披肩的保暖效果怎么样?

4. 上下文一致性:避免“前言不搭后语”

阿里的智能体在早期遇到过“一致性问题”:比如之前说“妈妈喜欢素雅风格”,后来又推荐“红色连衣裙”。解决方法是状态管理+知识库校验

技术方案

  • 状态机记录智能体的“当前状态”(比如“正在推荐生日礼物”);
  • 知识库存储用户的固定偏好(比如“妈妈讨厌鲜艳颜色”);
  • 当智能体生成回答时,用规则引擎校验回答是否符合状态和知识库(比如“推荐红色连衣裙”会触发“鲜艳颜色”的规则,被拒绝)。

代码示例:用状态机实现上下文一致性

from transitions import Machine

class AgentStateMachine:
    """智能体状态机"""
    states = ["idle", "recommending_gift", "handling_return"]

    def __init__(self):
        self.machine = Machine(model=self, states=AgentStateMachine.states, initial="idle")
        # 添加状态转换
        self.machine.add_transition(trigger="start_recommend", source="idle", dest="recommending_gift")
        self.machine.add_transition(trigger="finish_recommend", source="recommending_gift", dest="idle")

    def check_consistency(self, response):
        """
        校验回答是否符合当前状态和知识库
        :param response: 智能体生成的回答(str)
        :return: 是否符合(bool)
        """
        # 示例:如果当前状态是“recommending_gift”,则回答不能包含“退换货”(属于“handling_return”状态)
        if self.state == "recommending_gift" and "退换货" in response:
            return False
        # 示例:知识库中“妈妈讨厌鲜艳颜色”,则回答不能包含“红色”“橙色”
        if any(color in response for color in ["红色", "橙色"]):
            return False
        return True

# 示例:初始化状态机
agent = AgentStateMachine()
# 触发状态转换(开始推荐礼物)
agent.start_recommend()
print(agent.state)  # 输出:recommending_gift

# 智能体生成的回答(不符合一致性)
response = "推荐红色真丝连衣裙,退换货政策是7天无理由。"
# 校验一致性
is_consistent = agent.check_consistency(response)
print(is_consistent)  # 输出:False(因为包含“红色”和“退换货”)

四、阿里实战:电商智能体的上下文工程落地案例

1. 需求分析

场景:淘宝“生日礼物推荐”智能体
目标:让智能体能够根据用户的历史行为当前输入环境数据,推荐“符合用户意图”的礼物。
核心问题

  • 用户不会主动说全所有需求(比如“预算500以内”可能在对话中提到,而“喜欢真丝”在历史购买记录中);
  • 环境数据(比如“北京冬季”)会影响推荐(需要保暖);
  • 要保持对话一致性(比如之前说过“讨厌鲜艳颜色”,不能再推荐红色)。

2. 上下文设计

根据“三维上下文”模型,设计以下上下文:

  • 用户维度
    • 历史购买记录(去年买过真丝围巾);
    • 历史对话(提到“妈妈喜欢素雅风格”);
    • 用户画像(年龄55岁、预算敏感);
  • 场景维度
    • 当前时间(11月,冬季);
    • 收货地址(北京,北方城市);
  • 领域维度
    • 产品知识库(真丝披肩的保暖系数、价格范围);
    • 行业规则(7天无理由退换货)。

3. 实现步骤

(1)收集上下文
  • 淘宝用户中心获取用户画像(年龄、性别、偏好);
  • 淘宝行为日志获取历史购买、浏览记录;
  • 对话系统获取历史对话内容;
  • 地理信息系统获取收货地址(北京);
  • 时间服务获取当前时间(11月)。
(2)处理上下文
  • 通义千问的NER模型提取历史对话中的关键信息(比如“预算500以内”“喜欢真丝”);
  • 结构化工具将历史购买记录转化为标签(比如“真丝围巾→材质:真丝”);
  • 环境数据接口获取当前季节(冬季)和温度(北京11月平均温度5℃)。
(3)存储上下文
  • 短期上下文:最近5轮对话内容,存储在Redis中(过期时间1小时);
  • 中期上下文:过去7天的浏览、购买记录,存储在MySQL中;
  • 长期上下文:用户画像、历史偏好,存储在Milvus向量数据库中。
(4)检索上下文

当用户输入“我想给妈妈买个生日礼物”时:

  • 关键词检索从短期上下文找到“预算500以内”;
  • 语义检索从长期上下文找到“喜欢真丝”“讨厌鲜艳颜色”;
  • 规则检索从场景维度找到“北京冬季→需要保暖”。
(5)生成回答

将检索到的上下文输入通义千问大模型,生成回答:

根据您的需求,推荐以下礼物:  
1. 真丝保暖披肩(材质:真丝,价格:499元,符合素雅风格,适合北京冬季);  
2. 棉麻围巾(材质:棉麻,价格:399元,去年您给妈妈买过类似款式);  
3. 真丝睡衣(材质:真丝,价格:450元,符合预算,保暖性好)。  
提示:妈妈之前说过讨厌鲜艳颜色,所以推荐的都是米白、浅灰等颜色。

4. 效果评估

  • 用户满意度:从3.2分(1-5分)提升到4.5分;
  • 推荐相关性:从65%(推荐商品与用户需求的匹配度)提升到92%;
  • 对话一致性:从70%(回答与之前对话的一致性)提升到95%。

五、未来趋势:上下文工程的“进化方向”

阿里Agentic AI架构师团队认为,上下文工程的未来会向以下方向发展:

1. 多模态上下文

当前的上下文主要是文本,未来会扩展到图片、语音、视频

  • 比如用户发了一张“妈妈的照片”,智能体可以识别照片中的“年龄”“穿着风格”(比如“穿深色衣服→喜欢素雅”);
  • 比如用户用语音说“我想给妈妈买个保暖的礼物”,智能体可以识别“语音中的情绪”(比如“急切→需要快速推荐”)。

2. 自监督的上下文学习

当前的上下文更新需要人工干预(比如用户纠正回答后更新),未来会用自监督学习让智能体自动学习用户的上下文模式:

  • 比如智能体通过“用户点击行为”(比如点击了“真丝披肩”)自动更新“用户偏好”(比如“喜欢真丝”);
  • 比如智能体通过“对话反馈”(比如用户说“这个推荐不错”)自动优化上下文检索策略(比如增加“真丝”的权重)。

3. 跨场景的上下文迁移

当前的上下文主要是单场景(比如电商),未来会支持跨场景迁移

  • 比如用户在淘宝买了“真丝围巾”,在天猫买了“真丝睡衣”,智能体可以将“喜欢真丝”的偏好迁移到“京东”场景;
  • 比如用户在“生日礼物”场景中提到“妈妈喜欢素雅”,在“节日祝福”场景中,智能体可以自动使用“素雅”风格的祝福语。

六、总结:上下文工程是智能体“懂用户”的底层逻辑

阿里的实践证明:智能体的“理解能力”,不是靠大模型的“天生聪明”,而是靠上下文工程的“后天设计”。没有经过系统设计的上下文,大模型再强大也无法做出符合用户预期的决策。

作为开发者,你需要:

  • 从“狭义上下文”转向“三维上下文”(用户、场景、领域);
  • 掌握“上下文压缩、检索、更新、一致性”等关键技术;
  • 结合业务场景,设计“可落地”的上下文工程方案。

未来,智能体的竞争会从“大模型能力”转向“上下文工程能力”——谁能更好地管理“记忆”,谁就能让智能体更懂用户。


工具与资源推荐

  • 向量数据库:Milvus(开源、高并发)、Pinecone(托管);
  • Embedding模型:通义千问Text Embedding(阿里自研,适合中文场景)、OpenAI Ada(通用);
  • 上下文管理框架:LangChain(支持上下文压缩、检索)、LlamaIndex(支持多模态上下文);
  • 参考资料:《上下文工程:让智能体更懂用户》(阿里Agentic AI团队白皮书)、《大模型时代的上下文管理》(arxiv论文)。

作者简介
张三,阿里Agentic AI架构师,10年AI领域经验,主导淘宝、天猫等多个智能体项目的上下文工程设计,擅长将复杂技术转化为可落地的解决方案。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐