Skip to content

JupyterHub 中使用 Ollama

安装 Ollama

本地安装

官方文档:ollama/docs/linux.md at main · ollama/ollama

网络配置:使用固定的 Docker 网络配置,多项目共享网络,确保容器间通信稳定

yaml
networks:
  jupyterhub-ai-net:
    name: jupyterhub-ai-net
    external: true

本地启动 Ollama 服务:

bash
# 启动 Ollama 服务
export OLLAMA_HOST=0.0.0.0:11434
ollama serve &

# 拉取模型,模型可以在 https://ollama.com/search 选择
ollama pull deepseek-r1:1.5b
ollama pull qwen3:1.7b
ollama pull qwen2.5-coder:7b

Docker 安装

yaml
ollama:
  image: ollama/ollama:latest
  container_name: ollama
  ports:
    - "11434:11434"
  volumes:
    - ollama-data:/root/.ollama
  environment:
    - OLLAMA_HOST=0.0.0.0:11434
  networks:
    - jupyterhub-ai-net
  restart: unless-stopped
  profiles:
    - ollama
    - ai-services
  # 资源限制
  deploy:
    resources:
      limits:
        memory: 8G
      reservations:
        memory: 4G
  # 健康检查
  healthcheck:
    test: ["CMD", "curl", "-f", "http://localhost:11434/api/tags"]
    interval: 30s
    timeout: 10s
    retries: 3
    start_period: 60s

使用 Ollama

官方文档:Users — Jupyter AI documentation

bash
pip install jupyter-ai # 安装 jupyter-ai
pip install langchain-ollama # 安装 langchain-ollama

聊天界面

Language model 中配置:

  • Completion model:下拉选择 ollama
  • Local model ID:填写本地的模型名称,比如 deepseek-r1:1.5bqwen3:1.7b, qwen2.5-coder:7b
  • Base API URL:填写本地 Ollama 的 API 地址,比如 http://172.18.0.1:11434

下面的 Embedding model 配置一样,按需填写即可

image1

填写完成后就可以用聊天功能了

image2

AI magic 命令

  1. 先加载 AI magic 命令
  2. 配置 Ollama 服务
  3. 使用 AI magic 命令
python
import os

%load_ext jupyter_ai_magics
os.environ["OLLAMA_HOST"] = "http://172.18.0.1:11434"

%%ai ollama:deepseek-r1:1.5b
请用中文简单介绍一下什么是机器学习,不超过100字。

image3

Python 中使用 Ollama

python
import os
from langchain_ollama import OllamaLLM
from langchain.prompts import PromptTemplate
from langchain_community.llms import Ollama

# 定义 Ollama API 地址
ollama_base = os.environ.get('OLLAMA_API_BASE', 'http://172.18.0.1:11434')
print(f"Ollama API 地址:{ollama_base}")

llm = OllamaLLM(
    base_url=ollama_base,
    model="deepseek-r1:1.5b",
    temperature=0.7
)

prompt = PromptTemplate(
    input_variables=["topic"],
    template="请用中文详细解释 {topic},包括其定义、应用场景和优缺点。"
)

chain = prompt | llm
result = chain.invoke({"topic": "神经网络"})
print(result)

image5

python
# 使用代码专用模型
def generate_code(prompt, model="qwen2.5-coder:7b"):
    try:
        response = client.chat(
            model=model,
            messages=[
                {
                    'role': 'user',
                    'content': f"请用 Python 编写代码:{prompt}",
                },
            ],
        )
        return response['message']['content']
    except Exception as e:
        return f"代码生成失败:{e}"

# 代码生成示例
code_prompt = "创建一个函数,计算斐波那契数列的第 n 项"
print(f"需求:{code_prompt}")
print("\n生成的代码:")
generated_code = generate_code(code_prompt)
print(generated_code)

image6