Agentic AI情感分析实战:用提示工程从负面评论里挖用户真需求

副标题:从0到1搭建可落地的用户声音挖掘系统

摘要/引言

你有没有过这样的经历?
作为产品运营,你盯着后台一堆“负面评论”发愁:用户说“App加载慢”“退款流程烂”“客服找不到”,但你不知道这些抱怨背后,用户真正需要的是什么——是“弱网下也能快速打开”?还是“退款进度实时提醒”?还是“10秒内接通人工客服”?
传统情感分析工具只能帮你把评论分成“正/负/中性”,但挖不到可行动的用户需求——这就像医生只告诉你“病人发烧了”,却没说“发烧是因为流感还是肺炎”。

那有没有办法让AI不仅“识别情绪”,还能“读懂需求”?
答案是:用Agentic AI(智能体)的多轮推理能力,配合精准的提示工程,把“负面评论”转化为“产品优化的具体方向”

在这篇文章里,我会带你从0到1搭建一个“负面评论→需求挖掘”的Agentic AI系统。你会学到:

  1. 如何设计多轮递进的提示词框架,让AI像侦探一样“剥洋葱”式分析;
  2. 如何用Agentic AI解决传统情感分析的3大痛点;
  3. 可复现的代码案例+避坑指南,直接落地到你的工作中。

目标读者与前置知识

目标读者

  • 产品运营/用户研究:想从用户反馈中挖到真需求,而非“情绪标签”;
  • AI应用工程师:需要落地情感分析场景,但对Agentic AI的提示设计不熟;
  • 创业者/小团队:没有资源买昂贵的用户调研工具,想用AI低成本解决问题。

前置知识

  1. 基础Prompt设计:知道如何给AI提清晰的要求(比如“用 bullet points 列出”);
  2. Python基础:会用pandas处理数据、openai调用API;
  3. 情感分析常识:了解“情绪分类”“ sentiment score”等基本概念。

文章目录

  1. 引言与基础
  2. 为什么传统情感分析“挖不到需求”?
  3. Agentic AI:解决问题的关键武器
  4. 环境准备:5分钟搭好运行环境
  5. 分步实现:从负面评论到用户需求的4步流程
  6. 关键技巧:让AI更“懂需求”的提示工程优化
  7. 结果验证:用数据证明你的需求挖对了
  8. 性能优化:从“能运行”到“能落地”的3个技巧
  9. 常见坑与解决方案:避免你踩我踩过的雷
  10. 未来扩展:把系统升级为“自动生成产品建议”
  11. 总结

一、为什么传统情感分析“挖不到需求”?

在聊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的解法是:

  1. 多轮推理:从“情绪”到“场景”再到“需求”,逐步深入;
  2. 场景化分析:强制AI拆解“用户使用的时间、地点、操作步骤”;
  3. 结构化输出:通过提示词要求AI返回“可直接入库”的格式(比如JSON)。

三、环境准备:5分钟搭好运行环境

3.1 需要安装的工具

  • Python 3.10+(建议用Anaconda管理环境);
  • OpenAI API密钥(或Anthropic、Google Gemini的密钥,本文用OpenAI演示);
  • 数据处理库:pandasnumpy
  • 可视化库:matplotlib

3.2 快速安装步骤

  1. 创建虚拟环境(可选但推荐):
    conda create -n agentic-sentiment python=3.11
    conda activate agentic-sentiment
    
  2. 安装依赖:
    新建requirements.txt
    openai==1.3.5
    pandas==2.1.4
    matplotlib==3.8.2
    tenacity==8.2.3  # 用于API重试
    
    然后运行:
    pip install -r requirements.txt
    
  3. 设置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时,出现TimeoutErrorAPIConnectionError
解决方案

  1. 加入重试机制(用tenacity库,如步骤4.3中的代码);
  2. 降低并发数(比如把并发请求数从10降到5);
  3. 检查网络连接(比如用代理解决墙的问题)。

8.3 坑3:结果不符合业务逻辑

症状:比如AI把“客服找不到”的需求提炼成“用户需要更漂亮的客服界面”(完全不符合业务逻辑)。
解决方案

  1. 在提示词中加入业务领域知识,比如:
    注意:本App是电商App,客服的核心需求是“快速响应”,不是“界面漂亮”。
    
  2. 增加“反思步骤”——让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从负面评论挖用户需求的完整流程:

  1. 问题诊断:传统情感分析的痛点是“浅层次、无场景、非结构化”;
  2. 解决方案:用Agentic AI的多轮推理+精准提示工程,逐步深入;
  3. 落地步骤:数据准备→提示词设计→多轮推理→结果验证→性能优化;
  4. 关键技巧:约束条件、示例引导、函数调用,让AI更“懂需求”。

最后,我想对你说:用户的负面评论,是产品的“金矿”——但只有用对工具,才能挖到“真金”(可行动的需求)。希望这篇文章能帮你把“负面评论”变成“产品优化的指南针”。

参考资料

  1. OpenAI Agentic AI文档:https://platform.openai.com/docs/guides/agentic-systems
  2. 《提示工程实战》:作者:吴恩达(Andrew Ng)
  3. Amazon Reviews公开数据集:https://s3.amazonaws.com/amazon-reviews-pds/tsv/index.txt
  4. Tenacity库文档:https://tenacity.readthedocs.io/en/latest/

附录:完整代码与数据集

  • 完整代码:https://github.com/your-username/agentic-sentiment-analysis
  • 测试数据集:negative_reviews.csv(包含100条电商负面评论)
  • 结果示例:review_analysis_results.csv(处理后的结构化结果)

如果你在落地过程中遇到问题,欢迎在评论区留言——我会尽力帮你解决!

最后:记得把你的结果分享出来,让更多人看到“AI如何帮产品团队更懂用户”~

Logo

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

更多推荐