Agentic AI上下文工程实战:实体识别的核心技术与提示工程密码

关键词

Agentic AI、上下文工程、实体识别、提示工程、大语言模型(LLM)、知识图谱、意图理解

摘要

当我们谈论Agentic AI(具身智能/自主代理AI)时,最核心的问题从来不是“它能做什么”,而是“它能理解什么”——毕竟,一个无法准确理解上下文的自主代理,和只会机械执行指令的“工具人”没有本质区别。而实体识别,正是Agentic AI理解上下文的“第一块拼图”:它像一把“信息手术刀”,从用户的输入(文本、语音、图像)中精准提取出关键元素(比如“华为Mate 60 Pro”“订单号123456”“充电慢”),为Agent的决策提供最基础的“事实依据”。

但Agentic AI的实体识别,和传统NLP的实体识别有着天壤之别:它需要处理动态上下文(多轮对话中的信息关联)、开放域实体(未预定义的新类型)、歧义消解(“苹果”是水果还是公司?)——这些挑战,传统的CRF、BERT模型已经难以应对。此时,提示工程成为了破局的关键:它不是“调参”,而是“教Agent如何思考”——通过设计精准的提示词,让LLM学会在动态场景中识别实体,甚至自主扩展实体类型。

本文将从提示工程架构师的视角,拆解Agentic AI上下文工程中实体识别的核心逻辑:

  • 为什么实体识别是Agentic AI的“地基”?
  • 传统实体识别为何无法适配Agentic AI?
  • 提示工程如何让LLM成为“实体识别专家”?
  • 实战中如何解决实体识别的三大痛点(歧义、动态、多模态)?

一、背景:Agentic AI的“理解危机”与实体识别的价值

1.1 从“工具AI”到“Agentic AI”:理解上下文是本质区别

我们先做个类比:

  • 传统AI(比如ChatGPT的基础版)像“餐厅里的传菜员”:你点什么,它传什么,不需要理解“你为什么点这个”(比如你说“要一份番茄鸡蛋面”,它不会问“你是素食主义者吗?”);
  • Agentic AI像“餐厅里的资深服务员”:它会听出你话里的“弦外之音”——比如你说“最近减肥,要个清淡的”,它会主动推荐“蔬菜沙拉”,甚至提醒“我们的沙拉酱是低卡的”。

这种“理解能力”的核心,是Agentic AI拥有上下文工程系统:它能将用户的输入(文本、语音、行为)转化为结构化的“上下文信息”,并基于这些信息做决策。而实体识别,就是上下文工程的“第一步”——如果连“用户要的是番茄鸡蛋面”都识别错了,后续的推荐和服务根本无从谈起。

1.2 实体识别:Agentic AI的“信息拼图游戏”

假设你是一个智能客服Agent,用户发来一条消息:

“我昨天买的华为Mate 60 Pro充电很慢,订单号是123456,帮我解决一下。”

你需要从这条消息中提取哪些信息?

  • 产品实体:华为Mate 60 Pro(核心服务对象);
  • 问题实体:充电很慢(需要解决的核心矛盾);
  • 订单号实体:123456(关联用户的购买记录)。

这些实体,就是Agent理解用户需求的“拼图块”:只有把这些拼图正确拼在一起,Agent才能生成准确的决策(比如“查询订单123456的购买记录→确认华为Mate 60 Pro的保修政策→推荐充电慢的排查步骤”)。

如果实体识别错误,会发生什么?

  • 把“华为Mate 60 Pro”识别成“华为手机”:Agent可能推荐通用的充电问题解决方案,而忽略Mate 60 Pro的特定硬件特性;
  • 漏识别“订单号123456”:Agent需要反复追问用户订单号,降低服务效率;
  • 把“充电很慢”识别成“电池损坏”:Agent可能直接引导用户寄修,而实际上用户的问题可能只是“充电器没插紧”。

1.3 传统实体识别的“无力感”:为什么Agentic AI需要新方法?

传统的实体识别(比如基于CRF、BERT的模型)有三个致命缺陷,无法适配Agentic AI的需求:

(1)闭域限制:只能识别预定义的实体类型

传统模型需要提前定义实体类型(比如“人物、地点、组织”),如果遇到未预定义的类型(比如“订单号、问题类型、产品型号”),模型就会“失明”。而Agentic AI需要处理开放域场景——比如电商Agent需要识别“优惠券码”,医疗Agent需要识别“症状描述”,这些都是无法提前穷举的。

(2)缺乏上下文关联:无法处理多轮对话的动态信息

传统模型处理的是“单句文本”,而Agentic AI需要处理多轮对话:比如用户第一次说“我买了个华为手机”,第二次说“它充电很慢”,传统模型无法将“华为手机”和“充电很慢”关联起来,而Agent需要知道“用户的问题是‘华为手机充电慢’”。

(3)歧义消解能力弱:无法处理“一词多义”

比如“苹果”既可以是水果,也可以是公司;“银行”既可以是金融机构,也可以是河边的堤岸。传统模型依赖“局部语境”(比如“吃苹果”→水果),但Agentic AI需要全局上下文(比如用户说“我要谈苹果的合作”→公司)——这种全局理解能力,传统模型很难做到。

二、核心概念解析:用“餐厅故事”讲清楚实体识别与上下文工程

为了让大家更直观理解,我们用“餐厅服务员”的类比,重新定义Agentic AI中的核心概念:

2.1 概念1:Agentic AI = 能“自主思考”的服务员

Agentic AI的核心特征是自主决策循环(Perceive→Plan→Act→Reflect):

  1. 感知(Perceive):收集用户输入(比如“我要清淡的”);
  2. 规划(Plan):基于输入和上下文制定策略(比如“推荐蔬菜沙拉”);
  3. 执行(Act):实施策略(比如“下单蔬菜沙拉”);
  4. 反思(Reflect):根据结果调整策略(比如“如果用户说沙拉不好吃,下次推荐蒸菜”)。

2.2 概念2:上下文工程 = 服务员的“记忆与经验”

上下文工程是Agentic AI的“大脑后台”,负责管理三类信息:

  • 短期上下文:当前对话的即时信息(比如用户刚说的“充电很慢”);
  • 长期上下文:用户的历史数据(比如用户之前买过华为手机);
  • 领域知识:行业规则(比如华为手机的保修政策)。

而实体识别,就是从“短期上下文”中提取关键信息,存入“长期上下文”的过程——就像服务员把“用户要清淡的”记在小本本上,下次用户来的时候,直接推荐清淡的菜品。

2.3 概念3:实体识别 = 服务员“挑出关键需求”

实体是上下文信息中的“原子单位”——它是不可分割的、有明确意义的信息块。比如:

  • 用户说“我要一份番茄鸡蛋面加卤蛋”:
    • 主菜实体:番茄鸡蛋面;
    • 加菜实体:卤蛋;
  • 用户说“我明天要去北京见张三谈苹果的合作”:
    • 地点实体:北京;
    • 人物实体:张三;
    • 公司实体:苹果。

2.4 概念4:提示工程 = 教服务员“怎么听懂话”

提示工程是用自然语言指令,让LLM学会完成特定任务的方法。比如,你想让服务员学会识别“清淡菜品”,可以这样教它:

“如果用户说‘减肥’‘不想吃油’‘要素的’,那他们要的是清淡菜品。比如用户说‘我减肥,要个清淡的’,你要推荐蔬菜沙拉。”

同样,要让LLM学会识别实体,你可以用提示词告诉它:

“请从文本中识别出产品、问题类型、订单号实体。比如文本‘我买的华为手机充电慢,订单号123456’中,产品是‘华为手机’,问题类型是‘充电慢’,订单号是‘123456’。”

2.5 概念关系图:用Mermaid看清楚逻辑链

graph TD
    A[Agentic AI] --> B[上下文工程]
    B --> C[实体识别]
    C --> D[提示工程]
    D --> E[大语言模型(LLM)]
    B --> F[意图理解]
    F --> G[规划决策]
    G --> H[执行反馈]
    H --> B

解释:

  1. Agentic AI的核心是上下文工程;
  2. 实体识别是上下文工程的基础(提取关键信息);
  3. 提示工程是实体识别的工具(教LLM识别实体);
  4. 实体识别的结果用于意图理解,进而驱动规划决策和执行反馈;
  5. 执行反馈会更新上下文工程(比如用户确认“订单号是123456”,Agent会把这个实体存入长期上下文)。

三、技术原理:Agentic AI中实体识别的“底层逻辑”

3.1 传统实体识别vs.Agentic AI实体识别:核心差异

我们用表格对比两者的区别:

维度 传统实体识别 Agentic AI实体识别
实体类型 预定义(闭域) 动态扩展(开放域)
上下文处理 单句文本 多轮对话+长期记忆
歧义消解 局部语境 全局上下文+领域知识
模型依赖 CRF、BERT等传统模型 大语言模型(LLM)+提示工程

3.2 Agentic AI实体识别的技术框架:四步流程

Agentic AI的实体识别不是“单步任务”,而是融入上下文工程的闭环流程,具体分为四步:

步骤1:定义实体类型(Business-Driven)

实体类型必须贴合业务需求——比如:

  • 电商Agent:产品、订单号、优惠券码、问题类型;
  • 医疗Agent:症状、药物、病史、检查项目;
  • 教育Agent:知识点、题目类型、学生水平、错题集。

注意:实体类型不是“固定死的”,而是可以动态扩展的——比如电商Agent新增了“配件”类型,只需要用提示工程告诉LLM“配件是手机的附属产品,比如充电器、耳机”即可。

步骤2:设计提示词(Prompt Engineering)

提示词是LLM识别实体的“说明书”,好的提示词需要包含三个要素:

  1. 任务描述:明确要做什么(比如“识别产品、问题类型、订单号实体”);
  2. 示例(Few-Shot):用具体例子让LLM理解要求(比如“文本‘我买的华为手机充电慢,订单号123456’中,产品是‘华为手机’”);
  3. 输出格式:规定输出的结构(比如JSON格式,方便后续处理)。

示例提示词(电商客服场景):

请从以下文本中识别出指定类型的实体,输出JSON格式:
- 文本内容:{text}
- 需要识别的实体类型:产品、问题类型、订单号
- 要求:
  1. 实体必须属于指定类型;
  2. 实体边界要准确(比如“华为Mate 60 Pro”是完整产品,不要拆分成“华为”和“Mate 60 Pro”);
  3. 没有该类型实体时,不输出。

示例:
文本:我昨天买的小米14屏幕碎了,订单号是789012
输出:{"entities": [{"entity": "小米14", "type": "产品"}, {"entity": "屏幕碎了", "type": "问题类型"}, {"entity": "789012", "type": "订单号"}]}
步骤3:调用LLM识别实体(Model Execution)

用LLM执行提示词,得到实体识别结果。这里需要注意两个点:

  • 模型选择:优先选择支持长上下文的模型(比如GPT-4o、Claude 3 Opus),因为Agentic AI需要处理多轮对话的长文本;
  • 温度设置:温度(Temperature)越低,输出越稳定(比如设置为0),避免LLM产生“幻觉”(识别出不存在的实体)。

代码示例(用LangChain+GPT-4o实现):

from langchain.prompts import PromptTemplate
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage

# 1. 定义提示模板
entity_prompt = PromptTemplate(
    input_variables=["text", "entity_types"],
    template="""请从以下文本中识别出指定类型的实体,输出JSON格式:
- 文本内容:{text}
- 需要识别的实体类型:{entity_types}
- 要求:
  1. 实体必须属于指定类型;
  2. 实体边界要准确;
  3. 没有该类型实体时,不输出。

示例:
文本:我昨天买的小米14屏幕碎了,订单号是789012
输出:{"entities": [{"entity": "小米14", "type": "产品"}, {"entity": "屏幕碎了", "type": "问题类型"}, {"entity": "789012", "type": "订单号"}]}
"""
)

# 2. 初始化LLM
llm = ChatOpenAI(
    model="gpt-4o",
    temperature=0,
    api_key="YOUR_API_KEY"
)

# 3. 准备输入
text = "我昨天买的华为Mate 60 Pro充电很慢,订单号是123456,帮我解决一下"
entity_types = "产品、问题类型、订单号"

# 4. 生成提示词
prompt = entity_prompt.format(text=text, entity_types=entity_types)

# 5. 调用LLM
response = llm.invoke([HumanMessage(content=prompt)])

# 6. 解析结果(假设输出是JSON字符串)
import json
entities = json.loads(response.content)
print(entities)

输出结果

{"entities": [
    {"entity": "华为Mate 60 Pro", "type": "产品"},
    {"entity": "充电很慢", "type": "问题类型"},
    {"entity": "123456", "type": "订单号"}
]}
步骤4:实体验证与上下文更新(Validation & Memory)

LLM的实体识别结果可能存在错误(比如幻觉、边界模糊),因此需要验证

  • 规则验证:比如订单号必须是6位数字,否则标记为错误;
  • 知识验证:比如“华为Mate 60 Pro”是否存在(调用产品数据库查询);
  • 用户验证:如果无法确定,询问用户(比如“请问你的订单号是123456吗?”)。

验证通过后,将实体存入Agent的上下文记忆(比如用LangChain的ConversationBufferMemory),用于后续决策:

from langchain.memory import ConversationBufferMemory

# 初始化记忆模块
memory = ConversationBufferMemory()

# 将实体存入记忆
memory.save_context(
    inputs={"text": text},
    outputs={"entities": entities}
)

# 后续决策时,从记忆中提取实体
print(memory.load_memory_variables({}))

3.3 数学模型:LLM如何“学会”实体识别?

传统实体识别用**条件随机场(CRF)**模型,其核心是计算标签序列的条件概率:
P(y∣x)=1Z(x)exp⁡(∑i=1n∑kλkfk(yi−1,yi,x,i))P(y|x) = \frac{1}{Z(x)} \exp\left( \sum_{i=1}^n \sum_{k} \lambda_k f_k(y_{i-1}, y_i, x, i) \right)P(yx)=Z(x)1exp(i=1nkλkfk(yi1,yi,x,i))
其中:

  • xxx:输入文本序列;
  • yyy:标签序列(比如“B-产品”“I-产品”“O”);
  • Z(x)Z(x)Z(x):归一化因子(确保概率和为1);
  • fkf_kfk:特征函数(比如“第i个词是‘华为’,前一个标签是‘O’”);
  • λk\lambda_kλk:特征权重(模型训练得到)。

而LLM(比如GPT-4)用**自注意力机制(Self-Attention)**处理实体识别:

  1. 将输入文本转化为token嵌入(比如“华为”→[0.1, 0.2, …, 0.9]);
  2. 通过多头自注意力层计算每个token与其他token的关联(比如“华为”和“Mate 60 Pro”的关联度很高);
  3. 线性层+Softmax输出每个token的标签概率:
    P(yi=l∣x)=softmax(W⋅hi+b)P(y_i = l | x) = \text{softmax}(W \cdot h_i + b)P(yi=lx)=softmax(Whi+b)
    其中:
  • hih_ihi:第i个token的隐藏状态(自注意力层的输出);
  • W,bW, bW,b:可训练参数;
  • lll:标签(比如“产品”“问题类型”)。

关键区别:传统CRF需要手动设计特征,而LLM通过自注意力机制自动学习“哪些token属于同一实体”——这也是LLM能处理开放域实体的核心原因。

四、实战:解决Agentic AI实体识别的三大痛点

4.1 痛点1:歧义实体——“苹果”到底是水果还是公司?

问题场景:用户说“我要谈苹果的合作”,LLM可能误判“苹果”是水果。
解决方案:用上下文依赖提示,让LLM结合全局语境判断。

优化后的提示词

请从文本中识别出公司实体,规则如下:
- 如果文本中提到“合作”“项目”“业务”,则“苹果”是公司;
- 如果提到“吃”“水果”“榨汁”,则“苹果”是水果。

示例:
文本1:我要谈苹果的合作 → 公司实体:苹果
文本2:我买了一箱苹果 → 无公司实体

代码验证
输入文本:“我要谈苹果的合作”,输出结果:

{"entities": [{"entity": "苹果", "type": "公司"}]}

4.2 痛点2:动态实体——新增“配件”类型怎么办?

问题场景:电商Agent新增“配件”实体类型(比如“充电器”“耳机”),传统模型需要重新训练,而LLM可以用Few-Shot提示快速适配。

提示词设计

请从文本中识别出产品、配件、订单号实体:
- 产品:手机的主设备(比如华为Mate 60 Pro);
- 配件:手机的附属产品(比如充电器、耳机);
- 订单号:6位数字。

示例:
文本:我买的华为Mate 60 Pro的充电器坏了,订单号是123456 → 产品:华为Mate 60 Pro,配件:充电器,订单号:123456

代码验证
输入文本:“我买的小米14的耳机没声音,订单号是789012”,输出结果:

{"entities": [
    {"entity": "小米14", "type": "产品"},
    {"entity": "耳机", "type": "配件"},
    {"entity": "789012", "type": "订单号"}
]}

4.3 痛点3:多模态实体——如何识别图片中的实体?

问题场景:用户发送一张“华为Mate 60 Pro充电慢”的照片,同时说“我的手机充不进电”,需要从图片中识别“华为Mate 60 Pro”,从文本中识别“充不进电”。
解决方案:用多模态LLM(比如GPT-4o、Gemini Pro),同时处理文本和图像。

代码示例(用GPT-4o处理多模态输入):

from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage
from PIL import Image
import base64
import io

# 1. 将图片转为Base64编码
def image_to_base64(image_path):
    with Image.open(image_path) as img:
        buffered = io.BytesIO()
        img.save(buffered, format="PNG")
        return base64.b64encode(buffered.getvalue()).decode()

# 2. 初始化多模态LLM
llm = ChatOpenAI(model="gpt-4o", api_key="YOUR_API_KEY")

# 3. 准备输入(文本+图片)
text = "我的手机充不进电"
image_base64 = image_to_base64("huawei_mate_60_pro.jpg")

# 4. 构造多模态消息
messages = [
    HumanMessage(
        content=[
            {"type": "text", "text": f"请从文本和图片中识别出产品和问题类型实体:文本是{text}"},
            {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_base64}"}}
        ]
    )
]

# 5. 调用LLM
response = llm.invoke(messages)

# 6. 解析结果
print(response.content)

输出结果

{"entities": [
    {"entity": "华为Mate 60 Pro", "type": "产品"},
    {"entity": "充不进电", "type": "问题类型"}
]}

4.4 实战案例:智能客服Agent的实体识别全流程

我们用一个完整的案例,展示Agentic AI实体识别的全流程:

场景描述

用户输入:“我昨天买的华为Mate 60 Pro充电很慢,订单号是123456,帮我解决一下。”

步骤1:定义实体类型
  • 产品:手机主设备;
  • 问题类型:用户的问题描述;
  • 订单号:6位数字。
步骤2:设计提示词

如3.2中的示例提示词。

步骤3:调用LLM识别实体

输出结果:

{"entities": [
    {"entity": "华为Mate 60 Pro", "type": "产品"},
    {"entity": "充电很慢", "type": "问题类型"},
    {"entity": "123456", "type": "订单号"}
]}
步骤4:验证实体
  • 订单号验证:调用电商系统API,确认123456是有效的订单号;
  • 产品验证:查询产品数据库,确认华为Mate 60 Pro存在;
  • 问题类型验证:无错误。
步骤5:更新上下文记忆

将实体存入Agent的记忆模块,用于后续决策:

memory.save_context(
    inputs={"text": "我昨天买的华为Mate 60 Pro充电很慢,订单号是123456,帮我解决一下"},
    outputs={"entities": entities}
)
步骤6:意图理解与决策

Agent从记忆中提取实体,理解用户意图是“申请华为Mate 60 Pro的充电问题售后”,然后生成决策:

  1. 调用订单系统,查询123456的购买记录和保修状态;
  2. 调用产品知识库,获取华为Mate 60 Pro充电慢的排查步骤;
  3. 向用户发送排查步骤,并询问是否需要进一步帮助。

五、未来展望:实体识别的“下一个阶段”

5.1 技术趋势:从“识别”到“理解+链接”

未来的实体识别,将不再是“提取信息块”,而是**“理解信息块的关系+链接知识图谱”**:

  • 实体关系抽取:比如识别“华为Mate 60 Pro”和“充电很慢”的关系是“存在问题”;
  • 实体链接:将“华为Mate 60 Pro”链接到知识图谱,获取其硬件参数(比如“支持66W快充”);
  • 动态实体扩展:Agent自主学习新的实体类型(比如用户提到“折叠屏手机”,Agent自动将其加入实体类型列表)。

5.2 潜在挑战:幻觉、复杂度、跨语言

  • 幻觉问题:LLM可能识别出不存在的实体(比如“用户没提订单号,LLM却输出123456”),需要更严格的验证机制(比如结合外部数据库);
  • 复杂度问题:多轮对话的长上下文会增加计算成本,需要优化LLM的上下文压缩技术;
  • 跨语言问题:不同语言的实体边界和歧义不同(比如中文“苹果”和英文“Apple”的歧义场景不同),需要多语言提示工程。

5.3 行业影响:Agentic AI的“普及加速器”

实体识别的优化,将推动Agentic AI在更多领域的普及:

  • 电商:更精准的售后处理(比如识别“产品型号”和“问题类型”);
  • 医疗:更准确的症状识别(比如从用户描述中提取“咳嗽、发烧”等实体);
  • 教育:更个性化的辅导(比如识别“学生的错题类型”和“知识点薄弱点”)。

六、总结:实体识别是Agentic AI的“地基”,提示工程是“水泥”

Agentic AI的核心是“理解上下文”,而实体识别是理解上下文的“第一块拼图”。传统的实体识别方法无法应对Agentic AI的动态、开放、多轮需求,而提示工程+LLM成为了破局的关键——它让Agent能够自主学习实体类型、处理歧义、关联上下文。

作为提示工程架构师,我们的职责不是“调参”,而是“教Agent如何思考”:通过设计精准的提示词,让LLM学会在复杂场景中识别实体;通过验证和记忆机制,确保实体识别的准确性;通过链接知识图谱,丰富实体的语义信息。

思考问题:鼓励你进一步探索

  1. 如果你要设计一个面向教育的Agentic AI(比如智能辅导老师),你会定义哪些实体类型?如何用提示工程优化这些实体的识别?
  2. 如何解决多模态实体识别中的“模态对齐”问题(比如图片中的“华为手机”和文本中的“我的手机”是同一个实体)?
  3. 如何让Agent自主学习新的实体类型(比如用户提到“量子计算”,Agent自动将其加入“知识点”实体类型)?

参考资源

  1. OpenAI Prompt Engineering Guide:https://platform.openai.com/docs/guides/prompt-engineering
  2. LangChain Documentation:https://python.langchain.com/docs/
  3. 《Agentic AI: A New Paradigm for AI Systems》(论文):https://arxiv.org/abs/2308.08155
  4. 《Named Entity Recognition with BERT》(论文):https://arxiv.org/abs/1901.08043
  5. 《Few-Shot Learning with Large Language Models》(论文):https://arxiv.org/abs/2005.14165

结语
Agentic AI的时代,不是“比谁的模型更大”,而是“比谁的Agent更能理解用户”。实体识别作为理解上下文的基础,是每个Agentic AI开发者必须掌握的核心技术。而提示工程,正是让Agent“听懂话”的关键密码——掌握它,你就能打造出真正“懂用户”的Agentic AI。

下一篇文章,我们将探讨“Agentic AI的意图理解:如何让Agent‘猜中用户的小心思’”,敬请期待!

Logo

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

更多推荐