标签: ollama

  • Ollama 与 LangChain构建本地化且强大的 LLM 生态系统

    在大型语言模型(LLM)的快速发展中,Ollama 将继续简化本地部署流程,帮助开发者更加便捷地运行 LLM,而 LangChain 将扩展更多数据源和功能模块,帮助开发者构建更加丰富、复杂的 AI 应用。

    1. LangChain:构建 LLM 应用的强大框架

    LangChain 是一个用于构建 LLM 驱动的应用程序的开发框架,它提供了一系列强大的工具和组件,使得开发者能够轻松构建出复杂的、数据驱动的应用。LangChain 支持与各种外部数据源、API 和工具的集成,极大地扩展了 LLM 的应用场景。

    LangChain 的核心功能包括多种提示管理、链式调用、数据增强等,能够帮助开发者构建更加智能、灵活的 AI 应用,如智能问答、聊天机器人、文档分析系统等。

    LangChain 的特点

    1. 丰富的组件与工具:LangChain 提供了提示模板(Prompt Templates)、链式调用(Chains)、智能体(Agents)等多种组件,帮助开发者实现复杂的功能。
    2. 数据集成:LangChain 可以与多种数据源集成,包括文件、数据库、向量数据库、Web API 等,扩展了 LLM 的应用范围。
    3. 应用开发能力:开发者可以通过 LangChain 构建复杂的应用,如问答系统、聊天机器人、数据增强应用等,为实际业务提供智能支持。
    4. 会话记忆管理:LangChain 支持多轮对话和会话记忆,使得开发者能够创建更加自然的对话流和用户交互体验。

    2. Ollama:简化本地 LLM 部署

    Ollama 是一个工具平台,旨在简化本地 LLM 的部署过程。它为用户提供了一个简单、直观的方式,让开发者能够快速在本地计算机上运行各种开源的 LLM,无需复杂的配置或环境搭建。通过 Ollama,开发者可以轻松下载、安装并运行大多数流行的 LLM,从而降低了 LLM 使用的技术门槛。

    Ollama 的特点

    1. 简洁易用的命令行工具:通过简短的命令即可下载并启动 LLM,极大简化了模型的部署流程。
    2. 本地运行,隐私保障:Ollama 允许用户在本地计算机上运行模型,避免了将数据上传至云端的隐私风险。
    3. 灵活的模型管理:用户可以方便地下载、管理并切换多个不同的 LLM,例如 LLaMA、Mistral、Gemma 等,满足不同应用需求。
    4. 跨平台支持:Ollama 支持 macOS、Linux 和部分 Windows 系统,确保各种开发环境都能顺利使用。

    3. Ollama与LangChain的协同作用

    虽然 Ollama 和 LangChain 各自有独立的功能,但它们实际上是互为补充的工具,可以在多个开发场景中协同工作,帮助开发者更高效地利用 LLM 技术。

    例如,开发者可以在本地使用 Ollama 运行 LLAMA 模型,然后结合 LangChain 构建一个智能问答系统,该系统能够与外部数据源(如本地文件或数据库)交互。Ollama 提供了本地模型的运行环境,而 LangChain 则帮助开发者设计和实现复杂的应用逻辑。

    4. 应用场景

    场景Ollama 角色LangChain 角色
    本地文档问答系统提供本地运行的 LLM 推理能力管理文档解析、嵌入、问答流程
    离线智能助理本地运行模型(如LLAMA)处理会话管理、记忆、工具调用
    多模型测试与对比快速切换多个 LLM 进行测试提供统一接口进行多模型测试

    通过将 Ollama 与 LangChain 结合,开发者不仅能够在本地高效运行 LLM,还能够快速构建复杂的 LLM 应用,充分发挥 LLM 的能力。

  • 基于LangChain和Ollama的本地文档问答系统

    使用 LangChain 框架和 Ollama 开源大模型搭建一个问答系统,根据提供的文档内容回答用户提出的问题。

    系统主要由以下几个部分组成:

    • 文档加载模块: 负责从指定的路径加载文档。
    • 文档切分模块: 将加载的文档按照指定的大小和重叠度进行切分,以便 LLM 处理。
    • LLM 加载模块: 负责加载指定的 Ollama 模型。
    • 问答链创建模块: 使用 LangChain 表达式语言 (LCEL) 构建问答链,将用户问题和文档内容输入到 LLM 中,并解析 LLM 的输出。
    • 提问模块: 接收用户输入的问题,调用问答链生成答案,并返回给用户。
    • 重试机制: 使用 Tenacity 库,当提问模块出现错误时,自动进行重试,以提高系统的稳定性。

    1. 创建一个虚拟环境,名字为langqa

    conda create -n langqa python=3.12

    2. 激活虚拟环境

    conda activate langqa

    3. 安装依赖

    pip install langchain langchain_community langchain-ollama ollama tenacity

    4. 部署代码

    替换为你自己的文件、模型和地址

    • 文件:tcpdump.1-4.4.0.txt
    • 模型:llama3.1:8b
    • OLLAMA :http://localhost:11434

    配置完成后使用命令行进行运行对话

    python langqa.py

    代码

    """
    Author: Qixinlee
    Description: 基于LangChain和Ollama的本地文档问答系统
    """ 
    
    import os
    from langchain_community.document_loaders import TextLoader
    from langchain.text_splitter import RecursiveCharacterTextSplitter
    from langchain_ollama import OllamaLLM
    from langchain.prompts import PromptTemplate
    import ollama
    from tenacity import retry, stop_after_attempt, wait_random_exponential
    from langchain_core.runnables import chain
    from langchain_core.output_parsers import StrOutputParser
    
    # 常量定义
    DOCUMENT_PATH = os.path.join(os.path.dirname(__file__), "tcpdump.1-4.4.0.txt")
    CHUNK_SIZE = 1000
    CHUNK_OVERLAP = 100
    LLM_MODEL_NAME = "llama3.1:8b"
    OLLAMA_HOST = "http://localhost:11434"
    
    # 1. 设置 Ollama 连接信息
    os.environ["OLLAMA_HOST"] = OLLAMA_HOST
    ollama.DEFAULT_BASE_URL = OLLAMA_HOST
    
    # 2. 加载文档
    def load_document(document_path: str):
        try:
            loader = TextLoader(document_path)
            documents = loader.load()
            print(f"Successfully loaded document from {document_path}")
            return documents
        except Exception as e:
            print(f"Error loading document: {e}")
            exit()
    
    # 3. 切分文档
    def split_document(documents, chunk_size: int, chunk_overlap: int):
        text_splitter = RecursiveCharacterTextSplitter(chunk_size=chunk_size, chunk_overlap=chunk_overlap)
        texts = text_splitter.split_documents(documents)
        return texts
    
    # 4. 加载 LLM
    def load_llm(llm_model_name: str):
        try:
            llm = OllamaLLM(model=llm_model_name)
            print(f"Successfully loaded LLM model: {llm_model_name}")
            return llm
        except Exception as e:
            print(f"Error loading LLM model: {e}")
            exit()
    
    # 5. 创建问答链 (使用 LangChain 表达式语言)
    def create_qa_chain(llm):
        try:
            template = """你是一个问答机器人。请根据以下已知信息,用简洁和专业的中文回答用户的问题。
            如果无法从中得到答案,请清晰地输出 “根据已知信息无法回答该问题”。
    
            已知信息:
            {context}
    
            问题: {question}
            答案:"""
            QA_CHAIN_PROMPT = PromptTemplate(
                input_variables=["context", "question"], template=template
            )
    
            # 使用 Runnable 序列
            qa_chain = QA_CHAIN_PROMPT | llm | StrOutputParser()
    
            print("Successfully created QA chain.")
            return qa_chain
        except Exception as e:
            print(f"Error creating QA chain: {e}")
            exit()
    
    # 6. 提问 (使用 Tenacity 实现重试机制)
    @retry(stop=stop_after_attempt(3), wait=wait_random_exponential(multiplier=1, min=4, max=10))
    def generate_answer(qa_chain, document_content: str, query: str):
        try:
            result = qa_chain.invoke({"context": document_content, "question": query})
            print("Successfully generated answer.")
            return result
        except Exception as e:
            print(f"Error during QA: {e}")
            raise
    
    # 主程序
    if __name__ == "__main__":
    
        # 1. 加载文档
        documents = load_document(DOCUMENT_PATH)
    
        # 2. 切分文档
        texts = split_document(documents, CHUNK_SIZE, CHUNK_OVERLAP)
    
        # 3. 加载 LLM (使用常量)
        llm = load_llm(LLM_MODEL_NAME)
    
        # 4. 将所有文本块连接成一个字符串
        document_content = "\n".join([text.page_content for text in texts])
    
        # 5. 创建问答链
        qa_chain = create_qa_chain(llm)
    
        # 6. 循环提问
        while True:
            query = input("请输入你的问题 (输入 'exit' 退出): ")
            if query.lower() == "exit":
                break
    
            try:
                result = generate_answer(qa_chain, document_content, query)
                print("Question (中文):", query)
                print("Answer (中文):", result)
    
            except Exception as e:
                print(f"Failed to generate answer: {e}")
                exit()
  • 在个人 PC 上选择 Ollama 还是 LM Studio

    随着大语言模型的普及,越来越多用户希望将它们部署在本地设备上,以获得离线使用、隐私保护和更低延迟的优势。Ollama 和 LM Studio 是两款常见的本地部署工具,它们各具特点,适用于不同类型的用户

    一、Ollama 简介

    Ollama 是一个轻量级的本地大语言模型运行框架,通过命令行即可完成模型的下载、运行与交互。它以“开箱即用”为目标,简化了本地部署流程,同时保留了较高的灵活性和可扩展性。

    主要特点:

    • 命令行驱动,适合技术用户;
    • 支持主流模型(如 LLaMA、Mistral、Gemma 等);
    • 提供本地 REST API 接口;
    • 模型管理与更新简便;
    • 支持 macOS、Windows、Linux;
    • 开源项目
      优点:
    • 使用灵活,支持自动化脚本与集成;
    • 模型运行效率高,资源控制好;
    • 自定义模型与镜像构建功能强大;
    • 社区活跃,支持快速反馈与迭代。

    不足:

    • 无图形界面,初学者入门有门槛;
    • 高级功能配置依赖命令行与配置文件。

    二、LM Studio 简介

    LM Studio 是一款图形化的本地语言模型运行工具,主打易用性,面向非技术用户快速上手。内置 Hugging Face 模型库浏览器,可通过界面选择、下载、运行模型。

    主要特点:

    • 图形界面,适合所有用户;
    • 内置模型市场,支持一键下载;
    • 支持对话式模型交互;
    • 可开启本地 API 服务接口;
    • 支持 macOS、Windows(Linux 支持计划中);
    • 闭源软件,当前未公开源代码。

    优点:

    • 使用门槛低,界面清晰直观;
    • 操作流程完整,适合内容创作与教学演示;
    • 支持 GGUF 模型导入,兼容性良好。

    不足:

    • 不支持命令行控制或脚本化自动操作;
    • API 接口功能相对基础;
    • 开源性不足,透明度受限。

    三、API 调用功能对比

    功能项OllamaLM Studio
    是否支持 API
    启动方式命令行中自动启动 REST 服务GUI 中启用 “Open Local Server” 选项
    默认端口http://localhost:11434http://localhost:1234(可自定义)
    接口格式JSON,类似 OpenAI APIJSON,兼容 OpenAI 接口规范
    流式输出支持(stream: true)支持(SSE)
    高级功能支持模型管理、嵌入生成、多线程等主要用于文本生成,功能相对简单

    四、选择建议

    使用场景推荐工具
    技术开发者、需命令行控制Ollama
    普通用户、内容创作LM Studio
    需要灵活脚本化操作Ollama
    追求图形化体验LM Studio
    重视开源与可控性Ollama
    快速试用与界面管理LM Studio

    Ollama 和 LM Studio 都可以作为个人 PC 上运行本地语言模型的有效方案。前者面向技术用户,提供完整的 CLI 与 API 控制能力,适合复杂工作流集成与开发使用;后者主打易用与界面化,适合内容生成和日常交互使用。两者不冲突,可并存使用,根据不同任务切换工具。

  • Ollama 安全加固措施

    Ollama 安全加固措施

    为了保护在公网上运行的 Ollama 服务并限制访问,可以采取以下措施:

    方法一:通过防火墙限制

    Linux系统 使用 ufw 防火墙

    1. 检查 Ollama 默认监听的端口(通常是 11434)。
    2. 配置 ufw 只允许指定 IP 访问 11434 端口:
    # 允许指定 IP 访问 11434 端口
    ufw allow from <指定IP> to any port 11434 proto tcp
    
    # 拒绝其他所有 IP 访问 11434 端口
    ufw deny in to any port 11434 proto tcp

    <指定IP> 替换为允许访问的 IP 地址(如 192.168.1.100)。完成后,重新加载防火墙规则:

    ufw reload

    确保 ufw 已启用:

    ufw enable

    Windows 系统(使用 Windows 防火墙)

    1. 打开“Windows Defender 防火墙” -> “高级设置”。
    2. 创建一个新的“入站规则”,选择端口 11434,协议为 TCP。
    3. 在“范围”选项中,指定允许访问的远程 IP 地址。
    4. 保存并应用规则,其他未指定的 IP 将被阻止。

    方法二:修改 Ollama 监听地址(配合防火墙)

    默认情况下,Ollama 可能监听 0.0.0.0(所有接口)。你可以将其改为仅监听本地接口(127.0.0.1),然后通过反向代理(如 Nginx)控制访问。

    设置环境变量 OLLAMA_HOST

    Linux

    /etc/systemd/system/ollama.service 中添加:

    Environment="OLLAMA_HOST=127.0.0.1:11434"

    然后重启ollama服务

    systemctl daemon-reload
    systemctl restart ollama

    Windows

    在系统环境变量中添加 OLLAMA_HOST=127.0.0.1:11434,然后重启 Ollama 服务。

    通过配置Nginx反向代理,在代理层限制 IP:

    server {
        listen 80;
        location / {
            proxy_pass http://127.0.0.1:11434;
            allow <指定IP>;  # 替换为允许的 IP
            deny all;        # 拒绝其他 IP
        }
    }

    重启 Nginx:

    systemctl restart nginx

    方法三:使用 VPN 或内网访问

    将 Ollama 部署在本地网络中,通过 VPN连接到服务器,避免直接暴露在公网上。仅允许 VPN 内的 IP 访问服务。

  • 本地部署Gemma3,Ollama与Open WebUI部署教程详解

    Ollama部署Gemma3 模型并使用 Open WebUI 进行 Web 访问

    1. 安装 Ollama

    Ollama 是一个用于运行大型语言模型的工具。

    支持的操作系统

    • Windows
    • Linux
    • macOS

    下载和安装:

    2. 安装 Gemma3 模型

    Ollama 安装完成后,您可以使用以下命令下载并运行 Gemma3 模型。

    文本模型:

    • 1B 参数模型(32k 上下文窗口):
    ollama run gemma3:1b

    多模态模型(视觉):

    • 4B 参数模型(128k 上下文窗口):
    ollama run gemma3:4b
    • 12B 参数模型(128k 上下文窗口):
    ollama run gemma3:12b
    • 27B 参数模型(128k 上下文窗口):
    ollama run gemma3:27b
    • 运行上述命令之一将自动下载并启动相应的 Gemma3 模型。

    3. 安装 Open WebUI

    Open WebUI 提供了一个用户友好的 Web 界面,用于与 Ollama 运行的模型进行交互。

    使用 Conda 安装:

    1.创建 Conda 环境:

    conda create -n open-webui python=3.11
    1. 激活环境:
    conda activate open-webui
    1. 安装 Open WebUI:
    pip install open-webui
    1. 启动服务器:
    open-webui serve

    更新 Open WebUI:

    • 要将 Open WebUI 更新到最新版本,请运行:
    pip install -U open-webui

    4. 配置并启动 Open WebUI 以连接 Ollama

    访问 Open WebUI:

    • 安装完成后,在 Web 浏览器中访问以下地址:
    • http://localhost:8080/

    配置 Ollama 连接:

    • Open WebUI 应该会自动检测到本地运行的 Ollama 实例。
    • 如果需要手动配置,请在 Open WebUI 的设置中查找 Ollama 连接选项。
    • 确保 Open WebUI 已正确配置为使用您已安装的 Gemma3 模型。

    开始使用:

    • 现在,您可以使用 Open WebUI 的界面与 Gemma3 模型进行交互。您可以输入文本提示,并根据所选模型(文本或多模态)获得相应的响应。
  • OLLAMA 安装与配置指南

    OLLAMA 安装与配置指南

    1. 什么是 LLM(大语言模型)

    大语言模型(LLM,Large Language Model)是一类基于深度学习的人工智能模型,专门用于自然语言处理(NLP)任务。这些模型通过大规模数据训练,具备强大的文本理解、生成和推理能力。

    LLM 具有以下特点:

    • 大规模参数:通常拥有数十亿甚至上千亿的参数,使其能够处理复杂的语言任务。
    • 多任务适应性:可以用于文本生成、翻译、问答、代码补全等任务。
    • 上下文理解能力:可以根据上下文生成连贯且符合语境的文本。
    • 自我学习能力:能够通过微调适应特定领域的应用。

    常见的大语言模型包括 OpenAI 的 GPT 系列、Meta 的 LLaMA 系列以及其他主流开源模型。

    2. 为什么使用 OLLAMA

    OLLAMA 是一个强大的 AI 模型管理和运行工具,提供了高效、便捷的 LLM 部署方式,主要优势包括:

    • 简易部署:支持快速安装和配置,适合开发者和研究人员。
    • 高效运行:优化的推理性能,减少计算资源占用,提高响应速度。
    • 灵活扩展:支持多个模型的下载和运行,满足不同任务需求。
    • 跨平台支持:兼容 Windows、Linux 和 macOS,适用于不同开发环境。

    3. 安装 OLLAMA

    可以通过以下链接下载并安装 OLLAMA:
    OLLAMA 官方网站

    4. 下载模型

    安装完成后,可以从 OLLAMA 官方库中下载所需的 AI 模型:
    OLLAMA 模型库

    使用以下命令运行指定的模型,例如 llama3.3 70B 版本:

    ollama run llama3.3:70b
    

    5. Windows 环境变量配置

    在 Windows 系统中,可以通过环境变量配置 OLLAMA 运行环境,设置如下:

    # 指定模型存储路径
    OLLAMA_MODELS=D:\ollama\models
    
    # 允许跨域访问
    OLLAMA_ORIGINS=*
    
    # 允许外部访问 OLLAMA
    OLLAMA_HOST=0.0.0.0
    

    配置完成后,请重启系统或终端以使环境变量生效。

    6. 安装 Cherry Studio 客户端

    Cherry Studio 是一款支持 OLLAMA 的 AI 开发工具。安装 Cherry Studio 后,可启用 OLLAMA 支持并配置下载的模型。