开源大模型部署教程:internlm2-chat-1.8b在Ollama中启用OpenAI兼容API

想在自己的电脑上跑一个智能对话助手,但又觉得调用在线API太贵,或者担心数据隐私?今天,我来带你手把手搞定这件事。我们将把一个名为 InternLM2-Chat-1.8B 的轻量级开源大模型,通过 Ollama 这个神器部署到本地,并且让它支持像调用ChatGPT官方API一样的方式来使用。整个过程非常简单,即使你是刚接触AI部署的新手,也能跟着一步步完成。

简单来说,Ollama就像是一个“模型应用商店”,让你能一键下载和运行各种开源大模型。而InternLM2-Chat-1.8B,则是一个表现相当不错的“小模型”,它来自上海人工智能实验室的“书生·浦语”系列,虽然只有18亿参数,但对话能力、逻辑推理都挺能打,关键是它对电脑配置要求不高。

学完这篇教程,你将能:

  1. 在本地成功运行一个属于自己的AI对话模型。
  2. 通过标准的OpenAI API格式来调用它,这意味着你可以直接使用很多现成的AI工具(比如一些开源的聊天界面、自动化脚本)而无需修改代码。
  3. 拥有一个完全在自己掌控下的、免费的AI助手。

准备好了吗?我们开始吧。

1. 准备工作与环境搭建

在开始之前,我们需要确保电脑环境就绪。整个过程主要分为两步:安装Ollama,然后通过它拉取我们需要的模型。

1.1 安装Ollama

Ollama的安装极其简单,它支持Windows、macOS和Linux。

  • Windows/macOS用户:直接访问 Ollama官网,点击下载对应系统的安装包,像安装普通软件一样完成安装。
  • Linux用户:在终端中执行以下一键安装命令即可。
curl -fsSL https://ollama.com/install.sh | sh

安装完成后,打开你的终端(Windows上是PowerShell或CMD,macOS/Linux是Terminal),输入 ollama --version。如果能看到版本号,说明安装成功。

Ollama安装后会在后台运行一个服务,默认通过 http://localhost:11434 提供API。

1.2 拉取InternLM2-Chat-1.8B模型

模型已经由社区热心成员制作并上传到了Ollama的模型库。我们只需要一条命令就能把它下载到本地。

在终端中执行:

ollama pull internlm2:1.8b

这条命令告诉Ollama:“去把那个叫 internlm2,标签是 1.8b 的模型给我拉下来。” 下载时间取决于你的网速,模型大小约1.8GB,一般几分钟就好。

下载完成后,你可以运行以下命令进行一个简单的测试,看看模型是否正常工作:

ollama run internlm2:1.8b

执行后,你会进入一个交互式对话界面,直接输入问题,比如“你好,介绍一下你自己”,模型就会生成回复。按 Ctrl+D 可以退出这个交互模式。

至此,一个本地的大模型已经跑起来了!但这只是基础玩法。接下来,我们要解锁它的“完全体”——启用OpenAI兼容API。

2. 启用OpenAI兼容API接口

默认情况下,Ollama提供的API接口和OpenAI的格式不太一样。为了让各种基于OpenAI SDK开发的工具能无缝接入我们的本地模型,我们需要让Ollama“模仿”OpenAI的API。

幸运的是,Ollama原生就支持这个功能,只需要在启动时加一个参数。

2.1 以兼容模式启动Ollama

首先,如果你刚才测试的模型还在运行,先按 Ctrl+C 停止它。

然后,使用以下命令重新启动Ollama服务:

ollama serve

注意:在某些系统上,Ollama安装后可能已经作为服务运行了。你可以打开任务管理器(Windows)或活动监视器(macOS)查找 ollama 进程并结束它,然后再执行上面的命令。或者,更简单的方法是,我们直接在一个新的终端窗口运行模型并指定API格式。

2.2 验证API是否生效

Ollama的OpenAI兼容端点位于 http://localhost:11434/v1。我们可以用最直接的 curl 命令来测试它。

打开一个新的终端窗口,输入以下测试命令:

curl http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "internlm2:1.8b",
    "messages": [
      {
        "role": "user",
        "content": "你好,请用一句话介绍你自己。"
      }
    ],
    "stream": false
  }'

这个命令的结构和OpenAI官方的API调用一模一样:

  • model: 指定我们要使用的模型,就是 internlm2:1.8b
  • messages: 对话历史列表,这里我们只发了一条用户消息。
  • stream: 设为 false 表示我们不需要流式输出,等它生成完一次性返回。

如果一切正常,你会看到一串JSON格式的返回结果,其中 choices[0].message.content 字段里就是模型的回复内容。

看到成功的回复,恭喜你!你的本地模型已经成功开启了“OpenAI模式”。现在,任何兼容OpenAI API的客户端都能连接它了。

3. 使用Python客户端进行调用

光用 curl 测试还不够,我们最终是要集成到自己的程序里的。下面我用Python演示如何像调用ChatGPT一样调用我们的本地模型。

3.1 安装OpenAI Python SDK

虽然我们调用的是本地服务,但可以使用官方的 openai 库,因为它只是一个遵循相同协议的客户端。

在终端中运行:

pip install openai

3.2 编写调用代码

创建一个新的Python文件,比如叫做 local_ai_chat.py,然后写入以下代码:

from openai import OpenAI

# 关键步骤:将客户端指向本地的Ollama服务
client = OpenAI(
    base_url="http://localhost:11434/v1", # Ollama的OpenAI兼容端点
    api_key="ollama", # 这里可以随便填,Ollama不验证,但不能为空
)

# 发起一次聊天补全请求
response = client.chat.completions.create(
    model="internlm2:1.8b", # 指定模型
    messages=[
        {"role": "system", "content": "你是一个乐于助人的AI助手,回答要简洁明了。"},
        {"role": "user", "content": "周末去爬山需要准备哪些物品?请列出5项。"}
    ],
    stream=False, # 非流式输出
    max_tokens=200, # 限制生成的最大长度
)

# 打印模型的回复
print("AI回复:")
print(response.choices[0].message.content)

# 你也可以查看完整的响应结构
# print(response)

代码解读

  1. 初始化 OpenAI 客户端时,我们把 base_url 从默认的 https://api.openai.com 改成了我们本地的 http://localhost:11434/v1
  2. api_key 随便填一个非空字符串即可,因为Ollama的本地服务通常不进行鉴权。
  3. messages 里,我们添加了一个 system 角色消息来设定AI的行为,这可以让它的回答更符合我们的期望。
  4. 运行这个脚本,你就会看到模型生成的爬山物品清单。

3.3 尝试流式输出

流式输出可以让回答一个字一个字地显示出来,体验更好,尤其生成长文本时。修改一下上面的调用代码:

response = client.chat.completions.create(
    model="internlm2:1.8b",
    messages=[
        {"role": "user", "content": "给我写一个关于星辰大海的简短小故事,大约100字。"}
    ],
    stream=True, # 启用流式输出
    max_tokens=150,
)

print("故事开始:")
for chunk in response:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="", flush=True) # 逐字打印
print("\n--- 故事结束 ---")

运行这段代码,你会看到故事是逐渐生成的,而不是等待全部生成完再一次性显示。

4. 进阶技巧与常见问题

掌握了基本调用后,我们来看看如何用得更好,以及遇到问题怎么办。

4.1 调整模型参数以获得更好效果

就像烹饪要控制火候,调用模型时也可以通过参数来调整它的“性格”和输出质量。在 client.chat.completions.create 方法里可以设置:

  • temperature (默认~0.8): 控制随机性。值越低(如0.2),回答越确定、保守;值越高(如1.2),回答越随机、有创意。对于事实性问答,建议调低;对于创意写作,可以调高。
  • top_p (默认1.0): 另一种控制随机性的方法,通常和 temperature 二选一即可。
  • max_tokens: 限制单次生成的最大长度(token数)。1个token约等于0.75个英文单词或半个中文汉字。根据需要设置,防止生成过长内容。

示例:让回答更专注、更确定。

response = client.chat.completions.create(
    model="internlm2:1.8b",
    messages=[{"role": "user", "content": "Python中如何读取一个文本文件?"}],
    temperature=0.3, # 降低随机性,让回答更精准
    max_tokens=100,
)

4.2 常见问题与排查

  • 连接被拒绝:运行 curl 或Python代码时提示连接错误。
    • 检查Ollama服务:确保 ollama serve 正在运行,并且没有报错。
    • 检查端口:确认Ollama是否运行在 11434 端口。可以在浏览器访问 http://localhost:11434,如果看到Ollama的欢迎信息,说明服务正常。
  • 模型找不到:API返回错误,提示模型不存在。
    • 确认模型名称:使用 ollama list 命令查看本地已下载的模型列表,确认 internlm2:1.8b 在其中。
    • 注意拼写:API调用中的模型名必须和 ollama list 显示的名称完全一致。
  • 回复速度慢或内容奇怪
    • 检查硬件:InternLM2-1.8B虽然小巧,但在CPU上运行仍可能较慢。如果有NVIDIA显卡,可以确保Ollama正确识别并使用了GPU加速(安装时通常会自动配置)。
    • 调整参数:如果回复逻辑混乱,尝试将 temperature 调低。
    • 优化提示词:在 system 消息或 user 消息中给出更清晰、具体的指令。

4.3 探索其他应用方式

一旦API配置好,你的想象力就是极限:

  1. 接入开源聊天界面:比如 Chatbot UI, Open WebUI 等,这些项目通常只需要你修改一个环境变量(OPENAI_API_BASE)就能指向你的本地Ollama服务,瞬间获得一个漂亮的ChatGPT-like界面。
  2. 集成到自动化脚本:用Python写脚本,让AI自动处理邮件摘要、数据报告初稿、代码注释生成等任务。
  3. 作为其他应用的后端:为你自己开发的小工具、网站提供智能对话能力。

5. 总结

回顾一下,我们今天完成了几件很酷的事:

  1. 轻松部署:利用Ollama,我们几乎零配置地在本地跑起了一个功能不错的开源大模型 InternLM2-Chat-1.8B。
  2. 标准化接口:通过启用Ollama的OpenAI兼容模式,我们获得了一个标准的API端点。这带来的最大好处是 “生态兼容” ,无数为ChatGPT设计的工具、库和代码,现在都能直接为你服务。
  3. 实战编程:我们用Python代码演示了如何像调用远程OpenAI服务一样调用本地模型,包括普通调用和流式输出,还学习了如何调整参数来优化回答质量。

这种方式的优势非常明显:完全免费、数据隐私、低延迟、可离线。虽然1.8B参数模型的性能无法与GPT-4等顶级大模型相比,但对于很多日常问答、文本生成、编程辅助任务来说,它已经是一个强大且可用的工具,更是学习和研究AI应用的绝佳起点。

下一步,你可以尝试拉取Ollama支持的其他模型(比如 llama3.2, qwen2.5),或者探索如何给你的本地助手添加“长期记忆”(向量数据库)。AI的世界就在你的指尖,现在就开始创造吧!


获取更多AI镜像

想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐