大模型RAG学习笔记

1.大模型能做什么

用不严密但通俗的语言描述大模型的工作原理:
1.大模型阅读了人类曾说过的所有的话。这就是「机器学习」,这个过程叫「训练」
2.把一串 token后面跟着的不同token 的概率记了下来。记下的就是「参数」,也叫「权重」
3.当我们给它若干token,大模型就能算出概率最高的下一个token是什么。这就是「生成」,也叫「推理」
4.用生成的 token,再加上上文,就能继续生成下一个token。以此类推,生成更多文字。

2.LLM固有的局限性

1.LLM的知识不是实时的
2.LLM可能不知道你私有的领域/业务知识
 

3.RAG介绍

        (Retrieval Augmented Generation - RAG) RAG 的核心是一个混合框架,它集成了检索模型和生成模型,生成的文本不仅上下文准确,而且信息丰富。

4.向量数据库

4.1文本向量库网站:https://www.sbert.net

4.2向量数据库

4.2.1 向量数据库介绍

        这是一个7维变2维的过程的过程,向量维度越低,嵌入空间embeeding space中的特征表示就越紧凑,可能会影响下有任务或模型的训练质量。

4.2.2 向量数据库与传统数据库区别

4.3向量间相似度计算

4.4 RAG连接内存里的向量数据库的代码

距离计算代码形式:

def cos_sinia,b):
        "余弦距离--越大越相似""|
        return dot(a, b)/(norm(a)*norm(b))
def 12(a,b):
        """欧式距离--越小越相似""“
        x=np.asarray(a)-np.asarray(b)

        return norm(x)

调用openai提供的Embedding模型接口

def get_enbeddings(texts,model="text-embedding-ada-002"'):
    """封装0penAI的Embedding模型接口"""
    data = client.embeddings.create(input=texts, model=mode1).data
    return [x.embedding for x in data]

以向量数据库chromadb为例:

        pip install chromadb

      内存里构建向量数据库的写法:

#为了演示方便。我们只取文档两页(第一章)
paragraphs = extract_text_from_pdf("1lama2.pdf",page_numbers=[2,3],min_line_length=10)

import chromadb
from chromadb.config import Settings

class MyvectorDBConnector:
    def _init_(self, collection_name,embedding_fn):
        chroma_client = chromadb.Client(Settings(allow_reset=True))

        #为了演示。实际不需要每次reset()
        chroma_client.reset( )

        #创建一个 collection
        self.collection = chroma_client.get_or_create_collection(name=collection_name)
        self.embedding_fn = embedding_fn

    def add_documents(self, documents):
        """向collection中添加文档与向量"""
        self.collection.add(
            embeddings=self.embedding_fn(dacuments),  #每个文档的向量
            documents=documents,  #文档的原文
            ids=[f"id{i}" for i in range(len(documents))]  #每个文格的id
    )
    def search(self, query, top_n):
        ""检索向量数据库" "
        results = self.collection.query(
            query _embeddings=self.embedding_fn([query]),
            n_results=top_n
    )
return results
#创建——个向量数据库对象
vector_db  = MyvectorDBconnector ("deno", get_embeddings)

#往向量数据库中添加文档
vector_db.add_documents(paragraphs)
user_query = Llama 2有多少参数”
results = vector_db.search(user_query,2)

for para in results["documents"][0J:
    print(para+"\n")

4.5 向量数据库服务代码

Server端
    chroma run --path /db_path

Client端
    import chromadb
    chroma_client = chromadb.HttpClient(host='localhost', port=8000)

向量检索工具:

  • FAISS: Meta开源的向量检索引擎 https://github.com/facebookresearch/faiss
  • Pinecone:商用向量数据库,只有云服务https://www.pinecone.io/
  • Milvus:开源向量数据库。同时有云服务https://milvus.io/
  • Weaviate:开源向量数据库,同时有云服务https://weaviate.io/
  • Qdrant:开源向量数据库,同时有云服务https://qdrant.tech/
  • PGVector: Postgres的开源向量检索引擎 https://github.com/pgvector/pgvector
  • 性能上不推荐这两:
  • RediSearch:Redis 的开源向量检索引擎https//github.com/RediSearch/RediSearch.
  • ElasticSearch 也支持向量检索 https:/ /www.elastic.coj/enterprise-search/vector-search
class RAG_Bot;
    def _init_(self, vector_db,llm_api, n_results=2):
        self.vector_db = vector_db
        self.llm_api = llm_api
        self.n_results = n_results

    def chat(self, user_query) :
        #1,检索
        search_results = self.vector_db.search(user_query,self.n_results)

        # 2、构建Prompt
        prompt = build_prompt(
            prompt_template, info=search_results['documents'][0],query=user_query)

        # 3.调用LLM
        response = self.llm_api(prompt)
        return response
    
#创建一个RAG机器
bot =RAG_Bot(
    vector_db,
    llm_api=get_completion
)
user_query = “llama 2有多少参数?”
response = bot.chat(user_query)
print(response)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值