Agentic AI情感分析提示词案例:从负面评论中挖掘用户需求的提示工程架构师技巧
Agentic AI(智能体)是一种“能自主规划、执行、反思”的AI系统——它不是“单次回答问题”,而是像人一样“一步一步解决问题”。传统AI:你问“这篇评论的需求是什么?”,它直接给答案;Agentic AI:它会先“定位情绪→拆解场景→提炼需求→验证逻辑”,最后给你一个经过推理的结果。"description": "从问题场景中提取用户未被满足的需求","needs": {"items": {
Agentic AI情感分析实战:用提示工程从负面评论里挖用户真需求
副标题:从0到1搭建可落地的用户声音挖掘系统
摘要/引言
你有没有过这样的经历?
作为产品运营,你盯着后台一堆“负面评论”发愁:用户说“App加载慢”“退款流程烂”“客服找不到”,但你不知道这些抱怨背后,用户真正需要的是什么——是“弱网下也能快速打开”?还是“退款进度实时提醒”?还是“10秒内接通人工客服”?
传统情感分析工具只能帮你把评论分成“正/负/中性”,但挖不到可行动的用户需求——这就像医生只告诉你“病人发烧了”,却没说“发烧是因为流感还是肺炎”。
那有没有办法让AI不仅“识别情绪”,还能“读懂需求”?
答案是:用Agentic AI(智能体)的多轮推理能力,配合精准的提示工程,把“负面评论”转化为“产品优化的具体方向”。
在这篇文章里,我会带你从0到1搭建一个“负面评论→需求挖掘”的Agentic AI系统。你会学到:
- 如何设计多轮递进的提示词框架,让AI像侦探一样“剥洋葱”式分析;
- 如何用Agentic AI解决传统情感分析的3大痛点;
- 可复现的代码案例+避坑指南,直接落地到你的工作中。
目标读者与前置知识
目标读者
- 产品运营/用户研究:想从用户反馈中挖到真需求,而非“情绪标签”;
- AI应用工程师:需要落地情感分析场景,但对Agentic AI的提示设计不熟;
- 创业者/小团队:没有资源买昂贵的用户调研工具,想用AI低成本解决问题。
前置知识
- 基础Prompt设计:知道如何给AI提清晰的要求(比如“用 bullet points 列出”);
- Python基础:会用
pandas处理数据、openai调用API; - 情感分析常识:了解“情绪分类”“ sentiment score”等基本概念。
文章目录
- 引言与基础
- 为什么传统情感分析“挖不到需求”?
- Agentic AI:解决问题的关键武器
- 环境准备:5分钟搭好运行环境
- 分步实现:从负面评论到用户需求的4步流程
- 关键技巧:让AI更“懂需求”的提示工程优化
- 结果验证:用数据证明你的需求挖对了
- 性能优化:从“能运行”到“能落地”的3个技巧
- 常见坑与解决方案:避免你踩我踩过的雷
- 未来扩展:把系统升级为“自动生成产品建议”
- 总结
一、为什么传统情感分析“挖不到需求”?
在聊Agentic AI之前,我们得先搞清楚:传统情感分析的瓶颈到底在哪?
1.1 传统情感分析的3大痛点
假设你有一条评论:“这个外卖App的配送员找不到我家,打了3个电话都没说清楚位置,最后餐凉了!”
传统情感分析会告诉你:
- 情绪:负面(sentiment score=-0.8);
- 关键词:配送员、找不到家、电话、餐凉。
但你想知道的是:用户需要什么?
是“更精准的地址定位功能”?还是“配送员岗前培训”?还是“超时赔付机制”?传统工具答不上来——因为它的逻辑是“统计关键词→判断情绪”,没有推理能力。
具体来说,传统情感分析的问题是:
- 浅层次理解:只处理“表面情绪”,不挖掘“底层需求”;
- 无场景化:忽略“用户在哪里用?怎么用?”等关键场景;
- 非结构化输出:结果是“情绪标签+关键词”,无法直接用于产品决策。
二、Agentic AI:解决问题的关键武器
2.1 什么是Agentic AI?
Agentic AI(智能体)是一种“能自主规划、执行、反思”的AI系统——它不是“单次回答问题”,而是像人一样“一步一步解决问题”。
举个例子:
- 传统AI:你问“这篇评论的需求是什么?”,它直接给答案;
- Agentic AI:它会先“定位情绪→拆解场景→提炼需求→验证逻辑”,最后给你一个经过推理的结果。
2.2 Agentic AI如何解决传统痛点?
针对传统情感分析的3大问题,Agentic AI的解法是:
- 多轮推理:从“情绪”到“场景”再到“需求”,逐步深入;
- 场景化分析:强制AI拆解“用户使用的时间、地点、操作步骤”;
- 结构化输出:通过提示词要求AI返回“可直接入库”的格式(比如JSON)。
三、环境准备:5分钟搭好运行环境
3.1 需要安装的工具
- Python 3.10+(建议用Anaconda管理环境);
- OpenAI API密钥(或Anthropic、Google Gemini的密钥,本文用OpenAI演示);
- 数据处理库:
pandas、numpy; - 可视化库:
matplotlib。
3.2 快速安装步骤
- 创建虚拟环境(可选但推荐):
conda create -n agentic-sentiment python=3.11 conda activate agentic-sentiment - 安装依赖:
新建requirements.txt:
然后运行:openai==1.3.5 pandas==2.1.4 matplotlib==3.8.2 tenacity==8.2.3 # 用于API重试pip install -r requirements.txt - 设置API密钥:
在代码中加入(或用环境变量):from openai import OpenAI client = OpenAI(api_key="你的API密钥") # 替换成自己的密钥
四、分步实现:从负面评论到用户需求的4步流程
我们以“电商App的负面评论”为例,演示完整流程:
输入:用户负面评论 → 输出:结构化的用户需求(格式:“用户需要XX,以便XX”)。
4.1 步骤1:准备负面评论数据
首先,我们需要一批负面评论——你可以从以下渠道获取:
- 公开数据集:比如Amazon Reviews(https://s3.amazonaws.com/amazon-reviews-pds/tsv/index.txt);
- 自己爬取:用Python的
requests+BeautifulSoup爬取App Store/淘宝的评论; - 内部数据:产品后台的用户反馈。
本文用简化的测试数据集(negative_reviews.csv),包含10条评论,示例如下:
| review_id | review_content |
|---|---|
| 1 | 这个App在地铁里根本打不开,加载半天都是白屏,急着用的时候特别窝火! |
| 2 | 退款流程太复杂了,要填3个表单,传2张截图,最后还得等7天,再也不想用了! |
| 3 | 客服电话打不通,在线客服要排队30分钟,遇到问题根本找不到人帮忙! |
4.2 步骤2:设计Agentic提示词框架
核心思路:用3轮提示,让AI逐步完成“情绪→场景→需求”的推理。
4.2.1 轮1:定位情绪与核心抱怨点
目标:让AI先抓住评论的“核心矛盾”,避免发散。
提示词模板:
请分析以下用户评论的核心负面情绪,并指出具体的抱怨点(用1-2句话总结,不要冗余):
{review_content}
示例输入(评论1):
“这个App在地铁里根本打不开,加载半天都是白屏,急着用的时候特别窝火!”
示例输出:
核心负面情绪是“沮丧”,具体抱怨点是“App在地铁(弱网络环境)下加载缓慢,出现白屏”。
4.2.2 轮2:拆解具体问题场景
目标:让AI补充“何时、何地、如何发生”的细节——这些是提炼需求的关键。
提示词模板:
基于上一步的抱怨点:{complaint},请拆解用户遇到的具体问题场景,要求包含:
1. 使用环境(比如:地铁、家里、办公室);
2. 操作步骤(比如:打开App、点击“退款”按钮、拨打客服电话);
3. 期望vs实际(比如:期望10秒内加载完成,实际用了2分钟)。
用 bullet points 列出,每条不超过20字。
示例输入(轮1的抱怨点):
“App在地铁(弱网络环境)下加载缓慢,出现白屏”
示例输出:
- 使用环境:地铁(弱网络);
- 操作步骤:打开App;
- 期望:快速加载;
- 实际:加载半天白屏。
4.2.3 轮3:提炼可行动的用户需求
目标:把“问题场景”转化为“产品需要解决的需求”,格式要标准化(方便统计)。
提示词模板:
从以下问题场景:{scenarios}中,提取用户未被满足的需求,要求:
1. 用“用户需要XX,以便XX”的格式;
2. 包含具体的使用场景(比如“在弱网络环境下”);
3. 每条需求独立成句,不要合并。
示例输入(轮2的场景):
- 使用环境:地铁(弱网络);
- 操作步骤:打开App;
- 期望:快速加载;
- 实际:加载半天白屏。
示例输出:
用户需要App在弱网络环境下快速加载,以便在地铁等场景中及时使用。
4.3 步骤3:用Python实现多轮推理
把上面的3轮提示写成Python函数,处理单条评论:
from openai import OpenAI
from tenacity import retry, stop_after_attempt, wait_exponential # 重试机制
import pandas as pd
client = OpenAI(api_key="你的API密钥")
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10))
def analyze_single_review(review):
"""处理单条负面评论,返回情绪、场景、需求"""
# 轮1:定位情绪与抱怨点
prompt1 = f"请分析以下用户评论的核心负面情绪,并指出具体的抱怨点(用1-2句话总结,不要冗余):{review}"
response1 = client.chat.completions.create(
model="gpt-4o-mini", # 性价比高的模型,也可以用gpt-3.5-turbo
messages=[{"role": "user", "content": prompt1}],
temperature=0.1 # 降低随机性,让结果更稳定
)
complaint = response1.choices[0].message.content.strip()
# 轮2:拆解问题场景
prompt2 = f"""基于上一步的抱怨点:{complaint},请拆解用户遇到的具体问题场景,要求包含:
1. 使用环境(比如:地铁、家里、办公室);
2. 操作步骤(比如:打开App、点击“退款”按钮、拨打客服电话);
3. 期望vs实际(比如:期望10秒内加载完成,实际用了2分钟)。
用 bullet points 列出,每条不超过20字。"""
response2 = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt2}],
temperature=0.1
)
scenarios = response2.choices[0].message.content.strip()
# 轮3:提炼用户需求
prompt3 = f"""从以下问题场景:{scenarios}中,提取用户未被满足的需求,要求:
1. 用“用户需要XX,以便XX”的格式;
2. 包含具体的使用场景(比如“在弱网络环境下”);
3. 每条需求独立成句,不要合并。"""
response3 = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt3}],
temperature=0.1
)
needs = response3.choices[0].message.content.strip()
return {
"review": review,
"complaint": complaint,
"scenarios": scenarios,
"needs": needs
}
# 测试单条评论
test_review = "这个App在地铁里根本打不开,加载半天都是白屏,急着用的时候特别窝火!"
result = analyze_single_review(test_review)
print(result)
运行结果(简化版):
{
"review": "这个App在地铁里根本打不开...",
"complaint": "核心负面情绪是沮丧,具体抱怨点是App在地铁(弱网络环境)下加载缓慢,出现白屏",
"scenarios": "- 使用环境:地铁(弱网络)\n- 操作步骤:打开App\n- 期望:快速加载\n- 实际:加载半天白屏",
"needs": "用户需要App在弱网络环境下快速加载,以便在地铁等场景中及时使用"
}
4.4 步骤4:批量处理与结果存储
把函数扩展到批量处理,结果存入DataFrame:
def batch_analyze_reviews(reviews):
"""批量处理评论,返回DataFrame"""
results = []
for review in reviews:
try:
result = analyze_single_review(review)
results.append(result)
except Exception as e:
print(f"处理失败:{review},错误:{str(e)}")
results.append({"review": review, "complaint": "", "scenarios": "", "needs": ""})
return pd.DataFrame(results)
# 读取测试数据
df = pd.read_csv("negative_reviews.csv")
reviews = df["review_content"].tolist()
# 批量处理
result_df = batch_analyze_reviews(reviews)
# 保存结果
result_df.to_csv("review_analysis_results.csv", index=False)
print("处理完成!结果保存在review_analysis_results.csv")
五、关键技巧:让AI更“懂需求”的提示工程优化
上面的基础框架能运行,但要让结果更精准,还需要优化提示词——以下是我总结的3个核心技巧:
5.1 技巧1:用“约束条件”减少AI的“自由发挥”
AI很容易“发散”——比如你让它“拆解场景”,它可能会加一些无关的细节。解决方法是:在提示词中加入明确的约束条件。
比如轮2的提示词,我加入了:
- “用 bullet points 列出”:统一格式;
- “每条不超过20字”:避免冗余;
- “包含使用环境、操作步骤、期望vs实际”:强制覆盖关键维度。
反例(没有约束):
“请拆解用户遇到的问题场景” → AI可能输出大段文字,无法结构化。
5.2 技巧2:用“示例”让AI理解你的“预期”
如果AI的输出不符合要求,比如“需求”不够具体,你可以在提示词中加入示例——让AI“照葫芦画瓢”。
比如轮3的提示词,可以修改为:
从以下问题场景:{scenarios}中,提取用户未被满足的需求,要求:
1. 用“用户需要XX,以便XX”的格式;
2. 包含具体的使用场景(比如“在弱网络环境下”);
3. 每条需求独立成句,不要合并。
示例:
- 用户需要App在弱网络环境下快速加载,以便在地铁等场景中及时使用;
- 用户需要更简化的退款流程,以便快速完成退款操作。
效果:AI会模仿示例的格式和细节,输出更符合要求的结果。
5.3 技巧3:用“函数调用”让结果更结构化
如果你的需求是“把结果存入数据库”,纯文本的“needs”字段会很麻烦——这时候可以用Function Calling(函数调用)让AI返回JSON格式。
修改轮3的提示词和代码:
5.3.1 定义函数描述
function_description = [
{
"name": "extract_user_needs",
"description": "从问题场景中提取用户未被满足的需求",
"parameters": {
"type": "object",
"properties": {
"needs": {
"type": "array",
"items": {
"type": "string",
"description": "用户需求,格式:用户需要XX,以便XX"
}
}
},
"required": ["needs"]
}
}
]
5.3.2 修改轮3的调用逻辑
# 轮3:用Function Calling提取需求
response3 = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": prompt3}],
functions=function_description,
function_call={"name": "extract_user_needs"}, # 强制调用函数
temperature=0.1
)
# 解析函数调用结果
if response3.choices[0].message.function_call:
function_args = json.loads(response3.choices[0].message.function_call.arguments)
needs = function_args["needs"]
else:
needs = []
效果:AI会返回标准的JSON数组,比如:
{"needs": ["用户需要App在弱网络环境下快速加载,以便在地铁等场景中及时使用"]}
六、结果验证:用数据证明你的需求挖对了
处理完所有评论后,我们需要验证结果的准确性——毕竟“挖需求”的目的是指导产品决策,不能出错。
6.1 步骤1:统计需求频次
用pandas统计每个需求的出现次数:
import pandas as pd
from collections import Counter
# 读取结果
df = pd.read_csv("review_analysis_results.csv")
# 把所有需求拆分成列表(假设needs字段是用换行分隔的字符串)
all_needs = []
for needs in df["needs"].dropna():
all_needs.extend(needs.split("\n"))
# 统计频次
need_counter = Counter(all_needs)
top_10_needs = need_counter.most_common(10)
# 打印Top10需求
print("Top10用户需求:")
for need, count in top_10_needs:
print(f"{count}次:{need}")
示例输出:
Top10用户需求:
30次:用户需要App在弱网络环境下快速加载,以便在地铁等场景中及时使用
25次:用户需要更简化的退款流程,以便快速完成退款操作
20次:用户需要更易联系的客服,以便遇到问题时及时求助
15次:用户需要实时的配送进度提醒,以便了解餐品位置
...
6.2 步骤2:可视化需求分布
用matplotlib画柱状图,直观展示需求优先级:
import matplotlib.pyplot as plt
# 提取Top10的需求和次数
needs = [item[0] for item in top_10_needs]
counts = [item[1] for item in top_10_needs]
# 画图
plt.figure(figsize=(12, 6))
plt.barh(needs, counts, color="#1f77b4")
plt.xlabel("出现次数")
plt.ylabel("用户需求")
plt.title("负面评论中的Top10用户需求")
plt.gca().invert_yaxis() # 让次数最多的需求在最上面
plt.show()
效果:你会看到一个清晰的“需求优先级”图——次数最多的需求,就是产品最需要优先解决的问题。
6.3 步骤3:人工验证准确性
最后,一定要人工抽查部分结果——比如随机选20条评论,对比AI输出的需求和你自己的判断,计算“准确率”(比如90%以上才算合格)。
示例抽查:
评论:“退款流程太复杂了,要填3个表单,传2张截图,最后还得等7天,再也不想用了!”
AI输出需求:“用户需要更简化的退款流程,以便快速完成退款操作”
人工判断:准确(抓住了“流程复杂”的核心需求)。
七、性能优化:从“能运行”到“能落地”的3个技巧
如果你的评论量很大(比如10万条),基础框架可能会遇到“速度慢”“成本高”的问题——以下是3个落地优化技巧:
7.1 技巧1:批量调用API
OpenAI的chat.completions.create支持批量处理吗?不直接支持,但你可以用并发请求(比如asyncio)提高速度。
示例代码(用asyncio批量调用):
import asyncio
from openai import AsyncOpenAI
async_client = AsyncOpenAI(api_key="你的API密钥")
async def analyze_single_review_async(review):
# 同之前的逻辑,但用async_client
pass
async def batch_analyze_async(reviews):
tasks = [analyze_single_review_async(review) for review in reviews]
return await asyncio.gather(*tasks)
# 运行
results = asyncio.run(batch_analyze_async(reviews))
效果:并发请求能把处理速度提高3-5倍(取决于你的API配额)。
7.2 技巧2:选择更便宜的模型
如果你对结果的“精度”要求不高(比如处理大量非核心评论),可以用更便宜的模型:
gpt-3.5-turbo:价格是gpt-4o-mini的1/2;text-embedding-3-small:如果只需要分类,可以用Embedding模型+聚类(成本更低)。
成本对比(OpenAI 2024年定价):
gpt-4o-mini:输入$0.15/百万token,输出$0.60/百万token;gpt-3.5-turbo:输入$0.0015/百万token,输出$0.002/百万token。
7.3 技巧3:缓存重复评论
如果你的评论中有很多重复内容(比如“App加载慢”出现100次),可以缓存结果——第一次处理后,把结果存入数据库,下次遇到相同评论直接取缓存,不用再调用API。
示例代码(用redis缓存):
import redis
import json
r = redis.Redis(host='localhost', port=6379, db=0)
def analyze_with_cache(review):
# 先查缓存
cache_key = f"review:{review}"
cached_result = r.get(cache_key)
if cached_result:
return json.loads(cached_result)
# 缓存不存在,调用API
result = analyze_single_review(review)
# 存入缓存(过期时间1天)
r.setex(cache_key, 86400, json.dumps(result))
return result
八、常见坑与解决方案
在落地过程中,你可能会遇到以下问题——我把解决方案整理好了:
8.1 坑1:AI输出的需求太笼统
症状:比如评论是“配送员找不到我家”,AI输出“用户需要更好的配送服务”(太笼统,无法行动)。
解决方案:在提示词中加入“必须包含具体场景或操作”,比如:
要求:需求必须包含具体的使用场景(比如“在填写退款表单时”)或操作步骤(比如“点击‘退款’按钮后”)。
8.2 坑2:API调用超时或报错
症状:调用OpenAI API时,出现TimeoutError或APIConnectionError。
解决方案:
- 加入重试机制(用
tenacity库,如步骤4.3中的代码); - 降低并发数(比如把并发请求数从10降到5);
- 检查网络连接(比如用代理解决墙的问题)。
8.3 坑3:结果不符合业务逻辑
症状:比如AI把“客服找不到”的需求提炼成“用户需要更漂亮的客服界面”(完全不符合业务逻辑)。
解决方案:
- 在提示词中加入业务领域知识,比如:
注意:本App是电商App,客服的核心需求是“快速响应”,不是“界面漂亮”。 - 增加“反思步骤”——让AI检查自己的输出是否符合业务逻辑:
请检查你提取的需求是否符合电商App的业务逻辑,如果不符合,请修改。
九、未来扩展:把系统升级为“自动生成产品建议”
现在的系统能“挖需求”,但如果能自动生成产品优化建议,就更完美了——比如从“用户需要弱网下快速加载”生成“优化图片压缩算法”“增加离线缓存功能”。
9.1 扩展思路:增加“建议生成”轮
在原有3轮的基础上,加第4轮提示:
提示词模板:
基于用户需求:{needs},请生成具体的产品优化建议,要求:
1. 包含技术实现方向(比如“优化图片压缩算法”);
2. 说明建议的预期效果(比如“将加载时间从2分钟缩短到10秒”);
3. 用 bullet points 列出。
9.2 示例输出
需求:“用户需要App在弱网络环境下快速加载,以便在地铁等场景中及时使用”
建议:
- 优化图片压缩算法(将JPG图片压缩率从80%提高到60%),预期效果:减少图片加载时间50%;
- 增加离线缓存功能(自动缓存用户常用的页面),预期效果:弱网络下打开缓存页面时间≤10秒;
- 接入CDN加速(将静态资源分布到全国节点),预期效果:跨地区加载速度提升40%。
十、总结
到这里,你已经掌握了用Agentic AI从负面评论挖用户需求的完整流程:
- 问题诊断:传统情感分析的痛点是“浅层次、无场景、非结构化”;
- 解决方案:用Agentic AI的多轮推理+精准提示工程,逐步深入;
- 落地步骤:数据准备→提示词设计→多轮推理→结果验证→性能优化;
- 关键技巧:约束条件、示例引导、函数调用,让AI更“懂需求”。
最后,我想对你说:用户的负面评论,是产品的“金矿”——但只有用对工具,才能挖到“真金”(可行动的需求)。希望这篇文章能帮你把“负面评论”变成“产品优化的指南针”。
参考资料
- OpenAI Agentic AI文档:https://platform.openai.com/docs/guides/agentic-systems
- 《提示工程实战》:作者:吴恩达(Andrew Ng)
- Amazon Reviews公开数据集:https://s3.amazonaws.com/amazon-reviews-pds/tsv/index.txt
- Tenacity库文档:https://tenacity.readthedocs.io/en/latest/
附录:完整代码与数据集
- 完整代码:https://github.com/your-username/agentic-sentiment-analysis
- 测试数据集:
negative_reviews.csv(包含100条电商负面评论) - 结果示例:
review_analysis_results.csv(处理后的结构化结果)
如果你在落地过程中遇到问题,欢迎在评论区留言——我会尽力帮你解决!
最后:记得把你的结果分享出来,让更多人看到“AI如何帮产品团队更懂用户”~
更多推荐



所有评论(0)