公司动态
利用 API 调用大模型:Ollama 实战指南
1. 引言随着大语言模型LLM的普及开发者越来越多地需要通过 API 来集成和调用模型能力。Ollama 作为一个轻量级、开源的工具能够帮助开发者在本地或服务器上轻松部署和管理大模型并通过简洁的 API 提供调用服务。本文将详细介绍如何利用 Ollama 的 API 来调用大模型涵盖从环境准备到实际调用的完整流程。2. Ollama 简介与安装Ollama 是一个用于在本地运行大语言模型的工具它支持多种开源模型如 Llama 2、Mistral、CodeLlama 等并提供了 RESTful API 和命令行接口方便开发者集成。2.1 安装 Ollama访问 Ollama 官网Ollama下载对应操作系统的安装包或使用命令行安装# macOS / Linux curl -fsSL https://ollama.com/install.sh | sh Windows (通过 Winget) winget install ollama.ollama安装完成后启动 Ollama 服务ollama serve2.2 拉取模型Ollama 安装后需要拉取想要使用的模型。例如拉取 DeepSeek-R1 7B 模型ollama pull deepseek-r1:7b可以通过ollama list查看已下载的模型列表。3. Ollama API 基础Ollama 默认在http://localhost:11434提供 API 服务。主要端点包括/api/generate用于文本生成。/api/chat用于多轮对话。/api/tags获取可用模型列表。/api/show获取模型详细信息。4. 通过 API 调用大模型4.1 文本生成/api/generate使用/api/generate端点进行单次文本补全。以下是一个使用curl的示例curl http://localhost:11434/api/generate -d { model: deepseek-r1:7b, prompt: 请用一句话解释人工智能。, stream: false }如果您想使用 Python 直接运行可以使用以下代码import requests import json # Ollama 【单轮补全接口】和之前 /api/chat 是两套接口 url http://localhost:11434/api/generate payload { model: deepseek-r1:7b, # 使用本地已下载模型 prompt: 请用一句话解释人工智能。, # 直接填写完整提示词 stream: False # 关闭流式输出等待全部生成完一次性返回 } try: # 发送POST请求 response requests.post(url, jsonpayload) response.raise_for_status() # HTTP状态码非200则抛出异常 result response.json() # 字符串转为字典 # ⭐重点generate接口返回内容key叫 response print( 模型回复, result.get(response, 无回复内容)) print( 生成统计) print(f - 总耗时: {result.get(total_duration, 0) / 1_000_000_000:.2f}秒) print(f - 生成token数: {result.get(eval_count, 0)}) except requests.exceptions.ConnectionError: print(❌ 连接失败请确保 Ollama 服务已启动运行 ollama serve) except requests.exceptions.RequestException as e: print(f❌ 请求错误{e}) except json.JSONDecodeError: print(❌ JSON解析失败服务器返回了非JSON格式的响应)4.1.1 代码功能解析这个示例展示了如何使用 Python 调用 Ollama 的/api/generate端点。代码中接口地址指定了 Ollama 的文本生成端点/api/generate模型选择使用deepseek-r1:7b这是一个响应速度较快的轻量级模型提示词设计设置了明确的提示词要求模型用一句话解释人工智能流式控制关闭了流式输出stream: false等待完整响应错误处理添加了全面的错误处理包括连接错误、请求异常和JSON解析错误响应解析正确解析返回的 JSON 响应response字段包含了模型的生成结果性能统计展示了生成统计信息如总耗时和生成的token数4.1.2 关键参数说明model必需参数指定要使用的模型名称prompt必需参数输入给模型的提示词文本stream可选参数控制是否使用流式输出。设置为false时等待完整响应设置为true时逐token返回temperature可选参数控制输出的随机性0.0-1.0值越高输出越随机top_p可选参数核采样参数影响词汇选择的集中度num_predict可选参数限制生成的最大 token 数4.1.3 运行前准备运行此代码前请确保Ollama 服务已启动ollama serve已下载所需模型ollama pull deepseek-r1:7bPython 环境中已安装requests库pip install requests4.1.4 实际应用场景/api/generate端点适用于以下场景文本补全根据给定的提示词生成后续文本代码生成根据需求描述生成代码片段内容创作生成文章、诗歌、故事等创意内容翻译任务将文本从一种语言翻译到另一种语言摘要提取从长文本中提取关键信息摘要4.2 对话聊天/api/chat对于多轮对话场景使用/api/chat端点。请求需要传递消息历史curl http://localhost:11434/api/chat -d { model: deepseek-r1:7b, messages: [ { role: user, content: 你好请介绍一下你自己。 } ], stream: false }如果您想使用 Python 直接运行可以使用以下代码# 导入网络请求库用来发送HTTP请求访问ollama接口 import requests # 导入json工具库这里代码里没直接用到接口会自动序列化 import json # Ollama 本地聊天接口地址 url http://localhost:11434/api/chat # 请求体遵循Ollama官方api规范 payload { model: deepseek-r1:7b, # 指定本地已经拉取好的模型名称 messages: [ # 历史对话上下文列表 {role: user, content: 你好请介绍一下你自己。}, # 用户第一轮提问 {role: assistant, content: 我是DeepSeek-R1一个由深度求索公司开发的大型语言模型。}, # AI上一轮回答 {role: user, content: 你能帮我做什么} # 用户最新问题 ], stream: False # 关键参数False一次性返回完整结果True流式逐字推送打字机效果 } try: # 向ollama服务发送POST请求自动把payload转为json response requests.post(url, jsonpayload) # 如果返回状态码不是200连接成功直接抛出异常进入catch response.raise_for_status() # 将接口返回的字符串转为python字典方便读取内容 result response.json() # 解析模型返回的消息 if message in result: message result[message] print(f {message.get(role, assistant)}: {message.get(content, )}) else: print( 模型回复, result.get(message, {}).get(content, 无回复内容)) # Ollama接口自带性能统计信息 print( 对话统计) # payload里3条历史消息 AI本次新回复所以1 print(f - 消息总数: {len(payload[messages]) 1}) # total_duration单位是纳秒除以 10^9 换算成秒 print(f - 总耗时: {result.get(total_duration, 0) / 1_000_000_000:.2f}秒) # eval_count本次生成输出的token数量 print(f - 生成token数: {result.get(eval_count, 0)}) # 异常捕获区域 except requests.exceptions.ConnectionError: # 无法连接11434端口ollama程序没启动 print(❌ 连接失败请确保 Ollama 服务已启动运行 ollama serve) except requests.exceptions.RequestException as e: # 通用网络请求异常 print(f❌ 请求错误{e}) except json.JSONDecodeError: # ollama返回的数据格式错乱无法转json print(❌ JSON解析失败服务器返回了非JSON格式的响应)4.2.1 代码功能解析这个示例展示了如何使用 Python 调用 Ollama 的/api/chat端点。代码中接口地址指定了 Ollama 的对话聊天端点/api/chat模型选择使用deepseek-r1:7b支持多轮对话的上下文理解消息历史设置了完整的消息数组包含多轮对话历史用户-助手-用户流式控制关闭了流式输出stream: false等待完整响应错误处理添加了全面的错误处理包括连接错误、请求异常和JSON解析错误响应解析正确解析返回的 JSON 响应message字段包含了模型的回复内容对话统计展示了对话统计信息包括消息总数和生成耗时4.2.2 关键参数说明model必需参数指定要使用的模型名称messages必需参数消息历史列表格式为[{role: user, content: ...}, {role: assistant, content: ...}]stream可选参数控制是否使用流式输出。设置为false时等待完整响应设置为true时逐token返回temperature可选参数控制输出的随机性0.0-1.0top_p可选参数核采样参数影响词汇选择的集中度num_predict可选参数限制生成的最大 token 数4.2.3 消息格式详解消息数组中的每个消息对象包含以下字段role消息角色可以是user用户、assistant助手或system系统content消息内容即对话文本消息历史的管理策略上下文窗口模型有固定的上下文长度限制需要合理管理历史消息系统提示可以在消息数组开头添加{role: system, content: ...}来设置系统指令历史截断当对话历史过长时需要截断或总结早期对话内容4.2.4 运行前准备运行此代码前请确保Ollama 服务已启动ollama serve已下载所需模型ollama pull deepseek-r1:7bPython 环境中已安装requests库pip install requests4.2.5 实际应用场景/api/chat端点适用于以下场景智能客服处理用户咨询和问题解答编程助手提供代码编写、调试和优化建议学习辅导回答学习问题提供知识讲解创意对话进行开放式的创意对话和头脑风暴任务规划协助制定计划和分解复杂任务5. 高级配置与参数调优Ollama API 支持多种参数来调整生成效果temperature控制输出的随机性0.0-1.0。top_p核采样参数影响词汇选择的集中度。num_predict限制生成的最大 token 数。示例在请求中加入这些参数{ model: deepseek-r1:7b, prompt: 写一首关于春天的诗。, temperature: 0.7, top_p: 0.9, num_predict: 100, stream: false }6. 常见问题与排查6.1 服务未启动确保 Ollama 服务正在运行ollama serve。6.2 模型未下载使用ollama pull model-name下载所需模型。6.3 端口冲突默认端口 11434 被占用时可通过环境变量OLLAMA_HOST修改。7. 总结Ollama 为开发者提供了一个极其便捷的本地大模型调用方案。通过其清晰的 REST API我们可以轻松地将大模型能力集成到各种应用中。本文介绍了从安装、基础 API 调用到 Python 集成和参数调优的完整流程希望能帮助你快速上手利用 Ollama API 调用大模型。