langchain调用本地ollama语言模型和嵌入模型

参考:ollama兼容OpenAIEmbeddings的解决思路

解决代码:

访问embedding模型代码

# 测试以下两个引用都可以
from langchain_openai import OpenAIEmbeddings
#from langchain_community.embeddings import OpenAIEmbeddings 
from typing import List, Optionalclass OllamaCompatibleEmbeddings(OpenAIEmbeddings):def _tokenize(self, texts: List[str], chunk_size: int) -> tuple:"""禁用 Tokenization,直接返回原始文本和索引"""indices = list(range(len(texts)))return (range(0, len(texts), chunk_size), texts, indices)def _get_len_safe_embeddings(self, texts: List[str], *, engine: str, chunk_size: Optional[int] = None) -> List[List[float]]:"""直接传递原始文本,跳过 Token 化步骤"""_chunk_size = chunk_size or self.chunk_sizebatched_embeddings: List[List[float]] = []# 直接遍历原始文本分块for i in range(0, len(texts), _chunk_size):chunk = texts[i: i + _chunk_size]# 关键修改:input 直接使用文本列表response = self.client.create(input=chunk,  # 直接使用原始文本列表model=self.model,  # 显式传递模型参数**{k: v for k, v in self._invocation_params.items() if k != "model"})if not isinstance(response, dict):response = response.model_dump()batched_embeddings.extend(r["embedding"] for r in response["data"])# 跳过空文本处理(Ollama 不需要)return batched_embeddingsasync def _aget_len_safe_embeddings(self, texts: List[str], *, engine: str, chunk_size: Optional[int] = None) -> List[List[float]]:"""异步版本处理逻辑"""_chunk_size = chunk_size or self.chunk_sizebatched_embeddings: List[List[float]] = []for i in range(0, len(texts), _chunk_size):chunk = texts[i: i + _chunk_size]response = await self.async_client.create(input=chunk,model=self.model,**{k: v for k, v in self._invocation_params.items() if k != "model"})if not isinstance(response, dict):response = response.model_dump()batched_embeddings.extend(r["embedding"] for r in response["data"])  # 注意: 实际应为 "embedding"return batched_embeddingsembeddings = OllamaCompatibleEmbeddings(model="bge-m3:latest",openai_api_base='http://localhost:11434/v1',#说明一下,openai会自己拼接成http://127.0.0.1:11434/v1/embeddingsapi_key="ollama",# 任意字符串即可chunk_size=512)
output = embeddings.embed_query("你好")   
print(output)

访问LLM模型代码

from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage# 配置ChatOpenAI类指向本地Ollama API
llm = ChatOpenAI(model_name="deepseek-r1:1.5b",  # 指定Ollama部署的模型名称openai_api_base="http://localhost:11434/v1",  # Ollama API地址api_key="ollama",  # 任意字符串,仅用于兼容格式temperature=0.7,  # 控制输出随机性,0为确定性,1为最大随机性max_tokens=2000,  # 最大生成长度
)# 定义提问函数
def ask_llm(question: str) -> str:"""向本地DeepSeek-R1模型提问并获取回答"""# 创建HumanMessage对象messages = [HumanMessage(content=question)]# 调用模型生成回答response = llm.invoke(messages)# 提取回答内容return response.content# 测试示例
if __name__ == "__main__":question = "请简要介绍量子计算的基本原理"answer = ask_llm(question)print(f"问题: {question}")print("\n回答:")print(answer)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/89828.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/89828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

gitlab私有化部署

以下是整理好的Markdown格式文档,详细描述了从下载镜像、启动镜像、修改external_url以及设置或重置root密码的步骤。 GitLab 安装与配置指南 本文档将指导您完成GitLab的安装和基本配置过程,包括下载镜像、启动容器、修改外部访问URL(external_url)及设…

CCLink IE转ModbusTCP网关配置无纸记录器(上篇)

本研究案例采用CCLink IE转ModbusTCP网关技术,实现了将记录仪数据传输至三菱PLCPLC的过程。具体操作步骤如下所述。在确保无纸记录仪与PT100传感器传感器的连接无误后,应将无纸记录仪与个人计算机(PC)通过以太网线进行连接&#x…

近期工作感想:职业规划篇

最近整理博客时,撞见意外的惊喜——17年刚毕业那会儿写的职业规划,静静躺在回收站里。 重读那些碎碎念,忍不住想笑:那时候的焦虑太真切了,哪敢想后来会遇到这么多大佬,推着我往前一直阴暗爬行😂…

Matlab自学笔记六十四:求解自变量带有约束条件的方程

1.说明 有一些方程由于实际问题的需要,需要设置一些限制约束条件,例如x>0等,若使用Matlab编程求解,首先尝试使用符号运算求解(符号运算可参考文章54:Matlab自学笔记五十四:符号数学工具箱和…

Flutter状态管理篇之ChangeNotifier(二)

目录 前言 一、ChangeNotifier定义 1.ChangeNotifier定义 2.Listenable的定义 二、继承体系 三、核心方法解析 1.类结构与属性分析 1.Listenable的定义 2..核心字段 1.属性解析 1._count 2._listeners 3.为什么不用const [] 4._notificationCallStackDep…

大带宽服务器对于高流量网站的作用

随着科学技术的快速发展,越来越多的网站面临着高流量的访问需求,在同一时间中会有着大量的用户进行访问,同时也提高了该企业的知名度,但是这对于服务器的性能需求也在逐渐增高,而大带宽服务器卓越的性能和稳定的传输能…

2025年算法备案发号规律总结与下半年发号预测

上半年发号规律总结图太糊?可看下方表格(左划看全表)👇今年批次算法备案总批次发布时间所发当批算法材料提交时间段审核周期25年第一批第十批2025/3/122025年1月(春节前)约2个月25年第二批第十一批2025/5/1…

高光谱相机(Hyperspectral Camera)

高光谱相机(Hyperspectral Camera)高光谱相机:是一种可以采集连续、多达上百个窄波段的光谱信息的成像设备。它的核心特征是:每个像素点都拥有一个完整的光谱曲线,类似于“像素级别的光谱仪”。举例:普通彩…

经典排序算法之归并排序(Merge Sort)

归并算法定义:所谓归并排序是指将两个或两个以上有序的数列(或有序表),合并成一个仍然有序的数列(或有序表)。这样的排序方法经常用于多个有序的数据文件归并成一个有序的数据文件。归并排序相比较之前的排…

Linux系统环境下 Node.js 20 安装实践:glibc 2.17 兼容方案与工具链优化

前言:在 CentOS 7.9 的生产环境中,默认搭载的 glibc 2.17 是系统的核心依赖,直接升级它可能引发稳定性风险。而 Node.js 20 作为较新的运行时,其与 glibc 的兼容性长期困扰着开发者:为什么有些场景下 Node.js 20 能直接…

构建一个简单的Java框架来测量并发执行任务的时间

文章目录一、完整代码二、代码解释1、方法签名2、初始化CountDownLatch3、提交任务到执行器4、任务线程的逻辑5、主线程的逻辑详细解释总结以下代码实现了一个简单的框架,用于测量并发执行任务的时间。它使用了Executor来执行任务,并通过CountDownLatch来…

精通 triton 使用 MLIR 的源码逻辑 - 第001节:triton 的应用简介

项目使用到 MLIR,通过了解 triton 对 MLIR 的使用,体会到 MLIR 在较大项目中的使用方式,汇总一下。1. Triton 概述OpenAI Triton 是一个开源的编程语言和编译器,旨在简化 GPU 高性能计算(HPC) 的开发&#…

Python爬虫-政务网站自动采集数据框架

前言 本文是该专栏的第81篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者将详细介绍一个基于政务网站进行自动采集数据的爬虫框架。对此感兴趣的同学,千万别错过。 废话不多说,具体细节部分以及详细思路逻辑,跟着笔者直接往下看正文部分。(附带框架完整代码…

GitHub 趋势日报 (2025年07月19日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图1054shadPS4695n8n361remote-jobs321maigret257github-mcp-server249open_deep_res…

2025开源组件安全工具推荐OpenSCA

OpenSCA是国内最早的开源SCA平台,继承了商业级SCA的开源应用安全缺陷检测、多级开源依赖挖掘、纵深代码同源检测等核心能力,通过软件成分分析、依赖分析、特征分析、引用识别、合规分析等方法,深度挖掘组件中潜藏的各类安全漏洞及开源协议风险…

旅游管理实训基地建设:筑牢文旅人才培养的实践基石

随着文旅产业的蓬勃发展,行业对高素质、强实践的旅游管理人才需求日益迫切。旅游管理实训基地建设作为连接理论教学与行业实践的关键纽带,既是深化产教融合的重要载体,也是提升旅游管理专业人才培养质量的核心抓手。一、旅游管理实训基地建设…

网络爬虫的相关知识和操作

介绍 爬虫的定义 爬虫(Web Crawler)是一种自动化程序,用于从互联网上抓取、提取和存储网页数据。其核心功能是模拟人类浏览行为,访问目标网站并解析页面内容,最终将结构化数据保存到本地或数据库。 爬虫的工作原理 …

【vue-6】Vue3 响应式数据声明:深入理解 ref()

在 Vue3 的 Composition API 中,ref() 是最基础也是最常用的响应式数据声明方式之一。它为开发者提供了一种简单而强大的方式来管理组件状态。本文将深入探讨 ref() 的工作原理、使用场景以及最佳实践。 1. 什么是 ref()? ref() 是 Vue3 提供的一个函数&…

HTML常用标签汇总(精简版)

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>简单标记</title> </head><body>&…

【.net core】支持通过属性名称索引的泛型包装类

类/// <summary> /// 支持通过属性名称索引的泛型包装类 /// </summary> public class PropertyIndexer<T> : IEnumerable<T> {private T[] _items;private T _instance;private PropertyInfo[] _properties;private bool _caseSensitive;public Prope…