如果還不了解語言模型或是chatgpt原理可以先看這篇:
ChatGpt比較:費用、概念、模型與使用介紹
LLMs是基於大量非結構化的語料訓練的, 所以對通用的nlp任務有很好的的效果, 然而很多時候, 我們需要的不是在利用通用數據來生成結果, 而是基於特定的數據來產生結果
步驟:
在fetching過程中, 取回的文檔不能太大, 因為目前的模型都對輸入的長度有限制, 所以langchain提供了各種工具來split文檔成一小片, 並且控制每片中的內容重疊(保持上下文)。
另外一個是, 不能取回太多的文檔, 最好只選取和問題相關的文檔(相關度要高), 有很多的方式來做這件事, 當下比較流行的是:
詞向量的技術就希望將每個單字賦予一個向量,用來表示這個單字在各種維度(Dimenesion)所代表的相對意義,以向量區分每個單字與其他單字的相似程度。所謂『各種維度』的意思是指,例如,就生物角度來看,man(男人)與woman(女人)是很相似的,因為他們同屬人類,但是從另一個角度『性別』來看,他們恰似相反的,所以,要將一個單字轉換為向量,不能只考慮一維,而是要有多面向來觀察,亦即多維(通常是100~1000),這就是『詞向量』(Word Embedding or Word Vector)的粗淺概念。
對於私有數據, 受限於LLM的無狀態, 訓練代價大, token個數限制, 甚至fine-tune的接口不開放等等, 對於私有數據上的內容生成, 現在常見的做法是embedding文檔, 先搜後問, 也即上文提到的langchain的一個核心模塊: data augementing generation。
現在想要增強LLM在私有數據上的表現能力, 有兩種方式: fine-tune 和in-context learning (即將上下文放入輸入的prompt中)。為了更好地(高效,便宜)進行data augmentation, 因此要解決數據讀取和索引。
LlamaIndex提供的工具:
In-context learning 是指一種在特定上下文中學習的方法,即通過在特定情境下學習和理解知識和技能,使學習更加具體和實用。它可以是指在現實生活中學習,也可以是在虛擬環境中進行模擬經驗的學習。
舉個例子,如果你想學習如何寫好一篇新聞報導,傳統的學習方法可能是通過閱讀一些關於寫新聞的指南和規則來學習。但是,in-context learning 的方法可能是讓你閱讀一篇現實中的新聞報導,然後分析它的結構、風格和語言,並試著寫出一篇類似的報導,從而在學習中深入了解和熟悉新聞報導的各個方面。
LlamaIndex vs LangChain 的區別:
根本上是因為大語言模型支持的context有限,比如ChatGPT的Davinci model只有4096 tokens,對應中文,可能只有2000個,因此如果需要藉助GPT語言模型+私有數據,那就需要突破4096 tokens 的限制,也就是feed "knowledge" to LLMs,所以需要用LlamaIndex。
與此同時,在用ChatGPT 時,單次輸入的prompt 也有限制,所以LlamaIndex可以簡化這個feed 餵數據的過程。
那為什麼還要用LangChain 呢?因為LLMs不只OpenAI 的GPT 模型,LangChain 可以對接多種模型,即Lang,而Chain 的意思就是把多個LLM 調用,而且是調用序列,標準化,集成等工作,最後串起來。
LangChain 還做了很多框架層面的工作:Prompt、Loader、Chain、Agent、Memory,比如Loader 部分,它也推出了跟https://llamahub.ai類似的https://github.com/hwchase17/langchain-hub,用來集成外部數據。區別就在於LlamaIndex能用的,LangChain 都能用,LangChain 的Loader 能加載其他語言模型,是GPT 的超集。
再比如Memory 部分,就是用來持久化內存狀態,所以能實現ChatGPT 聊天機器人這樣的功能,記住以前的交互非常重要,無論是短期的還是長期的。
官方說明文件:https://gpt-index.readthedocs.io/en/latest/index.html
本文參考:https://www.jianshu.com/p/d92df85a4c20
llama-index操作實例:https://zhuanlan.zhihu.com/p/613155165
1.安裝python 3.10
=>到官網依照系統下載
2.下載pycharm創建一個新的project
3.在pycharm prefernce的setting中可以指定python版本點選’+’安裝package
4. 在main.py中加入
(可以搭配 Flask、Django部署到Vercel、Render等建置一個簡易的網站)