brew install ollama
# On Linux (using the official install script):
curl -sS https://ollama.ai/install.sh | bash
這將安裝 Ollama CLI。安裝后,啟動 Ollama 服務(wù)(在 MacOS 上,您可能會運行 Brew Services Start Ollama Ollama,或者簡單地運行任何 Ollama 命令將啟動其背景服務(wù)器)。您可以通過檢查版本來驗證它已安裝:
ollama pull llama2
此命令將下載模型權(quán)重并在本地設(shè)置(第一次運行型號,Ollama 將自動將其拉動,如果不存在)。確保您為選擇的型號有足夠的磁盤空間和 RAM;例如,7B Llama2 型號可能需要?16GB RAM 才能舒適地運行。您可以使用 Ollama 列表列出可用的型號,并使用 Ollama Show 查看模型的詳細信息。
安裝 Python 庫: 準備好 Ollama 引擎和可用的型號,下一步是為 Ollama 安裝 Python SDK。該庫允許 Python 代碼通過其 REST API 與 Ollama 后端通信。使用 PIP 安裝它:
pip install ollama
這為您提供了 Ollama Python 軟件包(請確保您根據(jù)需要使用 Python 3.8+)。現(xiàn)在,您可以與 Python 腳本或應(yīng)用程序中的本地模型進行交互。
運行第一個示例: 讓我們測試通過運行簡單的一代正確設(shè)置所有內(nèi)容。在 Python 的解釋器或腳本中,嘗試以下內(nèi)容:
import ollama
# Use the generate function for a one-off prompt
result = ollama.generate(model='llama2', prompt='Why is the sky blue?')
print(result['response'])
在此代碼中,我們使用型號名稱(此處為“ Llama2”,我們先前拉到的“ Llama2”)和一個提示字符串。該模型將處理提示,結(jié)果(字典)包含“響應(yīng)”密鑰的模型答案。例如,輸出可能是關(guān)于天空為什么藍色的科學(xué)解釋。如果一切都正確配置,則應(yīng)看到在控制臺中打印的答案。
使用聊天 API: Ollama 還提供了一個聊天界面,用于對話風格的交互。例如:
from ollama import chat
conversation = [
{"role": "user", "content": "Hello, how are you?"}
]
reply = chat(model='llama2', messages=conversation)
print(reply.message.content)
這使用基于聊天的模型(例如指令調(diào)整的駱駝 2)來響應(yīng)用戶消息。消息參數(shù)列出了對話的列表(“用戶”,“助手”等)。 ollama.Chat 函數(shù)返回一個響應(yīng)對象,其中 reply.message.content 保留助手模型的最新答復(fù)。使用此功能,您可以輕松構(gòu)建交互式應(yīng)用程序。 (我們將在下一節(jié)中擴展聊天機器人。)
注意: 第一次使用模型時,可能會有下載延遲。之后,響應(yīng)將直接從您的本地計算機流式傳輸。您還可以通過設(shè)置 stream = true 在 python api 中啟用流式傳輸,如果您想通過 token-toke 輸出以獲得響應(yīng)能力。
Ollama 可以為各種 AI 應(yīng)用程序提供動力。在下面,我們探索兩個常見的基于 Python 的用例以證明其功能。
Ollama 最直接的用途之一是創(chuàng)建 AI 聊天機器人。由于 Ollama 可以在本地運行對話模型(例如 Llama-2-Chat 或其他指令調(diào)整模型),因此您可以建立一個私人 Chatgpt 風格的助手。
方案: 想象一下建立客戶支持聊天機器人或完全離線運行的個人助理。 Ollama 的本地LLM將處理自然語言的理解和響應(yīng)生成。
如何構(gòu)建它: 您將維護對話歷史記錄,并在用戶交互時不斷將其發(fā)送到 ollama.chat。例如:
import ollama
# Choose a chat-capable model (ensured it is pulled)
model_name = 'llama2'
# Initialize conversation with a system prompt (optional) and a user message
messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"},
]
# First response from the bot
response = ollama.chat(model=model_name, messages=messages)
print("Bot:", response.message.content)
# Continue the conversation:
while True:
user_input = input("You: ")
if not user_input:
break # exit loop on empty input
messages.append({"role": "user", "content": user_input})
response = ollama.chat(model=model_name, messages=messages)
answer = response.message.content
print("Bot:", answer)
messages.append({"role": "assistant", "content": answer})
在此代碼中:
?我們從定義助手行為的系統(tǒng)角色開始(這里只需指示其有用)和初始用戶問候。
?到目前為止,我們致電 Ollama.Chat 進行對話,并打印機器人的答復(fù)。
?然后,我們輸入一個循環(huán),以繼續(xù)讀取用戶輸入并將更新的消息發(fā)送回 Ollama.Chat。我們始終將最新的用戶消息和助手對消息列表的答復(fù)以維護上下文。
?循環(huán)斷開空輸入(作為退出的一種方式)。
這個簡單的聊天機器人將使您完全通過 Python 與LLM進行來回對話。給定對話上下文的每個呼叫 ollama.Chat 都會返回模型的最新答復(fù)。由于該模型在本地運行,因此響應(yīng)與硬件允許的速度一樣快,并且在對話中擁有完全的隱私。這樣的聊天機器人可以使用 GUI 或 Web 界面擴展,但是核心邏輯將保持不變。 Ollama Python 庫摘要繁重的工作,因此構(gòu)建基本的聊天應(yīng)用程序只是幾行代碼。
除了聊天機器人之外,Ollama 還可以通過利用 AI 功能來自動化任務(wù)和增強工作流程。例如,您可以使用LLM來匯總文檔,生成報告,協(xié)助編碼或在自動化腳本中解釋命令。本質(zhì)上,Ollama 讓您將 AI“大腦”嵌入到 Python 項目中。
方案: 假設(shè)您每天都有閱讀冗長的日志文件或成績單的工作流程。您可以使用 Ollama 來自動化這些文本的摘要。通過為您提供 AI 突出顯示的關(guān)鍵點,這可以節(jié)省時間。
如何做: 您可以提示LLM來總結(jié)或分析文本并將其集成到管道中。例如:
import ollama
# Example: Summarize a paragraph of text
text = """
OpenAI has introduced a new tool called Ollama that lets users run large language models on local machines.
This approach emphasizes privacy and control, as data does not leave the user's environment.
Developers can leverage various open-source models through a simple interface, improving efficiency and reducing costs.
"""
prompt = f"Summarize the following text in one sentence:\n\"\"\"\n{text}\n\"\"\""
result = ollama.generate(model='llama2', prompt=prompt)
print("Summary:", result['response'])
在這里,我們拿了一段文字,并構(gòu)建了一個提示,要求該模型以一個句子進行總結(jié)。 Ollama.generate 功能返回摘要,這可能是: “ Ollama 是一種新的 OpenAI 工具,可以在本地運行大型語言模型,從而為用戶提供更高的隱私,控制和成本效率。” 這種自動化可以插入較大的腳本中,例如,在多個文檔上迭代并將摘要寫入文件。
另一個自動化示例可能是代碼生成或幫助。假設(shè)您要自動編寫樣板代碼或配置文件自動化。您可以通過指令提示模型并將其輸出代碼,然后您的 Python 程序?qū)⑵浔4娴酱疟P。例如:
code_prompt = "Write a Python function that checks if a number is prime."
response = ollama.generate(model='codellama', prompt=code_prompt)
print(response['response'])
使用代碼專用模型(例如此示例中的 Codellama)將返回用于檢查功能的代碼,然后您可以在項目中使用該代碼。這表明了 Ollama 如何通過自動化編碼或文檔任務(wù)的部分來增強開發(fā)人員的工作流程。
通常,將 Ollama 集成到自動化中意味著您可以在沒有外部 API 調(diào)用的任何 Python 工作流程中具有 AI 驅(qū)動的功能。 Python SDK 的靈活性(具有 Ollama.list(),Ollama.pull(),Ollama.delete()等功能,也意味著您的程序可以即時管理模型,例如,在運行時或為不同任務(wù)開關(guān)模型時拔出所需的模型。這使得可以構(gòu)建精簡復(fù)雜任務(wù)的智能代理,批處理處理器或 AI 驅(qū)動的助手。
要將所有內(nèi)容融合在一起,讓我們通過使用 Ollama 來構(gòu)建一個簡單的 AI 代理 。我們的代理將是一個不僅可以交談的聊天機器人,而且還可以使用 Python 函數(shù)作為工具執(zhí)行簡單的計算。這說明了如何以分步的方式使用 Ollama 的高級功能(函數(shù)調(diào)用)。
確保安裝和運行 Ollama(如入門中所述)。另外,請確保您有合適的型號。對于此代理,我們將使用遵循指令的模型(對于一般的 Q&A),并使其能夠使用工具進行數(shù)學(xué)。像 Llama2 或 Llama3.1 這樣的模型將起作用。 (如果尚未完成,請事先在終端中運行 Ollama Lut Llama2。)在您的 Python 腳本或筆記本中,導(dǎo)入 Ollama 庫以及您需要的任何其他模塊:
import ollama
如果您打算將另一個庫中的特定函數(shù)用作工具,則也將導(dǎo)入它(稍后,我們將顯示一個示例,稍后使用 Python 請求庫)。但是目前,我們的代理商的工具將是一個簡單的內(nèi)部功能。
Ollama 的 Python 庫允許您傳遞 Python 函數(shù),作為模型在聊天期間可以調(diào)用的工具。這非常適合創(chuàng)建可以采取行動或獲取信息的代理商。我們將定義一個基本的數(shù)學(xué)功能供我們的代理使用:
""" Tool function: add two numbers """
def add_two_numbers(a: int, b: int) -> int:
"""
Add two numbers and return the result.
"""
return a + b
此功能只需占用兩個整數(shù)并返回其總和。 (請注意,我們包含了類型的提示和 docstring;提供此元數(shù)據(jù)可以更好地了解該工具的目的。)如果需要,我們可以注冊更多功能,但是我們將保持簡單。
現(xiàn)在,讓我們設(shè)置代理的初始上下文。我們將提供一個系統(tǒng)指令,將有關(guān)可用工具以及何時使用的模型告知模型。例如,系統(tǒng)消息可能會說: “您是數(shù)學(xué)助手。如果用戶提出數(shù)學(xué)問題,則可以調(diào)用 add_two_numbers 函數(shù)。” 這將指導(dǎo)模型適當?shù)厥褂霉ぞ摺N覀冞€會準備一個需要該工具的用戶查詢:
""" System prompt to inform the model about the tool is usage """
system_message = {
"role": "system",
"content": "You are a helpful assistant. You can do math by calling a function 'add_two_numbers' if needed."
}
# User asks a question that involves a calculation
user_message = {
"role": "user",
"content": "What is 10 + 10?"
}
messages = [system_message, user_message]
現(xiàn)在,我們將在工具參數(shù)中提供型號名稱,對話消息和我們的工具功能:
response = ollama.chat(
model='llama2',
messages=messages,
tools=[add_two_numbers] # pass the actual function object as a tool
)
當我們包括工具= [add_two_numbers]時,在引擎蓋下時,Ollama 庫使該函數(shù)的簽名和 DOCSTRING 可用于模型。該模型在看到用戶問題“什么是 10 + 10?”時,可以決定調(diào)用 add_two_numbers 工具,而不是嘗試進行數(shù)學(xué)本身。 Ollama 的最新版本支持此類功能呼叫。
我們從 Ollama.Chat 獲得的結(jié)果是一個可能包括工具調(diào)用的響應(yīng)對象。我們需要檢查該模型是否確實要求使用我們的功能。響應(yīng)將具有屬性響應(yīng)。message.tool_calls,這是模型決定制作的任何工具調(diào)用的列表。我們可以這樣處理:
if response.message.tool_calls:
for tool_call in response.message.tool_calls:
func_name = tool_call.function.name # e.g., "add_two_numbers"
args = tool_call.function.arguments # e.g., {"a": 10, "b": 10}
# If the function name matches and we have it in our tools, execute it:
if func_name == "add_two_numbers":
result = add_two_numbers(**args)
print("Function output:", result)
在此片段中,我們循環(huán)瀏覽任何工具調(diào)用(可能有多個呼叫,但在我們的情況下,我們期望一個)。我們將函數(shù)名稱匹配,然后調(diào)用 add_two_numbers 與模型提供的參數(shù)。結(jié)果(在這種情況 20)被打印出來或可以回到模型中。
模型自己的答案呢?通常,當LLM使用函數(shù)調(diào)用時,它最初可能會用占位符或類似的推理響應(yīng):“ 我將使用 add_two_numbers 工具。 ”。執(zhí)行工具后,您可以將結(jié)果發(fā)送回對話中,以供模型生成最終答案。為簡單起見,我們可以假設(shè)模型的答案將在函數(shù)調(diào)用后完成。如果我們希望代理商明確將最終答案返回給用戶,則可以在功能結(jié)果中附加一條新消息,并提示該模型得出答案。
將所有內(nèi)容放在一起,一個簡單的代理循環(huán)可能看起來像:
""" (Continuing from previous code) """
available_functions = {"add_two_numbers": add_two_numbers}
""" Model's initial response after possibly invoking the tool """
assistant_reply = response.message.content
print("Assistant (initial):", assistant_reply)
""" If a tool was called, handle it """
for tool_call in (response.message.tool_calls or []):
func = available_functions.get(tool_call.function.name)
if func:
result = func(**tool_call.function.arguments)
# Provide the result back to the model in a follow-up message
messages.append({"role": "assistant", "content": f"The result is {result}."})
follow_up = ollama.chat(model='llama2', messages=messages)
print("Assistant (final):", follow_up.message.content)
這樣,代理使用該工具,然后模型以最終答案結(jié)束。運行完整腳本時,輸出可能看起來像:
Assistant (initial): Let me calculate that for you...
Function output: 20
Assistant (final): The result is 20.
代理商成功回答了 “什么是 10 + 10?” 通過使用 Python 函數(shù)進行計算。您已經(jīng)有效地創(chuàng)建了一個簡單的 AI 代理,該代理可以將其功能擴展到LLM的內(nèi)置知識之外,所有這些都在本地運行。您可以類似地添加更多工具或更復(fù)雜的邏輯。例如,您可以通過提供獲取天氣數(shù)據(jù)的工具功能來集成 API 調(diào)用(例如天氣 API),并且當用戶詢問天氣時,該模型可以決定調(diào)用它。
通過這個逐步的示例,我們看到了如何設(shè)置 Ollama,加載模型并使用 Python SDK 來實現(xiàn)將 AI 推理與真實動作結(jié)合的代理。 Ollama Python 庫使從 Idea(AI Agent)將概念從僅幾十行代碼的工作原型中進行簡單明了。
在本指南中,我們介紹了將 Ollama 與 Python 一起使用的基本原理:從了解 Ollama 是什么以及為什么它有益,到設(shè)置它,探索關(guān)鍵用例并建立簡單的代理。使用 Ollama,開發(fā)人員可以在本地運行強大的語言模型,并輕松將它們集成到應(yīng)用程序中。 Python API 是直觀的 – 您可以從基本的生成或聊天呼叫開始,然后根據(jù)需要探索高級功能,例如自定義系統(tǒng)提示,流媒體響應(yīng)或功能工具。
通過利用 Ollama,您可以獲得隱私(您的數(shù)據(jù)保留本地),選擇甚至微調(diào)模型的靈活性以及可能降低成本和延遲。我們演示了如何使用 Ollama 進行 AI 聊天機器人并自動化工作流程。這些示例只是刮擦表面。
對于接下來的步驟,您可能需要嘗試從 Ollama 庫中的不同模型(例如,嘗試以代碼為中心的模型進行編程幫助,或更大的 13B+參數(shù)模型以進行更細微的對話)。您還可以將 Ollama 集成到現(xiàn)有的 AI 框架中 – 例如,使用 Langchain 的 Ollama 集成來構(gòu)建更復(fù)雜的代理或鏈條。社區(qū)和文檔(查看官方的 Ollama 文檔和 GitHub)還有更多示例,例如使用嵌入式語義搜索或在 Web 服務(wù)器模式下運行 Ollama 來服務(wù) API 請求。
有了這個堅實的基礎(chǔ),您可以自信地擴展您的 AI 項目。無論是個人助理,數(shù)據(jù)分析工具還是網(wǎng)站的自定義聊天機器人, Ollama 都可以使您根據(jù)自己的條款開發(fā)和擴展這些解決方案 。快樂的建筑!
文章轉(zhuǎn)載自: Using Ollama with Python: Step-by-Step Guide