# 大模型应用技术原理
- RAG
    - 向量数据库 [对比]("https://www.jianshu.com/p/43cc19426113")
        - 选型标准
            - 开源vs.闭源vs. 源码可见
            - 客户端/SDK语言
            - 托管方式
                - self-hosted/on-premise
                    - redis,pgvector,milvus
                - managed/cloud-native
                    - zilliz,pinecone
                - embeded+cloud-native
                    - chroma,lanceDB
                - self-hosted+cloud-native
                    - vald,drant,weaviate,vspa,elasticsearch
            - 索引方法
                - 算法
                    - Flat
                    - Tree-based
                        - Annoy(Approximate Nearest Neighbors Oh Yeah)
                        - KD-Tree
                        - Trinary Projection Trees
                    - IVF
                        - IVF
                        - IVMF(Inverted Multi-index File)
                    - Graph-based
                        - HNSW
                        - NSG
                        - Vamana(DiskANN)
                            -  ![图片](./img/大模型应用技术原理-幕布图片-793118-735987.jpg)
                            -  ![图片](./img/大模型应用技术原理-幕布图片-580318-260070.jpg)
                    - Hashing-based
                        - LSH
                        - Spherical Hashing
                        - Spectral Hashing
                - 量化
                    - PQ（Product Quantization）
                        - PQ 将特征空间分解为多个低维子空间的笛卡尔乘积，然后单独地对每一个子空间进行量化
                    - SQ（Scalar Quantization）
                        - SQ是将每一个维度量化成指定位数的一个数
        - 主流方案
            - professional
                - weaviate
                    - 1. 文档丰富，容易上手
                    - 2. 提供混合索引
                    - 3. 支持自托管+云原生
                    - 4.支持python,js,ts,go,java等客户端
                    - 5. 支持HNSW,HNSW-PQ,DisANN等索引
                - chroma
                - LanceDB
                - pinecone
                    - 1. 完全云原生，非常容易上手
                    - 2. 自建复合索引
                - faiss
                    - 1.来自 Meta AI（原 Facebook Research）的开源项目
                    - 2.同时支持cpu和GPU两种设备
                    - 3. 支持C++,python, go等客户端
                    - 4. 支持常见的索引方式，如IVF,HNSW,支持PQ量化
                    - 5. in-memory运行
                    - 6. self-hosted
                - milvus
                    - 1. 通过代理、负载均衡器、消息代理、Kafka和Kubernetes的组合实现了高度可扩展性，这使得整个系统变得非常复杂和资源密集
                    - 2. 截至2023年，它是唯一一个提供可工作的DiskANN实现的主要供应商
                    - 3. 支持在向量相似度检索过程中进行标量字段过滤，实现混合查询
                    - 4. 采用 **存储与计算分离** 的架构设计
                    - 5. 提供python,juava,go,node.js等语言SDK,也提供milvus lite等in-momery运行
                    - 6. 提供了图形界面客户端
            - traiditional
                - ES
                - redis
                - pgvector
    - Embedding模型
        - bi-encoder
        - cross-encoder
    - 【可选】文本检索引擎
        - ElasticSearch
        - OpenSearch
    - 【可选】图数据库
    - 检索
        - 向量检索
        - 关键字检索
            - BM25
        - NL2Cypher
        - NL2SQL
    - RAG增强
        - Self-RAG
            - 框架
                - 自反思检索增强生成（Self-RAG, Self-Reflective Retrieval-Augmented Generation）。这是一个新框架，它不仅可以根据需要自适应地检索段落（即：模型可以判断是否有必要进行检索增强），还引入了名为反思令牌（reflection tokens）的特殊令牌，使LM在推理阶段可控。
                -  ![图片](./img/大模型应用技术原理-幕布图片-108319-429731.jpg)
                -  ![图片](./img/大模型应用技术原理-幕布图片-918388-323086.jpg)
            - 训练
                - 首先，训练评论家，使用检索器检索到的段落以及反思令牌增强指令-输出数据，然后，使用标准的下一个 token 预测目标来训练生成器 LM，以学习生成 自然延续(continuations)以及特殊 tokens (用来检索或批评其自己的生成内容).
            - 推理
                - 它可以适应性地使用检索令牌进行检索，因此模型可以自发判断是不是有必要进行检索。它引入了多种细粒度的批评令牌，这些令牌用于评估生成内容的各个方面的质量。在生成过程中，作者使用期望的批评令牌概率的线性插值进行segment级的beam search，以在每一个时间步骤中确定最佳的K个续写方案
- Agent
    - function call
        - ToolFormer