构建技术洞察研究代理
如果您曾经向 ChatGPT 提出过类似这样的问题:“请帮我搜索一下所有科技产品,并根据您认为我会感兴趣的内容总结出趋势和模式。”
您知道,您得到的回复会很普通,它会搜索一些网站和新闻来源,然后把这些信息提供给您。
这是因为 ChatGPT 是为通用用例构建的。它采用常规搜索方法来获取信息,通常仅限于少数网页。
本文将向您展示如何构建一个利基代理,它可以搜索所有技术,聚合数百万条文本,根据角色过滤数据,并找到您可以采取行动的模式和主题。
此工作流程的目的是避免您独自坐着浏览论坛和社交媒体。代理应该为您完成这项工作,抓取任何有用的信息。
我们将能够使用唯一的数据源、受控的工作流程和一些提示链接技术来实现这一点。
通过缓存数据,我们可以将每份报告的成本降低到几美分。
如果您想尝试一下这个机器人,但又不想亲自启动它,可以加入这个 Discord 频道。如果您想自己构建它,可以在这里找到代码库。
本文重点介绍它的总体架构及其构建方法,而不是像 Github 中那样介绍一些细节性的代码。
1、构建注意事项
如果您是使用代理进行构建的新手,您可能会觉得这篇文章不够具有开创性。
不过,如果您想构建一个能够正常工作的东西,您仍然需要在 AI 应用程序中应用大量的软件工程知识。即使 LLM 现在可以独立运行,它们仍然需要指导和保护。
对于像这样的工作流程,如果系统应该遵循一条清晰的路径,您应该构建更结构化的“类似工作流”的系统。如果在循环中有人参与,您就可以使用更具动态性的系统。
这个工作流程之所以如此有效,是因为我背后有一个非常好的数据源。如果没有这条数据护城河,这个工作流程就不可能比 ChatGPT 做得更好。
2、准备和缓存数据
在构建代理之前,我们需要准备一个它可以利用的数据源。
我认为很多人在使用 LLM 系统时犯的一个错误是,他们认为 AI 可以完全独立地处理和聚合数据。
LLM 有点像通信层,这意味着它们可以处理一些数据,但不能取代数据工程。
在某个时候,我们或许能够为它们提供足够的工具来独立构建,但在可靠性方面我们还没有达到那个程度。
因此,在构建这样的系统时,我们需要数据管道像其他系统一样干净。
我在这里构建的系统使用了我已有的数据源,这意味着我知道如何教 LLM 使用它。
它每天从科技论坛和网站提取数千条文本,并使用小型 NLP 模型分解主要关键词、进行分类并分析情绪。
这让我们能够看到在特定时间段内,哪些关键词在不同类别中呈现趋势。
为了构建此代理,我添加了另一个端点,用于收集每个关键词的“事实”。
此端点接收关键词和时间段,系统会根据参与度对评论和帖子进行排序。然后,它会使用较小的模型对文本进行分块处理,这些模型可以决定保留哪些“事实”。
我们应用最后一个 LLM 来总结哪些事实最重要,同时保持来源引用的完整性。
这是一种即时链接过程,我构建它是为了模仿 LlamaIndex 的引用引擎。
首次调用端点获取关键词时,最多可能需要半分钟才能完成。但由于系统会缓存结果,任何重复请求只需几毫秒。
只要模型足够小,每天运行几百个关键词的成本就很小。之后,我们可以让系统并行运行多个关键词。
现在您可能可以想象,我们可以构建一个系统来获取这些关键词和事实,从而构建使用 LLM 生成不同的报告。
3、何时使用小型模型,何时使用大型模型
在继续之前,我们先提一下,选择合适的模型大小很重要,尽可能使用较小的模型。
我想现在每个人都在考虑这个问题。
有一些相当先进的模型可以用于任何工作流程,但随着我们开始在这些应用程序中应用越来越多的 LLM,每次运行的调用次数会迅速增加,成本也会随之增加。
因此,尽可能使用较小的模型。您看到我使用较小的模型来引用和分组来源。其他非常适合小型模型的任务包括将自然语言路由和解析为结构化数据。
如果您发现模型性能不佳,可以将任务分解为更小的问题,并使用提示链,先执行一项任务,然后使用该结果执行下一项任务,依此类推。
当您需要在非常大的文本中查找模式,或者与人交流时,仍然需要使用较大的 LLM。
在此工作流程中,成本极低,因为数据会被缓存,相似的查询也会被缓存,并且唯一唯一的 LLM 调用是最终调用。
4、此代理的工作原理
让我们来了解一下代理的底层工作原理。我构建了代理以在 Discord 内部运行,但这不是本文的重点。我们将重点介绍代理的架构。
我将流程分为两部分:设置和新闻。第一个流程要求用户设置他们的个人资料。
由于我已经知道如何使用数据源,因此我构建了一个相当全面的系统提示,以帮助 LLM 将这些输入转换为我们稍后可以获取数据的内容。
PROMPT_PROFILE_NOTES = """
You are tasked with defining a user persona based on the user's profile summary.
Your job is to:
1. Pick a short personality description for the user.
2. Select the most relevant categories (major and minor).
3. Choose keywords the user should track, strictly following the rules below (max 6).
4. Decide on time period (based only on what the user asks for).
5. Decide whether the user prefers concise or detailed summaries.
Step 1. Personality
- Write a short description of how we should think about the user.
- Examples:
- CMO for non-technical product → "non-technical, skip jargon, focus on product keywords."
- CEO → "only include highly relevant keywords, no technical overload, straight to the point."
- Developer → "technical, interested in detailed developer conversation and technical terms."
[...]
我还为我需要的输出定义了一个架构:
class ProfileNotesResponse(BaseModel):
personality: str
major_categories: List[str]
minor_categories: List[str]
keywords: List[str]
time_period: str
concise_summaries: bool
如果 LLM 不具备 API 及其工作原理的领域知识,他们不太可能独自搞清楚如何做到这一点。
您可以尝试构建一个更复杂的系统,让 LLM 首先尝试学习 API 或它应该使用的系统,但这会使工作流程更加难以预测且成本更高。
对于这类任务,我尽量始终使用 JSON 格式的结构化输出。这样我们就可以验证结果,如果验证失败,我们会重新运行。
这是在系统中使用 LLM 最简单的方法,尤其是在没有人参与检查模型返回结果的情况下。
一旦 LLM 将用户个人资料转换为我们在架构中定义的属性,我们就会将个人资料存储在某个地方。我使用了 MongoDB,但那可选。
存储用户个性并非强制要求,但您需要将用户所说内容转换为可生成数据的形式。
5、生成报告
让我们看看用户触发报告时第二步会发生什么。
当用户点击 /news 命令时,无论是否设置时间段,我们首先都会获取已存储的用户个人资料数据。
这为系统提供了获取相关数据所需的上下文,使用与个人资料相关的类别和关键词。默认时间段是每周。
由此,我们获得了所选时间段内用户可能感兴趣的热门关键词和趋势关键词列表。
如果没有这个数据源,构建这样的系统将会非常困难。需要提前准备好数据,以便 LLM 能够正常工作。
获取关键词后,可以添加一个 LLM 步骤来过滤掉与用户无关的关键词。我这里没有这样做。
LLM 收到的不必要信息越多,它就越难专注于真正重要的事情。你的工作是确保你输入的内容与用户的实际问题相关。
接下来,我们使用之前准备好的端点,其中包含每个关键词的缓存“事实”。这为我们提供了每个关键词已经过审查和排序的信息。
我们并行运行关键词调用以加快速度,但第一个请求 new 关键词还需要等待一段时间。
结果出来后,我们会合并数据,删除重复项,并解析引用,以便每个事实通过关键词编号链接回特定来源。
然后,我们会将数据通过提示链流程进行处理。第一个 LLM 会根据用户画像,找到 5 到 7 个主题,并按相关性对其进行排序。它还会提取关键点。
第二个 LLM 流程使用主题和原始数据生成两个不同长度的摘要以及标题。
我们这样做是为了确保减少模型的认知负荷。
由于我选择使用像 GPT-5 这样的推理模型,因此构建报告的最后一步耗时最多。
你可以将其换成更快的模型,但我发现高级模型在最后一步做得更好。
整个过程需要几分钟,具体取决于当天已缓存的内容量。
查看下方最终效果:
如果您想查看代码并自行构建此机器人,可以在这里找到。如果您只想生成报告,可以加入此频道。
如果您想挑战一下,可以将其重新构建成其他东西,例如内容生成器。
6、构建代理的注意事项
您构建的每个代理都会有所不同,因此这绝不是使用 LLM 构建的蓝图。但您可以看到这需要的软件工程水平。
至少目前,LLM 并不能取代优秀的软件和数据工程师。
在这个工作流程中,我主要使用 LLM 将自然语言转换为 JSON,然后以编程方式将其传输到系统中。这是控制代理流程最简单的方法,但这并非人们通常认为的 AI 应用。
在某些情况下,使用更自由的代理是理想的选择,尤其是在有人参与的情况下。
希望你从中学到一些东西,或者获得了一些灵感,可以自己动手做一些东西。
或者,你发现 Discord 机器人有助于你了解科技领域的动态(我每天都会在私人频道里发布这些报告,但可能会做得更好)。
原文链接:Building Research Agents for Tech Insights
汇智网翻译整理,转载请标明出处