【广告营销Agent实战06】市场洞察Agent连接外部世界
🌐 如果说 AdAnalysisAgent 是向内看(查内部数据),那 MarketAgent 就是向外看(搜外部信息)。这篇聊聊如何让 AI 自动搜索、整合、分析市场信息。

为什么需要 MarketAgent?
举个例子。我们的投放团队要推一款新的借贷产品,需要了解:
-
竞品(比如分期乐、360借条)最近有什么动作 -
他们的广告素材是什么风格 -
市场上的主流利率是多少 -
最近监管有没有新政策
这些信息分散在各种新闻网站、行业报告、社交媒体里。以前的做法是人工去搜,然后整理成文档。一个人搞一天,信息还可能不全。
有了 MarketAgent,用户可以直接问:• "分析一下分期乐最近的市场策略"• "最近消费金融行业有什么重大新闻"• "对比一下主要竞品的广告素材特点"Agent 会自动搜索、整合、分析,最后给出一个结构化的报告。
核心能力设计
MarketAgent 的核心能力有三层:
1. 搜索层把用户的问题转化成搜索关键词,调用搜索引擎获取原始信息。
2. 整合层对搜索结果去重、排序、可信度评估,过滤掉垃圾信息。
3. 分析层基于整合后的信息,回答用户的具体问题,给出分析结论。
搜索层:SerpAPI 的接入
我们用的是 SerpAPI,它封装了 Google 搜索,返回结构化的结果。
func(s *SerpSearchTool) Execute(ctx context.Context,query string) (*SearchResult, error) {req := s.client.R().SetQueryParams(map[string]string{"q": query,"hl": "zh-cn","gl": "cn","num": "10", // 返回10条结果}).SetResult(&SearchResult{})resp, err := req.Get("/search")if err != nil {return nil, err}return resp.Result().(*SearchResult), nil}
查询改写
但这里有个关键问题:用户的问题往往不适合直接作为搜索关键词。
比如用户问:"分析一下分期乐最近的市场策略"
直接搜这句话,返回的结果可能很零散。更好的做法是分解成多个关键词:
-
"分期乐 2024 营销策略" -
"分期乐 广告投放" -
"分期乐 最新动态"
所以我们在搜索前加了一个"查询改写"步骤,让 LLM 把用户的问题改写成更适合搜索的关键词列表。
func(a *MarketAgent) rewriteQueries(ctx context.Context,question string) []string {prompt := `把用户的问题改写成3-5个搜索关键词,用逗号分隔。每个关键词要具体、有针对性,便于搜索相关信息。用户问题:` + questionresponse, _ := a.model.Generate(ctx, []*schema.Message{{Role: schema.User, Content: prompt},})// 解析逗号分隔的关键词return strings.Split(response.Content, ",")}
整合层:信息处理流水线
搜索返回的原始数据很乱,需要清洗和整合。
1. 去重
同一个新闻可能被多个网站转载,URL 不同但内容一样。我们用简单的文本相似度算法去重:
funcdeduplicate(results []*SearchResult) []*SearchResult {var unique []*SearchResultfor _, r := range results {isDup := falsefor _, u := range unique {if similarity(r.Snippet, u.Snippet) > 0.8 {isDup = truebreak}}if !isDup {unique = append(unique, r)}}return unique}
2. 可信度评估
不是所有搜索结果都值得信任。我们给信息源打了标签:
- 高可信度
:官方新闻网站、知名财经媒体(36氪、虎嗅等) - 中可信度
:行业自媒体、知乎专栏 - 低可信度
:内容农场、未经验证的自媒体
搜索结果的排序会参考这个可信度权重。
3. 时效性排序
市场信息时效性很强。一个三个月前的新闻可能已经没有参考价值了。我们优先返回最近一个月的内容。
funcscoreResult(result *SearchResult) float64 {score := 0.0// 可信度权重(0-1)score += result.CredibilityScore * 0.4// 时效性权重(0-1)daysSince := time.Since(result.PublishDate).Hours() / 24if daysSince <= 7 {score += 1.0 * 0.3 // 一周内} else if daysSince <= 30 {score += 0.7 * 0.3 // 一个月内} else {score += 0.3 * 0.3 // 更早}// 相关性权重(0-1)score += result.RelevanceScore * 0.3return score}
分析层:从信息到洞察
有了整合后的信息,最后一步是让 LLM 基于这些信息回答用户的问题。
Prompt 设计
你是一个市场分析专家。基于以下搜索结果,回答用户的问题。搜索结果:{{SEARCH_RESULTS}}要求:1. 回答要有理有据,引用具体的信息来源2. 如果信息不足,明确说明3. 给出结构化的分析结论4. 标注信息的时效性(如"根据2024年3月的报道")用户问题:{{USER_QUESTION}}
结构化输出
对于复杂的市场分析,我们要求 LLM 按照固定格式输出:
【市场概况】简要描述当前市场状况【竞品动态】列举主要竞品的最新动作【趋势分析】总结行业趋势和变化【建议】基于分析给出的行动建议【信息来源】列出主要参考来源和时间
实际案例
案例:分析分期乐的市场策略
用户问:分析一下分期乐最近的市场策略
查询改写:
-
分期乐 2024 营销策略 -
分期乐 广告投放 -
分期乐 最新动态 -
分期乐 市场份额
搜索结果(整合后):
-
36氪:《分期乐Q1财报:营收增长25%,重点布局下沉市场》(2024-03-15) -
虎嗅:《消费金融新战场:分期乐押注场景化营销》(2024-03-10) -
知乎专栏:《分期乐的广告投放策略分析》(2024-02-28)
LLM 生成的分析报告:
【市场概况】根据2024年Q1财报,分期乐营收同比增长25%,用户规模突破1.2亿。当前重点发力下沉市场和场景化营销。【核心策略】1.下沉市场布局:加大三四线城市的推广力度,与本地商户合作2.场景化营销:从单纯的借贷产品转向"消费+金融"的场景化服务3.品牌年轻化:签约年轻代言人,在抖音、B站等平台加大投放【广告投放特点】• 短视频平台占比60%(抖音、快手为主)• 素材风格偏向生活化场景,弱化"借钱"概念• 强调"分期免息"、"额度高"等卖点【建议】如果要与分期乐竞争,可以考虑:1. 差异化定位(如专注某个细分人群)2. 在分期乐覆盖较弱的渠道发力3. 强化风控和服务体验的差异化【信息来源】• 36氪(2024-03-15)• 虎嗅(2024-03-10)• 知乎专栏(2024-02-28)
踩过的坑
坑1:搜索结果质量不稳定
有时候搜索返回的都是垃圾信息(SEO 内容农场)。
解决方案:维护一个黑名单,过滤掉已知的低质量域名。同时在 Prompt 里加了一条:"如果搜索结果质量不高,明确告诉用户信息不足,不要编造内容。"
坑2:信息时效性判断困难
很多网页没有明确的发布时间,或者时间是错的(比如转载时改了时间)。
解决方案:从多个维度判断时效性:1. 网页的 meta 标签2. 正文中提到的时间3. URL 中的日期4. 如果都没有,标注为"时间不详"
坑3:LLM 幻觉问题
有时候 LLM 会"脑补"一些搜索结果里没有的信息。
解决方案:在 Prompt 里强调:"只能基于提供的搜索结果回答,不能添加搜索结果中没有的信息。如果信息不足,明确说明。"同时在回答中要求标注信息来源,方便用户验证。
成本控制
SerpAPI 是按调用次数收费的,每次搜索大概 $0.01。如果用户频繁搜索,成本会很高。
我们做了几个优化:
- 缓存机制
:相同的查询24小时内直接返回缓存结果 - 限流
:每个用户每天最多10次搜索 - 批量搜索
:把多个关键词合并成一次搜索
这样下来,平均每个用户每月的搜索成本控制在 $1 以内。
总结
MarketAgent 让 AI 有了"眼睛",可以看到外部世界的信息。它的核心价值是自动化信息收集和整合,把原本需要人工几小时完成的工作压缩到几分钟。
核心要点:1. 查询改写 是提升搜索质量的关键2. 信息整合 需要去重、评估可信度、排序3. 结构化输出 让分析结果更易读4. 成本控制 通过缓存和限流实现
下一篇文章会聊会话管理和消息持久化,也就是如何让 AI 有"记忆"。
📖 Mokiwi AI Agent 开发全记录 - 第6篇
作者:Colin Wang | 2026年4月
上一篇:数据分析 Agent下一篇:会话管理与消息持久化
💬 如果想进一步交流,欢迎加好友



评论