AIGC大模型应用技术
2025-03-16 16:15:05 1 举报
AI智能生成
AIGC技术全景、LLM、RAG、Agent、向量数据库、大模型原理、Prompt、文生图、Cursor、AI编程
作者其他创作
大纲/内容
训练
微调
Prompt工程
Prompt到底是什么?
大多数的prompt具有以下的形式:由「指令」(instruction)和「内容」(content)两部分构成。其中,指令部分为我们需要大模型做的事,如“判断下列句子的情感”,而内容则为真正的句子,如“我今天很高兴”。
是用户输入给AI系统的指令或信息,用于引导AI生成特定的输出或执行特定的任务。
简单来说,提示语就是我们与AI“对话”时所使用的语言,它可以是一个简单的问题,一段详细的指令,也可以是一个复杂的任务描述。
简单来说,提示语就是我们与AI“对话”时所使用的语言,它可以是一个简单的问题,一段详细的指令,也可以是一个复杂的任务描述。
提示词-参数配置
Temperature(温度)
从生成模型中抽样包含随机性,因此每次点击“生成”时,相同的提示可能会产生不同的输出。温度是用于调整随机程度的数字。
Top_p
通过称为nucleus采样的带有温度的采样技术,可以控制模型在生成响应时的确定性。
token(上下文窗口)
大语言模型都有一个预定义的上下文窗口,该窗口对一次可以处理的tokens(即文本序列中的单词或子单词)的总数设置了限制。
提示词-组成元素
指令(Instruction)
我们可以通过文本描述指令做什么,而不是在提示符中显示正确行为的具体示例。
范例(Examplars)
向LLM展示正确行为的最好方法之一是在提示符中提供一些具体的输入输出(键值对)示例。
输入数据(Input Data)
这是LLM期望处理的实际数据(例如,正在翻译或分类的句子,正在总结的文档等)。
指标(Indicators)
以固定和可预测的结构为LLM提供输入是有帮助的,因此我们可能会使用指标来区分提示的不同部分
上下文(Context)
除了上述组件之外,我们可能希望以某种方式为LLM提供额外的“上下文”或信息。
一般性技巧
任务分解
任务分解的概念源于问题解决理论和系统工程学。将任务分解应用于提示语设计,实际上是在模拟人类处理复杂问题的方式。这种方法主要基于分而治之原则、层级结构理论以及认知负荷理论作为其理论基础。
SPECTRA任务分解模型
Segmentation(分割):将大任务分为独立但相关的部分
Prioritization(优先级):确定子任务的重要性和执行顺序
Elaboration(细化):深入探讨每个子任务的细节
Connection(连接):建立子任务之间的逻辑关联
Temporal Arrangement(时序安排):考虑任务的时
间维度
间维度
Resource Allocation(资源分配):为每个子任务分配
适当的注意力资源
适当的注意力资源
Adaptation(适应):根据AI反馈动态调整任务结构
参考链接
https://www.promptingguide.ai/zh/techniques/rag
推理模型提示词差异
推理模型
策略
提示语更简洁,只需明确任务目标和需求(因其已内化推理逻辑)。
无需逐步指导,模型自动生成结构化推理过程(若强行拆解步骤,反而可能限制其能力)
适合数学任务
简洁指令,聚焦目标,信任其内化能力。
不要对推理模型使用“启发式”提示(如角色扮演),可能干扰其逻辑主线。
通用模型
策略
需显式引导推理步骤(如通过CoT提示),否则可能跳过关键逻辑。
依赖提示语补偿能力短板(如要求分步思考、提供示例)。
合适创意任务
指令结构化、补偿性引导
不要对通用模型“过度信任”(如直接询问复杂推理问题,需分步验证结果)。
RAG
检索增强生成(Retrieval-Augmented Generation)
RAG挑战
数据质量差导致检索效果差
数据处理
文档解析
非结构化文档数据解析方案
text文档解析
利用UnstructuredFileLoader类加载TXT文件,并提取内容。
代码
Word文档解析
通过UnstructuredWordDocumentLoader类来加载和解析Word文档。
代码
Office 文档加载器
PDF文档解析
基于unstructured库
需要安装OCR相关的函数库来解析PDF文档。
PyPDF工具
使用PyPDF库安装和按页码检索PDF文档
PDFMiner
使用PDFMiner库来加载PDF文档。
Email邮件解析
使用UnstructuredEmailLoader类来加载和解析邮件数据。
代码
图片内容解析
处理JPG、PNG等图片格式,转换为RAG下游任务所需的文档数据格式。
Markdown内容解析
Markdown文件的解析需要特别注意设置mode和autodetect_encoding参数。
PPT内容解析
加载和解析PPT文档。
TextIn
注意事项
文件编码处理
始终明确指定文件编码,避免中文等非ASCII字符出现乱码
错误处理
性能优化
对于大文件,考虑使用异步加载方法(aload)
使用 lazy_load 方法处理大量文档,避免内存溢出
元数据管理
理设计和保存文档元数据,这对后续的检索和分析非常重要
数据处理工具
文本分隔分块切分
文本分块对输出的影响
文本分块过长的影响
语义模糊
当文本块过长时,在向量化过程中,细节语义信息容易被平均化或淡化。这是因为向量化模型需要将大量的词汇信息压缩成固定长度的向量表示,导致无法精准捕捉文本的核心主题和关键细节。
降低召回精度
在检索阶段,系统需要根据用户的查询从向量数据库中检索相关文本。过长的文本块可能涵盖多个主题或观点,增加了语义的复杂性,导致检索模型难以准确匹配用户的查询意图。这样一来,召回的文本相关性下降,影响了大模型生成答案的质量。
输入受限
大语言模型(LLM)对输入长度有严格的限制。过长的文本块会占据更多的输入空间,减少可供输入的大模型的文本块数量。这限制了模型能够获取的信息广度,可能导致遗漏重要的上下文或相关信息,影响最终的回答效果。
文本分块过短的影响
上下文缺失
短文本块可能缺乏必要的上下文信息。上下文对于理解语言的意义至关重要,缺乏上下文的文本块会让模型难以准确理解文本的含义,导致生成的回答不完整或偏离主题。
主题信息丢失
段落或章节级别的主题信息需要一定的文本长度来表达。过短的文本块可能只包含片段信息,无法完整传达主要观点或核心概念,影响模型对整体内容的把握
碎片化问题
大量的短文本块会导致信息碎片化,增加检索和处理的复杂度。系统需要处理更多的文本块,增加了计算和存储的开销。同时,过多的碎片化信息可能会干扰模型的判断,降低系统性能和回答质量。
切分策略
固定大小分块
按预定义的字符数、单词数或 Token 数量对文本进行切分,同时保留一定的重叠部分。
优点
简单:实现起来超级简单,几乎不需要什么计算资源,特别适合快速上手
整齐划一:生成的块大小均匀,方便后续处理,比如存储或检索。
缺点
忽略上下文:完全不管文本的结构和意思,切出来的块可能会把完整的信息拆得支离破碎
效率不高:重要的内容可能会被“拦腰截断”,想要重新拼出有意义的信息,还得额外费功夫
代码实现
普通形式
langchain方式
语义分块
系统会先理解文本的含义,然后把意思相近的内容自动归类到一起。这样一来,每个拆分出来的文本块都是一个完整的“小故事”,前后文都对得上,不会出现前言不搭后语的情况。
优点
上下文拿捏得准:相似的内容总在一起,找信息时特别给力
灵活度满分:不管什么类型的文本,它都能根据意思来调整,不会死板地按固定规则来。
缺点
费算力:毕竟要生成和比较那些嵌入向量,需要多花点计算资源。
不简单:比起直接按字数或标点拆分,这个方法确实复杂一些。
代码实现
根据有意义的单元对文档进行分段。
持续将单元添加到现有块中,直到余弦相似度显著下降。
一旦下降明显,就开始新的分块。
持续将单元添加到现有块中,直到余弦相似度显著下降。
一旦下降明显,就开始新的分块。
递归分块
递归字符文本分割是一种更高级的技术,它考虑了文本的结构。它使用一系列分隔符以递归方式将文本分成块,确保块更有意义且与上下文更相关
基于内在分隔符(如段落或章节)进行分块。
如果某个块的大小超过限制,则将其进一步分割为更小的块。
基于内在分隔符(如段落或章节)进行分块。
如果某个块的大小超过限制,则将其进一步分割为更小的块。
优点
上下文更连贯:这种方法通过使用段落或句子作为分隔符,能够更好地保留文本的自然结构。
灵活性强:你可以根据需要调整块的大小和重叠部分,这样就能更精细地控制整个分块过程。
缺点
块大小是个关键:块的大小得适中,既要方便处理,又要确保每个块至少包含一个完整的短语或更多内容。否则,我们在检索这些块时,可能会遇到精度问题。
性能消耗:由于采用了递归拆分和处理多个分隔符的方式,这种方法会消耗更多的计算资源。而且,与固定大小的块相比,它生成的块数量也会更多。
代码实现
递归字符文本分割法在简单和复杂之间找到了一个平衡点,既不会过于粗暴地切割文本,也不会让分块过程变得繁琐。它提供了一种既高效又尊重文本结构的分块方式,算得上是一种非常实用的工具。
基于文档结构的分块
利用文档的内在结构(如标题、章节或段落)进行分块
这种方法会根据不同的文档类型,量身定制分块策略。比如,Markdown 文件、Python 脚本、JSON 文档或者 HTML 文件,每种文档都会按照最适合其内容和结构的方式进行拆分。
这种方法能够保持文档的自然结构,但前提是文档具有清晰的结构。
这种方法会根据不同的文档类型,量身定制分块策略。比如,Markdown 文件、Python 脚本、JSON 文档或者 HTML 文件,每种文档都会按照最适合其内容和结构的方式进行拆分。
这种方法能够保持文档的自然结构,但前提是文档具有清晰的结构。
优点
相关性更强:针对不同类型的文档,采用最合适的分块方法,同时还能保留文档的逻辑结构。
精确度更高:根据每种文档的特点量身定制分块过程,确保分块结果更精准。
缺点
实现起来有点复杂:因为不同类型的文档需要不同的分块策略和工具,所以实现起来会麻烦一些。
维护成本较高:由于方法多样,维护起来也会相对复杂,需要投入更多精力。
PythonCodeTextSplitter:针对 Python 代码的结构,设置适合的分隔符,如函数定义、类定义、注释等。
MarkdownTextSplitter:根据 Markdown 的结构,如标题、列表、段落等,进行切分。
LatexTextSplitter:识别 LaTeX 文档的章节、公式、环境等进行切分。
HTMLHeaderTextSplitter:针对 HTML 文档的标签结构,按照元素层级进行切分。
MarkdownTextSplitter:根据 Markdown 的结构,如标题、列表、段落等,进行切分。
LatexTextSplitter:识别 LaTeX 文档的章节、公式、环境等进行切分。
HTMLHeaderTextSplitter:针对 HTML 文档的标签结构,按照元素层级进行切分。
代码实现
Markdown文档
处理Markdown文档时,系统会聪明地把标题和正文分开处理,就像整理书籍时会区分章节标题和正文内容一样
Python代码切分
处理Python代码时,它又能准确识别类和函数的边界,就像程序员阅读代码时会自然地区分不同功能模块。
基于 LLM 的分块
使用提示引导 LLM 生成有意义的分块。
它会像我们读书时那样,先理解内容的意思,再看看上下文,然后找出最合适的地方“下刀”。完全不像以前那些死板的规则或者纯靠统计的方法。
它会像我们读书时那样,先理解内容的意思,再看看上下文,然后找出最合适的地方“下刀”。完全不像以前那些死板的规则或者纯靠统计的方法。
优点
准得很:靠着强大的语言模型,分出来的块不仅内容相关,上下文也特别准。
够灵活:不管什么类型的文本都能搞定,分块策略还能随时调整,特别聪明。
缺点
有点烧资源:毕竟要用大语言模型,计算资源少不了,成本也会高一些。
实现起来不简单:得好好设置和微调语言模型,才能让它发挥最佳水平。
代码实现
在LangGraph里,节点就像是流水线上的一个个工作站。每个节点都有明确的职责:接活儿、干活儿、交活儿。它会接收输入数据,处理一番,然后把结果传给下一个节点,就像接力赛一样。
Meta-Chunking元分块
Meta-Chunking旨在优化检索增强生成(RAG)中的文本块处理,从而提升知识密集型任务的质量
核心原则
允许块大小变化,以更有效地捕获和维护内容的逻辑完整性。这种动态的粒度调整可确保每个分段块都包含完整且独立的思想表达,从而避免在分段过程中逻辑链中断。这不仅增强了文档检索的相关性,还提高了内容清晰度。
实现方式
边际采样分块(Margin Sampling Chunking)
步骤
将文本分割成一系列句子。
对于相邻的句子,使用 LLM 进行二元分类,判断是否需要分割。
LLM 输出两个选项的概率,计算概率差异 Margin。
将 Margin 与预设阈值进行比较,如果 Margin 大于阈值,则分割句子;否则,合并句子。
优点
可以有效地降低对模型规模的需求,使得小模型也能胜任文本分块任务。
缺点
分割结果可能受到 LLM 模型的影响,且效率相对较低。
困惑度分块(Perplexity Chunking)
步骤
将文本分割成一系列句子。
使用 LLM 计算每个句子基于其上下文的 PPL 值。
分析 PPL 值的分布特征,识别潜在的文本块边界(即 PPL 值的局部最小值)。
将句子分割成多个文本块,每个文本块包含一个或多个连续的句子。
优点
分割结果更加客观,效率更高,并能够有效地捕捉文本的逻辑结构。
缺点
需要分析 PPL 值的分布特征,可能需要一定的计算量。
Late Chunking
传统的方法是先把文件分成小堆,然后再逐一处理。而后期分块却反其道而行之:先对整个文件进行全面处理,然后再进行分类整理。这听起来可能有点反直觉,但在AI的世界里,这种方法却显示出了惊人的效果。具体来说,后期分块是这样工作的:
先用一个长上下文嵌入模型(比如 jina-embeddings-v2-small-en,具有 8K 上下文长度)"读懂"整个文档
然后再把这个"理解"切成小块
然后再把这个"理解"切成小块
参考地址:https://www.cnblogs.com/ting1/p/18598176
https://jina.ai/segmenter/#apiform
https://github.com/jina-ai/late-chunking
最佳实践
考虑因素
根据文本内容选择切分
逻辑紧密的文本
对于论文、技术文档等段落内逻辑紧密的文本,应尽量保持段落的完整性,避免过度切分,以保留完整的语义和逻辑结构。
语义独立的文本
对于法规条款、产品说明书等句子间逻辑相对独立的文本,可以按照句子进行切分。这种方式有助于精确匹配特定的查询内容,提高检索的准确性。
考虑向量化模型的性能
长文本处理
如果向量化模型在处理长文本时容易丢失信息,应适当缩短文本块的长度,以提高向量表示的精确度。
短文本优化
对于能够有效处理短文本的模型,可以适当切分文本,但要注意保留必要的上下文信息
关注大模型的输入限制
输入长度优化
在切分文本块时,控制每个块的长度,使其既包含完整的语义信息,又不超过模型的输入限制。
信息覆盖
实验与迭代
性能评估
通过实验评估不同切分策略对检索准确性和生成质量的影响,从而选择最适合的方案。
持续优化
根据模型的表现和用户反馈,不断优化切分策略,提升系统的整体性能。
优化策略
保持语义完整性
避免句子拆分
按标点切分:使用句号、问号、感叹号等标点符号作为切分点,确保每个文本块包含完整的句子。
分割符的优先级:在设定分割符时,将句子结束符号置于高优先级,保证切分过程中优先考虑句子边界。
考虑段落关联性
控制文本块长度
设定合理的长度阈值
文本块的长度对向量化模型和大语言模型(LLM)的处理性能有直接影响
向量表示稀释
模型输入限制
动态调整
不同类型的文本对文本块长度的要求可能不同
文本类型分析:针对新闻、法律文档、技术手册等不同类型的文本,分析其结构特点,设定合适的长度。
自适应切分:开发动态调整机制,根据文本内容和结构实时调整文本块长度,实现个性化处理。
重叠切分
方案
设定重叠长度
滑动窗口切分
优点
保留上下文连接
增强模型理解
结合向量化模型性能
适配模型特性
模型特性研究
深入了解所使用向量化模型的特点,对其在不同文本长度下的性能进行评估。
选择合适策略
根据模型的优势,选择短文本或长文本的分块策略
优化向量表示
加权平均
对文本中的重要词汇(如关键词、专有名词)赋予更高权重,增强它们在向量表示中的影响
注意力机制
利用注意力机制(Attention)聚焦文本中的关键部分,生成更具代表性的向量。
分层编码
对文本进行层次化编码,先编码句子,再编码段落,逐层组合,保持语义结构。
考虑大模型的输入限制
输入长度控制
统计文本块长度
确保不超出模型限制
截断策略
如长度超出限制,可考虑截断低相关性的内容,保留核心文本块。
优先级排序
相关性评分
为每个召回的文本块计算与查询的相关性得分
择优选择
根据相关性得分,从高到低选择文本块,直至达到模型的输入长度限制。
内容精炼
自动摘要
利用摘要模型对长文本块生成精简的摘要
关键句提取
提取文本块中最能代表核心内容的句子,供大模型参考
多层索引
这种方法通过将原始数据生成 summary后,重新作为embedding再存到summary database中。 检索的时候,首先通过summary database找到最相关的summary,再回溯到原始文档中去。
向量
向量模型
从文本到向量
这些数字由嵌入模型(如深度学习算法)生成,捕捉数据中的基本模式或关系。
比较两个相似的句子时,它们的嵌入会非常相似,因为它们具有相似的语言元素。
它将复杂的数据简化为一种可以在多维空间中进行比较的形式。
它将复杂的数据简化为一种可以在多维空间中进行比较的形式。
Embedding是将文本(词、句、段落)映射到高维稠密向量的技术,其核心是将语义信息编码为计算机可计算的数学表示
向量
定义
向量是数据的数值表示形式,能够捕捉数据的上下文和语义。
密集向量
密集向量几乎每个元素都包含信息。向量中的每个数值都贡献了数据的语义意义、关系和细微差别。
稀疏向量
稀疏向量则更注重要点。在稀疏向量中,大量元素是零。只有在某些特征或标记存在时,才会赋值非零值。
向量模型选型
模型筛选途径
huggingface
embedding向量下载排行榜
https://huggingface.co/models?language=zh&sort=downloads&search=embedding
MTEB 排行榜
https://huggingface.co/spaces/mteb/leaderboard
1. 文本分类(Classification):如情感分析、意图分类等。
2. 聚类(Clustering):如将相似文本分为同一类。
3. 成对分类(Pair Classification):判断两个文本是否重复或具有相似含义。
4. 重排序(Reranking):根据查询重新排序相关和不相关的参考文本。
5. 检索(Retrieval):从大量文档中找到与查询相关的文档。
6. 语义文本相似性(STS):评估句子对之间的相似性。
7. 摘要(Summarization):评估机器生成摘要的质量。
2. 聚类(Clustering):如将相似文本分为同一类。
3. 成对分类(Pair Classification):判断两个文本是否重复或具有相似含义。
4. 重排序(Reranking):根据查询重新排序相关和不相关的参考文本。
5. 检索(Retrieval):从大量文档中找到与查询相关的文档。
6. 语义文本相似性(STS):评估句子对之间的相似性。
7. 摘要(Summarization):评估机器生成摘要的质量。
魔搭社区
https://modelscope.cn/models?page=1&sort=latest&tasks=sentence-embedding&type=nlp
从应用场景选择
垂直领域知识库
特点
对语义准确性要求极高
文本专业性强
文档结构复杂
模型
BAAI/bge-large-zh
长文本支持(1024 tokens),在专业领域微调后能区分细微语义差异
多语言混合检索
特点
中、英、日等多语言
需支持跨语言检索(中文Query查英文文档)
子主题
模型
BAAI/bge-m3
原生支持100+语言,混合检索(密集+稀疏向量)提升覆盖率
实时交互式问答
特点
响应延迟要求高
Query短且多样化
需兼容口语化表达(“你们家东西坏了咋办?”)
模型
MokaAI/m3e-base
轻量化(420MB),GPU单批次推理速度达280 TPS
增量更新敏感场景
特点
知识库需小时级更新(实时新闻、股价)
Embedding模型需适应数据分布变化
可能涉及敏感数据(无法使用公有云模型)
模型
self-hosted/bge-small-zh
支持本地持续训练(CTRL),灵活注入新数据
API使用
开源
Ollama 部署
硅基流动
主打开源模型调用
各大厂商
闭源
各大厂商
向量归一化
解释
有些厂商或开源向量没有做归一化处理
会导致向量搜索无法做分级处理
比如0.8以上的前五个数据等等
处理方案
中转处理
代码
建议
选择哪个向量模型还需结合业务特点进行综合比较、权衡。
没有特殊要求以及私有数据需要训练等,直接用现有平台模型就行,都有闭源和开源的API使用,无需自己部署私有版本
差不多闭源模型就可以,没有必要研究开源模型了,因为闭源必定也会吸收开源模型的好的训练数据
OpenAI
通义千问
智谱
豆包
百度
向量数据库
简介
什么是向量检索
向量检索,即给定场景向量,找出离场景向量最近的 k 条向量,也就是 KN 查询。常见的计算 metric 有 L2、IP、Cosine 等,这与产生向量的模型定义是有关系的。
什么是向量数据库
用于存储、索引、查询和检索高维向量数据。
特别适合处理非结构化数据(如图像、音频、文本)。
实现传统数据库难以完成的高级分析和相似性搜索。
为什么需要向量数据库
量数据库作为 RAG 中一个存储的记忆体可以帮助用户构建领域内相关的知识库,当向大模型提问时,可在向量数据库中找出相似的提问,来增强提示词,从而获得一个更加为用户量身定制的答案,增强了结果的相关性。
解决LLM的问题
“幻觉”问题
大大降低大模型的幻觉问题,增加回答的可追溯性。
数据隐私和安全
信息的实时性
可以获取最新的、领域特定的知识,解决知识时效性问题。
传统数据库的挑战
传统的OLTP和OLAP数据库几十年来一直是数据存储的核心。它们非常擅长管理具有明确模式的结构化数据
无法理解非结构化数据的意义。
无法有效搜索或分类复杂的文档、音频和图像数据。
向量数据库和传统数据库的对比
向量数据库的存储结构
向量数据库通过将非结构化数据表示为向量,理解数据的上下文或概念相似性,从而实现基于数据相似性的高级分析和检索。
向量数据库中定义向量的三个关键要素是:ID、维度和有效负载(Payload)
向量数据库的工作原理
向量数据库的架构
向量数据库由多个不同的实体和关系组成
集合(Collections)
集合本质上是一组向量(或“点”),它们根据相似性或特定任务被逻辑分组在一起。
距离度量(Distance Metrics):向量相似性的度量方法
欧几里得距离(Euclidean Distance)
指两个向量之间的距离,直线距离,就像在空间中测量两点之间的物理距离。当实际距离(如空间数据)很重要时,选择此选项。
计算公式为
欧几里得距离算法的优点是可以反映向量的绝对距离,适用于需要考虑向量长度的相似性计算。例如推荐系统中,需要根据用户的历史行为来推荐相似的商品,这时就需要考虑用户的历史行为的数量,而不仅仅是用户的历史行为的相似度。
余弦相似性(Cosine Similarity)
衡量的是角度而不是长度,用于评估两个向量的方向是否一致。适合文本或文档数据,侧重于意义而非量级。
余弦相似度是指两个向量之间的夹角余弦值
余弦相似度是指两个向量之间的夹角余弦值
计算公式为
余弦相似度对向量的长度不敏感,只关注向量的方向,因此适用于高维向量的相似性计算。例如语义搜索和文档分类。
点积(Dot Product)
用于评估两个向量之间的对齐程度。常用于推荐系统,评估两个对象的“匹配度”。
计算公式
点积相似度算法的优点在于它简单易懂,计算速度快,并且兼顾了向量的长度和方向。它适用于许多实际场景,例如图像识别、语义搜索和文档分类等。但点积相似度算法对向量的长度敏感,因此在计算高维向量的相似性时可能会出现问题。
相似性检索(Similarity Search)
介绍
如何检索
想要在海量的向量中找到和查询向量最相似的向量,最朴素的方法是:查询向量和数据库中的所有向量都进行一次计算,然后从中找出来距离最小的TopK个向量。
问题
朴素方法的好处是,召回的向量一定是全局最相似的,缺点也很明显,就是计算量太大,太耗时。
解决思路
减少向量大小——通过降维或减少表示向量值的长度。
缩小搜索范围——可以通过聚类或将向量组织成基于树形、图形结构来实现,并限制搜索范围仅在最接近的簇中进行,或者通过最相似的分支进行过滤。
搜索算法
Hierarchical Navigable Small Word(HNSW)算法
HNSW索引与数据传输
是一种高效的索引算法,大多数向量数据库都依赖它来组织向量以实现快速搜索。
HNSW 构建了一个多层图,每个向量是一个节点,连接表示相似性。较高层次连接大体相似的向量,而较低层次则连接紧密相关的向量,使得搜索随着深入逐渐精确。
当运行搜索时,HNSW 从顶部开始,通过跳转层快速缩小搜索范围。随着深入搜索,仅专注于相关向量。
最下一次遍历思路
跳表算法相似,要搜索跳表,从最高层开始,沿着具有最长“跳过”的边向右移动
空间换时间的算法,它的搜索质量和搜索速度都比较高,但是它的内存开销也比较大
K-Means(聚类算法)
在保存向量数据后,先对向量数据先进行聚类,将数据分成 k 个类别,其中 k 是预先指定的
步骤
选择 k 个初始聚类中心。
将每个数据点分配到最近的聚类中心
计算每个聚类的新中心。
重复步骤 2 和 3,直到聚类中心不再改变或达到最大迭代次数。
Locality Sensitive Hashing (LSH) 局部敏感哈希
特点是快速,同时仍然提供一个近似、非穷举的结果
LSH 使用一组哈希函数将相似向量映射到“桶”中,从而使相似向量具有相同的哈希值。这样,就可以通过比较哈希值来判断向量之间的相似度。
当搜索一个向量时,将这个向量再次进行哈希函数计算,得到相同桶中的向量,然后再通过暴力搜索的方式,找到最接近的向量
向量数据库选型
https://python.langchain.com.cn/docs/modules/data_connection/vectorstores/
https://python.langchain.com.cn/docs/modules/data_connection/vectorstores/
Chroma
Chroma 是一个轻量级、开源的向量数据库,特别适合本地开发和小型项目。
易于设置和使用
支持本地存储
适合小型项目和原型开发
支持本地存储
适合小型项目和原型开发
代码
FAISS
FAISS (Facebook AI Similarity Search) 是 Facebook 开发的高效相似性搜索库。
高性能,适合大规模数据集
支持多种索引类型
可以进行本地部署
支持多种索引类型
可以进行本地部署
支持利用GPU进行加速,这使得它在处理大规模数据和执行复杂计算时表现出色。
代码
地址:https://github.com/facebookresearch/faiss
Pinecone
Pinecone 是一个托管的向量数据库服务,提供高性能的向量搜索能力。
完全托管的服务
高可扩展性
适合大规模生产环境
高可扩展性
适合大规模生产环境
代码
地址:https://www.pinecone.io
Milvus
特点:开源、高效、支持大规模数据存储与检索,适用于超大规模数据集。
适用场景:适用于需要高吞吐量和低延迟的生产环境,如大型推荐系统和知识库检索。
在高维数据集上表现优异,支持 GPU 加速,适合大规模数据处理。
都支持分布式架构,适合需要高扩展性的场景。
代码
地址:https://milvus.io
Postgres pgvector
特点:基于PostgreSQL的插件,支持SQL与向量搜索结合。
适用场景:适合需要SQL查询支持的项目,特别是与现有PostgreSQL数据库集成的场景。
代码
Weaviate
特点:丰富的元数据处理:高级过滤和混合搜索功能。灵活的数据模型设计。支持通过自定义模块实现额外功能。
适合场景:处理文本、图像、视频、音频、代码或其他结构化或非结构化信息。
适合场景:处理文本、图像、视频、音频、代码或其他结构化或非结构化信息。
在文本搜索和混合检索方面表现突出,适合需要复杂查询和语义搜索的场景。
地址:https://weaviate.io
Qdrant
特点:支持高效向量搜索,具有良好的扩展性和灵活性。
适用场景:适用于需要灵活部署和高度定制化的项目。
适用场景:适用于需要灵活部署和高度定制化的项目。
在资源占用和灵活性上表现优异,适合中小规模项目。
使用场景
向量数据库的评价标准
向量数据库综合评估
《向量数据库性能测试方法》标准框架图
对向量数据库性能的综合评判,覆盖稠密向量检索、多向量检索、标量向量融合检索3种常见向量检索场景,评估指标涵盖索引构建时间、QPS、平均时延、最大时延、P99时延、CPU占用、内存占用等多个维度。
对向量数据库性能的综合评判,覆盖稠密向量检索、多向量检索、标量向量融合检索3种常见向量检索场景,评估指标涵盖索引构建时间、QPS、平均时延、最大时延、P99时延、CPU占用、内存占用等多个维度。
常用评估标准
考虑因素
数据规模和性能需求
大规模数据和高性能需求:选择专用的向量数据库,如Milvus、Weaviate。
中小规模数据或现有数据库扩展:pgvector、TiDB Vector可能更适合
技术栈和团队经验
如果团队熟悉PostgreSQL,pgvector是一个不错的选择。
如果倾向于云原生解决方案,AnalyticDB或云上的Milvus部署可能合适。
功能特性
特定功能需求:如需要混合搜索、实时分析等,选择支持这些功能的数据库。
扩展性和灵活性:考虑数据库的可扩展性和二次开发能力。
社区和生态系统
成本考虑
路由
定义
根据查询的语义特征,将用户请求分发到最适合的组件或数据源。Router 本质上就是一种 if/else 分支控制逻辑,不过它的特点在于是基于自然语言输入来做出决策。
实现方式
基于 LLM Prompt
通过 prompt 判断用户 query 所属意图,由于无法穷举所有意图,对于不在预设意图内的用户 query 通常会进行兜底处理。
Prompt中提供我们的分类路由点
语义Semantic-Router
该方法基本用法为:为各分支准备一系列话术模板或 query 示例,将用户输入的 query 与预设的 query 示例做相似性匹配,最终返回与预设 query 相似度最高的对应分支。
预设标准化的话术模板
根据用户查询与预设话术模板的相似性进行匹配,适合查询结构相对固定且模板库覆盖面广的场景。
通过微调LLM
使其更好地理解和响应特定业务领域的查询需求,以提高在特定场景中的性能
注意
需要有路由兜底策略
敏感词过滤
关键词过滤
多个路由组合协同
Query重写
框架
DMQR-RAG
(Diverse Multi-Query Rewriting for Retrieval-Augmented Generation)
基于多样化查询重写的检索增强生成
(Diverse Multi-Query Rewriting for Retrieval-Augmented Generation)
基于多样化查询重写的检索增强生成
论文地址
https://simg.baai.ac.cn/paperfile/2ecbf5dd-e4bb-494c-a1a3-5f1a7929f577.pdf
https://arxiv.org/abs/2411.13154
原理
通过提出基于信息量的多种重写策略,并引入自适应策略选择方法,旨在提高文档检索的多样性和相关性,最终改善RAG中的文档检索和最终响应的性能。
策略
信息等价(General Query Rewriting, GQR)
技术目标
通过句式重构消除语言歧义,保留完整语义空间
优化模糊意图(例:去除冗余表述)。
示例
原始查询
我想知道在家种西红柿有什么要注意的?可能有些步骤不太对吧?
GQR改写
家庭种植番茄的注意事项及常见错误
优化点
消除口语化疑问句式,显性化"注意事项"和"错误"双检索维度
关键词重写(Keyword Rewriting, KWR)
技术目标
构建高效倒排索引匹配结构
提取关键词优化搜索(例:聚焦核心术语)。
示例
原始查询
阳台上用塑料桶种小番茄怎么施肥比较好?
KWR改写
阳台种植 容器栽培 番茄 施肥方法
优化点
提取"环境(阳台)""器具(容器)""对象(番茄)""操作(施肥)"四维度关键词
伪答案重写(Pseudo-Answer Rewriting, PAR)
技术目标
通过知识注入突破语义鸿沟
生成假设性答案辅助检索。
示例
原始查询
水培番茄营养液怎么配?
PAR流程
生成伪答案:"水培番茄需控制EC值1.8-2.5,NPK比例为1:0.5:2..."
改写查询:
"水培番茄营养液 NPK配比 EC值控制"
"水培番茄营养液 NPK配比 EC值控制"
优化点
引入专业参数(EC值/NPK),引导检索农业化学文档
核心内容提取(Core Content Extraction, CCE)
技术目标
解耦复合查询条件
提炼查询主干。
示例
原始查询
冬季北方室内温度18℃左右,LED补光灯每天开多久适合种矮生番茄?
PAR流程
室内种植 矮生番茄 补光照时长
优化点
剥离具体环境参数(18℃/北方),保留核心要素(补光时长)
策略协同应用示例
DMQR-RAG的自适应重写策略选择方法
步骤
提示注入
将重写策略的描述作为上下文信息注入到LLMs的提示中,使LLMs能够全面理解所有可用的重写策略及其适用场景。
少样本学习
对于难以处理的查询,提供多个示例,帮助LLMs选择合适的重写策略。这种方法增强了模型在处理复杂查询时的鲁棒性。
优点
减少重写次数
提高性能
通用性和泛化能力
最佳实践:示例方案
策略池构建
GQR(信息等价重写):优化模糊意图(例:去除冗余表述)。
KWR(关键词重写):提取关键词优化搜索(例:聚焦核心术语)。
PAR(伪答案重写):生成假设性答案辅助检索。
CCE(核心内容提取):提炼查询主干。
KWR(关键词重写):提取关键词优化搜索(例:聚焦核心术语)。
PAR(伪答案重写):生成假设性答案辅助检索。
CCE(核心内容提取):提炼查询主干。
策略动态选择
通过轻量级提示(策略描述+少样本示例)指导LLM理解策略特性。
LLM根据查询内容匹配策略。
示例:对查询“如何在家里种植番茄?”选择GQR(优化表述)和KWR(提取“种植番茄”关键词)。
生成重写查询
应用选定策略生成多样化查询变体:
GQR → “在家种植番茄的步骤是什么?”
KWR → “种植番茄 关键词”
GQR → “在家种植番茄的步骤是什么?”
KWR → “种植番茄 关键词”
检索与生成
多版本查询并行检索文档(如种植步骤指南、关键词相关资源)。
结果经重排器排序后由LLM生成最终响应。
结果经重排器排序后由LLM生成最终响应。
结果评估和调整
检索到的文档会被提交给重排器进行排序,并最终由LLM生成响应。DMQR-RAG框架会监控检索和生成的性能,并根据结果动态调整未来的重写策略选择。
策略
查询重写
原理
使查询更加具体和详细,提高检索相关信息的可能性。
重写的确认样不仅与原始查询相似,而且还提供不同的角度或透视图,从而提高最终生成的质量和深度。
代码实现
Original query: 气候变化对环境的影响是什么?
Rewritten query: 气候变化对各种生态系统的具体影响是什么,包括温度、降水模式、海平面和生物多样性的变化?
Rewritten query: 气候变化对各种生态系统的具体影响是什么,包括温度、降水模式、海平面和生物多样性的变化?
多查询重写策略
原理
多查询重写策略的核心思想是通过生成多个不同视角的查询来提升检索的召回率
场景
用户查询表述不清晰或含糊
需要从多个角度理解用户意图
单一查询难以覆盖完整信息
代码实现
问题分解策略
子查询
子查询
原理
问题分解策略针对复杂查询,将其拆解为多个简单的子问题。
场景
多步骤推理问题
包含多个子主题的查询
需要综合多个知识点的复杂问题
代码实现
Original query: 气候变化对环境的影响是什么?
Sub-queries:
1. 气候变化如何影响生物多样性和生态系统?
2. 气候变化对海洋环境和海洋生物有什么影响?
3. 气候变化如何影响天气模式和极端天气事件?
4. 气候变化对陆地环境,如森林和沙漠有什么影响?
Sub-queries:
1. 气候变化如何影响生物多样性和生态系统?
2. 气候变化对海洋环境和海洋生物有什么影响?
3. 气候变化如何影响天气模式和极端天气事件?
4. 气候变化对陆地环境,如森林和沙漠有什么影响?
Step-Back回答回退策略
原理
Step-Back策略通过"退一步"思考,从更抽象或更基础的层面重新审视问题
场景
扩大检索范围
获取更完整的上下文信息
提供更全面的答案
代码实现
Original query: 气候变化对环境的影响是什么?
Step-back query: 气候变化的一般影响是什么?
Original query: 气候变化对环境的影响是什么?
Step-back query: 气候变化的一般影响是什么?
HyDE
原理
HyDE最核心的部分是Prompt+LLM+Embedding,其中Prompt控制LLM怎样生成答案,Embedding用来在LLM生成答案后,使用这个答案去知识库进行检索
实现代码
RAG Fusion
原理
这种技术会对多路召回的结果通过一个称为RRF(Reciprocal Rank Fusion)的简单公式进行排序,RRF排序计算简单,并不会大幅增加线上开销,却在不少场景中可以取得很好的效果
代码
上下文压缩
方案
查询优化协同工作
初始处理:使用Step-Back策略理解问题本质
问题拆解:应用问题分解策略进行细化
多角度查询:对每个子问题使用多查询重写
检索
方案
语义检索(向量检索)
定义
向量化用户输入的问题并生成查询文本的数学向量,比较查询向量与知识库内对应的文本向量间的距离,寻找相邻的分段内容。
特点
容错性:处理模糊描述、拼写错误;
多模态理解:支持文本、图像、音视频
等相似匹配;
等相似匹配;
多语言理解:跨语言理解,如输入中文
匹配英文;相似语义理解
匹配英文;相似语义理解
场景
向量检索更适合处理复杂的语义匹配问题
局限性
在搜索人名、物体名、缩写词、短语以及 ID 时,呈现效果不佳 。
注意事项
不同向量模型之间归一化存在诧异,注意统一
全文检索(关键词检索)
定义
关键词检索,即索引文档中的所有词汇。用户输入问题后,通过明文关键词匹配知识库内对应的文本片段,返回符合关键词的文本片段;
特点
领域外搜索:无论单词的含义如何,单
词只是单词。
词只是单词。
边输入边搜索:检索速度快。
确切短语匹配:对产品名、人名、零件到。
编号等特别有用。
编号等特别有用。
场景
适合简单的关键字匹配需求。
局限性
受同义词、拼写错误等影响,可能遗漏相关文档或检索到不相关文档。
技术
BM25检索器
TF-IDF算法
词频 TF(Term Frequency):一个词在一个文档中出现的频率越高,文档的相关性越高。
逆向文档频率 IDF(Inverse Document Frequency):每个词在索引中出现的频率越高,相关性越低。作用是降低如 “的” 这类高频词语的相关性,提升包含低频专业术语的文档的权重。
ElasticSearch
混合检索
定义
同时执行全文检索和向量检索,检索到的文本块,进行融合处理,包括去重与排序,然后再把得分最高的文本块,给到大模型生成回答。
Graph知识图谱检索
定义
通过对图数据库中的知识图谱检索实现增强生成,架构上采用图数据库进行索引构建和检索召回。
特点
知识表示优势:知识图谱以实体和关系的网络表示信息,模仿人类知识结构,能捕获高阶关系和具备推理能力。
图数据库特性:图数据库存储知识图谱,具有灵活模型、高效查询(尤其多跳关系查询)和可扩展性强的特点。
检索方式多样:可借助 Text - to - GraphQL 将自然语言转图数据库查询语言精确检索,也可利用 Vector 索引结合关键词混合检索。
场景
数据特征适配场景:适用于有较多相互关联实体与复杂关系、结构明确的数据,如人物关系网络、企业级关系、医学、法律法规、推荐系统数据。
查询类型适配场景:适合复杂关系、语义推理和多步逻辑关联查询,如多跳关系、知识推理、聚合统计、时序关联、跨多文档查询。具体应用在智能客服、智能检修、智能问诊、药物合成、报告总结等领域。
局限
相比传统 RAG 成本更高,在大多数查询集中于单个实体、小型垂直语料库、主要目标是理解主题和叙事的场景下,使用传统 RAG 更合适 。
注意事项
非结构化数据处理:利用 LLM 抽取知识三元组构建知识图谱时,提示词和 LLM 很关键,生成知识图谱需指定嵌入模型。检索时可融合多种检索器获取丰富上下文。
结构化数据处理:从 MySQL 数据映射到 Neo4j 图数据库,创建节点和关系时注意防止重复。
注意
注意筛选
分值
token
兼顾
重排Reranker
作用
在 RAG 应用中,随着文档数量增加,召回准确率会下降,引入 reranker(重排器)可对初步召回的较多 chunk(如 top 20 或 top 50)进行精排,提高召回准确率,防止 LLM 处理无关信息,减少时间和成本。
模型推荐
Cohere Rerank(收费)
场景
专业知识库、客服系统等对回答精度和相关性要求高的场景
使用方式
安装 cohere 库,获取秘钥;使用其 embed 函数进行文档嵌入;结合 annoy 库等进行索引构建和搜索
效果
能有效提升检索相关性和答案准确性,在特定领域可满足高精度需求
地址
https://dashboard.cohere.com/api-keys
代码
BGE Re-Ranker v2.0
场景
各类需要提升检索及 RAG 质量的场景,尤其在多语言检索任务中表现出色
使用方式
通过 Hugging Face、Github 获取模型;可集成到 Vespa、Milvus 等向量数据库框架中使用
效果
显著提升搜索及 RAG 质量,在不同语言和任务基准测试中检索精度提升明显
常用模型
BAAI/bge-reranker-base
BAAI/bge-reranker-large
BAAI/bge-reranker-v2-m3
BAAI/bge-reranker-large
BAAI/bge-reranker-v2-m3
代码
Jina Reranker v2
场景
检索增强生成(RAG)场景,结构化数据查询、函数调用、代码检索任务
使用方式
通过 Reranker API 进行函数调用排名、SQL 查询排名等操作;集成到 Haystack、LlamaIndex、Langchain 等 RAG/LLM 框架中使用;从 Hugging Face 下载模型进行研究评估
效果
基本达到先进性能水平,在特定任务上优势明显,能提升搜索相关性和 RAG 准确性
模型
jinaai/jina-reranker-v2-base-multilingual
代码
GTE Reranker
阿里巴巴开源的reranker
Alibaba-NLP/gte-multilingual-reranker-base
场景
追求回答高精度和高相关性的场景中特别适合使用 Reranker,例如专业知识库或者客服系统等应用。
注意事项
召回相关性:考虑使用 reranker 后能否显著提高搜索结果相关性,将目标 chunk 排序靠前。
计算成本高
与基于基本矢量搜索的 RAG 相比,reranker增强型 RAG 的成本更高,但与仅依靠 LLM 生成答案相比,它的成本低些
增加检索延迟
引入 reranker 会增加召回时间,服务对响应时间要求高时,使用 reranker 可能不合适。
微调
https://mp.weixin.qq.com/s/1revSlQsum5uRF9U_OYRTA
生成
格式
存储归档
缓存
内容与业务交互
结构化
评估
RAG评估
为什么要评估您的RAG应用
避免幻觉和错误答案
防止LLM生成错误、过时、不一致或有害答案,保障用户体验与信任。
提升系统稳定性
识别检索准确性、上下文相关性、响应质量等问题,确保长期可靠运行。
三大评估维度
检索质量:结果相关性和完整性
响应质量:回答准确性、有用性和真实性
系统性能:响应速度与成本效益
评估指标
主流评估框架
Ragas
功能
通过问答数据集评估检索与答案质量
关键指标/工具
忠实度(faithfulness)
衡量了生成的答案(answer)与给定上下文(context)的事实一致性。它是根据answer和检索到的context计算得出的。并将计算结果缩放到 (0,1) 范围且越高越好。
答案相关性(Answer relevancy)
评估指标“答案相关性”重点评估生成的答案(answer)与用户问题(question)之间相关程度。不完整或包含冗余信息的答案将获得较低分数。该指标是通过计算question和answer获得的,它的取值范围在 0 到 1 之间,其中分数越高表示相关性越好。
上下文精度(Context precision)
评估所有在上下文(contexts)中呈现的与基本事实(ground-truth)相关的条目是否排名较高。理想情况下,所有相关文档块(chunks)必须出现在顶层。该指标使用question和计算contexts,值范围在 0 到 1 之间,其中分数越高表示精度越高。
上下文召回率(Context recall)
量检索到的上下文(Context)与人类提供的真实答案(ground truth)的一致程度。它是根据ground truth和检索到的Context计算出来的,取值范围在 0 到 1 之间,值越高表示性能越好。
上下文相关性(Context relevancy)
根据用户问题(question)和上下文(Context)计算得到,并且取值范围在 (0, 1)之间,值越高表示相关性越好。
核心内容
question
用户输入的问题
answer
从 RAG 系统生成的答案(由 LLM 给出)。
contexts
根据用户的问题从外部知识源检索的上下文即与问题相关的文档。
ground_truths
人类提供的基于问题的真实(正确)答案。这是唯一的需要人类提供的信息。
GitHub地址
https://github.com/explodinggradients/ragas
实现流程
导入加载数据集
封装语言生成模型
封装文本嵌入模型
选择评估指标,输出评估结果
整体参考地址
https://yuanfan.rbind.io/project/ragas/
Arize Phoenix
功能
可视化响应生成过程,定位性能瓶颈
关键指标
延迟
Token用量
错误检测
LLM评估器(检测幻觉/准确性)
评估数据集构建
创建方式
手工标注
LLM生成
Ragas/FiddleCube工具生成问答对
数据收集
记录RAG系统对每个问题的检索上下文与最终答案。
实践经验总结
数据多样性:构建覆盖各类场景的评估问题集
目标优先级:聚焦核心业务指标(如医疗领域侧重正确性)
人工验证:关键场景保持人工审核机制
自动化建设:建立持续集成测试管道
成本平衡:根据用户规模选择评估粒度
变更追踪:记录超参数对指标的影响
安全评估
RAG安全benchmark
噪声
记忆冲突
毒性
DoS
模块化RAG
RAG 的生态
RAG挑战
技术栈
向量数据库
技术框架
LangChain
Github
https://github.com/langchain-ai/langchain
教程
中文:https://www.langchain.com.cn/docs/how_to/sequence/
英文:https://python.langchain.com/api_reference/
LCEL:https://www.langchain.com.cn/docs/how_to/#langchain%E8%A1%A8%E8%BE%BE%E5%BC%8F-lcel
概念指南:https://www.langchain.com.cn/docs/concepts/#document-loaders
使用指南:
https://www.langchain.com.cn/docs/how_to/
prompt 仓库
https://smith.langchain.com/hub
原理
架构框架
Langchain
Model I/O
Model I/O 指的是和 LLM 直接进行交互的过程
Data connection
Document transformers
Vector stores
Vector stores负责存储向量化数据并提供向量搜索的功能,常见的向量数据库包括 FAISS, Milvus, Pinecone, Weaviate, Chroma 等
Memory
Memory可以帮助Language Model补充历史信息的上下文
LangSmith
一个开发者平台,让你能够调试、测试、评估和监控 LLM 应用程序。
langserve
一个将 LangChain 链部署为 REST API 的包。使得快速搭建生产就绪的 API 变得简单。
适合
集成复杂的自定义工作流程
模块化和集成
LlamaIndex
教程
https://docs.llamaindex.ai/en/stable/
原理
适合
构建基础的索引、查询搜索和数据检索系统
专注于提供高效的搜索和检索功能
AI原生开源应用
One-API:LLM模型分发路由
FastGPT AI Agent
FastGPT 是一个基于 LLM 大语言模型的知识库问答系统,提供开箱即用的数据处理、模型调用等能力。同时可以通过 Flow 可视化进行工作流编排,从而实现复杂的问答场景!
文档地址
https://doc.tryfastgpt.ai/docs/intro/
Github
https://github.com/labring/FastGPT
dify:AI Agent
Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。
Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等,让您可以快速从原型到生产。
Dify 是一个开源的 LLM 应用开发平台。其直观的界面结合了 AI 工作流、RAG 管道、Agent、模型管理、可观测性功能等,让您可以快速从原型到生产。
文档地址
https://docs.dify.ai/zh-hans/guides/workflow
Github
https://github.com/langgenius/dify
Ragflow:深度RAG
RAGFlow 是一款基于深度文档理解构建的开源 RAG(Retrieval-Augmented Generation)引擎。RAGFlow 可以为各种规模的企业及个人提供一套精简的 RAG 工作流程,结合大语言模型(LLM)针对用户各类不同的复杂格式数据提供可靠的问答以及有理有据的引用。
文档地址
https://ragflow.io/docs/dev/
Github
https://github.com/infiniflow/ragflow
QAnything:RAG
QAnything (Question and Answer based on Anything) 是致力于支持任意格式文件或数据库的本地知识库问答系统,可断网安装使用。
您的任何格式的本地文件都可以往里扔,即可获得准确、快速、靠谱的问答体验。
目前已支持格式: PDF(pdf),Word(docx),PPT(pptx),XLS(xlsx),Markdown(md),电子邮件(eml),TXT(txt),图片(jpg,jpeg,png),CSV(csv),网页链接(html)
您的任何格式的本地文件都可以往里扔,即可获得准确、快速、靠谱的问答体验。
目前已支持格式: PDF(pdf),Word(docx),PPT(pptx),XLS(xlsx),Markdown(md),电子邮件(eml),TXT(txt),图片(jpg,jpeg,png),CSV(csv),网页链接(html)
文档地址
https://github.com/netease-youdao/QAnything/blob/qanything-v2/docs/API.md
Github
https://github.com/netease-youdao/QAnything/blob/qanything-v2/README_zh.md
DB-GPT:数据分析+RAG
DB-GPT是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。
目的是构建大模型领域的基础设施,通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单,更方便。
目的是构建大模型领域的基础设施,通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单,更方便。
关键特性
私域问答&数据处理&RAG
支持内置、多文件格式上传、插件自抓取等方式自定义构建知识库,对海量结构化,非结构化数据做统一向量存储与检索
多数据源&GBI
支持自然语言与Excel、数据库、数仓等多种数据源交互,并支持分析报告。
多模型管理
海量模型支持,包括开源、API代理等几十种大语言模型。
自动化微调
围绕大语言模型、Text2SQL数据集、LoRA/QLoRA/Pturning等微调方法构建的自动化微调轻量框架, 让TextSQL微调像流水线一样方便。
支持自定义插件执行任务
RAG生产落地实践架构
文档地址
https://www.yuque.com/eosphoros/dbgpt-docs/spkvg56m1txwm66m
Github地址
https://github.com/eosphoros-ai/DB-GPT
SuperSonic:数据分析
SuperSonic融合Chat BI(powered by LLM)和Headless BI(powered by 语义层)打造新一代的BI平台。
这种融合确保了Chat BI能够与传统BI一样访问统一化治理的语义数据模型。此外,两种BI新范式都从中获得收益:
Chat BI的Text2SQL生成通过检索语义数据模型得到增强。
Headless BI的查询接口通过支持自然语言API得到拓展。
这种融合确保了Chat BI能够与传统BI一样访问统一化治理的语义数据模型。此外,两种BI新范式都从中获得收益:
Chat BI的Text2SQL生成通过检索语义数据模型得到增强。
Headless BI的查询接口通过支持自然语言API得到拓展。
SuperSonic的整体架构和主流程
模型知识库(Knowledge Base): 定期从语义模型中提取相关的模式信息,构建词典和索引,以便后续的模式映射。
模式映射器(Schema Mapper): 将自然语言文本在知识库中进行匹配,为后续的语义解析提供相关信息。
语义解析器(Semantic Parser): 理解用户查询并抽取语义信息,生成语义查询语句S2SQL。
语义修正器(Semantic Corrector): 检查语义查询语句的合法性,对不合法的信息做修正和优化处理。
语义翻译器(Semantic Translator): 将语义查询语句翻译成可在物理数据模型上执行的SQL语句。
问答插件(Chat Plugin): 通过第三方工具扩展功能。给定所有配置的插件及其功能描述和示例问题,大语言模型将选择最合适的插件。
问答记忆(Chat Memory): 将历史的查询轨迹进行封装,可被召回作为few-shot样例嵌入提示词。
模式映射器(Schema Mapper): 将自然语言文本在知识库中进行匹配,为后续的语义解析提供相关信息。
语义解析器(Semantic Parser): 理解用户查询并抽取语义信息,生成语义查询语句S2SQL。
语义修正器(Semantic Corrector): 检查语义查询语句的合法性,对不合法的信息做修正和优化处理。
语义翻译器(Semantic Translator): 将语义查询语句翻译成可在物理数据模型上执行的SQL语句。
问答插件(Chat Plugin): 通过第三方工具扩展功能。给定所有配置的插件及其功能描述和示例问题,大语言模型将选择最合适的插件。
问答记忆(Chat Memory): 将历史的查询轨迹进行封装,可被召回作为few-shot样例嵌入提示词。
核心
ChatBI
Chat BI的Text2SQL生成通过检索语义数据模型得到增强。
HeadlessBI
Headless BI的查询接口通过支持自然语言API得到拓展。
文档地址
https://supersonicbi.github.io/
Github
https://github.com/tencentmusic/supersonic/blob/master/README_CN.md
One-API:LLM模型分发路由
OpenAI 接口管理 & 分发系统,支持 Azure、Anthropic Claude、Google PaLM 2 & Gemini、智谱 ChatGLM、百度文心一言、讯飞星火认知、阿里通义千问、360 智脑以及腾讯混元,可用于二次分发管理 key,仅单可执行文件,已打包好 Docker 镜像,一键部署,开箱即用.
文档地址:
https://openai.justsong.cn/
GitHub
https://github.com/songquanpeng/one-api
Chat2DB:SQL生成数据处理
Chat2DB 是一款AI first的数据管理、开发、分析工具,它的核心是AIGC(Artificial Intelligence Generation Code)能力,它可以将自然语言转换为SQL,也可以将SQL转换为自然语言,也可以自动生成报表,极大的提升人员的效率。通过一个产品可以实现数据管理、数据开发、数据分析的能力,即使不懂SQL的运营业务也可以使用快速查询业务数据、生成报表能力。
文档地址
https://chat2db-ai.com/resources/zh-CN/docs/start-guide/getting-started
Github
https://github.com/CodePhiliaX/Chat2DB/releases
向量数据库
有了向量数据库的大模型就好比是开卷考试
Milvus
Milvus 构建在 Faiss、HNSW、DiskANN、SCANN 等流行的向量搜索库之上,专为在包含数百万、数十亿甚至数万亿向量的密集向量数据集上进行相似性搜索而设计。
文档地址
https://milvus.io/docs/zh/quickstart.md
GitHub
https://github.com/milvus-io/milvus
pgvector:PG的向量插件
Postgres 的开源向量相似性搜索
将向量与其余数据一起存储。支持:
精确和近似最近邻搜索
单精度、半精度、二进制和稀疏向量
L2 距离、内积、余弦距离、L1 距离、汉明距离和杰卡德距离
任何具有 Postgres 客户端的语言
将向量与其余数据一起存储。支持:
精确和近似最近邻搜索
单精度、半精度、二进制和稀疏向量
L2 距离、内积、余弦距离、L1 距离、汉明距离和杰卡德距离
任何具有 Postgres 客户端的语言
文档地址
https://github.com/pgvector/pgvector/blob/master/README.md
Github
https://github.com/pgvector/pgvector
Pinecone:闭源云向量数据库
快速:即使有数十亿个条目,也可以获得超低的查询延迟。
实时:添加、编辑或删除数据时,可以获得实时的索引更新。
过滤:将向量搜索与元数据过滤器相结合,以获得更相关、更快速的结果。
完全托管:轻松开始、使用和扩展,我们会让事情保持平稳和安全。
实时:添加、编辑或删除数据时,可以获得实时的索引更新。
过滤:将向量搜索与元数据过滤器相结合,以获得更相关、更快速的结果。
完全托管:轻松开始、使用和扩展,我们会让事情保持平稳和安全。
架构
文档地址
https://www.pinecone-io.com/docs/intro
快速支撑开源应用
Yao 低代码/JSON开发
YAO 是一款开源应用引擎,使用 Golang 编写,下载即用。适合用于开发业务系统、网站/APP API 接口、管理后台、自建低代码平台等。
YAO 根据业务特征,定义了一套 YAO DSL,用来描述数据结构、数据流、API 接口、并发任务、计划任务、Socket 服务等功能模块,这些功能模块被定义为 Widget。
YAO 根据业务特征,定义了一套 YAO DSL,用来描述数据结构、数据流、API 接口、并发任务、计划任务、Socket 服务等功能模块,这些功能模块被定义为 Widget。
与大部分低代码平台相比,YAO 具有更好的通用性、应用独立发布(可申请软著)、非一次性代码,可持续迭代升级、不限于”托拉拽“, 有多种编写方式等优势。
文档地址
https://yaoapps.com/doc
https://yaoapps.com/docs/documentation/zh-cn/getting-started
GitHub
https://github.com/YaoApp/yao/blob/main/README.zh-CN.md
Magic API:云函数快速开发
一个基于Java的接口快速开发框架,通过magic-api提供的UI界面完成编写接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发,代码编写随意,ru
支持MySQL、MariaDB、Oracle、DB2、PostgreSQL、SQLServer等支持jdbc规范的数据库
支持非关系型数据库Redis、Mongodb、ElasticSearch
支持动态配置定时任务
支持集群部署、接口自动同步
支持分页查询以及自定义分页查询
支持多数据源配置,支持在线配置数据源
支持SQL缓存,以及自定义SQL缓存
支持自定义JSON结果、自定义分页结果
支持对接口权限配置、拦截器等功能
支持运行时动态修改数据源
支持Swagger接口文档生成
支持可插拔式的插件机制
支持i18n国际化
支持团队协作,可显示在线人数、以及他人正在编辑和浏览的接口等功能
基于magic-script (opens new window)脚本引擎,动态编译,无需重启,实时发布
支持Linq式查询,关联、转换更简单
支持数据库事务、SQL支持拼接,占位符,判断等语法
支持文件上传、下载、输出图片
支持脚本历史版本对比与恢复
支持脚本代码自动提示、参数提示、悬浮提示、错误提示
支持导入Spring中的Bean、Java中的类
支持在线调试
支持自定义工具类、自定义模块包、自定义类型扩展、自定义方言、自定义列名转换等自定义操作
支持非关系型数据库Redis、Mongodb、ElasticSearch
支持动态配置定时任务
支持集群部署、接口自动同步
支持分页查询以及自定义分页查询
支持多数据源配置,支持在线配置数据源
支持SQL缓存,以及自定义SQL缓存
支持自定义JSON结果、自定义分页结果
支持对接口权限配置、拦截器等功能
支持运行时动态修改数据源
支持Swagger接口文档生成
支持可插拔式的插件机制
支持i18n国际化
支持团队协作,可显示在线人数、以及他人正在编辑和浏览的接口等功能
基于magic-script (opens new window)脚本引擎,动态编译,无需重启,实时发布
支持Linq式查询,关联、转换更简单
支持数据库事务、SQL支持拼接,占位符,判断等语法
支持文件上传、下载、输出图片
支持脚本历史版本对比与恢复
支持脚本代码自动提示、参数提示、悬浮提示、错误提示
支持导入Spring中的Bean、Java中的类
支持在线调试
支持自定义工具类、自定义模块包、自定义类型扩展、自定义方言、自定义列名转换等自定义操作
文档地址
https://www.ssssssss.org/magic-api/pages/quick/intro/
Github
https://github.com/ssssssss-team/magic-api
本地模型运行应用
Ollama:本地部署大模型
Ollama 是一个用于构建大型语言模型应用的工具,它提供了一个简洁易用的命令行界面和服务器,让你能够轻松下载、运行和管理各种开源 LLM。与需要复杂配置和强大硬件的传统 LLM 不同,Ollama 让你能够方便地像使用手机 App 一样体验 LLM 的强大功能。
文档地址
https://ollama.org.cn/blog
Github
https://github.com/ollama/ollama
Xinference
Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。
文档地址
https://inference.readthedocs.io/zh-cn/latest/index.html
GitHub
https://github.com/xorbitsai/inference
商业化模型厂商
国内
智谱
https://chatglm.cn/main/alltoolsdetail?lang=zh
讯飞
https://xinghuo.xfyun.cn/desk
文心一言
https://yiyan.baidu.com/
豆包
https://www.doubao.com/
腾讯混元
https://hunyuan.tencent.com/
通义千问
https://tongyi.aliyun.com/qianwen/
百川大模型
https://www.baichuan-ai.com/home
kimi
https://kimi.moonshot.cn/
Deepseek
官网:https://www.deepseek.com/
介绍:DeepSeek-V3 在推理速度上相较历史模型有了大幅提升。
在目前大模型主流榜单中,DeepSeek-V3 在开源模型中位列榜首,与世界上最先进的闭源模型不分伯仲。
在目前大模型主流榜单中,DeepSeek-V3 在开源模型中位列榜首,与世界上最先进的闭源模型不分伯仲。
对话:https://chat.deepseek.com/
开源地址:
https://github.com/deepseek-ai/DeepSeek-R1
API文档:
https://api-docs.deepseek.com/zh-cn/
提示词文档:
https://api-docs.deepseek.com/zh-cn/prompt-library
知识库
https://geek-agi.feishu.cn/wiki/PA7kwocJuixdbAk5AnScSUN1nFh
国外
OpenAi : ChatGPT
https://chat.openai.com/
ClaudeAI
https://claude.ai/
RAG 与微调技术关系
RAG微调对比差异
Agent
定义
Agent 可以翻译为代理人、代理商,可以帮助我们完成一些事情的实体,可以是人或机器。
能感知环境并采取相应行动的智能体。
两种模式
ReAct 模式
典型 Prompt 模板
工作流程
思考(Reasoning)
行动(Acting)
观察(Observation)
循环迭代
基于观察结果继续思考和行动
代码实现
Plan-and-Execute 模式
典型 Prompt 模板
流程
规划阶段(Planning)
分析任务目标
拆分子任务
制定执行计划
执行阶段(Execution)
按计划顺序执行子任务
处理执行结果
调整执行计划
代码实现
优化设计
分层记忆系统
重要性
上下文理解能力
长期知识积累
决策的连续性
性能和资源消耗
长期知识积累
决策的连续性
性能和资源消耗
分层设计的原理
方案
工作记忆(Working Memory)
容量小(3-5条)
高频访问
用于当前任务处理
快速衰减
高频访问
用于当前任务处理
快速衰减
短期记忆(Short-term Memory)
中等容量(几十条)
保存近期交互
中等访问频率
可被提升到工作记忆
保存近期交互
中等访问频率
可被提升到工作记忆
长期记忆(Long-term Memory)
大容量
持久存储
需要索引检索
支持语义搜索
持久存储
需要索引检索
支持语义搜索
代码实现
记忆管理策略
方案
重要性评分
基于内容相关性
考虑时间衰减
使用频率权重
用户显式标记
考虑时间衰减
使用频率权重
用户显式标记
淘汰机制
LRU(最近最少使用)
重要性阈值
时间窗口
混合策略
代码实现
推理链路设计
Agent 的决策过程
可解释的:理解为什么做出这个决定
可追踪的:能够回溯决策路径
可评估的:对每步推理的可信度评分
可审计的:支持决策过程的审查
推理链路的核心要素
思维节点(Thought Node)
中间推理步骤
关键决策点
证据支持
确信度评分
关键决策点
证据支持
确信度评分
链路结构
有向无环图(DAG)
节点间关系
分支和合并
优先级排序
节点间关系
分支和合并
优先级排序
元数据记录
时间戳
上下文信息
外部依赖
资源消耗
上下文信息
外部依赖
资源消耗
实现逻辑
性能优化系统
性能优化的关键维度
响应时间
端到端延迟
推理时间
IO 等待时间
并发处理能力
推理时间
IO 等待时间
并发处理能力
资源利用
内存使用
CPU 负载
Token 消耗
存储空间
CPU 负载
Token 消耗
存储空间
质量指标
推理准确度
答案相关性
上下文保持
错误率
答案相关性
上下文保持
错误率
自适应优化策略
动态资源分配
根据负载调整资源
优先级队列管理
自动扩缩容
任务调度优化
优先级队列管理
自动扩缩容
任务调度优化
性能监控
实时指标收集
性能瓶颈分析
告警机制
趋势分析
性能瓶颈分析
告警机制
趋势分析
优化触发机制
阈值触发
定期优化
人工干预
A/B 测试
定期优化
人工干预
A/B 测试
代码实现
工具接口标准化:制定通用规范
工具描述规范
统一的工具基类
错误处理:让工具更可靠
错误分类和处理
重试机制
性能优化:让工具更高效
缓存机制
并发控制
测试和文档:保证工具可靠性
单元测试
文档规范
工具管理平台
工具注册中心
基本信息管理
数据库设计
动态加载机制
权限控制
调用链路追
监控告警
代码实现
Stable Diffusion (稳定扩散)基础
工作原理
就是用户输入了一段 Prompt 指令,机器会按照这个指令,在一个潜空间里,将一张随机图降噪为一张符合指令的图片
三大步骤
Text Encoder(文本编码器)
将Prompt编译成一个个的词特征向量
此步骤下会输出 77 个等长的向量,每个向量包含 768 个维度
原理
CLIP
Text Encoder将Prompt转化为向量 Embedding相关的一些特征和含义
形态特征
向量表示可能会捕捉到 Cat 的形态特征,比如它的体型、头部的形状、四肢的位置等。这些特征可以帮助区分 Cat 与其他动物或物体。
视觉特征
向量表示可能会包含 Cat 的视觉特征,比如它的颜色、斑纹、眼睛的形状等。这些特征可以帮助识别 Cat 的外观特点。
语义含义
向量表示可能会包含与 Cat 相关的语义含义,比如它是一种宠物、一种独立的动物、与人类有亲密关系等。这些含义可以帮助理解 Cat 在人类文化和社会中的角色和意义。
Image Encoder(图片编码)
Latent Space(潜空间)
机器会将这些特征向量和随机图先转化到一个 Latent Space(潜空间)里,然后根据这些特征向量,将随机图「降噪」为一个「中间产物」
降噪
Steps(步)
每个Denoise
Denoise 会拿噪音图 B 和 C 相减得出图 D。我们用简单的数学解释下这张图是啥。首先,图 B 是用 Prompt 加随机图预测的噪声,简单理解,就包含了「根据 Prompt 预测的噪声」+「根据随机图预测的噪声」,而 C 则是「根据随机图预测的噪声」,B 减 C 就等于「根据 Prompt 预测的噪声」。
Denoise 会将 D 噪声放大,一般就是会乘以一个系数,这个系数在一些 Stable Diffusion 里会以 CFG、CFG Scale 或者 Guidance Scale 表示。接着再拿这张放大后的图与噪声图 C 相加,得到图 E。这样做的原因是为了提高图片生成的准确性,所以通过乘以一个系数,来刻意提高「根据 Prompt 预测的噪声」的权重。
Denoise 会将图 A 减去图 E,得出一张新的图。也就是我前面提到的「雕刻」的过程,去掉不需要的噪声。
Denoise(降噪)
Noise Predictor(噪音预测器)
能预测出随机图里包含什么噪音的模型
使用随机图(比如一张 4 X 4 的图)和 Prompt 的词特征向量预测出一张噪声图 B
Prompt 的输入框有两个,一个是正向的,一个负向的
Image Decoder(图片解码器)
Variational Auto Encoder(变分自编码器)简称 VAE
VAE Decoder
中间产物会被 Image Decoder(图片解码器)解码成一张真正的图片
好处
效率提升
GPU 也能以相对较快的速度,完成降噪运算
可以对图像进行更精细的控制和编辑
生成图像时可以更好地控制图像的细节和风格,从而提高生成图像的质量和逼真度。
坏处
经过编码,然后再将数据还原会导致一些数据丢失
潜在空间的维度较低,它可能无法完全捕捉原始数据中的所有细节和特征
可视化过程
首先是一张模糊甚至黑色的图片,然后图片会一步步变得越来越清晰,这就是我前面所说的「降噪」或者「雕刻」的过程
文生图代码
文生图
提示词结构
英文
英文输入法,英文逗号分隔,支持断行、字母大小写
位置靠前的标签拥有更高权重
万能公式
主体内容
这里是用于描述画面的主体内容,比如说是人或者动物,人物的着装、表情,动物的毛发、动作等,物体的材质等。一般同一画面中的主体内容不要超过2个,Stable Diffusion对多个物体的组合生成能力较弱,如果对画面内容有特定要求,可以先挨个生成主体素材进行拼合,然后用controlNet插件约束进行出图。
环境背景
这个很好理解,就是设定周围的场景和辅助元素,比如天空的颜色、四周的背景、环境的灯光、画面色调等,这一步是为了渲染画面氛围,凸显图片的主题。
构图镜头
主要用来调节画面的镜头和视角,比如强调景深,物体位置等,黄金分割构图、中全景、景深。
图像设定
是增强画面表现力的常用词汇,我们经常在一些惊艳的真实系AI图片中看到比如增加细节、摄影画质、电影感等词,可以一定程度上提升画面细节。
参考风格
用于描述画面想呈现的风格和情绪表达,比如加入艺术家的名字、艺术手法、年代、色彩等。
权重
支持多层叠加
花括号{1.05}
方括号[0.9]
圆括号(1.1)
直接填写数值(tag:0.5~1.5)
步数
结合分步绘制和停止绘制的案例来看, 在Stable Diffusion中模型绘制图像内容并非按照完美百分比的步骤进行绘制,画面内容在前面20步左右时已基本定型,后续的迭代步数更多是丰富细节,基本不会再添加或减少主体内容。
混合
融合提示词:A AND B
可以发现如果只是通过逗号分隔,模型绘制时只是简单将黄色和绿色进行填充拼接,而加上【AND】后,模型会将黄色和绿色当作一个词来理解,最终绘制出草绿色。
在提示词间加上AND(必须大写)可以关联前后的元素特征,最终形成具备融合图像的效果AND前后的提示词支持增加权重,比如 ct :12AND dog AND tiger:2.1 由此可以自由控制不同关键词在运算时侧重占比
打断提示词:A BREAK B
在提示词间加上关键词BREAK(必须大写),可以打断前后提示词的联系,在一定程度上减少提示词污染的情况
Stable Diffusion模型在理解提示词时,并非像人类一样逐字逐句的阅读,而是会结合上下文内容来统一理解,这就导致在运行过程中有时候会出现前后关键词相互影响的情况,也就是我们俗称的污染。
交替绘制:[ A/ B ...]
[white:red:0.5] hair 0.5代表百分之五十 渐变
red|blue hair 红色 竖杠 蓝色头发 混合
使用中竖线[1]分隔多个提示词,在外侧加上方括号,运算时模型会在A和B内容间交替切换交替绘制每次绘制只理解单独的关键词,而并非同时将前后提示词一起理解,因此最终的效果只能融合视觉特征,而无法针对颜色等信息进行融合,通常用于绘制猎奇、魔幻等克苏鲁风格。
其他混合
(tagA,tagB:0.9) 表示 A B的 比例是9:1 例如,(sliver,pink:0.9) 银色跟粉色的比例是9:1
[cow|horse] 牛马混合物
矩阵排列:A/B··
配合提示词矩阵Prompt matrix来使用
提示词
反向
常用人体
综合人体
书写方式
以词组为基本单位,不必需要完整句子
prompt之间输入分隔符,分隔符:英语逗号
分类
内容型
人物及主题特征
穿搭、发型、五官、表情、动作……
场景特征
室内外、大场景(forest,city,street...)、小细节(tree,bush,white flower...)
光照环境
白天黑夜、特定时段(morning,sunset...)、光环境(sunlight,bright,dark...)、天空(blue sky,starry sky...)
画幅视角
距离(close-up,distant)、人物比例(full body,upper body)、观察视角(from above,view of back)、镜头类型(wide angle,Snoy A7 III)
标准化型
画质
通用高画质
best quality,ultra-detailed,masterpiece,hires,8k...
特定高分辨率类型
extremely detailed CG unity 8k wallpaper,unreal engine rendered...
画风
插画风
illustration,painting,paintbrush...
二次元
anime,comic,game CG...
写实
photorealistic,realistic,photograph...
权重与负面提示词
增强提示词权重
加英文括号
每套一层括号权重×1.1,如(((black hair))),权重为1.1的三次方
数字权重
加一重括号后,在提示词后输入英文冒号后直接输入权重倍数,如(black hair:1.5)
负面提示词
避免不想要的元素出现或崩坏等
可尝试用负面提示词生成特殊风格图片
出图参数
采样迭代步数
迭代步数越大,成像越清晰,但步数>20时,往后提升效果并不明显且会消耗更多时间;步数过少(<10)成像效果差
建议10~20步
采样方法
AI进行图像生成时使用的算法
宽/高:出图分辨率
硬件允许可适当提升分辨率以提高成像质量
分辨率过高易出现多人多手多脚的成像问题
可先进行一次低分辨率生成,再通过高清修复放大算法放大图片分辨率解决
面部修复
对人物脸部进行修复(写实风格效果较好)
平铺/分块
用以生成无缝贴满屏幕的纹理图片
提示词相关性
提示词相关性越高AI忠实于提示词的程度越高
建议7~12
随机种子
生成批次/数量
同批绘制多图会将多个图片看作一张更大的图片一次性成图,容易爆显存
可降低每批数量,提升生成批次解决
文生视频
数字人
工作提效
大模型知识
模型蒸馏技术
参考文章:
https://mp.weixin.qq.com/s/L9TOxS8WJYmk6L5hew95Zg
https://www.51cto.com/aigc/3945.html
定义
在机器学习中,模型蒸馏是一种优化技术,通过模仿教师模型的输出,训练一个较小的学生模型,从而实现知识的传递。教师模型通常具有较高的性能,但计算成本高昂,而学生模型则更加轻量级,推理速度更快,且内存占用更少。
蒸馏技术的核心在于知识的传递和压缩
原理
蒸馏技术的核心在于知识的传递和压缩。具体来说,教师模型通过其复杂的结构和大量的参数,学习到了数据中的复杂模式和特征。学生模型则通过模仿教师模型的输出,学习这些模式和特征,从而获得类似的性能。
步骤
教师模型的训练
首先训练一个性能强大的教师模型,该模型通常具有大量的参数和复杂的结构。
数据准备
从教师模型中提取推理数据样本,这些数据将用于训练学生模型。
生成丰富的训练数据样本,从而提高数据的多样性和代表性
学生模型的训练
使用教师模型的输出作为监督信号,对较小的学生模型进行训练。
优化与调整
通过调整学生模型的结构和参数,使其在保持高效的同时,尽可能接近教师模型的性能。
为什么使用蒸馏技术
大模型的难点
成本
数十亿个参数LLMs的托管成本很高,通过 API 访问的成本更高。
速度
由于所需的计算数量,full-size LLMs 可能会很慢。
基础设施难题
托管最大可用LLMs版本的私有版本意味着需要整理和协调大量资源。
蒸馏的有点
轻量级
推理速度快
内存占用少
成本低
实施简单
蒸馏的缺点
学生受到老师的限制
在最简单的蒸馏版本中,“学生”模型将反映“老师”模型的性能。面对专业任务的广义通常LLMs达不到生产级的准确性。
仍然需要大量未标记的数据
LLM为您创建标签,但由于多种原因,源数据可能供不应求
好的老师模型,禁止用其输出来训练
主流的蒸馏方法及其特点
响应蒸馏 (Response Distillation)
这是最基础的蒸馏方法,主要用于处理分类任务。在这种方法中,我们直接使用教师模型的输出作为学生模型的训练目标。
特征蒸馏 (Feature Distillation)
特征蒸馏不仅关注模型的最终输出,还会学习教师模型中间层的特征表示。
相当于学生不光看老师的最终答案,还要看老师的解题过程或中间步骤,从而更全面地学到思考方法。
逐步蒸馏 (Progressive Distillation)
逐步蒸馏是一种较新的方法,它将蒸馏过程分解为多个步骤。每个步骤都专注于特定的任务或能力的转移。这种方法的优势在于可以更好地保持复杂任务的性能。
实践关键因素
数据选择
数据的分布是否覆盖目标任务空间
数据的质量如何保证
数据量的大小如何确定
架构设计
模型容量:需要足够大以捕获必要的知识,但又要满足资源约束
层次映射:如何将教师模型的层映射到学生模型
注意力机制:是否需要特殊的注意力结构
训练策略
使用动态温度参数
采用渐进式训练方案
结合多任务学习
MOE架构
微调
https://mp.weixin.qq.com/s/wTLQ3fpYIDvPhUX7b6bw9A
涌现能力
指的是在大规模人工智能模型中出现的那些小规模模型中没有的非线性、不可预测的新能力。
定义
物理学
当系统的量变导致行为的质变的现象
在小模型中没有表现出来,但是在大模型中变现出来的能力
分类
基于普通提示的涌现能力
给定一个提示(例如一段自然语言指令)Prompt,模型能够在不更新参数的情况下给出回复。
基于增强提示的激发方法
思维链(Chain of Thought)
通过细化模型的推理过程,提高模型的下游任务的效果
具体表现
自然语言理解和生成
大规模语言模型在理解上下文、生成连贯文本方面表现出色。
复杂推理能力
大模型可以进行复杂的逻辑推理和问题解决,例如解数学题、编写代码、进行逻辑推理等。
多任务学习
大模型可以在没有专门训练的情况下,处理多种任务。
语言迁移和泛化能力
大模型能够将从一种任务或一种语言中学到的知识迁移到其他任务或语言中。
表现出跨语言的泛化能力
形成因素
参数规模
大模型参数规模达数十亿甚至上千亿级别,可捕捉复杂模式与关系,参数增加能学习存储更多信息,展现新能力。
数据规模和多样性
在海量、多样数据上训练,使模型接触丰富语言现象与知识,提升在不同任务中的泛化能力。
架构和训练技术
采用如 Transformer 架构和自监督学习、大规模并行计算等训练技术,提高模型学习和表示能力,有效处理和生成复杂语言数据 。
专家路由机制
多头注意力机制
多令牌预测
上下文理解提升
分词
子主题
案例
数据分析
AI编程技术
AI编程的优势
提升编码效率:快速生成代码模板和常用功能
降低开发门槛:智能代码补全和错误提示
自动化处理:批量代码生成和重构
注意事项
需要人工审查和测试验证
可能产生过时或错误的代码
不适合高度定制化的业务逻辑
或者需要描述很清楚
主流AI编程工具
插件类
IDEA
实时提供代码补全、生成和建议,依赖上下文生成代码,侧重代码片段生成。
Github Copilot
通义灵码
豆包Marscode
独立IDE工具
Cursor
官网:https://www.cursor.com/
Trae
官网:https://www.trae.ai/
工具选型建议
Cursor
深度整合GPT-4和Claude 3.5模型,Cluade模型是公认的代码生成能力最强的模型。
AI编程提示词指南
提示词设计原则
明确四要素
角色定义:指定专业角色(如"资深后端工程师")
任务描述:清晰说明功能与目标(如"实现用户注册功能")
具体要求:列出技术栈(Python 3.10)、性能指标(响应时间<200ms)等
背景说明:提供业务场景(电商系统)、环境信息(日均百万级请求)
结构化组织
使用标题和分段提升可读性
按逻辑顺序排列需求(先核心功能后辅助功能)
用项目符号列出关键点
标注优先级(如‼️核心需求)
上下文传递
说明现有代码结构(如基于Spring Boot 2.7的微服务)
解释关键术语
描述模块关系(与支付系统的交互方式)
提供业务背景(促销活动需求场景)
约束与规范
技术选型(MySQL 8.0)
代码规范(PEP8)
兼容性要求(适配iOS 14+)
质量保证
日志规范(JSON格式结构化日志)
强制错误处理(网络超时重试机制)
测试覆盖率(单元测试≥80%)
复用建议(继承基础工具类)
官方提示词库
https://cursor.directory/
https://docs.anthropic.com/zh-CN/prompt-library/library
AI编程提示词示例
节奏方块大师
迷宫探险家
web项目开发
项目构建技巧和实操
项目结构
按提示词要求,生成代码模版
Cursor AI编程工具介绍
常用快捷键
Chat对话:Ctrl+L
Composer代码生成:Ctrl+I
文件搜索:Ctrl+P
命令面板:Ctrl+Shift+P
代码跳转:Ctrl+Click
终端:Ctrl+`
核心功能指令
@file
引用文件内容作为上下文
支持文件路径自动补全
可选择特定代码区域
支持文件路径自动补全
可选择特定代码区域
@folder
引用文件夹作为上下文
支持递归扫描
可设置文件过滤规则
支持递归扫描
可设置文件过滤规则
@Code
精准引用代码片段
支持代码预览
适合重构和修复
支持代码预览
适合重构和修复
@Web
实时网络搜索
获取最新API文档
支持自定义搜索源
获取最新API文档
支持自定义搜索源
@git
版本控制操作
代码差异分析
提交信息生成
代码差异分析
提交信息生成
@Codebase
扫描整个代码库
按相关性排序
生成全局关联代码
按相关性排序
生成全局关联代码
组合指令
支持多指令组合使用
提升代码生成精确度
适合复杂功能开发
提升代码生成精确度
适合复杂功能开发
高阶用法
内置提示词设置
Cursor 支持设置全局提示词设置,所有项目都可以遵从全局提示词,即全局 system prompt,详见下面 高阶提示词 配置。
.cursorrules
.cursorrules 是 Cursor AI 驱动代码编辑器中的一种配置文件,用于自定义 AI 的代码生成和行为规则,确保生成的代码符合项目特定的需求和风格。
YOLO模式
进入Settings > Features启用YOLO模式
零确认自动化,YOLO模式下,Agent无需人工确认即可自动执行终端命令、修改多文件、修复Linter错误等操作,甚至能完成从项目搭建到部署的全流程。
常用指令
隐私模式设置
担心代码泄露风险时可以启用隐私模式(enabled),官方声明启用隐私模式后不会保留用户任何代码,不启用模式,官方声明可能会保存提示词并收集遥测收据已改进Cursor。
如何长期免费使用cursor
一般来说,cursor默认的使用周期是两周,但是两周后就要提示让你购买pro会员了。
无限邮箱方式注册账号
步骤一:注册2925邮箱。
步骤二:在cursor 中退出原始的邮箱地址。
步骤三:通过对原邮箱加后缀的方式进行新的邮箱登录。
机器被限制了怎么办?
cursor官方如果发现某个机器长期免费使用账号,就会对这台电脑进行封禁操作。
参考地址:
https://github.com/fly8888/cursor_machine_id,
操作方法
学习文档
《通往 AGI 之路》
https://waytoagi.feishu.cn/wiki/QPe5w5g7UisbEkkow8XcDmOpn8e
面试
RAG方面
为什么大模型需要外挂知识库?
大模型的知识是静态的
模型的记忆容量有限
知识库可以存储大量内容,通过检索提供相关信息,模型只需在当前上下文窗口中利用这些信息进行回答,避免超出上下文限制。
知识的时效性与精确性需求
个性化与领域适配
构建特定领域的知识库
为什么需要 RAG?
时效性
覆盖性
RAG 思路是怎么样?
加载文件
读取文本
文本分割
文本向量化
持久化到向量数据库中
query向量化
query向量查询向量数据库相似的Top K
匹配的相似文本作为上下问与问题一起组装Prompt
提交给LLM生成回答内容
评估
优化
RAG 核心技术是什么?
embedding
向量持久化、相似度搜索、上下文
prompt 模板
指令
示例
输入数据
子主题
子主题
0 条评论
下一页