如何在 Go 应用程序中使用检索增强生成(RAG)

news2025/7/17 14:13:05

图片

本文将帮助大家实现 RAG (使用 LangChain 和 PostgreSQL )以提高 LLM 输出的准确性和相关性。

得益于强大的机器学习模型(特别是由托管平台/服务通过 API 调用公开的大型语言模型,如 Claude 的 LLama 2等),生成式 AI 开发已经变得普惠化了。这使开发人员免于考虑基础设施问题,从而可以专注于核心业务问题。这也意味着开发人员可以自由选择最适合其解决方案的编程语言。Python 通常是 AI/ML 解决方案的首选语言,但在这一领域有更大的灵活性。

在本文中,您将看到如何利用 Go 编程语言来使用向量数据库和诸如 langchaingo 等技术实现检索增强生成(RAG) 。如果您是想学习如何构建生成式 AI 应用程序的 Go 开发人员,那您就来对地方了!

如果您正在寻找使用 Go 进行 AI/ML 的入门内容,欢迎查阅我在这一领域的前期博客和开源项目。

首先,让我们在深入本文实践部分之前退后一步,了解一些背景。

LLM 的局限性

大型语言模型(LLM)和其他基础模型经过了大量数据的训练,使它们能够在许多自然语言处理(NLP)任务中表现良好。但最重要的限制之一是大多数基础模型和 LLM 使用的是静态数据集,通常具有特定的知识截止时间(例如 2022 年 1 月) 。

图片

知识截止日期

例如,如果您询问了截止日期后发生的事件,它要么无法回答(这是可以的),要么更糟糕的是,自信地给出了错误的回应——通常被称为幻觉。

图片

幻觉

我们需要考虑到 LLM 只是根据它们训练的数据作出回应的事实——这限制了它们准确回答专业主题或专有主题问题的能力。例如,如果我提出了一个关于特定亚马逊云科技服务的问题, LLM 可能(也可能不)能给出准确的回应。如果 LLM 能够使用亚马逊云科技服务的官方文档作为参考,那不是很好吗?

RAG (检索增强生成)有助于缓解这些问题

它通过在响应生成过程中动态检索外部信息来增强 LLM ,从而扩展了模型的知识库超出其原始训练数据。基于 RAG 的解决方案包括一个向量存储,可以对其进行索引和查询以检索最新和相关的信息,从而扩展 LLM 的知识超出其训练截止日期。当需要生成响应时,配备了 RAG 的 LLM 首先会查询向量存储以找到与查询相关的最新信息。这确保了模型的输出不仅基于其现有知识,还增强了最新信息,从而提高了其响应的准确性和相关性。

但 RAG 并非唯一的方式

尽管本文仅关注于 RAG ,但还有其他解决此问题的方式,每种方式都有其优缺点:

  • 任务特定调优:在特定任务或数据集上微调大型语言模型,以提高它们在这些领域的性能。
  • 提示工程:仔细设计输入提示以引导语言模型产生期望的输出,无需进行重大架构更改。
  • 少量样本学习和零样本学习:使语言模型能够在有限或无额外训练数据的情况下适应新任务的技术。

向量存储和嵌入

在上一段中,我多次提到了向量存储。它们只是存储和索引向量嵌入的数据库,向量嵌入是数据(如文本、图像或实体)的数值表示。嵌入使我们能够超越基本搜索,因为它们代表了源数据的语义含义——因此得名“语义搜索”,这是一种理解单词的意义和上下文以提高搜索准确性和相关性的技术。向量数据库还可以存储元数据,包括嵌入的原始数据源(例如:Web 文档的 URL )的引用。

在这里插入图片描述

RAG - 数据摄取 由于生成式 AI 技术的爆炸式发展,向量数据库也出现了爆炸式增长。这些包括您可能已经在其他架构部分中使用的成熟 SQL 和 NoSQL 数据库,例如PostgreSQL 、Redis 、MongoDB 和 OpenSearch 。但也有专门为向量存储构建的数据库。其中包括 Pinecone 、Milvus 、Weaviate 等。

好了,让我们回到 RAG ……

典型的 RAG 工作流程是怎样的?

从高层次来看,基于 RAG 的解决方案具有以下工作流程。这些通常作为一个连贯的管道执行:

  • 从各种外部来源检索数据,如文档、图像、网址、数据库、专有数据源等。这包括分块子步骤,即将大型数据集(例如 100 MB PDF 文件)分割为较小的部分(用于索引)。

  • 创建嵌入- 这涉及使用嵌入模型将数据转换为其数值表示。

  • 在向量存储中存储/索引嵌入。

图片

RAG :端到端工作流程

最终,这将作为更大应用程序的一部分进行集成,在该应用程序中,上下文数据(语义搜索结果)将与提示一起提供给 LLM 。

端到端 RAG 工作流程实际运行

工作流程的每个步骤都可以使用不同的组件执行。本博客中使用的组件包括:

  • PostgreSQL- 由于 pgvector 扩展,它将用作向量数据库。为简单起见,我们将在 Docker 中运行。
  • langchaingo - 这是 langchain 框架的 Go 端口。它为各种组件(包括向量存储)提供插件。我们将使用它从 Web URL 加载数据并将其索引在 PostgreSQL 中。
  • 文本和嵌入模型- 我们将使用 Amazon Bedrock Claude and Titan models (用于文本和嵌入)与 langchaingo 。
  • 检索和应用集成- langchaingo 向量存储(用于语义搜索)和链(用于 RAG )。

您将了解这些单独部分的工作原理。我们将在后续博客中介绍这种架构的其他变体。

开始之前

请确保您已安装:

  • Go、Docker 和 psql (例如,如果您使用的是Mac,可以使用 Homebrew )。
  • 从本地机器配置 Amazon Bedrock 访问权限 。

在 Docker 上启动 PostgreSQL

我们可以使用 Docker 镜像!

docker run --name pgvector --rm -it -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres ankane/pgvector

左右滑动查看完整示意

通过从不同终端登录 PostgreSQL (使用 psql)激活 pgvector 扩展:

# 提示输入密码时输入 postgres psql -h localhost -U postgres -W
CREATE EXTENSION IF NOT EXISTS vector;

左右滑动查看完整示意

将数据加载到 PostgreSQL(向量存储)

克隆项目储存库

git clone https://github.com/build-on-aws/rag-golang-postgresql-langchain cd rag-golang-postgresql-langchain

左右滑动查看完整示意

在这一步骤中,我假设您的本地机器已配置好可以使用Amazon Bedrock 。

我们将要做的第一件事是将数据加载到 PostgreSQL中。

请随意使用您自己的!确保在后续步骤中相应地更改搜索查询。

图片

export PG_HOST=localhost 
export PG_USER=postgres 
export PG_PASSWORD=postgres 
export PG_DB=postgres

go run *.go -action=load -source=https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-general-nosql-design.html

左右滑动查看完整示意

您应该会看到以下输出:

在这里插入图片描述

给它一些时间。最后,如果一切顺利,您应该会看到“数据已成功加载到向量存储中”这样的输出。

要验证,请返回 psql 终端并检查表:

应该会看到几个表 - langchain_pg_collection 和 langchain_pg_embedding 。这些是由 langchaingo 创建的,因为我们没有明确指定它们(这没关系,对于入门来说很方便!)。langchain_pg_collection 包含集合名称,而 langchain_pg_embedding 存储实际的嵌入。

SchemaNameTypeOwner
publiclangchain_pg_collectiontablepostgres
publiclangchain_pg_embeddingtablepostgres

您可以检查表格内容:

select * from langchain_pg_collection; select count(*) from langchain_pg_embedding;
select collection_id, document, uuid from langchain_pg_embedding LIMIT 1;

左右滑动查看完整示意

您将在 langchain_pg_embedding 表中看到 23 行,因为那是我们的网页源被分割成的 langchain 文档数(请参阅上面加载数据时的应用程序日志)。

快速了解其工作原理…

数据加载实现在 load.go 中,但让我们看看如何访问向量存储实例(在 common.go 中):

brc := bedrockruntime.NewFromConfig(cfg)

embeddingModel, err := bedrock.NewBedrock(bedrock.WithClient(brc), bedrock.WithModel(bedrock.ModelTitanEmbedG1))
//...
store, err = pgvector.New(
context.Background(),
pgvector.WithConnectionURL(pgConnURL),
pgvector.WithEmbedder(embeddingModel),
)

左右滑动查看完整示意

  • pgvector.WithConnectionURL 提供 PostgreSQL实例的连接信息
  • pgvector.WithEmbedder 是有趣的部分,因为这是我们可以插入所选嵌入模型的地方。langchaingo 支持 Amazon Bedrock 嵌入。在这种情况下,我使用了Amazon Bedrock Titan 嵌入模型

回到 load.go 中的加载过程。我们首先使用 langchaingo 内置的 HTML 加载器获取数据,形式为schema.Document 的切片(getDocs 函数)。

docs, err := documentloaders.NewHTML(resp.Body).LoadAndSplit(context.Background(), textsplitter.NewRecursiveCharacter())

左右滑动查看完整示意

然后,我们将其加载到 PostgreSQL 中。我们不需要自己编写所有代码,可以使用 langchaingo 向量存储抽象并使用高级函数 AddDocuments :

_, err = store.AddDocuments(context.Background(), docs)

左右滑动查看完整示意

太好了。我们已经建立了一个简单的管道来获取和摄取数据到 PostgreSQL 。让我们加以利用吧!

语义搜索执行

让我们提出一个问题。我将采用“我可以使用哪些工具来设计 DynamoDB 数据模型?

我您可以根据您的场景进行调整。

export PG_HOST=localhost 
export PG_USER=postgres 
export PG_PASSWORD=postgres 
export PG_DB=postgres

go run *.go -action=semantic_search -query="what tools can I use to design dynamodb data models?" -maxResults=3

左右滑动查看完整示意

您应该会看到类似的输出 - 请注意,我们选择最多输出三个结果(您可以更改):

vector store ready

vector store ready

  • similarity search results

    similarity search info - can build new data models from, or design
    models based on, existing data models that satisfyyour application’s
    data access patterns. You can also import and export the designed
    datamodel at the end of the process. For more information, see
    Building data models with NoSQL Workbenchsimilarity search score -
    0.3141409

  • similarity search info - NoSQL Workbench for DynamoDB is a cross-platform, client-side GUIapplication that you can use for modern
    database development and operations. It’s availablefor Windows, macOS,
    and Linux. NoSQL Workbench is a visual development tool that
    providesdata modeling, data visualization, sample data generation, and
    query development features tohelp you design, create, query, and
    manage DynamoDB tables. With NoSQL Workbench for DynamoDB,
    yousimilarity search score - 0.3186116

  • similarity search info - key-value pairs or document storage. When you switch from a relational database managementsystem to a NoSQL
    database system like DynamoDB, it’s important to understand the key
    differencesand specific design approaches.

    TopicsDifferences between relational datadesign and NoSQLTwo key
    concepts for NoSQL designApproaching NoSQL designNoSQL Workbench for
    DynamoDBDifferences between relational datadesign and NoSQLsimilarity
    search score - 0.3275382

现在您在这里看到的是前三个结果(感谢-maxResults=3) 。

请注意,这不是对我们问题的回答。这些是来自向量存储的语义上接近查询的结果 - 这里的关键词是语义。

多亏了 langchaingo 中的向量存储抽象,我们能够轻松地将源数据摄入到PostgreSQL中,并使用SimilaritySearch 函数获取与我们查询相对应的前 N 个结果(参见 [ query.go ] 中的 semanticSearch 函数):

searchResults, err := store.SimilaritySearch(context.Background(), searchQuery, maxResults)

请注意, pgvector 在 langchaingo 中的实现使用余弦距离向量运算,但 pgvector 也支持 L2 和内积。

好的,到目前为止我们已经:

  • 加载了向量数据
  • 执行了语义搜索

这是 RAG (检索增强生成)的基石 - 让我们看看它的实际应用!

智能搜索与 RAG

要执行基于 RAG 的搜索,我们运行与上述相同的命令(几乎相同),只需对动作(rag_search)做一点小改动:

export PG_HOST=localhost 
export PG_USER=postgres 
export PG_PASSWORD=postgres 
export PG_DB=postgres 

go run *.go -action=rag_search -query=“我可以使用哪些工具来设计DynamoDB数据模型?” -maxResults=3

左右滑动查看完整示意

这是我得到的输出(您的情况可能会略有不同):

Based on the context provided, the NoSQL Workbench for DynamoDB is a
tool that can be used to design DynamoDB data models. Some key points
about NoSQL Workbench for DynamoDB:

  • It is a cross-platform GUI application available for Windows, macOS, and Linux.
  • It provides data modeling capabilities to help design and create DynamoDB tables.
  • It allows you to build new data models or design models based on existing data models.
  • It provides features like data visualization, sample data generation, and query development to manage DynamoDB tables.
  • It helps in understanding the key differences and design approaches when moving from a relational database to a NoSQL database like
    DynamoDB.

So in summary, NoSQL Workbench for DynamoDB seems to be a useful tool
specifically designed for modeling and working with DynamoDB data
models.

因此,总的来说, NoSQL Workbench for DynamoDB 是专门用于建模和处理 DynamoDB 数据模型的有用工具。

正如您所看到的,结果不仅仅是**“这里是对您查询的前 X个响应”**。相反,它是对该问题的周全阐述。让我们再看看幕后是如何运作的。

与摄入和语义搜索不同,RAG 基于搜索没有直接在 langchaingo 向量存储实现中公开。为此,我们使用langchaingo 链,它负责以下工作:

  • 调用语义搜索
  • 将语义搜索与提示组合在一起
  • 将其发送到大型语言模型( LLM ) ,在本例中就是[Amazon Bedrock上的Claude] 。

以下是链的样子(参考 [query.go] 中的 ragSearch 函数):

在这里插入图片描述

左右滑动查看完整示意

让我们尝试另一个

这只是一个例子。我提出了一个不同的问题,并将 maxResults 增加到 10 ,这意味着来自向量数据库的前 10 个结果将用于构建答案。

go run *.go -action=rag_search -query="how is NoSQL different from SQL?" -maxResults=10

左右滑动查看完整示意

结果(同样,对于您可能会有所不同):

Based on the provided context, there are a few key differences between
NoSQL databases like DynamoDB and relational database management
systems (RDBMS):

  1. Data Modeling: - In RDBMS, data modeling is focused on flexibility and normalization without worrying much about performance
    implications. Query optimization doesn’t significantly affect schema
    design. - In NoSQL, data modeling is driven by the specific queries
    and access patterns required by the application. The data schema is
    designed to optimize the most common and important queries for speed
    and scalability.
  2. Data Organization: - RDBMS organizes data into tables with rows and columns, allowing flexible querying. - NoSQL databases like DynamoDB
    use key-value pairs or document storage, where data is organized in a
    way that matches the queried data shape, improving query performance.
  3. Query Patterns: - In RDBMS, data can be queried flexibly, but queries can be relatively expensive and don’t scale well for
    high-traffic situations. - In NoSQL, data can be queried efficiently
    in a limited number of ways defined by the data model, while other
    queries may be expensive and slow.
  4. Data Distribution: - NoSQL databases like DynamoDB distribute data across partitions to scale horizontally, and the data keys are
    designed to evenly distribute the traffic across partitions, avoiding
    hot spots. - The concept of “locality of reference,” keeping related
    data together, is crucial for improving performance and reducing costs
    in NoSQL databases.

In summary, NoSQL databases prioritize specific query patterns and
scalability over flexible querying, and the data modeling is tailored
to these requirements, in contrast with RDBMS where data modeling
focuses on normalization and flexibility.

从这里前进到哪里

边做边学是一个好方法。如果您一直跟随并执行了到目前为止的应用程序,那太好了!

我建议您尝试以下操作:

  • langchaingo 支持许多不同的模型,包括 [Amazon Bedrock 中的模型] (例如 Meta LLama 2、Cohere 等)- 尝试调整模型并查看是否会产生差异?输出是否更好?
  • 那么向量数据库呢?我演示了 PostgreSQL ,但 langchaingo 也支持其他数据库(包括 OpenSearch 、Chroma 等)- 尝试切换向量存储并查看搜索结果是否有差异?
  • 您可能已经大致了解了,但您也可以尝试不同的嵌入模型。我们使用了 Amazon Titan ,但 langchaingo 也支持许多其他模型,包括:Amazon Bedrock 中的 Cohereembed 模型。

总结

这只是一个简单的示例,旨在让您更好地理解构建基于 RAG 的解决方案中的各个步骤。这些可能会根据实现的不同而略有变化,但高层次的思路保持不变。

我使用了 langchaingo 作为框架。但这并不意味着您一定要使用某个框架。如果您需要在应用程序中进行细粒度控制或框架无法满足您的要求,您也可以移除抽象层并直接调用 LLM 平台的 API 。与大多数生成式 AI 一样,这个领域正在迅速发展,我对 Go 开发人员拥有更多选择来构建生成式 AI 解决方案持乐观态度。

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

echarts饼图实现饼旋转,引线翻转效果

先上效果图: 这里使用的是vue2.0。 npm install echarts 安装echarts后将其挂在在vue上,在main.js中进行操作 // 全局引入Echarts import * as echarts from "echarts"; // 然后挂载在vue原型上 Vue.prototype.$echarts = echarts; 全部代码: <template>…

Vulnhub-DC-8

靶机IP:192.168.20.143 kaliIP:192.168.20.128 网络有问题的可以看下搭建Vulnhub靶机网络问题(获取不到IP) 信息收集 用nmap和wappalyzer收集下信息 发现是Drupal 7网站 dirsearch扫下目录 ┌──(root㉿kali)-[/home/kali/Desktop] └─# dirsearch -u http://192.168.20…

Redis 最佳实践

一、Redis 键值设计 1.1 优雅的 key 结构 Redis 的 Key 虽然可以自定义&#xff0c;但最好遵循下面的几个最佳实践约定&#xff1a; 1、遵循基本格式&#xff1a;[业务名称]:[数据名]:[id] 2、长度不超过 44 字节&#xff08;不同版本可能具体的大小不同&#xff09; 3、不包…

算法day30

第一题 433. 最小基因变化 题型转化&#xff1a;可以转化为边权为一的最短路问题 将最开始的字符串定义为起点&#xff0c;我们将初识字符串每一个元素改变一次定义为移动一个位置&#xff0c;最后的字符串定义为中点&#xff0c;就这样每一次改变一个元素&#xff0c;最后成功…

springboot3 基础特性(1)

文章目录 一、SpringApplication三种方式1.1 基础方式1.2.自定义 SpringApplication1.3、FluentBuilder API 二、自定义Banner三、Profiles3.1 什么是 Profiles &#xff1f;3.2 声明Profiles3.3 激活配置文件3.3.1 分组3.3.2 环境包含3.3.3 激活方式3.3.4 配置优先级 一、Spri…

大型医院手术麻醉系统源码,前端采用Vue,Ant-Design开发,稳定成熟

医院手麻系统源码&#xff0c;手术麻醉信息系统&#xff0c;C#源码 医院手术麻醉信息系统包含了手术申请、排班、术前、术中、术后&#xff0c;直至出院的全过程。通过与相关医疗设备连接&#xff0c;与大屏幕显示公告相连接&#xff0c;实现了手术麻醉临床应用数据链全打通。…

一文让你清晰了解医疗行业采购堡垒机的必要性

医疗行业&#xff0c;一个与大家息息相关的行业。随着医疗行业的快速发展和信息化建设的深入推进&#xff0c;传统网络安全防护手段已经难以满足现代医疗信息系统的安全需求&#xff0c;特别是在处理敏感的患者信息和保障医院内部数据安全方面。因此采购堡垒机是非常必要的。 堡…

在BFT购买到了一款超好用的夹爪,发现BFT Robotics方便又专业

“买机器人&#xff0c;上BFT” BFT作为一站式机器人工业互联网平台&#xff0c;提供了多种夹爪产品&#xff0c;包括但不限于Robotiq品牌的夹爪。这些夹爪产品广泛应用于自动化生产线&#xff0c;提高生产效率和精度。以下是对BFT购买的夹爪进行的详细测评。 我之前在BFT上购…

Vue33-更新流程

一、更新流程预览 二、<template>标签说明 <template>元素不能作为根元素。 三、beforeUpdate函数 四、updated函数

【C++游戏程序】easyX图形库还原游戏《贪吃蛇大作战》(一)

一.游戏逻辑概述 游戏完成图如图下所示&#xff1a; 根据游戏设定&#xff0c;需要实现的总体框架如下&#xff1a; 场景中有玩家可以操纵的初始角色-贪吃蛇场景中有AI自动操作的敌人-敌对贪吃蛇场景中的彩色圆点可以被敌人或者玩家吃掉&#xff0c;并且增加分数玩家触碰到敌人…

华为大咖说 | AI 是行业的未来, 还是另一个“元宇宙”?

本文作者&#xff1a;陈冠宏&#xff08;华为网络MSSD首席顾问&#xff09;全文约4497字&#xff0c;阅读约需10分钟 在本年度的517电信日上&#xff0c;中国电信高层在产品升级计划发布会中喊出“ALL in AI”战略&#xff0c;其震撼力让人瞩目。 自2022年11月OpenAI推出划时代…

全国各城市劳动力就业及收入状况数据, 2020-2022年,附高清可视化地图

基本信息. 数据名称: 全国各城市劳动力就业及收入状况数据 数据格式: Shp、excel 数据时间: 2020-2022年 数据几何类型: 面 数据坐标系: WGS84 数据来源&#xff1a;网络公开数据 数据可视化.

【SpringCloud学习笔记】RabbitMQ(中)

1. 交换机概述 前面《RabbitMQ上篇》我们使用SpringAMQP来演示如何用Java代码操作RabbitMQ&#xff0c;当时采用的是生产者直接将消息发布给队列&#xff0c;但是实际开发中不建议这么做&#xff0c;更加推荐生产者将消息发布到交换机(exchange)&#xff0c;然后由exchange路由…

AI 大模型的赛点:通用与垂直之争

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

机器视觉:光源的类型以及主要参数

光源在机器视觉中起着决定性的作用&#xff0c;决定了视觉算法的复杂性&#xff0c;也决定了视觉系统的精度和稳定性。光源用于突出目标物体的特征&#xff0c;增加目标物体与背景的对比度&#xff0c;克服环境光线的干扰。光源的选择与打光方式在视觉系统的前期评估中非常重要…

【DIY飞控板PX4移植】BARO模块BMP388气压计的PCB硬件设计和PX4驱动配置

BARO模块BMP388气压计的PCB硬件设计和PX4驱动配置 BMP388简介硬件设计封装原理图PCB设计引脚选择问题 PX4驱动配置飞控板的配置文件夹结构default.px4board文件nuttx-config/nsh/defconfig文件nuttx-config/include/board.h文件src/board_config.h文件src/i2c.cpp文件init/rc.b…

Springboot防疫知识科普系统-计算机毕业设计源码03531

摘 要 如今计算机行业的发展极为快速&#xff0c;搭载于计算机软件运行的数据库管理系统在各行各业得到了广泛的运用&#xff0c;其在数据管理方面具有的准确性和高效性为大中小企业的日常运营提供了巨大的帮助。自从2020年新冠疫情爆发以来&#xff0c;防疫成了社会关注的重中…

LLM 大模型学习:数据预处理、模板设计以

在模型训练过程中&#xff0c;数据及数据处理是最为重要的工作之一。在当前模型训练流程趋于成熟的情况下&#xff0c;数据集的好坏&#xff0c;是决定了该次训练能否成功的最关键因素。 在上一篇中&#xff0c;我们提到了模型训练的基本原理是将文字转换索引再转换为对应的向…

开放式耳机哪个品牌质量比较好?2024高性价比机型推荐!

随着音乐技术的不断发展&#xff0c;开放式耳机已成为音乐发烧友们的另外一种选择。从最初的简单音质&#xff0c;到如今的高清解析&#xff0c;开放式耳机不断进化升级。音质纯净&#xff0c;佩戴舒适&#xff0c;无论是街头漫步还是家中放松时候&#xff0c;都能带给你身临其…

Arrays与Lambda

Arrays 默认排序&#xff1a; 按照指定规则排序&#xff1a; 细节&#xff1a; 底层原理&#xff1a; 代码实现&#xff1a;o1-o2:升序排列 o2-o1:降序排列 Lambda表达式&#xff1a;简化匿名内部类方法 函数式编程&#xff1a; 格式&#xff1a; 总结&#xff1a; …