# LangChain v0.2+ 与 Ollama 三大核心模型实战指南

环境准备

运行代码前执行安装命令:pip install -U langchain-ollama,同时保证本地 Ollama 服务正常启动,提前拉取项目所需模型。新版 LangChain 将所有 Ollama 相关模型统一整合至langchain_ollama包中,摒弃旧版分散导入模式,调用规则更加统一规范。

一、OllamaLLM 文本补全模型

OllamaLLM属于单轮文本输入输出模型,适用于基础文本生成、内容续写、简单问答场景,无需搭建结构化消息格式。该模型旧版从langchain.llms导入,新版统一整合至langchain_ollamainvoke是 LangChain 新版统一标准调用方法,作用是向已经实例化完成的模型传入请求数据,触发模型执行对应逻辑并返回最终结果。

ini 复制代码
# 新版导入(官方推荐写法)
from langchain_ollama import OllamaLLM
# 旧版导入(现已废弃,不建议使用)
# from langchain.llms import Ollama

# 初始化本地文本补全模型
model = OllamaLLM(model="qwen:7b")
# 调用invoke方法发起请求,完成文本生成
result = model.invoke("讲一个简短的程序员笑话")
print(result)

⚠️ 注意:该模型仅支持无状态单轮交互,不具备角色设定与上下文记忆能力。 初始化嵌入模型(指定模型 + temperature=0,保证向量稳定)

  1. 代码作用:创建嵌入模型对象,准备把文字转向量;

  2. 参数 1:model="mxbai-embed-large",指定使用的嵌入模型名称;

  3. 参数 2:temperature=0(你不懂的点,详细说)

    • temperature随机性控制参数
    • 文本嵌入模型不需要任何随机效果
    • 设为 0 = 保证同一句话,每次转换出来的向量完全一样,稳定不波动,这是文本嵌入的必须要求。

二、ChatOllama 对话聊天模型

ChatOllama是日常开发使用率最高的多轮对话模型,依靠SystemMessage 系统消息HumanMessage 人类消息 搭建对话结构,系统消息用于预设 AI 角色身份与回答规则,人类消息用于填写用户实际提问内容。该模型旧版从langchain.chat_models导入,新版直接从langchain_ollama导入,同样使用invoke方法传入消息列表完成对话交互。

ini 复制代码
# 新版导入(官方推荐写法)
from langchain_ollama import ChatOllama
from langchain_core.messages import SystemMessage, HumanMessage
# 旧版导入(现已废弃,不建议使用)
# from langchain.chat_models import ChatOllama

# 初始化对话模型
chat_model = ChatOllama(model="qwen:7b")
# 组合系统消息与人类消息
messages = [SystemMessage(content="你是简洁易懂的技术助手"),HumanMessage(content="讲解LangChain新版优势")]
# 调用invoke执行对话请求
response = chat_model.invoke(messages)
print(response.content)

⚠️ 注意:该模型仅支持结构化消息列表传参,不支持直接传入纯文本字符串。

三、OllamaEmbeddings 文本嵌入模型

OllamaEmbeddings为标准文本嵌入模型,核心作用是将自然语言文本转化为向量数据,是搭建 RAG 知识库、实现语义搜索、完成文本相似度计算的基础工具。该模型旧版依托langchain_community社区包导入,新版归属于langchain_ollama内置模块;此模型不使用 invoke 调用,专属embed_query处理单条文本,embed_documents处理批量文本,设置temperature=0可保障向量数据结果稳定统一。

python 复制代码
# 新版导入(官方推荐写法)
from langchain_ollama import OllamaEmbeddings
# 旧版导入(现已废弃,不建议使用)
# from langchain_community.embeddings import OllamaEmbeddings

# 初始化文本嵌入模型
embedding_model = OllamaEmbeddings(model="mxbai-embed-large", temperature=0)
# 单条文本向量化处理
single_emb = embedding_model.embed_query("今天天气真好")
print(f"单条向量维度:{len(single_emb)}")
# 批量文本向量化处理
batch_emb = embedding_model.embed_documents(["今天天气真好","LangChain新版使用更便捷"])
print(f"批量向量数量:{len(batch_emb)}")

⚠️ 注意:嵌入模型固定填写temperature=0,不可随意修改,两类向量化方法禁止混用。

模型快速选型总结

  1. 单轮文本生成、简单问答场景:选用OllamaLLM ,核心调用方法invoke
  2. 多轮人机对话、角色定制场景:选用ChatOllama ,核心组件SystemMessageHumanMessage
  3. 文本向量化、知识库检索场景:选用OllamaEmbeddings ,核心方法embed_queryembed_documents

1、单个文本嵌入(model.embed_query,单句话,输出 1 个 1024 维向量)

  1. 代码:res = model.embed_query("今天天气怎么样")

    • res 就是存储结果的变量;
    • 括号里填一句话、一段单独的文本
  2. print(res):打印出来的结果,就是这段文字转换成的向量

  3. 向量格式:长度为 1024 的浮点数列表(一长串小数);

  4. 维度原因:mxbai-embed-large 模型默认输出就是 1024 维向量

  5. 函数特点:只处理单条文本 ,输出一维列表,只返回 1 个向量。


2、批量文本嵌入(model.embed_documents,多句话,输出多个向量)

  1. 代码:model.embed_documents(["文本1","文本2","文本3"])
  2. 函数特点:处理多段文字、多条内容
  3. 场景对应:就像你说的,对应知识库中的多篇资料,一次性批量处理;
  4. 输出结果:多个向量(多串数字) ,输入几段文字,就返回几个对应的向量;
  5. 输出格式:二维列表,包含多个一维向量。
相关推荐
qizayaoshuap9 小时前
# ❌ 井字棋 — 鸿蒙ArkTS Minimax AI算法与博弈系统设计
人工智能·算法·华为·harmonyos
皓月斯语10 小时前
B3842 [GESP202306 三级] 春游 题解
数据结构·c++·算法·题解
atunet10 小时前
树状结构在查询优化中的作用与实现细节7
算法
徐凤年_11 小时前
rog_map参数理解
算法
春日见11 小时前
算法与数据结构----哈希表
数据结构·人工智能·算法·机器学习·自动驾驶·哈希算法·散列表
叩码以求索11 小时前
统计按位或能得到最大值的子集数目(一)
数据结构·算法
tachibana212 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
txzrxz12 小时前
单调队列讲解
数据结构·c++·算法·单调队列
不会就选b13 小时前
算法日常・每日刷题--<快排>4
算法
Keven_1113 小时前
算法札记:树状数组的用途
数据结构·算法