首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

前端开发AI Agent之RAG篇

  • 25-04-23 05:01
  • 3526
  • 9905
juejin.cn

开始之前突然发现trae编辑器更新了,它终于支持MCP了,还接入了自己的MCP市场,之后可能会想尝试一下figma mcpserver,看看能否通过AI对话生成一些简易的UI支持前端开发者进行一些个人创作。这样一些AI根据UI生成项目的快速启动方案和UI测试都可以尝试了

image.png

RAG简介

检索增强生成(Retrieval-Augmented Generation, RAG)是一种结合了大型语言模型(LLM)生成能力和信息检索技术的强大方法。与仅依赖预训练知识的传统语言模型不同,RAG通过在查询时动态检索外部数据,使模型能够生成基于最新和准确信息的回答。这种方法显著提高了回答的准确性,减少了“幻觉”(生成错误或虚构内容),并使语言模型更适合需要特定领域知识的任务。

RAG的工作原理

RAG可以看作一个ETL(提取、转换、加载)流水线,结合了专门的查询技术。其工作流程包括以下步骤:

  1. 文档处理与分块:原始文档(文本、HTML、Markdown、JSON等)被分割成较小的片段,称为“块”(chunks)。分块策略(如递归分块或滑动窗口)确保文本分割后仍保留语义完整性。例如,一个文档可能被分成512个标记(token)的块,并设置50个标记的重叠以保持上下文。
  2. 嵌入生成:每个块被转换为一个捕捉其语义的数值向量(嵌入)。嵌入模型(如OpenAI的text-embedding-3-small或Cohere的embed-english-v3.0)将文本转化为高维向量(例如1536维)。这些向量支持高效的相似性搜索。
  3. 向量存储:嵌入向量存储在专门的向量数据库中(如PGVector、Pinecone、Qdrant),这些数据库优化了快速相似性搜索。元数据(如文档来源或关键词)可以与嵌入一起存储,支持过滤搜索。
  4. 查询处理:用户提交查询时,查询被转换为嵌入向量(使用与文档嵌入相同的模型)。系统通过相似性搜索从向量数据库中检索最相关的块。
  5. 回答生成:检索到的块作为上下文传递给大型语言模型(如GPT-4o-mini),模型根据这些上下文生成准确且相关的回答。

RAG的优势

  • 提高准确性:通过基于检索数据的回答,RAG降低了生成错误信息的风险。
  • 上下文相关性:RAG可以融入特定领域或用户提供的知识,使回答更具针对性。
  • 可扩展性:向量数据库支持高效存储和检索大数据集,适合企业级应用。
  • 灵活性:RAG支持多种文档类型,并可与不同的嵌入模型和向量存储集成。

RAG的挑战

  • 分块策略:不当的分块可能导致上下文丢失或检索无关内容。
  • 嵌入质量:检索效果依赖于嵌入模型的质量。
  • 延迟:检索和处理数据会增加计算开销,影响响应时间。
  • 复杂性:RAG的实现需要管理文档处理、嵌入生成、向量存储和模型集成。

Mastra对RAG的实现

Mastra 是一个基于TypeScript的AI代理框架,为开发者提供了构建RAG应用的强大而易用的平台。Mastra通过提供处理文档、生成嵌入、存储向量和检索上下文的API和工具,简化了RAG的复杂性。以下我们将详细探讨Mastra如何实现RAG及其关键功能。

Mastra RAG系统的核心组件

Mastra的RAG实现设计为模块化和灵活性,支持多种使用场景。主要组件包括:

  1. MDocument类:

    • MDocument类是Mastra文档处理的基础,支持多种格式,包括纯文本、HTML、Markdown和JSON。

    • 通过MDocument.fromText()、fromHTML()、fromMarkdown()和fromJSON()等方法,开发者可以从不同来源创建文档。

    • .chunk()方法使用递归或基于Markdown的分块策略将文档分割成块,开发者可以自定义块大小、重叠和元数据提取。

    • 示例:

      php
      代码解读
      复制代码
      import { MDocument } from "@mastra/rag"; const doc = MDocument.fromText("气候变化带来了重大挑战..."); const chunks = await doc.chunk({ strategy: "recursive", size: 512, overlap: 50, separator: "\n", });
  2. 嵌入生成:

    • Mastra通过Vercel AI SDK集成了多种嵌入提供商(如OpenAI、Cohere、Google),开发者可选择最适合的模型。

    • embedMany()函数为文档块生成嵌入,支持降维以提高效率。

    • 示例:

      javascript
      代码解读
      复制代码
      import { embedMany } from "ai"; import { openai } from "@ai-sdk/openai"; const { embeddings } = await embedMany({ values: chunks.map(chunk => chunk.text), model: openai.embedding("text-embedding-3-small"), });
  3. 向量数据库:

    • Mastra支持多种向量存储,包括PGVector、Pinecone、Qdrant、LibSQL和Cloudflare Vector,适应不同的部署环境。

    • 例如,PgVector类允许开发者在带有向量扩展的PostgreSQL数据库中存储和查询嵌入。

    • 示例:

      javascript
      代码解读
      复制代码
      import { PgVector } from "@mastra/pg"; const pgVector = new PgVector(process.env.POSTGRES_CONNECTION_STRING); await pgVector.upsert({ indexName: "embeddings", vectors: embeddings, });
  4. 检索与语义搜索:

    • Mastra的createVectorQueryTool()函数创建支持语义搜索的工具,代理可以通过查询嵌入检索相关块。

    • 开发者可以启用元数据过滤,使用MongoDB风格的查询来缩小搜索范围。

    • 示例:

      php
      代码解读
      复制代码
      import { createVectorQueryTool } from "@mastra/rag"; import { openai } from "@ai-sdk/openai"; const vectorQueryTool = createVectorQueryTool({ vectorStoreName: "pgVector", indexName: "embeddings", model: openai.embedding("text-embedding-3-small"), enableFilter: true, });
  5. GraphRAG:

    • Mastra扩展了传统RAG,推出了GraphRAG,一种基于图的检索方法,通过文档块构建知识图谱。节点表示块,边表示语义关系,支持通过图遍历实现更复杂的检索。

    • createGraphRAGTool()函数支持基于图的查询,结合向量相似性和关系上下文。

    • 示例:

      php
      代码解读
      复制代码
      import { createGraphRAGTool } from "@mastra/rag"; const graphRagTool = createGraphRAGTool({ vectorStoreName: "pgVector", indexName: "embeddings", model: openai.embedding("text-embedding-3-small"), graphOptions: { dimension: 1536, threshold: 0.7 }, });
  6. 代理集成:

    • Mastra的代理通过Agent类构建,集成了RAG工具以生成上下文感知的回答。开发者可以通过自定义指令确保回答简洁且相关。

    • 示例:

      javascript
      代码解读
      复制代码
      import { Agent } from "@mastra/core/agent"; import { openai } from "@ai-sdk/openai"; const ragAgent = new Agent({ name: "RAG Agent", model: openai("gpt-4o-mini"), instructions: "根据提供的上下文回答问题。", tools: { vectorQueryTool }, });

Mastra RAG的高级功能

Mastra提供多项高级功能以提升RAG性能:

  • 元数据过滤:开发者可基于元数据字段(如文档来源、日期)使用统一的MongoDB风格查询语法进行过滤,适合处理大数据集。
  • 重新排序:rerank()函数通过结合向量相似性和语义理解提高检索质量,确保优先返回最相关的块。
  • 基于图的检索:GraphRAG通过语义关系发现相关内容,适合需要复杂上下文的查询。
  • 评估指标:Mastra的评估框架提供ContextRelevancy、Faithfulness和AnswerRelevancy等指标,用于评估RAG输出质量,生成0–1的标准化分数,便于记录和比较。

实践示例:构建研究助手

Mastra的文档提供了一个构建研究论文助手的完整指南。以下是简化的实现过程:

  1. 加载并处理研究论文:

    ini
    代码解读
    复制代码
    import { MDocument } from "@mastra/rag"; import { fetch } from "undici"; const paperUrl = "https://arxiv.org/html/1706.03762"; const response = await fetch(paperUrl); const paperText = await response.text(); const doc = MDocument.fromText(paperText); const chunks = await doc.chunk({ strategy: "recursive", size: 512, overlap: 50, });
  2. 生成并存储嵌入:

    javascript
    代码解读
    复制代码
    import { embedMany } from "ai"; import { openai } from "@ai-sdk/openai"; import { PgVector } from "@mastra/pg"; const { embeddings } = await embedMany({ values: chunks.map(chunk => chunk.text), model: openai.embedding("text-embedding-3-small"), }); const pgVector = new PgVector(process.env.POSTGRES_CONNECTION_STRING); await pgVector.upsert({ indexName: "embeddings", vectors: embeddings, });
  3. 创建RAG代理:

    javascript
    代码解读
    复制代码
    import { Mastra } from "@mastra/core"; import { Agent } from "@mastra/core/agent"; import { createVectorQueryTool } from "@mastra/rag"; const vectorQueryTool = createVectorQueryTool({ vectorStoreName: "pgVector", indexName: "embeddings", model: openai.embedding("text-embedding-3-small"), }); const researchAgent = new Agent({ name: "Research Assistant", model: openai("gpt-4o-mini"), instructions: "分析学术论文并根据提供的上下文回答问题。", tools: { vectorQueryTool }, }); const mastra = new Mastra({ agents: { researchAgent }, vectors: { pgVector }, });
  4. 查询助手:

    ini
    代码解读
    复制代码
    const agent = mastra.getAgent("researchAgent"); const query = "翻译质量有哪些改进?"; const response = await agent.generate(query); console.log("回答:", response.text);

此示例展示了Mastra如何简化RAG流水线,从文档处理到回答生成,使开发者能够轻松构建复杂的AI应用。

总结

RAG就是给Agent提高了脑容量,比如我打算实现的前端岗位搜索和模拟面试功能,它可以直接去网上搜索,也可以我自己定时爬取网站内容,或者把我的前端笔记交给它,让他做一个向量数据库,这样agent就能直接根据rag回答出更准确和基于现实的内容了。同时,rag技术对于企业内部知识库想要构建自己的agent做开发增效也是必不可少的

注:本文转载自juejin.cn的前端花园的文章"https://juejin.cn/post/7495776682138697768"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

104
前端
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top