大语言模型应用开发全流程实战指南:从运行、RAG到代理与安全部署

github:https://github.com/mlabonne/llm-course

大语言模型应用开发全流程实战指南:从运行、RAG到代理与安全部署

大模型实战指南:多模型生态实战与论文解读

一、运行 LLM(Running LLMs)

由于硬件要求较高,运行 LLM 可能很困难。根据您的使用案例,您可能只想通过 API(如 GPT-4)使用模型或在本地运行它。在任何情况下,其他提示和指导技术都可以改进和限制应用程序的输出。

  • LLM API:API 是部署 LLM 的一种便捷方式。这个空间分为私有 LLM(OpenAI、Google、Anthropic 等)和开源 LLM(OpenRouter、Hugging Face、Together AI 等)。

  • 开源 LLM:Hugging Face Hub 是查找 LLM 的好地方。您可以直接在 Hugging Face Spaces 中运行其中一些,也可以在 LM Studio 等应用程序中或通过 CLI 下载并运行它们llama.cpp 或 ollama。

  • 提示工程:常见的技术包括 zero-shot prompting、few-shot prompting、chain of thought 和 ReAct。它们更适合较大的模型,但可以适应较小的模型。

  • 结构化输出:许多任务需要结构化输出,例如严格模板或 JSON 格式。像 Outline 这样的库可以用来指导生成并遵循给定的结构。某些 API 还支持使用 JSON 架构原生生成结构化输出。

二、构建 Vector Storage(Building a Vector Storage)

创建矢量存储是构建检索增强生成 (RAG) 管道的第一步。文档被加载、拆分,并使用相关块来生成矢量表示(嵌入),这些向量表示(嵌入)被存储起来以备将来在推理期间使用。

  • 摄取文档:文档加载器是方便的包装器,可以处理多种格式:PDF、JSON、HTML、Markdown 等。他们还可以直接从一些数据库和 API(GitHub、Reddit、Google Drive 等)中检索数据。

  • 拆分文档:文本拆分器将文档分解为更小的、语义上有意义的块。与其在 n 个字符后拆分文本,不如按标题或递归方式拆分,并带有一些额外的元数据。

  • 嵌入模型:嵌入模型将文本转换为矢量表示。选择特定于任务的模型可显著提高语义搜索和 RAG 的性能。

  • 向量数据库:向量数据库(如 Chroma、Pinecone、Milvus、FAISS、Annoy 等)旨在存储嵌入向量。它们能够根据向量相似性高效检索与查询“最相似”的数据。

三、检索增强生成(Retrieval Augmented Generation)

借助 RAG,LLM 可以从数据库中检索上下文文档,以提高其答案的准确性。RAG 是一种无需任何微调即可增强模型知识的流行方法。

  • 编排器:LangChain 和 LlamaIndex 等编排器是将 LLM 与工具和数据库连接起来的常用框架。模型上下文协议 (MCP) 引入了一个新标准,用于跨提供商将数据和上下文传递给模型。

  • 检索器:查询重写器和生成检索器(如 CoRAG 和 HyDE)通过转换用户查询来增强搜索。多向量和混合检索方法将嵌入与关键字信号相结合,以提高召回率和准确性。

  • 记忆:为了记住以前的说明和答案,LLM 和 ChatGPT 等聊天机器人将此历史记录添加到其上下文窗口中。该缓冲区可以通过汇总(例如,使用较小的 LLM)、载体存储 + RAG 等来改进。

  • 评估:我们需要评估文档检索(上下文精度和召回率)和生成阶段(忠实度和答案相关性)。它可以通过 Ragas 和 DeepEval 工具(评估质量)进行简化。

四、高级 RAG(Advanced RAG)

实际应用程序可能需要复杂的管道,包括 SQL 或图形数据库,以及自动选择相关工具和 API。这些高级技术可以改进基线解决方案并提供其他功能。

  • 查询构建:存储在传统数据库中的结构化数据需要特定的查询语言,如 SQL、Cypher、元数据等。我们可以直接将用户指令翻译成查询,通过查询构造来访问数据。

  • 工具:代理通过自动选择最相关的工具来提供答案来增强 LLM。这些工具可以像使用 Google 或 Wikipedia 一样简单,也可以像 Python 解释器或 Jira 一样复杂。

  • Post-processing(后处理):处理馈送到 LLM 的输入的最后一步。它通过重新排序、RAG 融合和分类增强了检索到的文档的相关性和多样性。

  • 程序 LLM:DSPy 等框架允许您以编程方式基于自动评估优化提示和权重。

五、代理(Agents)

LLM 代理可以通过根据对其环境的推理采取行动来自主执行任务,通常是通过使用工具或功能与外部系统交互。

  • 代理基础:代理使用思想(内部推理来决定下一步做什么)、行动(执行任务,通常通过与外部工具交互)和观察(分析反馈或结果以改进下一步)来运作。

  • 代理框架:可以使用不同的框架简化代理开发,例如 LangGraph(工作流的设计和可视化)、LlamaIndex(使用 RAG 的数据增强代理)或 smolagents(初学者友好的轻量级选项)。

  • 多代理:更多实验性框架包括不同代理之间的协作,例如 CrewAI(基于角色的团队编排)、AutoGen(对话驱动的多代理系统)和 OpenAI Agents SDK(具有强大的 OpenAI 模型集成的生产就绪)。

六、推理优化 (Inference optimization)

文本生成是一个成本高昂的过程,需要昂贵的硬件。除了量化之外,还提出了各种技术来最大限度地提高吞吐量并降低推理成本。

  • Flash Attention:优化注意力机制,将其复杂度从二次转换为线性,从而加快训练和推理速度。

  • 键值缓存:了解键值缓存以及多查询注意力 (MQA) 和分组查询注意力 (GQA) 中引入的改进。

  • 推测性解码:使用小型模型生成草稿,然后由大型模型进行审查,以加快文本生成速度。

七、部署 LLM(Deploying LLMs)

大规模部署 LLM 是一项工程壮举,可能需要多个 GPU 集群。在其他场景中,可以以低得多的复杂度实现演示和本地应用程序。

  • 本地部署:隐私是开源 LLM 相对于私有 LLM 的重要优势。本地 LLM 服务器(LM Studio、Ollama、oobabooga、kobold.cpp 等)利用这一优势来支持本地应用程序。

  • 演示部署:Gradio 和 Streamlit 等框架有助于构建应用程序原型和共享演示。您还可以轻松地在线托管它们,例如使用 Hugging Face Spaces。

  • 服务器部署:大规模部署 LLM 需要云(另请参阅 SkyPilot)或本地基础设施,并且通常利用优化的文本生成框架,如 TGI、vLLM 等。

  • 边缘部署:在受限环境中,MLC LLM 和 mnn-llm 等高性能框架可以在 Web 浏览器、Android 和 iOS 中部署 LLM。

八、LLM 安全(Securing LLMs)

除了与软件相关的传统安全问题外,LLM 由于训练和提示的方式也存在独特的弱点。

  • Prompt hacking:与提示工程相关的不同技术,包括提示注入(劫持模型答案的额外指令)、数据/提示泄漏(检索其原始数据/提示)和越狱(制作提示以绕过安全功能)。

  • 后门:攻击媒介可以通过毒害训练数据(例如,使用虚假信息)或创建后门(在推理过程中改变模型行为的秘密触发器)来针对训练数据本身。

  • 防御措施:保护 LLM 应用程序的最佳方法是针对这些漏洞测试它们(例如,使用 red teaming 和 garak 等检查),并在生产环境中观察它们(使用像 langfuse 这样的框架)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值