
Gift Genie 团队 • 2024-10-24
Gift Genie:一个不会为你节省时间的智能体
这是我们最近的黑客马拉松获胜者的客座文章。
我们构建 GiftGenie 时心中怀有一个论点——智能体可以提供超越节省时间之外的价值。我们相信并非所有人都想优化生活的方方面面。有些人喜欢品味他们独有的时刻,为自己定义一种幸福的生活,一种有意义且独特的生活。有些人不介意花更多时间走更长的路,沿途闻闻花香。
我们人类定义有意义的生活的方式之一是培养人际关系。送礼是五种爱的语言之一,是我们表达感情的关键方式。这是一种古老而深刻的人类习俗。但围绕送礼来规划业务,尤其是那种不优化时间的业务,则违背了传统智慧。当目标不是效率时,您如何计算客户生命周期价值?愿意花更多时间挑选礼物的人的市场规模有多大?人类表达感情的需求程度是无法衡量的,但我们在LlamaIndex Ragathon看到了一个机会来检验我们的假设。
我们在这个项目中做出了一个大胆的尝试,那就是人们确实存在表达感情的基本需求,而且实际上,有一个巨大的市场,那里的人们愿意在送礼过程中投入额外的时间。通过传统的指标收集无法获得数字证明,但是LlamaIndex Workflows可以帮助快速启动一个可行的原型进行用户测试。GiftGenie 不是为了节省人们的时间,而是为了让送礼更有心意。
GiftGenie 的核心
我们意识到,如果将送礼变成一项无思的机械任务,我们就剥夺了送礼的核心——花时间去思考某人。您是否记得收到一份好礼物并因此感到被重视,知道其中蕴含着心意?这就是为什么我们想鼓励和支持人们在他们的选礼过程中,通过提供另一个视角来辅助用户与自己之间通常的单线程过程。
我们还相信,通过想象试穿那件衬衫、触摸那双毛茸茸的袜子、闻闻那支蜡烛的感觉——正是通过购物这种探索世界的体验,我们能更好地了解自己。购物可以是感官的享受,一场视觉盛宴和一次多感官的发现。我们认可并赞美这一点。花时间辨别我们喜欢什么和不喜欢什么,以及思考我们可以送给亲人什么礼物,这既是自我发现的形成性经历,也是培养我们更关注周围人的方式。

关注点分离方法
我们没有遵循浏览电子商务网站的传统路径,而是想尝试使用定义明确的函数调用,这些调用明确对应于解决此任务所需的一系列清晰定义的步骤。通过这种方式,开发者控制推荐系统,而不是涉及的电子商务平台。电子商务平台在产品展示和推荐策略方面存在局限性,无论是根据销售数量、利润率还是人类注意力跨度。当按多个商品类别购物时,电子商务网页将无法可靠地、一致地按商品类别组织并呈现每个兴趣类别的最佳推荐商品。

在我们心中选择礼物时,我们正在思考对方是否会喜欢这个物品,想象我们的收礼人将如何以积极有益的方式利用这份礼物,或者恰恰相反,他们会“被”另一个需要负责保管的资本主义副产品“困住”。在这种“反复斟酌”或“内心挣扎”中,人们将从观看关于产品如何被接受的利弊辩论中受益更多,因为这就是我们思考的方式,这也是我们构建这个应用的方式。

它是如何工作的?
我们根据使用Toolhouse API 提取的推文和文本输入将用户的兴趣映射到商品类别,然后将商品类别映射到每个类别的多个礼品选择。然后可以对这些礼品选择的适当性进行辩论。开发者可以选择并行运行辩论,也可以让辩论演变成另一个礼物想法。这种对少量不同礼物类别中物品微小变化的精细控制,类似于打开多个电子商务网站标签页并行搜索一个特定物品。
经过辩论推理后的最终选择是使用 Apify API 从亚马逊关键词搜索中选择最靠前的商品,但未来可以发展为接收前 n 个结果,包括网站上显示的推荐,然后在循环中进一步迭代辩论和礼品选择。
如您所见,当有一个工具可以将具体的行动步骤浓缩成模块化的构建块时,您的创造力将无限可能。
GiftGenie 的九步流程
以下是驱动 GiftGenie 的技术流程分解
- 推文提取器:从用户的社交媒体账号收集相关数据(推文),如果用户没有账号则接受文本输入。
- 推文分析器:解释数据以识别兴趣和偏好。
- 兴趣映射器:将用户的兴趣转化为潜在的礼物类别。
- 礼物想法生成器:根据这些类别提出具体的礼物想法。
- 调解过程:在辩论过程中为支持和反对的每个智能体发起第一个论点,设定辩论规则和基调。
- 礼物辩论者:对每个礼物想法进行 3 次支持和反对的论证,以完善选择。
- 礼物推理者:根据独特性、实用性以及与收礼人偏好的契合度来评判辩论结果。
- 亚马逊关键词生成器:创建搜索词条,帮助用户找到选定的礼物。
- 亚马逊产品链接生成器:检索产品链接并向用户展示,包含图片和价格。

礼品选择过程中的每个阶段都由一个特定的事件类和对应的使用 @step 装饰器修饰的函数表示。
我们使用Toolhouse API 从 X 账号中提取最新的最多 10 条推文。然后将推文分类到适合电子商务的兴趣主题。
事件驱动架构使我们能够模块化处理流程,并轻松添加或修改步骤。例如,在推文分析器中,如果用户数据有限,我们会确保识别出至少五个兴趣类别——技术、自我护理、旅行、食物和健身作为备用类别。
然后我们将兴趣以字典格式映射到产品类别。我们在提示中给出的一些例子包括:自我护理:有机面部精华液,娱乐:独立影院电影票,技术:高质量充电线。
在下一步中,将审查映射的兴趣类别,以进一步生成可能适合作为礼物的商品。优先考虑当地手工艺人、小企业或特色商店。也不常在普通商店找到的独特商品。此阶段的一些备用商品包括:特色黑巧克力、优质咖啡、熟食板配料、易腐败的精品食品储藏室商品、熟食、果酱、高级橄榄油、特色坚果酱。
针对推文内容涉及电视节目的人的示例产品类别到礼品映射
Smart Home Devices: ['Wyze Cam 1080p HD Indoor Wireless Smart Home Camera', 'Smart plug, Gosund Mini Wifi Outlet']
Concert Tickets: ['Gift Card for a Concert', 'Live Nation Gift Card']
Music Posters: ['Pink Floyd Poster', 'The Rolling Stones Poster', 'The Beatles Poster']
定义了可能的礼品后,我们指示 LLM 在单独的请求中生成支持和反对该礼物的第一个论点。“调解者”让反对的论点先发表,侧重于物品的限制和缺点,并让 LLM 提供收礼人可能不喜欢该礼物的具体原因。一些结果示例可能是物品缺乏用途,或者物品可能显得冒犯,例如赠送运动器材以传达收礼人身材走样的信息。
礼物辩论:为决策增加深度
反对智能体论点示例
'con': "A gourmet cheese basket may not be a suitable gift for all. The recipient might be lactose intolerant, vegan, or simply not a fan of cheese. Additionally, gourmet cheese often requires proper storage conditions which the recipient might not have."
GiftGenie 最有趣的部分之一是我们的礼物辩论系统。该过程模仿人类决策,权衡潜在的好处和缺点。工作原理如下:
- 辩论始于一个反对论点,强调为什么一份礼物可能不被欣赏。
- 随后是支持方和反对方之间的一系列来回辩论。
- 三轮过后,辩论的关键点被提炼成摘要。
- 最后一步推理根据独特性、实用性以及与收礼人兴趣的契合度等标准来评判礼物。
通过融入这些辩论,我们模拟了人们在选择礼物时自然会经历的深思熟虑。它确保 GiftGenie 不仅仅提供快速解决方案,而是提供周全、全面的建议。
辩论结束后,我们使用 Apify API 进行产品发现。礼物想法被转换为亚马逊搜索词,我们检索产品链接,并向用户展示,附带图片和价格。

那么 LlamaIndex Workflows 如何与我们的项目协同工作呢?
使用 LlamaIndex Workflows,我们想要采取的每个独立行动都与事件类名存在 1:1 的关系,如下所示
class InitializeEvent(Event):
pass
class TweetAnalyzerEvent(Event):
tweets: List[str]
class InterestMapperEvent(Event):
interests: str
class GiftIdeaGeneratorEvent(Event):
gift_categories: str
工作流程通过这些事件转换进行编排
@step
async def initialize(self, ctx: Context, ev: StartEvent) -> TweetAnalyzerEvent:
# Processing...
return TweetAnalyzerEvent(tweets=processed_tweets)
@step
async def tweet_analyzer(self, ctx: Context, ev: TweetAnalyzerEvent) -> InterestMapperEvent:
# Processing...
return InterestMapperEvent(interests=str(interests))
每个 @step 装饰器定义一个方法,该方法接收上一个事件并返回下一个事件。类型提示 (ev: TweetAnalyzerEvent -> InterestMapperEvent) 定义了流程。工作流程会根据事件类型自动知道下一步要调用哪个步骤。
上下文在整个工作流程中保持不变,用于存储 LLM 实例、智能体和中间结果。
使用 LlamaIndex Workflows:主要收获
使用 LlamaIndex Workflows 有助于通过将事件编排提炼为名称和类型来协调这些复杂的多步骤流程。您是否传递了任何上下文?是或否?Python 的类型提示已经成熟,因此利用它来传递事件输入和输出将非常直观。LLM 理解类继承和装饰器的工作方式,因此它们也能够理解并有效地生成代码。
class MediationEvent(Event):
gift_ideas: List[str]
class GiftDebaterEvent(Event):
gift_ideas: List[str]
debates: Dict[str, Dict[str, str]]
@step
async def mediation_agent(self, ctx: Context, ev: MediationEvent) -> GiftDebaterEvent:
return GiftDebaterEvent(gift_ideas=ev.gift_ideas, debates=debates)
未来方向
完成 GiftGenie 后,我们确定了几个未来可以探索的领域
- 并行运行步骤:凭借 LlamaIndex 的 Workflow Async 设计,多个事件可以同时运行。我们可以进一步尝试不同的方法来并行编排步骤。
- 更多数据源:我们可以整合其他数据源,例如 Instagram、YouTube 或亚马逊注册表,以进一步个性化推荐。
- 融入人工干预:基于初步推荐集,用户可以进一步输入他们的偏好,并运行另一个产品发现-辩论-推理循环来完善他们的产品选择。
让我们联系吧!
智能体由于其捆绑多个函数调用步骤的特性,可能不如传统方式快速或高效。我们让智能体保持其从容不迫的速度,将其作为原型工具来模仿复杂的人类送礼决策过程,优先考虑意义而非速度。“如果你建造了它,他们会来吗?”——这是一个我们可以利用 Workflows 作为工具来找到答案的问题。通过这样做,我们希望为其他开发者提供一些思考,帮助激发他们想用LlamaIndex Workflows构建什么的想法。
欢迎在 Github 上查看我们的项目。我们还与Toolhouse AI一起参加了一个播客。如果这个项目引起了您的共鸣,让我们联系并讨论吧!您可以在 LinkedIn 上找到我们:Tanmesh 和Lily。