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
英文地址,請注明出處:http://en.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…