最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python+Ollama零成本打造一個私有AI助手

 更新時間:2026年04月07日 08:53:10   作者:Halcyon.平安  
零?API?費用、零數(shù)據(jù)泄露風(fēng)險、完全離線可用,本文將帶大家從安裝到實戰(zhàn),詳細介紹一下如何使用Python結(jié)合Ollama模型30?分鐘跑起一個本地?AI?助手,感興趣的小伙伴可以了解下

一、為什么要在本地跑大模型?

對比維度云端 API(ChatGPT / Claude)本地模型(Ollama)
費用按量付費,$20/月起完全免費
數(shù)據(jù)隱私數(shù)據(jù)上傳到云端數(shù)據(jù)留在本地
網(wǎng)絡(luò)依賴必須聯(lián)網(wǎng)離線可用
模型選擇固定自由切換開源模型
硬件要求需要一定配置

二、Ollama 是什么?

Ollama 是一個開源的本地大模型運行框架,核心特點:

  • 一鍵拉取模型:類似 docker pull 的體驗
  • 自動適配硬件:根據(jù)你的顯存/內(nèi)存自動量化
  • 兼容 OpenAI API 格式:現(xiàn)有代碼幾乎不用改
  • 跨平臺:Windows / macOS / Linux 都支持

三、環(huán)境準(zhǔn)備

3.1 硬件要求

模型規(guī)模最低內(nèi)存/顯存推薦配置
1.5B~3B(輕量)4 GB8 GB 內(nèi)存即可
7B~8B(主流)8 GB16 GB 內(nèi)存或 8 GB 顯存
14B~32B(進階)16 GB32 GB 內(nèi)存或 16 GB 顯存
70B+(旗艦)48 GB專業(yè)顯卡 / 服務(wù)器

沒有獨立顯卡也能跑!Ollama 支持 純 CPU 推理,只是速度慢一些。

3.2 安裝 Ollama

# macOS / Linux(一行搞定)
curl -fsSL https://ollama.com/install.sh | sh
# Windows:前往 https://ollama.com/download 下載安裝包

驗證安裝:

ollama --version
# 輸出:ollama version is 0.6.x

3.3 拉取模型

# 推薦:Qwen3 8B(中文能力最強的小模型之一)
ollama pull qwen3:8b

# 備選:Llama 4 Scout 17B(Meta 最新開源模型)
ollama pull llama4:scout17b

# 輕量選擇:Qwen3 4B(4GB 內(nèi)存就能跑)
ollama pull qwen3:4b

# 查看已下載的模型
ollama list

3.4 安裝 Python 依賴

pip install ollama

四、快速上手:5 行代碼跑起來

4.1 最簡對話

import ollama
# 發(fā)送一條消息,獲取回復(fù)
response = ollama.chat(
    model="qwen3:8b",
    messages=[
        {"role": "user", "content": "用 Python 寫一個快速排序算法"}
    ]
)
print(response["message"]["content"])

4.2 流式輸出(打字機效果)

import ollama
# stream=True 開啟流式輸出,體驗更絲滑
stream = ollama.chat(
    model="qwen3:8b",
    messages=[
        {"role": "user", "content": "解釋一下 Python 的裝飾器"}
    ],
    stream=True
)
for chunk in stream:
    print(chunk["message"]["content"], end="", flush=True)

4.3 多輪對話(保持上下文)

import ollama
# 維護對話歷史
messages = []
def chat(user_input: str) -> str:
    messages.append({"role": "user", "content": user_input})
    response = ollama.chat(model="qwen3:8b", messages=messages)
    assistant_msg = response["message"]["content"]
    messages.append({"role": "assistant", "content": assistant_msg})
    return assistant_msg
# 多輪對話
print(chat("你好,我正在學(xué) Python"))
print("---")
print(chat("剛才我說我在學(xué)什么來著?"))  # 它能記住上下文

五、實戰(zhàn)項目:打造命令行 AI 助手

下面是一個功能完整的本地 AI 助手,支持多輪對話、Markdown 渲染、歷史記錄。

5.1 項目結(jié)構(gòu)

local-ai-assistant/
├── assistant.py      # 主程序
├── config.py         # 配置文件
└── chat_history.json # 對話歷史(自動生成)

5.2 配置文件 config.py

# config.py
MODEL_NAME = "qwen3:8b"          # 使用的模型
SYSTEM_PROMPT = """你是一個專業(yè)的 AI 編程助手。
你擅長 Python、數(shù)據(jù)分析、自動化辦公。
回答要簡潔實用,代碼要可以直接運行。"""
MAX_HISTORY = 20                   # 最多保留的對話輪數(shù)

5.3 主程序 assistant.py

# assistant.py
import json
import ollama
from datetime import datetime
from config import MODEL_NAME, SYSTEM_PROMPT, MAX_HISTORY
def load_history(filepath="chat_history.json"):
    """加載對話歷史"""
    try:
        with open(filepath, "r", encoding="utf-8") as f:
            return json.load(f)
    except FileNotFoundError:
        return []
def save_history(messages, filepath="chat_history.json"):
    """保存對話歷史"""
    with open(filepath, "w", encoding="utf-8") as f:
        json.dump(messages, f, ensure_ascii=False, indent=2)
def chat_stream(user_input: str, messages: list) -> str:
    """流式對話"""
    messages.append({"role": "user", "content": user_input})
    print(f"\n\033[92m?? AI:\033[0m ", end="", flush=True)
    full_response = ""
    stream = ollama.chat(model=MODEL_NAME, messages=messages, stream=True)
    for chunk in stream:
        content = chunk["message"]["content"]
        print(content, end="", flush=True)
        full_response += content
    print("\n")
    messages.append({"role": "assistant", "content": full_response})
    # 限制歷史長度
    if len(messages) > MAX_HISTORY * 2 + 1:
        messages = [messages[0]] + messages[-(MAX_HISTORY * 2):]
    return full_response
def main():
    print("=" * 50)
    print(f"  本地 AI 助手  |  模型: {MODEL_NAME}")
    print("  輸入 /clear 清空歷史 | /quit 退出")
    print("=" * 50)
    # 初始化對話
    messages = load_history()
    if not messages:
        messages = [{"role": "system", "content": SYSTEM_PROMPT}]
    while True:
        user_input = input("\n\033[94m?? 你:\033[0m ").strip()
        if not user_input:
            continue
        if user_input == "/quit":
            save_history(messages)
            print("?? 再見!對話已保存。")
            break
        if user_input == "/clear":
            messages = [{"role": "system", "content": SYSTEM_PROMPT}]
            save_history(messages)
            print("???  對話歷史已清空。")
            continue
        chat_stream(user_input, messages)
        save_history(messages)
if __name__ == "__main__":
    main()

5.4 運行效果

python assistant.py

==================================================
  本地 AI 助手  |  模型: qwen3:8b
  輸入 /clear 清空歷史 | /quit 退出
==================================================

?? 你: 幫我寫一個 Python 腳本,監(jiān)控某個文件夾的變化

?? AI: 好的,使用 `watchdog` 庫可以輕松實現(xiàn)文件夾監(jiān)控...
(此處輸出完整代碼)

六、進階玩法

6.1 讓 AI 調(diào)用本地函數(shù)(Function Calling)

import ollama
import json
# 定義工具函數(shù)
def get_weather(city: str) -> str:
    """模擬獲取天氣(可替換為真實 API)"""
    weather_data = {"北京": "晴天 22°C", "上海": "多云 18°C", "深圳": "大雨 28°C"}
    return weather_data.get(city, "未查詢到該城市天氣")
def calculate(expression: str) -> str:
    """安全計算數(shù)學(xué)表達式"""
    try:
        allowed = set("0123456789+-*/.() ")
        if all(c in allowed for c in expression):
            return str(eval(expression))
        return "不安全的表達式"
    except Exception as e:
        return f"計算錯誤: {e}"
# 注冊工具
tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "獲取指定城市的天氣信息",
            "parameters": {
                "type": "object",
                "properties": {
                    "city": {"type": "string", "description": "城市名稱"}
                },
                "required": ["city"]
            }
        }
    },
    {
        "type": "function",
        "function": {
            "name": "calculate",
            "description": "計算數(shù)學(xué)表達式",
            "parameters": {
                "type": "object",
                "properties": {
                    "expression": {"type": "string", "description": "數(shù)學(xué)表達式"}
                },
                "required": ["expression"]
            }
        }
    }
]
# 工具映射
tool_map = {
    "get_weather": get_weather,
    "calculate": calculate
}
# 對話
messages = [{"role": "user", "content": "北京天氣怎么樣?順便幫我算一下 25*36+128"}]
response = ollama.chat(model="qwen3:8b", messages=messages, tools=tools)
# 處理工具調(diào)用
if response["message"].get("tool_calls"):
    for tool_call in response["message"]["tool_calls"]:
        func_name = tool_call["function"]["name"]
        func_args = tool_call["function"]["arguments"]
        print(f"?? 調(diào)用工具: {func_name}({func_args})")
        result = tool_map[func_name](**func_args)
        print(f"   結(jié)果: {result}")

6.2 兼容 OpenAI SDK

# 如果你已有使用 OpenAI SDK 的代碼,只需改一行
from openai import OpenAI
client = OpenAI(
    base_url="http://localhost:11434/v1",  # 指向 Ollama
    api_key="ollama"                        # 隨意填,不影響
)
response = client.chat.completions.create(
    model="qwen3:8b",
    messages=[
        {"role": "user", "content": "Hello, who are you?"}
    ]
)
print(response.choices[0].message.content)

這意味著:所有基于 OpenAI API 的應(yīng)用(LangChain、Dify、Cursor 等)都可以無縫切換到本地模型!

七、模型選擇指南

模型推薦表

使用場景推薦模型大小命令
中文對話 / 寫作Qwen3 8B~5 GBollama pull qwen3:8b
英文編程Llama 4 Scout~10 GBollama pull llama4:scout17b
邏輯推理 / 數(shù)學(xué)DeepSeek R2 8B~5 GBollama pull deepseek-r2:8b
低配機器Qwen3 1.7B~1 GBollama pull qwen3:1.7b
代碼專用Qwen3-Coder 7B~4 GBollama pull qwen3-coder:7b

八、常見問題

Q:沒有顯卡能跑嗎?

A:能。Ollama 支持 CPU 推理,8B 模型在 16GB 內(nèi)存的機器上完全可以跑,速度約 5-10 token/s。

Q:中文效果好還是英文效果好?

A:推薦 Qwen3 系列,它的中文能力是目前開源模型里最強的,遠超同級別的 Llama。

Q:和 ChatGPT 比差多少?

A:8B 級別的模型大約相當(dāng)于 GPT-3.5 的水平,日常問答夠用,復(fù)雜推理和長文本還有差距。如果硬件允許,跑 32B 或 70B 的模型會更接近 GPT-4 級別。

Q:商用免費嗎?

A:大部分模型(Qwen、Llama、Gemma)允許商用,但建議查看各模型的具體 License。

總結(jié)

Ollama 本地 AI 的核心優(yōu)勢:
├── 零成本 —— 不花一分錢 API 費用
├── 零 風(fēng)險 —— 數(shù)據(jù)永遠不會離開你的電腦
├── 零門檻 —— pip install + ollama pull,5 分鐘上手
└── 零妥協(xié) —— 兼容 OpenAI API,現(xiàn)有生態(tài)無縫切換

現(xiàn)在就打開終端,花 5 分鐘跑起你的第一個本地 AI 助手吧。

以上就是Python+Ollama零成本打造一個私有AI助手的詳細內(nèi)容,更多關(guān)于Python Ollama開發(fā)AI助手的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • python 根據(jù)pid殺死相應(yīng)進程的方法

    python 根據(jù)pid殺死相應(yīng)進程的方法

    下面小編就為大家?guī)硪黄猵ython 根據(jù)pid殺死相應(yīng)進程的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Python命令行解析模塊詳解

    Python命令行解析模塊詳解

    這篇文章主要介紹了Python命令行解析模塊詳解,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • Python .format()函數(shù)使用方法詳解

    Python .format()函數(shù)使用方法詳解

    python中format函數(shù)用于字符串的格式化,接下來通過本文給大家介紹python中format()函數(shù)的簡單使用教程,一起看看吧
    2021-10-10
  • python實現(xiàn)統(tǒng)計文本中單詞出現(xiàn)的頻率詳解

    python實現(xiàn)統(tǒng)計文本中單詞出現(xiàn)的頻率詳解

    這篇文章主要介紹了python統(tǒng)計文本中單詞出現(xiàn)頻率,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python PyTorch實現(xiàn)Timer計時器

    Python PyTorch實現(xiàn)Timer計時器

    這篇文章主要為大家詳細介紹了Python PyTorch如何實現(xiàn)簡單的Timer計時器,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • python保存數(shù)據(jù)到本地文件的方法

    python保存數(shù)據(jù)到本地文件的方法

    今天小編就為大家分享一篇python保存數(shù)據(jù)到本地文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python中函數(shù)的創(chuàng)建與調(diào)用你了解嗎

    Python中函數(shù)的創(chuàng)建與調(diào)用你了解嗎

    這篇文章主要為大家詳細介紹了Python中函數(shù)的創(chuàng)建與調(diào)用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 用Python將Excel數(shù)據(jù)導(dǎo)入到SQL Server的例子

    用Python將Excel數(shù)據(jù)導(dǎo)入到SQL Server的例子

    今天小編就為大家分享一篇用Python將Excel數(shù)據(jù)導(dǎo)入到SQL Server的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Python+Delorean實現(xiàn)時間格式智能轉(zhuǎn)換

    Python+Delorean實現(xiàn)時間格式智能轉(zhuǎn)換

    DeLorean是一個Python的第三方模塊,基于?pytz?和?dateutil?開發(fā),用于處理Python中日期時間的格式轉(zhuǎn)換。本文將詳細講講DeLorean的使用,感興趣的可以了解一下
    2022-04-04
  • 使用Python3實現(xiàn)判斷函數(shù)的圈復(fù)雜度

    使用Python3實現(xiàn)判斷函數(shù)的圈復(fù)雜度

    編寫函數(shù)最重要的原則就是:別寫太復(fù)雜的函數(shù),那什么樣的函數(shù)才能算是過于復(fù)雜?一般會通過兩個標(biāo)準(zhǔn)來判斷,長度和圈復(fù)雜度,下面我們就來看看如何使用Python判斷函數(shù)的圈復(fù)雜度吧
    2024-04-04

最新評論

玉林市| 揭西县| 门头沟区| 宁陵县| 土默特右旗| 叙永县| 观塘区| 三江| 孝昌县| 吴江市| 晋城| 连江县| 孟津县| 钦州市| 余姚市| 盈江县| 凤庆县| 紫云| 莫力| 武山县| 皋兰县| 泉州市| 逊克县| 泸溪县| 樟树市| 南汇区| 满城县| 庆城县| 内丘县| 普兰县| 武城县| 巴东县| 阜新市| 日喀则市| 崇义县| 肥乡县| 安宁市| 龙岩市| 清徐县| 乐都县| 固原市|