RAG(Retrieval-augmented Generation 檢索增強生成)是一種結合信息檢索與生成模型的技術,通過動態整合外部知識庫提升大模型輸出的準確性和時效性。其核心思想是在生成答案前,先檢索外部知識庫中的相關信息作為上下文依據,從而突破傳統生成模型的靜態知識邊界。
為什么我們要整合外部知識庫呢?
首先,大模型訓練通常需要耗費很多資源,幾百萬張貴的離譜的高性能GPU卡,巨量的電力,巨量的高質量訓練數據–意味著大量的硬盤,每次訓練大概要幾周到一兩個月,總之成本在百萬美元到上億美元,比如2023年,OpenAI的GPT-4模型和Google的Gemini Ultra模型的訓練成本更是分別高達約7800萬美元和近2億美元!2024年年底的重大新聞是我國的國產大模型DeepSeek v3 的發布,DeepSeek v3 真正令人印象深刻的是訓練成本。該模型在 2788000 個 H800 GPU 小時上進行訓練,估計成本為 5576000 美元。facebook (現在名為Meta )的Llama 3.1 405B 訓練了 30,840,000 個 GPU 小時——是 DeepSeek v3 所用時間的 11 倍,但基準測試結果略差。
大模型的知識庫在訓練的時候就已經固定了,而如果要更新知識庫那就得重新訓練模型,或者對大模型進行微調訓練。如果遇到用戶需要頻繁更新知識庫的場景,成本是無法接受的,于是就有了先檢索知識庫然后讓大模型處理后輸出的辦法。
其次,LLM在自然語言處理任務中可能提供??不準確??或??不充分答案??的局限性。我們在使用大模型時候經常會遇到幻覺問題,在某些需求領域這些幻覺是無法接受的,比如在醫院開藥的時候,藥名功效和用量是不能出錯的
在一些細分的專業領域,大模型的訓練數據是不足的,所以結合信息檢索與文本生成??:通過從龐大的外部知識庫中檢索相關信息,動態增強模型的生成能力,彌補LLM依賴靜態訓練數據的不足。
RAG還可以增強模型輸出的??準確性??和??信息完整性??,減少生成錯誤答案的概率。
下面作者將根據吳恩達《LangChain for LLM Application Development》 視頻課程來做一些課程筆記,這門課程非常不錯,很適合那些有編程基礎的讀者學習大模型應用開發。由于代碼里吳恩達用的是openAI 模型,收費高國內還不好用,langChain可以使用不同的模型,我將代碼換成阿里巴巴的千問大模型,方便大家使用。
L1 ,model prompt parser.
第一節,模型,提示詞和解析器
1.核心概念介紹
- 模型 model:指語言模型,是大語言模型應用的基礎支撐。
- 提示詞 prompt:即創建輸入的風格,其決定傳遞給模型的信息內容和形式。
- 解析器 parser:負責將模型輸出解析為結構化格式,便于后續處理。
模型與提示的應用實踐
基礎示例:利用大模型,通過自定義助手函數調用 千問大模型 qwen-plus,如詢問 “一加一等于什么” 獲取回答。
使用千問大模型需要在阿里官網開通appkey具體如何使用和配置千問大模型 參考如下鏈接
https://blog.csdn.net/roccreed/article/details/141927269
(linux 和macos 配置環境變量方式和上面不一樣在這里插入代碼片)
import os
from openai import OpenAIclient = OpenAI(# 若沒有配置環境變量,請用百煉API Key將下行替換為:api_key="sk-xxx",api_key=os.getenv("DASHSCOPE_API_KEY"), base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
client
llm_model = "qwen-plus"def get_completion(prompt, model=llm_model):messages = [{"role": "user", "content": prompt}]response = client.chat.completions.create(model=model,messages=messages,temperature