使用 Python 调用 Ollama API 并调用 deepseek-r1:8b 模型

使用 Python 调用 Ollama API 并调用 deepseek-r1:8b 模型


ollama 是一个强大的本地大语言模型工具,支持多种开源模型,例如 deepseek-r1:8b。通过 Ollama 的 API,我们可以轻松调用这些模型来完成文本生成、对话等任务。这里记录一下如何使用 Python 调用 Ollama API,并调用 deepseek-r1:8b 模型生成文本。

准备工作

在开始之前,确保你已经完成以下准备工作:

  1. 安装 Ollama:

    如果你还没有安装 Ollama,可以参考 Ollama 官方文档 进行安装。

    安装完成后,启动 Ollama 服务。默认情况下,API 会在 http://localhost:11434 上运行。

  2. 下载 deepseek-r1:8b 模型:

    使用以下命令下载 deepseek-r1:8b 模型:

    ollama pull deepseek-r1:8b
    
  3. 安装 Python 的 requests 库:

    这里将使用 requests 库来发送 HTTP 请求。如果还没有安装,可以通过以下命令安装:

    pip install requests
    

调用 Ollama API

在此之前可以了解一下每个api大概得作用

API名称 功能描述
Generate 根据输入的提示生成文本,适用于文本生成任务。
Chat 进行对话交互,模拟聊天机器人等场景。
Embeddings 生成文本的嵌入向量,用于文本相似性比较、聚类等任务。
Pull 从 Ollama 服务器下载指定的模型到本地。
List 列出本地已下载的模型,查看当前可用的模型。
Delete 删除本地存储的模型,释放存储空间。
Show 显示模型的详细信息,如参数、版本等。
Copy 复制一个模型到另一个名称,便于创建模型的副本。
Create 基于现有模型创建自定义模型,支持自定义参数和配置。
Health Check 检查 Ollama 服务的运行状态,确认服务是否正常。

使用generate

使用generateapi主要是生成一次内容,这个并没有记录功能,实现代码如下:

# -*- coding: utf-8 -*-
import requests

# Ollama API 的 URL
url = "http://localhost:11434/api/generate"

res 
<think>好的,用户之前已经询问过如何使用LangChain搭建RAG系统,现在他想知道如何结合本地的Ollama部署的embedding模型nomic-embed-text和推理模型deepseek-r1:8b来构建RAG。我需要先回顾之前的回答,看看有没有需要调整的地方,确保这次回答在结构上一致,但针对本地模型进行调整。 首先,用户明确提到了使用Ollama本地部署的两个模型:nomic-embed-text作为embedding模型deepseek-r1:8b作为推理模型。这意味着我需要指导用户如何将这些本地模型集成到LangChain的流程中,替换之前提到的HuggingFaceEmbeddings和OpenAI等云端服务。 接下来,我需要考虑Ollama在LangChain中的支持情况。记得LangChain有Ollama的集成,可以通过Ollama的本地服务来加载模型。所以可能需要使用langchain.llms.Ollama和langchain.embeddings.OllamaEmbeddings相关的模块。 然后,文档加载和处理的步骤应该和之前类似,比如使用PyPDFLoader或WebBaseLoader,这部分不需要改变。文本分割也是一样的,使用RecursiveCharacterTextSplitter,所以这部分可以保持原样。 在向量化与存储部分,之前用的是HuggingFaceEmbeddings,现在需要替换为Ollama提供的nomic-embed-text模型。需要确认Ollama是否支持这个模型,以及如何正确调用。可能需要使用OllamaEmbeddings指定模型名称。 对于推理模型,之前用的是OpenAI,现在要替换为本地Ollamadeepseek-r1:8b。这里需要使用Ollama类来初始化模型确保模型名称正确,同时可能需要调整参数,比如temperature等。 另外,用户可能是在本地环境运行,需要确保Ollama服务已经正确安装运行,且所需的模型已经下载到本地。可能需要提醒用户先通过ollama pull来获取模型。 还要注意代码示例的正确性,比如导入语句是否正确,参数是否匹配。例如,使用OllamaEmbeddings时,可能需要传递base_url参数,如果Ollama服务不在默认的端口上。 另外,用户可能需要了解如何启动Ollama服务,或者是否需要额外的配置步骤。但根据之前的问题,用户可能已经部署好了,所以重点放在如何在LangChain中使用这些模型。 最后,优化策略和应用场景部分可能需要调整,以反映使用本地模型的优势,比如数据隐私、离线使用等,以及可能的性能考虑,比如响应时间和硬件需求。 需要检查是否有潜在的误区,例如模型名称是否正确,Ollama模型库中是否真的有nomic-embed-text和deepseek-r1:8b,或者是否有拼写错误。例如,deepseek-r1是否正确的模型名称,或者是否应为deepseek-r1-8b?需要确认。 总结步骤应该是: 1. 确认Ollama服务运行,模型已下载。 2. 文档加载和分割(同之前)。 3. 使用OllamaEmbeddings加载nomic-embed-text生成向量,存储到FAISS。 4. 配置检索器。 5. 使用Ollamadeepseek-r1:8b作为LLM,构建RAG链。 需要确保代码示例中正确引用了这些模型给出必要的参数,比如base_url如果Ollama服务在非默认位置的话。例如,如果Ollama在本地localhost:11434,可能不需要特别指定,但如果有自定义配置则需要。 可能还需要提醒用户安装必要的依赖,如langchain-community,ollama等,如果之前的回答中没有提到的话。 最后,需要测试代码是否可行,是否存在常见的错误,比如模型名称错误、服务未启动等,在回答中给出相应的提示或解决方案。</think>以下是基于本地Ollama部署的 **nomic-embed-text**(Embedding模型)与 **deepseek-r1:8b**(推理模型)搭建RAG系统的分步指南,重点说明本地模型集成方法: --- ### 前置条件 1. **Ollama已安装**:确保本地已部署Ollama服务([安装文档](https://ollama.ai/)) 2. **模型下载**: ```bash ollama pull nomic-embed-text # 下载Embedding模型 ollama pull deepseek-r1:8b # 下载推理模型 ``` --- ### 分步实现代码 #### 1. 初始化本地模型 ```python from langchain_community.embeddings import OllamaEmbeddings from langchain_community.llms import Ollama # 初始化Embedding模型(nomic-embed-text) embeddings = OllamaEmbeddings( model="nomic-embed-text", # Ollama中注册的模型名称 base_url="http://localhost:11434" # Ollama服务地址 ) # 初始化推理模型deepseek-r1:8b) llm = Ollama( model="deepseek-r1:8b", temperature=0.3, # 控制生成随机性(0-1,值越小越确定) num_ctx=4096 # 上下文窗口大小 ) ``` #### 2. 文档处理与向量化(与云端流程相同) ```python from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter # 加载PDF文档 loader = PyPDFLoader("论文.pdf") documents = loader.load() # 文本分块 text_splitter = RecursiveCharacterTextSplitter( chunk_size=500, chunk_overlap=50 ) splits = text_splitter.split_documents(documents) # 向量存储(使用FAISS) from langchain_community.vectorstores import FAISS vectorstore = FAISS.from_documents(splits, embeddings) ``` #### 3. 构建RAG链 ```python from langchain.chains import RetrievalQA # 创建检索器 retriever = vectorstore.as_retriever(search_kwargs={"k": 3}) # 组装RAG链 rag_chain = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True # 返回参考文档 ) ``` --- ### 关键优化技巧 1. **Embedding模型适配**: - Nomic-embed-text支持**8192 tokens长上下文**,可适当增大`chunk_size` - 若需更高精度,尝试调整`model_kwargs={"device": "cuda"}`(需GPU支持) 2. **推理模型调优**: ```python llm = Ollama( model="deepseek-r1:8b", temperature=0.3, # 降低生成随机性 top_p=0.9, # 控制生成多样性 stop=["<|endoftext|>"] # 添加停止符 ) ``` 3. **性能监控**: ```python # 测试响应速度 import time start = time.time() response = rag_chain.invoke("量子计算的核心优势是什么?") print(f"响应时间: {time.time()-start:.2f}s") ``` --- ### 常见问题解决 | 问题现象 | 解决方案 | |-------------------------|----------------------------------| | `ConnectionError` | 检查Ollama服务是否启动:`ollama serve` | | `Model not found` | 确认模型名称拼写,重新执行`ollama pull` | | 响应速度慢 | 减少`chunk_size`或升级硬件配置 | | 生成内容不相关 | 调整`search_kwargs={"k": 5}`增加检索量 | --- ### 本地部署优势 1. **数据隐私**:所有计算在本地完成,避免敏感数据外传 2. **定制化**:支持自定义微调模型(需使用Ollama Modelfile) 3. **离线运行**:无需互联网连接即可提供服务 通过这种方案,您可以完全基于本地环境构建安全可控的RAG系统,适合企业内网、科研机构等对数据隐私要求高的场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值