百度大模型构建智能问答系统技术实践

基于大语言模型的智能问答系统架构设计 很高兴能够为您撰写这篇专业的技术博客文章。作为一位世界级的人工智能专家和计算机领域大师,我将以专业的技术语言,结合深入的研究和丰富的实践经验,为您呈现一篇内容丰富、结构清晰、见解独到的技术文章。 让我们开始吧! 1. 背景介绍 随着自然语言处理技术的飞速发展,基于大语言模型的智能问答系统已经成为当前人工智能领域的热点研究方 阅读详情
AI摘要

本文介绍数据库运维知识库智能问答系统的设计与实现。结合大模型与向量数据库,解决传统运维知识库不足。阐述架构设计、分模块实现,分析向量数据库召回率低、Token数量限制、知识陈旧和虚构答案等难点及解决方案,还提及应用场景和AI大模型学习资料。

背景

随着大模型的飞速发展, AI 技术开始在更多场景中普及。在数据库运维领域,我们的目标是将专家系统和 AI 原生技术相融合,帮助数据库运维工程师高效获取数据库知识,并做出快速准确的运维决策。

传统的运维知识库系统主要采用固化的规则和策略来记录管理操作和维护的知识,这些系统的知识检索方式主要基于关键字搜索和预定义的标签或分类,用户需要具备一定的专业知识才能有效地利用这些系统。

这已不足以满足现在复杂多变的运维环境。因此,借助大模型来提供运维知识并协助决策成为趋势。这将在运维能力、成本控制、效率提升和安全性等方面带来深刻的变革。

在数据库领域,AI 技术应用可以划分为不同场景,例如知识库学习(包括知识问答和知识管理)、诊断与推理(包括日志分析和故障诊断)、工作辅助(包括 SQL 生成和 SQL 优化)等。本文将主要着重介绍「知识库智能问答系统」的设计与实现,旨在为读者提供深入了解该领域应用的思路。

架构设计和实现

技术方案选型

目前,大模型已经可以通过对自然语言的理解揣摩用户意图,并对原始知识进行汇总、整合,进而生成更具逻辑和完整性的答案。然而,仍存在以下几个问题,导致我们不能直接使用这些模型来对特定领域知识进行问答。

专业性不足:作为通用大模型,对专业领域知识的训练不足,可能会产生虚假陈述、准确性不足以及信息丰富度不足的问题。

时效性问题: 模型的训练数据基于某个时间之前的数据,缺乏最新的信息,每次添加新数据都会导致高昂的训练成本。

安全性问题: 模型无法访问企业内部私密文档,且这些文档不能直接用于 Fine-Tuning。

为了解决这些问题,业界采用了如下几种技术手段来为大型模型提供额外知识。

Fine-Tuning(微调): 使用特定领域的知识对基础大模型进行微调,以改变神经网络参数的权重。虽然适用于特定任务或风格,但需要大量资源和高质量的训练数据。**Prompt 工程:**将行业领域的知识作为输入消息提供给模型,让模型对消息中的知识进行分析和处理。这种方法在正确性和精度上表现良好,但有文本长度限制,对于大规模数据不够高效。

与传统搜索结合: 使用传统搜索技术构建基础知识库,然后使用大语言模型处理用户请求,对召回结果进行二次加工。这种方法具有更高的可控性和效率,并适用于大规模数据。

为了确保准确性和效率,我们选择了第 2 种和第 3 种方式相结合的方案,通过向量数据库将知识外挂作为大模型记忆体,使用 LangChain 作为基础开发框架来构建知识库问答系统,最终依靠 Prompt 工程和大模型进行交互。

分模块设计实现

数据库运维知识库的整体设计流程如下图所示,包括文档加载、文档分割、文本/问题向量化、问答缓存、大模型生成答案等流程。

图片

知识入库

数据源加载和解析: 主要使用 LangChain 支持的文档加载方法,对 PDF、CSV、Markdown 等格式的文档类型进行加载和采集。此外,考虑到很多企业的文档来源是内网网页,因此也支持 Selenium 和 BeautifulSoup 来爬取网页内容,最后再应用 LangChain 中的 Markdown 加载器进行格式解析。

文本分片: 原始知识库应当被拆分成独立、较短的文本块,每个文本块将作为问答的最小记录,与问题进行匹配。文本的切分质量直接关系到 Embedding 和召回的质量。切分块不能太大或者太小,也不能超过 Embedding 和大模型的 token 限制。在很多内部网页文档中,由于多级标题和段落间是有上下文关联的,所以我们采用 Markdown 或者 HTML 方式进行切分,进而大大提高了对文档内容的感知能力。

在文本切分器的选择上,我们主要采用 LangChain 中的 RecursiveCharacterTextSplitter 和 SpacyTextSplitter 这两种分词器。它们能够在保持知识点完整性的基础上,对中文句子、段落、章节等进行良好的切分。需要注意的是,由于算法有 token 数量的限制,选择好的分词器能够为切片提供很好的切分单位和依据。目前我们选择的是 tiktoken 和 Spacy 中的 Tokenizer,但有时候并不理想,需要根据大模型采用的 token 计算方法进行适配。

文本向量化: 在项目初期 Embedding 模型选择了 Hugging Face 上开源的 Embedding 模型,例如 GanymedeNil/text2vec-large-chinese 和 moka-ai/m3e-large,但实际测试效果并不理想。最终我们选择了文心的 Embeddings 模型,效果有质的飞跃,虽然支持的 token 和向量维度低,但整体效果很好。LangChain 中对于千帆接口进行了封装,可以直接通过百度千帆调用文心 Embedding。关于文本向量化、存储和检索的详细信息,请参考下图:

图片

存储:将生成的 Embeddings(向量)与原始分片(知识点)进行存储,同时考虑存储一些关键的元信息,如链接地址和分片大小,以用于检索时作为过滤条件。专业的解决方案是使用向量数据库,但也可以考虑传统数据库或存储中间件,如 RedisSearch 或 pgvector,它们都支持向量字段和向量相似性查询,可提供实时向量索引和查询功能。

在向量数据库选型上我们对 ElasticSearch、Baidu ElasticSearch(BES)、Milvus 和 PGVector 分别做了测试,在查询性能方面,PostgreSQL 性能较差不可用,而 BES、ES、milvus 性能在一个层级,BES 采用自研的插件实现了 HNSW 算法,召回效果表现更好。在资源消耗方面,它们都较为耗费内存,其中 BES 和 ES 相对来说消耗较小。BES 是百度智能云自研的分布式、开源搜索与分析引擎,在百度内部多模态和大模型基础平台有多年积累和应用,在性能、分布式和易用性方面表现良好,LangChain 也对其进行了集成,最终我们选择了 BES 作为向量数据库。

数据检索
  • 用户问题向量化: 对用户的问题进行向量化计算。如果结果在缓存中命中,将从缓存中获取已经缓存的答案,以减少文心大模型 API 费用和提高响应速度,可使用 GPTCache 等库来实现。
  • 向量检索: 使用 Embeddings 模型在向量数据库中进行相似性计算,召回相似度最高的 n 个分片。目前设置的召回策略是默认选择前 10 个评分最高的分片。
结果整合

将向量数据库检索召回的文本进行二次加工后,利用 LLM 总结概括和分析推理能力,完成最终答案的生成。

Prompt 生成: 将 n 个切片和用户原始 Question 组装成 Prompt。需要注意的是,Prompt 不能超出 Token 限制,超出限制则需要进行优化,例如淘汰或多次迭代调用等。我们在 Prompt 中除了原始问题和内容,还对大模型加入了回答内容的限制,如「不允许在答案中添加编造成分」、「请用中文回答」等。此外,我们还提供记忆功能,将历史会话信息传入 Prompt,一并发送给大模型。

大模型响应: 将 Prompt 发送给大模型,获取最终的结果。同时,将对话信息和结果追加存储到 MySQL 中,以保存会话历史,这有助于会话重启和历史信息接入大模型。

技术难点和解决方案

难点一:向量数据库召回率低

尽管通过将知识嵌入(Embedding)与大型语言模型相结合已经成为一种高效的实现路径,但向量数据库在向量化、存储和检索等多个阶段都可能存在问题,进而导致检索结果的召回率不尽如人意。在实际测试中,我们在未经优化的情况下,召回率仅达到了 70% 左右。而一个相对可靠的系统,召回率至少需要达到 85% 或甚至 90% 以上。以下是我们在应用中采取的优化措施。

精确切分文本

分割模型: 由于训练的文档主要是中文文档,因此切片工具必须具备对中文的良好支持。为此,我们首选 Spacy 作为分割工具,并采用 zh_core_web_sm 模型作为标记器(tokenizer)。

分割条件: 一般情况下,大部分系统会使用 LangChain 定长切分,但这样会丢失大部分上下文关联,知识点也是割裂的。在实践中,我们没有仅仅依赖 chunk size 作为唯一的切割条件,而是对那些具有明显段落或章节结构的文本格式(如 Markdown 或 HTML)进行了格式化分割,以确保文本的连续性、相关性和完整性。当段落超过 Embedding token 数限制时,我们会使用 RecursiveCharacterTextSplitter 对段落继续进行切分,切分条件除了设置换行符外,还加入了中文常见的断句符号,比如分号、叹号等。

标题补偿 :当某段文字的大小超过了 chunk size 时,我们会针对没有标题的 chunk 补充标题,以确保整体切分的完整性。

图片

优化文本向量化

标题向量化: 在进行精细化切分之后,标题的重要性显现出来。因此,我们在这一阶段对标题进行向量化处理。这一方法适用于帮助手册、 HTML 和 Markdown 等文本格式。

内容关键字向量化: 如果仅对标题进行向量化,对于那些标题概括性较差或段落内容丰富的情况,精召率提升仍然有限。因此,我们还尝试了了另一种方法,即首先利用大型模型或关键字模型提取关键字,数量通常限制在 10 左右,然后对这些关键字进行向量化处理。由于多轮次调用的耗时和关键字提取的可靠性问题,最终该方案被放弃。

标题 + 内容同时向量化: 在文本分割时,我们强行对每个分片加入了标题。在向量化时,会将标题 + 内容打包一并进行向量化。我们将用户提问向量化后,和向量化后的切片进行检索匹配,选择与问题最相关的 topN 切片,这样可以显著提高精召率,这也是我们最终的方案。

Embeddings 和向量检索调优

对于 Embeddings 的选择和调优,上文已经介绍过,我们最终选择了效果更好的文心 Embedding。对于向量数据库检索性能,这里优化空间并不大,调整 HNSW 算法的参数,对最后召回结果影响不大。

难点二:Token 数量限制

在应用大型语言模型时,我们面临的主要限制之一就是输入文本的上下文长度。开源模型和商业模型的上下文长度限制范围从 2K 到 100K 不等。上下文长度对于应用大型语言模型具有关键影响,包括知识增强、记忆等方面的工作,都是为了解决上下文长度限制而设计的。以下是我们采取的策略:

取舍: 如果选择的 10 个文本组合成的 Prompt 超出了模型的 Token 限制,我们采取逐一舍弃相似度较低的片段的策略。如果减少到召回文档为 6 个时还是超限制,则会选择 token 数支持更多的模型。

模型选择: ERNIE-Bot-turbo 模型支持 10200 个 Token,ERNIE-Bot 支持 2000 个 Token 的 ERNIE-Bot 模型,以扩大上下文长度。但是 ERNIE-Bot-turbo 在问答领域的效果并不如 ERNIE-Bot,此时,我们的策略是在不超过 2000 个 token 的情况下优先选择 ERNIE-Bot,极大地提升了系统对复杂问题的处理能力。

压缩 Prompt: 我们尝试对多个切片拼接后的文本进行压缩,以提取主要内容,去除无用且重复的词组。然而,这种方法的效果有限,甚至可能导致文本失真,且对中文支持较差,因此无法从根本上解决问题。压缩效果如下图:

图片多轮次迭代调用 LLM: 面对超长文本超出大模型 token 限制的情况,我们采用了 MapReduce 的方式来突破 Token 限制。该方式将文本拆分成多个部分,并多次调用 LLM 以解决文本长度问题。具体流程包括将多个分段分别请求 LLM,获取各自的局部答案。然后将这些局部答案拼接成新的 Prompt,再次请求 LLM 以获取最终答案。这一流程有效地扩展了上下文长度,但是实际应用效果并不理想,表现为最终结果失真,尤其是在回答流程类问题场景下。主要原因是汇聚后丢失了很多原始文本细节。

图片

难点三:知识陈旧和虚构答案

在商业大型模型的大多数应用场景下,模型能够为 MySQL、Oracle 等数据库的相关问题提供令人满意的答案。然而,不可避免地,这些大型模型有时会出现知识陈旧和答案虚构的问题。为了提供更加丰富和准确的答案,我们采用了一种搜索和推荐系统的方法,并结合了大型模型的推理和总结能力。以下是我们的主要方案和流程:

提取问题关键字: 首先从客户问题中提取关键字,以确保这些关键字能够准确地用于搜索引擎检索。为此,我们探索了两种不同的方法:

大模型: 大型模型本身具备一定的关键字提取能力,但实际测试表明,这种方法的稳定性有待提高,可能会导致调用链出现异常。因此,我们需要对这种方式进行 Prompt 的调优,以提高其性能和可靠性。

NLP 算法: 另一种思路是利用 NLP 模型来进行关键字提取。然而,我们曾尝试使用 Hugging Face 的一些模型,但效果并不十分理想。

搜索引擎检索和文档解析: 为了获得与数据库问题相关的准确答案,我们评估了以下两种不同的策略:

接入百度搜索引擎: 我们曾尝试使用百度搜索 API 来根据提取的关键字进行检索。然而,这一方法的答案质量较差,而且可能包含过时的信息,这可能会对最终答案造成负面影响。因此,我们最终放弃了这一方案。

接入官方文档搜索: 对于 MySQL 等数据库,官方文档提供了用于客户搜索的 API。我们只需传入关键字即可获取与之匹配的搜索结果。然后,我们可以选择最相关的前 N 个结果,并对这些结果的链接内容进行爬取和解析。这一流程类似于之前描述的领域知识入库和知识检索流程,但具体细节不再赘述。

图片调用大模型: 将多个 chunk 拼接和问题一起生成 prompt,调用大模型获取答案。

可以看到文档解析和大模型调用其实就是在重复我们前边介绍的领域知识入库和结果的二次整合过程,唯一不同的地方就是我们使用搜索引擎去代替了向量检索。以 MySQL 为例子,具体流程如下:

图片

应用场景接入

该系统自从内部上线以来,整体的回答准确率达到 80% 以上,数据库运维工作量直接减少 50%,包括 80% 咨询量,以及 20% 工单处理工作。

目前「知识库智能问答系统」主要通过两种方式接入和应用:Database Chat 和 IM 机器人。

Database Chat: 除了类似于 ChatGPT 问答界面外,还具备知识管理、用户管理等功能。(该功能已经集成数据库智能驾驶舱 DBSC 中,将于 3 月底正式开放上线)

图片

IM 机器人: IM 工具做为工作协同中最重要的软件,使用频率非常高。我们提供了 IM 接入接口,客户可以开发 IM 软件(微信、飞书、如流等)机器人,在聊天群中实现快速高效获取信息和知识。

图片

总结

从技术工程角度来看,利用向量数据库结合大型 AI 模型来构建领域知识库系统的实现并不复杂,然而,这一领域仍然面临着不少挑战和潜在的改进空间。在本文中,我们已经讨论了一些解决方案和技术,但仍然有许多可能的改进和未来发展方向值得深入研究。

首先我们认为关键点还是解决向量检索的召回准确性和超长文本处理能力是两个难点,这些方面可能还有更好的方式。此外,大模型本身的能力和文档质量是系统性能的关键因素,因此需要不断升级和维护模型,同时确保文档的及时性和准确性。

我们希望更多的研究者和工程师积极贡献更多的创新思路和技术,推动大模型在数据库运维领域落地,期待未来能有更多的可能性。

​

如何学习AI大模型?

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

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

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

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

img

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

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

img

三、AI大模型经典PDF籍

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

img

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

img

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

华为盘古大模型、腾讯混元大模型、阿里巴巴通义大模型、百度文心大模型 分析 华为盘古大模型、腾讯混元大模型、阿里巴巴通义大模型、百度文心大模型 阅读详情

相关推荐

基于大语言模型的智能问答系统设计与实践【系列文章】

随着人工智能技术的迅猛发展,智能问答系统在各行各业中得到了广泛应用。无论是智能客服、在线教育,还是智能助手,问答系统都在提升用户体验和服务效率方面发挥着重要作用。然而,传统的问答系统往往依赖于规则和模板,难以应对复杂多变的用户需求,且开发成本高,维护难度大。近年来,大规模预训练语言模型(Large Language Models, LLMs)的出现,为智能问答系统带来了新的解决方案。

AI架构师小马 6374

基于LangChain+LLM大模型构建企业本地知识库问答系统实现方案

分析了LangChain的源码并且介绍了相关的应用构建方式

xubinbrave的博客 5091

深度学习实战54-基于ChatGLM2大模型构建智能自助用药问答系统与药物智能管理实战的应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战54-基于ChatGLM2大模型构建智能自助用药问答系统与药物智能管理实战的应用。 随着人工智能技术的发展,我们的生活在许多方面都得到了改善。医疗领域也不例外。本文将介绍如何利用大模型(例如ChatGLM2-6b,百川,通义千问)构建一个智能自助用药问答系统与智能管家。该系统旨在提供更有效、安全和便捷的个性化药物管理服务,以提高患者的生活质量和健康状况。

微学AI的博客 1974

【大模型和智能问答系统】

大模型如何在智能对话领域应用,大模型能完全取代传统智能对话吗?

weixin_44319196的博客 3836

智能开学小助手【基于百度智能体创建属于自己的智能体应用】

百度智能体平台(AgentBuilder)是一个强大的智能应用开发平台,通过简单的配置和编辑,用户可以快速创建属于自己的智能体应用。无论是聊天机器人、智能问答系统还是个性化的智能助手,都可以通过该平台实现。平台提供了丰富的接口和工具,支持零代码创建,大大降低了开发门槛。通过百度智能体平台,创建一款属于自己的智能开学小助手并不难。只需简单的配置和编辑,就能让智能技术为学生的学习生活带来便利和乐趣。希望这篇文章能够帮助你成功创建出属于自己的智能开学小助手,让科技为教育赋能!

一键难忘的博客 4440

【大模型工程局】百度文心大模型API保姆级教程:从入门到实战

随着大型语言模型(LLMs)在全球范围内的兴起,百度文心大模型(ERNIE)已成为人工智能领域的一颗耀眼新星。对标OpenAI的GPT系列,文心大模型致力于为中文用户提供卓越的自然语言处理能力,广泛赋能电商、医疗、金融等行业。如果你是一位AI爱好者或开发者,渴望将百度文心大模型API融入你的应用,那么这篇指南正是为你准备的。我们将详细讲解API的集成步骤,提供丰富的示例、Python代码片段和应用场景。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1551

百度大模型构建智能问答系统:技术实践与案例分析

从技术工程角度来看,利用向量数据库结合大型 AI 模型来构建领域知识库系统的实现并不复杂,然而,这一领域仍然面临着不少挑战和潜在的改进空间。在本文中,我们已经讨论了一些解决方案和技术,但仍然有许多可能的改进和未来发展方向值得深入研究。首先我们认为关键点还是解决向量检索的召回准确性和超长文本处理能力是两个难点,这些方面可能还有更好的方式。此外,大模型本身的能力和文档质量是系统性能的关键因素,因此需要不断升级和维护模型,同时确保文档的及时性和准确性。

2401_85375151的博客 1945

CST周期边界仿真:揭秘频率选择表面(FSS)单元设计全流程

本文详细解析了CST周期边界仿真在频率选择表面(FSS)单元设计中的应用全流程。从理论基础到工程实践,涵盖了求解器选择、几何建模、边界设置、端口优化等关键步骤,并提供了常见问题排查指南。通过CST仿真技术,工程师能够高效预测FSS的电磁特性,为实际应用提供可靠的设计依据。

weixin_30571465的博客 359

大模型太给力了,数据库运维工作量直接减少 50%!

从技术工程角度来看,利用向量数据库结合大型 AI 模型来构建领域知识库系统的实现并不复杂,然而,这一领域仍然面临着不少挑战和潜在的改进空间。在本文中,我们已经讨论了一些解决方案和技术,但仍然有许多可能的改进和未来发展方向值得深入研究。首先我们认为关键点还是解决向量检索的召回准确性和超长文本处理能力是两个难点,这些方面可能还有更好的方式。此外,大模型本身的能力和文档质量是系统性能的关键因素,因此需要不断升级和维护模型,同时确保文档的及时性和准确性。

python12222_的博客 1956

用Arduino和FS-i6X遥控器,从零开始打造你的第一只仿生扑翼蝴蝶(附完整代码解析)

本文详细介绍了如何利用Arduino和FS-i6X遥控器从零开始制作仿生扑翼蝴蝶,包括硬件准备、电路连接、代码解析和调试技巧。通过完整的代码示例和参数说明,帮助读者快速掌握仿生机器人的制作要点,实现蝴蝶的自然飞行效果。

weixin_28727975的博客 309

从隐式求解器到显式求解器:COMSOL接触仿真中的求解策略对比与选择

本文深度解析了COMSOL中隐式与显式求解器在接触仿真中的应用与选择策略。针对非线性接触问题的核心挑战,详细对比了两种求解器的数学框架、优化技术及适用场景,并提供了参数调优和调试技巧,帮助工程师高效解决接触仿真中的收敛问题。

weixin_28347369的博客 682

# 大模型太给力了,数据库运维工作量直接减少 50%!

从技术工程角度来看,利用向量数据库结合大型 AI 模型来构建领域知识库系统的实现并不复杂,然而,这一领域仍然面临着不少挑战和潜在的改进空间。在本文中,我们已经讨论了一些解决方案和技术,但仍然有许多可能的改进和未来发展方向值得深入研究。首先我们认为关键点还是解决向量检索的召回准确性和超长文本处理能力是两个难点,这些方面可能还有更好的方式。此外,大模型本身的能力和文档质量是系统性能的关键因素,因此需要不断升级和维护模型,同时确保文档的及时性和准确性。

python12222_的博客 2287

RACECAR底层平台安装:Jetson Nano+ROS Melodic全栈部署指南

移动机器人开发中,底层平台安装是将硬件转化为可编程移动平台的关键起点。其核心在于嵌入式系统、ROS中间件与传感器驱动的深度协同——需兼顾内核模块加载、GPIO/PWM精确控制、I2C设备初始化及ROS工作空间构建等多层技术耦合。尤其在竞速级小车如RACECAR场景下,Jetson Nano的硬件加速能力、MPU6050 IMU固件加载、TB6612FNG电机驱动配置等细节,直接决定运动控制精度与实时性。本文聚焦Ubuntu 18.04 + ROS Melodic + JetPack 4.4.1技术栈,覆盖从

weixin_32025789的博客 256

数据库运维工作量直接减少 50%,基于大模型构建智能问答系统的技术分享

为了提供更加丰富和准确的答案,我们采用了一种搜索和推荐系统的方法,并结合了大型模型的推理和总结能力。为了确保准确性和效率,我们选择了第 2 种和第 3 种方式相结合的方案,通过向量数据库将知识外挂作为大模型记忆体,使用 LangChain 作为基础开发框架来构建知识库问答系统,最终依靠 Prompt 工程和大模型进行交互。传统的运维知识库系统主要采用固化的规则和策略来记录管理操作和维护的知识,这些系统的知识检索方式主要基于关键字搜索和预定义的标签或分类,用户需要具备一定的专业知识才能有效地利用这些系统。

2301_82040283的博客 3038

手把手教你用Ubuntu Base 20.04打造轻量级ARM开发板根文件系统(附常见问题解决)

本文详细介绍了如何基于Ubuntu Base 20.04 LTS构建轻量级ARM开发板根文件系统,涵盖环境准备、镜像制作、跨架构配置、软件包定制及常见问题解决。通过实战指南,开发者可快速掌握ARM架构下的根文件系统构建技巧,优化系统性能并解决部署中的典型问题。

gin88的博客 211

AI Agent技术架构与规模化应用:2025年技术深度解析

2025年,AI Agent(人工智能智能体)迎来了规模化应用的拐点时刻。根据Gartner等权威机构预测,企业软件中整合自主型AI的比例将从2024年的不足1%跃升至2028年的33%。本文深入剖析AI Agent的核心技术架构,从规划模块、记忆模块、工具调用模块到底层实现原理,结合Python和Go语言的实际代码示例,全面阐述AI Agent的技术实现路径。同时,本文探讨多智能体协作系统、企业级部署架构以及未来的技术演进方向,为开发者和技术决策者提供系统性的技术参考。关键词:AI Agent、大语言模型

shao.bing的专栏 1348

设计智能问答系统的技术和工具

智能问答系统的核心技术涵盖自然语言处理、知识存储、大模型推理、检索增强生成等模块,需结合多领域工具链实现。关键包括:1)NLP工具(spaCy、ERNIE)处理分词、实体识别;2)知识图谱(Neo4j)与向量数据库(Milvus)存储结构化知识;3)大模型(LLaMA、GPT-4)进行推理生成;4)RAG框架(LangChain)结合检索与生成;5)推荐系统(LightFM)实现关联扩展。技术选型需平衡场景适配性、成本与扩展性,通过工具协同构建精准、可解释的问答系统。

weixin_55244420的博客 1345

基于表面肌电信号sEMG的手势识别——以Ninapro DB1数据集使用CNN网络识别为例

本文实验采用公共数据集Ninapro。该数据集数据量大,采集的动作丰富,每个单位数据集里面包括表面肌电信号、加速度计、手部运动学和动态数据等,记录了67名完整受试者和11名进行了至少50 次手部运动的截肢者的数据。NinaproDB1数据集包括27名完整的受试者(7 名女性和20名男性,其中2个左手和25 个右手) 的肌电信号。信号采集频率为100Hz。

树下一朵云的博客 2295

基于深度学习与大模型融合的皮肤病智能问答系统研究与实现

随着皮肤病发病率的逐年上升,早期精准诊断和科学治疗成为临床诊疗的重要课题。传统的依靠人工诊断,在面对复杂的皮肤病变时,诊断主观性较强、误诊率高、医生资源紧缺等问题,因此系统设计并实现了一种基于深度学习的皮肤病症智能问答系统,将图像识别和自然语言问答两大核心模块相结合,旨在帮助医生提高诊断效率和准确率,同时也为用户提供初步的智能问诊服务。

Dev7z的博客 3951

【图论】系列(七)图论的中心性度量方法及重要性评价指标

图论中的中心性度量方法是用来衡量图中各个节点(或顶点)相对重要性的指标。

qq_30066733的博客 1077

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

结合私有数据+RAG+千帆大模型,构建一个医生问答系统

在运行时,我们使用同一编码器模型对用户的查询进行向量化,然后搜索该查询向量的索引,找到 top-k 个结果,从我们的数据库中检索相应的文本块,并将它们作为上下文输入到 LLM 提示中

pythonhy的博客 1215

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

基于大模型的智能问答系统

随着人工智能技术的迅猛发展,大语言模型(Large Language Models, LLMs)在自然语言理解与生成任务中展现出前所未有的能力。智能问答系统作为人机交互的核心载体,正从传统基于规则或检索式方法向大模型驱动的端到端生成范式演进。本文设计并实现了一套面向垂直领域(高校教务服务)的轻量化大模型智能问答系统,融合RAG(Retrieval-Augmented Generation)架构与本地化部署策略,在保障响应准确性与可解释性的同时,显著降低计算资源开销。系统采用Qwen2-1....

wyh293的博客 624

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

如何快速构建智能知识问答系统:PaddleNLP检索增强生成技术全攻略

飞桨PaddleNLP是一款基于飞桨深度学习框架的大语言模型(LLM)开发套件,支持在多种硬件上进行高效的大模型训练、无损压缩以及高性能推理。本文将详细介绍如何使用PaddleNLP构建基于检索增强生成(RAG)技术的智能知识问答系统,帮助开发者快速实现产业级应用。 ## 一、检索增强生成技术核心优势 检索增强生成(Retrieval-Augmented Generation)是解决大语言模型

gitblog_00791的博客 1117

【开源项目】MaxKB+Ollama:构建私有化知识库问答系统

MaxKB 是一款基于 LLM 大语言模型的知识库问答系统。MaxKB = Max Knowledge Base,旨在成为企业的最强大脑。:支持直接上传文档、自动爬取在线文档,支持文本自动拆分、向量化,智能问答交互体验好;:支持零编码快速嵌入到第三方业务系统;:支持对接主流的大模型,包括 Ollama 本地私有大模型(如 Llama 2、Llama 3、qwen)、通义千问、OpenAI、Azure OpenAI、Kimi、智谱 AI、讯飞星火和百度千帆大模型等。

m0_59235245的博客 5607
上一篇: 透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路
下一篇: Prompt Engineer: 使用Thought来提升LLM的回复能力
AI大模型_学习君
博客等级 码龄3年 6137粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值