brew install ollama

# On Linux (using the official install script):
curl -sS https://ollama.ai/install.sh | bash

這將安裝 Ollama CLI。安裝后,啟動(dòng) Ollama 服務(wù)(在 MacOS 上,您可能會(huì)運(yùn)行 Brew Services Start Ollama Ollama,或者簡(jiǎn)單地運(yùn)行任何 Ollama 命令將啟動(dòng)其背景服務(wù)器)。您可以通過檢查版本來驗(yàn)證它已安裝:

ollama pull llama2

此命令將下載模型權(quán)重并在本地設(shè)置(第一次運(yùn)行型號(hào),Ollama 將自動(dòng)將其拉動(dòng),如果不存在)。確保您為選擇的型號(hào)有足夠的磁盤空間和 RAM;例如,7B Llama2 型號(hào)可能需要?16GB RAM 才能舒適地運(yùn)行。您可以使用 Ollama 列表列出可用的型號(hào),并使用 Ollama Show 查看模型的詳細(xì)信息。

安裝 Python 庫(kù): 準(zhǔn)備好 Ollama 引擎和可用的型號(hào),下一步是為 Ollama 安裝 Python SDK。該庫(kù)允許 Python 代碼通過其 REST API 與 Ollama 后端通信。使用 PIP 安裝它:

pip install ollama

這為您提供了 Ollama Python 軟件包(請(qǐng)確保您根據(jù)需要使用 Python 3.8+)。現(xiàn)在,您可以與 Python 腳本或應(yīng)用程序中的本地模型進(jìn)行交互。

運(yùn)行第一個(gè)示例: 讓我們測(cè)試通過運(yùn)行簡(jiǎn)單的一代正確設(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'])

在此代碼中,我們使用型號(hào)名稱(此處為“ Llama2”,我們先前拉到的“ Llama2”)和一個(gè)提示字符串。該模型將處理提示,結(jié)果(字典)包含“響應(yīng)”密鑰的模型答案。例如,輸出可能是關(guān)于天空為什么藍(lán)色的科學(xué)解釋。如果一切都正確配置,則應(yīng)看到在控制臺(tái)中打印的答案。

使用聊天 API: Ollama 還提供了一個(gè)聊天界面,用于對(duì)話風(fēng)格的交互。例如:

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ù)列出了對(duì)話的列表(“用戶”,“助手”等)。 ollama.Chat 函數(shù)返回一個(gè)響應(yīng)對(duì)象,其中 reply.message.content 保留助手模型的最新答復(fù)。使用此功能,您可以輕松構(gòu)建交互式應(yīng)用程序。 (我們將在下一節(jié)中擴(kuò)展聊天機(jī)器人。)

注意: 第一次使用模型時(shí),可能會(huì)有下載延遲。之后,響應(yīng)將直接從您的本地計(jì)算機(jī)流式傳輸。您還可以通過設(shè)置 stream = true 在 python api 中啟用流式傳輸,如果您想通過 token-toke 輸出以獲得響應(yīng)能力。

示例用例

Ollama 可以為各種 AI 應(yīng)用程序提供動(dòng)力。在下面,我們探索兩個(gè)常見的基于 Python 的用例以證明其功能。

用例 1:AI 聊天機(jī)器人

Ollama 最直接的用途之一是創(chuàng)建 AI 聊天機(jī)器人。由于 Ollama 可以在本地運(yùn)行對(duì)話模型(例如 Llama-2-Chat 或其他指令調(diào)整模型),因此您可以建立一個(gè)私人 Chatgpt 風(fēng)格的助手。

方案: 想象一下建立客戶支持聊天機(jī)器人或完全離線運(yùn)行的個(gè)人助理。 Ollama 的本地LLM將處理自然語(yǔ)言的理解和響應(yīng)生成。

如何構(gòu)建它: 您將維護(hù)對(duì)話歷史記錄,并在用戶交互時(shí)不斷將其發(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 進(jìn)行對(duì)話,并打印機(jī)器人的答復(fù)。

?然后,我們輸入一個(gè)循環(huán),以繼續(xù)讀取用戶輸入并將更新的消息發(fā)送回 Ollama.Chat。我們始終將最新的用戶消息和助手對(duì)消息列表的答復(fù)以維護(hù)上下文。

?循環(huán)斷開空輸入(作為退出的一種方式)。

這個(gè)簡(jiǎn)單的聊天機(jī)器人將使您完全通過 Python 與LLM進(jìn)行來回對(duì)話。給定對(duì)話上下文的每個(gè)呼叫 ollama.Chat 都會(huì)返回模型的最新答復(fù)。由于該模型在本地運(yùn)行,因此響應(yīng)與硬件允許的速度一樣快,并且在對(duì)話中擁有完全的隱私。這樣的聊天機(jī)器人可以使用 GUI 或 Web 界面擴(kuò)展,但是核心邏輯將保持不變。 Ollama Python 庫(kù)摘要繁重的工作,因此構(gòu)建基本的聊天應(yīng)用程序只是幾行代碼。

用例2:工作流程中的自動(dòng)化

除了聊天機(jī)器人之外,Ollama 還可以通過利用 AI 功能來自動(dòng)化任務(wù)和增強(qiáng)工作流程。例如,您可以使用LLM來匯總文檔,生成報(bào)告,協(xié)助編碼或在自動(dòng)化腳本中解釋命令。本質(zhì)上,Ollama 讓您將 AI“大腦”嵌入到 Python 項(xiàng)目中。

方案: 假設(shè)您每天都有閱讀冗長(zhǎng)的日志文件或成績(jī)單的工作流程。您可以使用 Ollama 來自動(dòng)化這些文本的摘要。通過為您提供 AI 突出顯示的關(guān)鍵點(diǎn),這可以節(jié)省時(shí)間。

如何做: 您可以提示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)建了一個(gè)提示,要求該模型以一個(gè)句子進(jìn)行總結(jié)。 Ollama.generate 功能返回摘要,這可能是: “ Ollama 是一種新的 OpenAI 工具,可以在本地運(yùn)行大型語(yǔ)言模型,從而為用戶提供更高的隱私,控制和成本效率。” 這種自動(dòng)化可以插入較大的腳本中,例如,在多個(gè)文檔上迭代并將摘要寫入文件。

另一個(gè)自動(dòng)化示例可能是代碼生成或幫助。假設(shè)您要自動(dòng)編寫樣板代碼或配置文件自動(dòng)化。您可以通過指令提示模型并將其輸出代碼,然后您的 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)將返回用于檢查功能的代碼,然后您可以在項(xiàng)目中使用該代碼。這表明了 Ollama 如何通過自動(dòng)化編碼或文檔任務(wù)的部分來增強(qiáng)開發(fā)人員的工作流程。

通常,將 Ollama 集成到自動(dòng)化中意味著您可以在沒有外部 API 調(diào)用的任何 Python 工作流程中具有 AI 驅(qū)動(dòng)的功能。 Python SDK 的靈活性(具有 Ollama.list(),Ollama.pull(),Ollama.delete()等功能,也意味著您的程序可以即時(shí)管理模型,例如,在運(yùn)行時(shí)或?yàn)椴煌蝿?wù)開關(guān)模型時(shí)拔出所需的模型。這使得可以構(gòu)建精簡(jiǎn)復(fù)雜任務(wù)的智能代理,批處理處理器或 AI 驅(qū)動(dòng)的助手。

分步示例:與 Ollama 建立一個(gè)簡(jiǎn)單的代理商

要將所有內(nèi)容融合在一起,讓我們通過使用 Ollama 來構(gòu)建一個(gè)簡(jiǎn)單的 AI 代理 。我們的代理將是一個(gè)不僅可以交談的聊天機(jī)器人,而且還可以使用 Python 函數(shù)作為工具執(zhí)行簡(jiǎn)單的計(jì)算。這說明了如何以分步的方式使用 Ollama 的高級(jí)功能(函數(shù)調(diào)用)。

步驟1:設(shè)置環(huán)境

確保安裝和運(yùn)行 Ollama(如入門中所述)。另外,請(qǐng)確保您有合適的型號(hào)。對(duì)于此代理,我們將使用遵循指令的模型(對(duì)于一般的 Q&A),并使其能夠使用工具進(jìn)行數(shù)學(xué)。像 Llama2 或 Llama3.1 這樣的模型將起作用。 (如果尚未完成,請(qǐng)事先在終端中運(yùn)行 Ollama Lut Llama2。)在您的 Python 腳本或筆記本中,導(dǎo)入 Ollama 庫(kù)以及您需要的任何其他模塊:

import ollama

如果您打算將另一個(gè)庫(kù)中的特定函數(shù)用作工具,則也將導(dǎo)入它(稍后,我們將顯示一個(gè)示例,稍后使用 Python 請(qǐng)求庫(kù))。但是目前,我們的代理商的工具將是一個(gè)簡(jiǎn)單的內(nèi)部功能。

步驟2:定義工具功能(可選)

Ollama 的 Python 庫(kù)允許您傳遞 Python 函數(shù),作為模型在聊天期間可以調(diào)用的工具。這非常適合創(chuàng)建可以采取行動(dòng)或獲取信息的代理商。我們將定義一個(gè)基本的數(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

此功能只需占用兩個(gè)整數(shù)并返回其總和。 (請(qǐng)注意,我們包含了類型的提示和 docstring;提供此元數(shù)據(jù)可以更好地了解該工具的目的。)如果需要,我們可以注冊(cè)更多功能,但是我們將保持簡(jiǎn)單。

步驟3:初始化代理對(duì)話

現(xiàn)在,讓我們?cè)O(shè)置代理的初始上下文。我們將提供一個(gè)系統(tǒng)指令,將有關(guān)可用工具以及何時(shí)使用的模型告知模型。例如,系統(tǒng)消息可能會(huì)說: “您是數(shù)學(xué)助手。如果用戶提出數(shù)學(xué)問題,則可以調(diào)用 add_two_numbers 函數(shù)。” 這將指導(dǎo)模型適當(dāng)?shù)厥褂霉ぞ摺N覀冞€會(huì)準(zhǔn)備一個(gè)需要該工具的用戶查詢:

""" 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]

步驟4:與模型聊天并提供工具

現(xiàn)在,我們將在工具參數(shù)中提供型號(hào)名稱,對(duì)話消息和我們的工具功能:

response = ollama.chat(
model='llama2',
messages=messages,
tools=[add_two_numbers] # pass the actual function object as a tool
)

當(dāng)我們包括工具= [add_two_numbers]時(shí),在引擎蓋下時(shí),Ollama 庫(kù)使該函數(shù)的簽名和 DOCSTRING 可用于模型。該模型在看到用戶問題“什么是 10 + 10?”時(shí),可以決定調(diào)用 add_two_numbers 工具,而不是嘗試進(jìn)行數(shù)學(xué)本身。 Ollama 的最新版本支持此類功能呼叫。

步驟5:處理工具響應(yīng)

我們從 Ollama.Chat 獲得的結(jié)果是一個(gè)可能包括工具調(diào)用的響應(yīng)對(duì)象。我們需要檢查該模型是否確實(shí)要求使用我們的功能。響應(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)用(可能有多個(gè)呼叫,但在我們的情況下,我們期望一個(gè))。我們將函數(shù)名稱匹配,然后調(diào)用 add_two_numbers 與模型提供的參數(shù)。結(jié)果(在這種情況 20)被打印出來或可以回到模型中。

模型自己的答案呢?通常,當(dāng)LLM使用函數(shù)調(diào)用時(shí),它最初可能會(huì)用占位符或類似的推理響應(yīng):“ 我將使用 add_two_numbers 工具。 ”。執(zhí)行工具后,您可以將結(jié)果發(fā)送回對(duì)話中,以供模型生成最終答案。為簡(jiǎn)單起見,我們可以假設(shè)模型的答案將在函數(shù)調(diào)用后完成。如果我們希望代理商明確將最終答案返回給用戶,則可以在功能結(jié)果中附加一條新消息,并提示該模型得出答案。

將所有內(nèi)容放在一起,一個(gè)簡(jiǎn)單的代理循環(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é)束。運(yùn)行完整腳本時(shí),輸出可能看起來像:

Assistant (initial): Let me calculate that for you...
Function output: 20
Assistant (final): The result is 20.

代理商成功回答了 “什么是 10 + 10?” 通過使用 Python 函數(shù)進(jìn)行計(jì)算。您已經(jīng)有效地創(chuàng)建了一個(gè)簡(jiǎn)單的 AI 代理,該代理可以將其功能擴(kuò)展到LLM的內(nèi)置知識(shí)之外,所有這些都在本地運(yùn)行。您可以類似地添加更多工具或更復(fù)雜的邏輯。例如,您可以通過提供獲取天氣數(shù)據(jù)的工具功能來集成 API 調(diào)用(例如天氣 API),并且當(dāng)用戶詢問天氣時(shí),該模型可以決定調(diào)用它。

通過這個(gè)逐步的示例,我們看到了如何設(shè)置 Ollama,加載模型并使用 Python SDK 來實(shí)現(xiàn)將 AI 推理與真實(shí)動(dòng)作結(jié)合的代理。 Ollama Python 庫(kù)使從 Idea(AI Agent)將概念從僅幾十行代碼的工作原型中進(jìn)行簡(jiǎn)單明了。

最后的想法

在本指南中,我們介紹了將 Ollama 與 Python 一起使用的基本原理:從了解 Ollama 是什么以及為什么它有益,到設(shè)置它,探索關(guān)鍵用例并建立簡(jiǎn)單的代理。使用 Ollama,開發(fā)人員可以在本地運(yùn)行強(qiáng)大的語(yǔ)言模型,并輕松將它們集成到應(yīng)用程序中。 Python API 是直觀的 – 您可以從基本的生成或聊天呼叫開始,然后根據(jù)需要探索高級(jí)功能,例如自定義系統(tǒng)提示,流媒體響應(yīng)或功能工具。

通過利用 Ollama,您可以獲得隱私(您的數(shù)據(jù)保留本地),選擇甚至微調(diào)模型的靈活性以及可能降低成本和延遲。我們演示了如何使用 Ollama 進(jìn)行 AI 聊天機(jī)器人并自動(dòng)化工作流程。這些示例只是刮擦表面。

對(duì)于接下來的步驟,您可能需要嘗試從 Ollama 庫(kù)中的不同模型(例如,嘗試以代碼為中心的模型進(jìn)行編程幫助,或更大的 13B+參數(shù)模型以進(jìn)行更細(xì)微的對(duì)話)。您還可以將 Ollama 集成到現(xiàn)有的 AI 框架中 – 例如,使用 Langchain 的 Ollama 集成來構(gòu)建更復(fù)雜的代理或鏈條。社區(qū)和文檔(查看官方的 Ollama 文檔和 GitHub)還有更多示例,例如使用嵌入式語(yǔ)義搜索或在 Web 服務(wù)器模式下運(yùn)行 Ollama 來服務(wù) API 請(qǐng)求。

有了這個(gè)堅(jiān)實(shí)的基礎(chǔ),您可以自信地?cái)U(kuò)展您的 AI 項(xiàng)目。無(wú)論是個(gè)人助理,數(shù)據(jù)分析工具還是網(wǎng)站的自定義聊天機(jī)器人, Ollama 都可以使您根據(jù)自己的條款開發(fā)和擴(kuò)展這些解決方案 。快樂的建筑!

文章轉(zhuǎn)載自: Using Ollama with Python: Step-by-Step Guide

上一篇:

AI短劇工業(yè)革命:API如何重塑內(nèi)容生產(chǎn)全鏈路

下一篇:

手把手教你使用盤古API
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)