OLLaMA搭建本地大模型

Ollama 是一款開源的本地運行大型語言模型(LLM)的框架,它允許用戶在自己的設(shè)備上直接運行各種大型語言模型流济,包括 Llama奔则、Mistral、Qwen 等多種模型未蝌,無需依賴網(wǎng)絡(luò)連接驮吱。
Ollama 還提供跨平臺的支持,包括 macOS萧吠、Windows左冬、Linux 以及 Docker, 幾乎覆蓋了所有主流操作系統(tǒng)怎憋。

1. 配置OLLaMA

OLLaMA可以運行本地大語言模型又碌,模型名稱如下:
https://ollama.com/library
每個模型都有其特點和適用場景:

  1. Llama 2:這是一個預(yù)訓(xùn)練的大型語言模型,具有7B绊袋、13B和70B三種不同規(guī)模的模型毕匀。Llama 2增加了預(yù)訓(xùn)練語料,上下文長度從2048提升到4096癌别,使得模型能夠理解和生成更長的文本皂岔。
  2. OpenHermes:這個模型專注于代碼生成和編程任務(wù),適合用于軟件開發(fā)和腳本編寫等場景展姐。
  3. Solar:這是一個基于Llama 2的微調(diào)版本躁垛,專為對話場景優(yōu)化。Solar在安全性和有用性方面進(jìn)行了人工評估和改進(jìn)圾笨,旨在成為封閉源模型的有效替代品教馆。
  4. Qwen:7B:這是一個中文微調(diào)過的模型,特別適合處理中文文本擂达。它需要至少8GB的內(nèi)存進(jìn)行推理土铺,推薦配備16GB以流暢運行。
    綜上所述,這些模型各有側(cè)重點悲敷,用戶可以根據(jù)自己的需求選擇合適的模型進(jìn)行使用究恤。
    下載的模型列表,可以通過以下命令來查看:
ollama list
NAME                ID              SIZE    MODIFIED     
llama2:latest       78e26419b446    3.8 GB  38 hours ago    
llama2-chinese:13b  990f930d55c5    7.4 GB  2 days ago      
qwen:7b             2091ee8c8d8f    4.5 GB  7 days ago      
qwen:latest         d53d04290064    2.3 GB  2 days ago 

1.1 安裝

ollama官網(wǎng) https://ollama.com/

1.2 下載模型

以通義千問模型為例:
ollama run 模型名
ollama run qwen:7b

qwen下載.png

qwen使用.png

第一次下載時間長點后德,后面再運行就不用下載了

2. langchain實現(xiàn)

2.1.LLMChain調(diào)用

LLMChain是一個簡單的鏈部宿,接受一個提示模板,使用用戶輸入格式化它并從LLM返回響應(yīng)瓢湃。
其中理张,prompt_template是一個非常關(guān)鍵的組件,可以讓你創(chuàng)建一個非常簡單的鏈箱季,它將接收用戶輸入涯穷,使用它格式化提示,然后將其發(fā)送到LLM藏雏。

實現(xiàn)目標(biāo):創(chuàng)建LLM鏈拷况。假設(shè)我們想要創(chuàng)建一個公司名字
英文版

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.llms import Ollama

prompt_template = "What is a good name for a company that makes {product}?"

ollama_llm = Ollama(model="qwen:7b")
llm_chain = LLMChain(
    llm = ollama_llm,
    prompt = PromptTemplate.from_template(prompt_template)
)
print(llm_chain("colorful socks"))

中文版

from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain
from langchain.llms import Ollama

prompt_template = "請給制作 {product} 的公司起個名字,只回答公司名即可"

ollama_llm = Ollama(model="qwen:7b")
llm_chain = LLMChain(
    llm = ollama_llm,
    prompt = PromptTemplate.from_template(prompt_template)
)
print(llm_chain("襪子"))
# print(llm_chain.run("襪子"))    # 加個.run也可
輸出:{'product': '襪子', 'text': '"棉語襪業(yè)公司"\n\n\n'}
print(llm_chain.predict(product="襪子"))
輸出:棉語襪業(yè)公司

run和 predict的區(qū)別是

  • llm_chain.run:結(jié)合 輸入{product} 和 大模型輸出內(nèi)容一起輸出
  • llm_chain.predict :只給出大模型輸出內(nèi)容

2.2.Model調(diào)用

直接調(diào)用llama2模型

from langchain_community.llms import Ollama

llm = Ollama(model="llama2")

response = llm.invoke("Who are you")

print(response)

運行輸出結(jié)果:

I'm LLaMA, an AI assistant developed by Meta AI that can understand and respond
to human input in a conversational manner. I'm here to help you with any questions
 or topics you'd like to discuss! 
Is there anything specific you'd like to talk about?

3.本地化LLM

前面講到,可以通過ollama run llama2 可以直接訪問大模型:

>>> hello
Hello! It's nice to meet you. Is there something I can help you 
with or would you like to chat?

>>> tell me a joke
Sure, here's one:

Why don't scientists trust atoms?
Because they make up everything!

I hope that brought a smile to your face ??. Is there anything 
else I can assist you with?

>>> Send a message (/? for help)

langchain集成
可以通過langchain本地代碼方式集成實現(xiàn)掘殴,實現(xiàn)方式如下:

ollama_host = "localhost"
ollama_port = 11434
ollama_model = "llama2"

from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler

if __name__ == "__main__":
    llm = Ollama(base_url = f"http://{ollama_host}:{ollama_port}",
                 model= ollama_model,
                 callback_manager = CallbackManager([StreamingStdOutCallbackHandler()]))

    while True:
        query = input("\n\n>>>Enter a query:")
        llm(query)

運行后赚瘦,顯示效果如下:

>>>Enter a query:hello
Hello! It's nice to meet you. Is there something I can help you with or would you like to chat?

>>>Enter a query:tell me a joke
Sure! Here's one:

Why don't scientists trust atoms?
Because they make up everything!

I hope that made you smile! Do you want to hear another one?

>>>Enter a query:

4.定制化LLM

4.1.Modelfile

可以通過ModelFile的方式來對大模型進(jìn)行本地定制化:
1.Create a Modelfile:

FROM llama2

SYSTEM """
You are responsible for translating user's query to English. You should only respond 
with the following content:
1. The translated content.
2. Introduction to some ket concepts or words in the translated content, to help 
users understand the context.
"""

2.創(chuàng)建LLM:

ollama create llama-translator -f ./llama2-translator.Modelfile

創(chuàng)建完后,ollama list 可以發(fā)現(xiàn):

llama-translator:latest 40f41df44b0a    3.8 GB  53 minutes ago

3.運行LLM

ollama run llama-translator

運行結(jié)果如下:

>>> 今天心情不錯

Translation: "Today's mood is good."

Introduction to some key concepts or words in the translated content:

* 心情 (xīn jìng) - mood, state of mind
* 不錯 (bù hǎo) - good, fine, well

So, "今天心情不錯" means "Today's mood is good." It is a simple sentence that expresses a positive emotional state. 
The word "心情" is a key term in Chinese that refers to one's emotions or mood, and the word "不錯"
 is an adverb that can be translated as "good," "fine," or "well."

>>> 我愛你中國

Translation: "I love you China."

Introduction to some key concepts or words in the translated content:

* 愛 (ài) - love, loving
* 中國 (zhōng guó) - China, People's Republic of China

So, "我愛你中國" means "I love you China." It is a simple sentence that expresses affection
or fondness towards a country. The word "愛" is a key term in Chinese that refers to romantic
love, while the word "中國" is a geographical term that refers to the People's Republic of China.

>>> Send a message (/? for help)

4.2.自定義系統(tǒng)提示詞

根據(jù) ChatGPT 的使用經(jīng)驗奏寨,大家都知道系統(tǒng)提示詞的重要性起意。好的系統(tǒng)提示詞能有效地將大模型定制成自己需要的狀態(tài)。在 Ollama 中病瞳,有多種方法可以自定義系統(tǒng)提示詞揽咕。

首先,不少 Ollama 前端已提供系統(tǒng)提示詞的配置入口套菜,推薦直接利用其功能亲善。此外,這些前端在底層往往是通過API與 Ollama 服務(wù)端交互的逗柴,我們也可以直接調(diào)用蛹头,并傳入系統(tǒng)提示詞選項:

curl http://localhost:11434/api/chat -d '{
  "model": "llama2-chinese:13b",
  "messages": [
    {
      "role": "system",
      "content": "以海盜的口吻簡單作答。"
    },
    {
      "role": "user",
      "content": "天空為什么是藍(lán)色的戏溺?"
    }
  ],
  "stream": false
}'

其中rolesystem的消息即為系統(tǒng)提示詞渣蜗,跟Modelfile里面的SYSTEM下面的定義差不多一個意思。
輸出如下:

{
"model":"llama2-chinese:13b",
"created_at":"2024-04-29T01:32:08.448614864Z",
"message":{
     "role":"assistant",
     "content":"好了旷祸,這個問題太簡單了耕拷。藍(lán)色是由于我們的視覺系統(tǒng)處理光線而有所改變造成的。在水平方向看到的天空大多為天際輻射托享,
          其中包括大量的紫外線和可見光線骚烧。這些光線會被散射控淡,而且被大氣層上的大量分子所吸收,進(jìn)而變成藍(lán)色或其他相似的顏色止潘。\n"
},
"done":true,
"total_duration":31927183897,
"load_duration":522246,
"prompt_eval_duration":224460000,
"eval_count":149,
"eval_duration":31700862000
}

部分內(nèi)容摘自該文章https://blog.csdn.net/sinat_29950703/article/details/136194337,感謝辫诅!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凭戴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子炕矮,更是在濱河造成了極大的恐慌么夫,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肤视,死亡現(xiàn)場離奇詭異档痪,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)邢滑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進(jìn)店門腐螟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人困后,你說我怎么就攤上這事乐纸。” “怎么了摇予?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵汽绢,是天一觀的道長。 經(jīng)常有香客問我侧戴,道長宁昭,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任酗宋,我火速辦了婚禮积仗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘本缠。我一直安慰自己斥扛,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布丹锹。 她就那樣靜靜地躺著稀颁,像睡著了一般。 火紅的嫁衣襯著肌膚如雪楣黍。 梳的紋絲不亂的頭發(fā)上匾灶,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機(jī)與錄音租漂,去河邊找鬼阶女。 笑死颊糜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的秃踩。 我是一名探鬼主播衬鱼,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼憔杨!你這毒婦竟也來了鸟赫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤消别,失蹤者是張志新(化名)和其女友劉穎抛蚤,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寻狂,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡岁经,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蛇券。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缀壤。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怀读,靈堂內(nèi)的尸體忽然破棺而出诉位,到底是詐尸還是另有隱情,我是刑警寧澤菜枷,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布苍糠,位于F島的核電站,受9級特大地震影響啤誊,放射性物質(zhì)發(fā)生泄漏岳瞭。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一蚊锹、第九天 我趴在偏房一處隱蔽的房頂上張望瞳筏。 院中可真熱鬧,春花似錦牡昆、人聲如沸姚炕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柱宦。三九已至,卻和暖如春播瞳,著一層夾襖步出監(jiān)牢的瞬間掸刊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工赢乓, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留忧侧,地道東北人石窑。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蚓炬,于是被迫代替她去往敵國和親松逊。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容