环境准备
运行代码前执行安装命令:pip install -U langchain-ollama,同时保证本地 Ollama 服务正常启动,提前拉取项目所需模型。新版 LangChain 将所有 Ollama 相关模型统一整合至langchain_ollama包中,摒弃旧版分散导入模式,调用规则更加统一规范。
一、OllamaLLM 文本补全模型
OllamaLLM属于单轮文本输入输出模型,适用于基础文本生成、内容续写、简单问答场景,无需搭建结构化消息格式。该模型旧版从langchain.llms导入,新版统一整合至langchain_ollama;invoke是 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:
model="mxbai-embed-large",指定使用的嵌入模型名称; -
参数 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,不可随意修改,两类向量化方法禁止混用。
模型快速选型总结
- 单轮文本生成、简单问答场景:选用OllamaLLM ,核心调用方法
invoke - 多轮人机对话、角色定制场景:选用ChatOllama ,核心组件
SystemMessage、HumanMessage - 文本向量化、知识库检索场景:选用OllamaEmbeddings ,核心方法
embed_query、embed_documents
1、单个文本嵌入(model.embed_query,单句话,输出 1 个 1024 维向量)
-
代码:
res = model.embed_query("今天天气怎么样")res就是存储结果的变量;- 括号里填一句话、一段单独的文本;
-
print(res):打印出来的结果,就是这段文字转换成的向量; -
向量格式:长度为 1024 的浮点数列表(一长串小数);
-
维度原因:
mxbai-embed-large模型默认输出就是 1024 维向量; -
函数特点:只处理单条文本 ,输出一维列表,只返回 1 个向量。
2、批量文本嵌入(model.embed_documents,多句话,输出多个向量)
- 代码:
model.embed_documents(["文本1","文本2","文本3"]) - 函数特点:处理多段文字、多条内容;
- 场景对应:就像你说的,对应知识库中的多篇资料,一次性批量处理;
- 输出结果:多个向量(多串数字) ,输入几段文字,就返回几个对应的向量;
- 输出格式:二维列表,包含多个一维向量。