本地运行性能超越 OpenAI Text-Embedding-Ada-002 的 Embedding 服务,太方便了!


ollama 是一款超级实用的工具,让你能够在本地轻松运行 llama 2、mistral、gemma 等开源模型。本文我将介绍如何使用 ollama 实现对文本的向量化处理。如果你本地还没有安装 ollama,可以阅读这篇文章。

本文我们将使用 nomic-embed-text[2] 模型。它是一种文本编码器,在短的上下文和长的上下文任务上,性能超越了 OpenAI text-embedding-ada-002 和 text-embedding-3-small。

启动 nomic-embed-text 服务

当你已经成功安装好 ollama 之后,使用以下命令拉取 nomic-embed-text 模型:

ollama pull nomic-embed-text

待成功拉取模型之后,在终端中输入以下命令,启动 ollama 服务:

ollama serve

之后,我们可以通过 curl 来验证 embedding 服务是否能正常运行:

curl http://localhost:11434/api/embeddings -d '{"model": "nomic-embed-text","prompt": "The sky is blue because of Rayleigh scattering"}'

使用 nomic-embed-text 服务

接下来,我们将介绍如何利用 langchainjs 和 nomic-embed-text 服务,实现对本地 txt 文档执行 embeddings 操作。相应的流程如下图所示:

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

本地运行性能超越 OpenAI Text-Embedding-Ada-002 的 Embedding 服务,太方便了!图片

1.读取本地的 txt 文件

import { TextLoader } from "langchain/document_loaders/fs/text";async function load(path: string) {const loader = new TextLoader(path);const docs = await loader.load();return docs;}

在以上代码中,我们定义了一个 load 函数,该函数内部使用 langchainjs 提供的 TextLoader 读取本地的 txt 文档。

2.把 txt 内容分割成文本块

import { RecursiveCharacterTextSplitter } from "langchain/text_splitter";import { Document } from "langchain/document";function split(documents: Document[]) {const splitter = new RecursiveCharacterTextSplitter({chunkSize: 500,chunkOverlap: 20,});return splitter.splitDocuments(documents);}

在以上代码中,我们使用 RecursiveCharacterTextSplitter 对读取的 txt 文本进行切割,并设置每个文本块的大小是 500。

3.对文本块执行 embeddings 操作

const EMBEDDINGS_URL = "http://127.0.0.1:11434/api/embeddings";async function embedding(path: string) {const docs = await load(path);const splittedDocs = await split(docs);for (let doc of splittedDocs) {const embedding = await sendRequest(EMBEDDINGS_URL, {model: "nomic-embed-text",prompt: doc.pageContent,});console.dir(embedding.embedding);}}

在以上代码中,我们定义了一个 embedding 函数,在该函数中,会调用前面定义的 load 和 split 函数。之后对遍历生成的文本块,然后调用本地启动的 nomic-embed-text embedding 服务。其中 sendRequest 函数用于发送 embeding 请求,它的实现代码很简单,就是使用 fetch API 调用已有的 REST API。

Machine Translation Machine Translation

聚合多个来源的AI翻译

Machine Translation 49 查看详情 Machine Translation
async function sendRequest(url: string, data: Record<string, any>) {try {const response = await fetch(url, {method: "POST",body: JSON.stringify(data),headers: {"Content-Type": "application/json",},});if (!response.ok) {throw new Error(`HTTP error! status: ${response.status}`);}const responseData = await response.json();return responseData;} catch (error) {console.error("Error:", error);}}

接着,我们继续定义一个 embedTxtFile 函数,在该函数内部直接调用已有的 embedding 函数并添加相应的异常处理。

async function embedTxtFile(path: string) {try {embedding(path);} catch (error) {console.dir(error);}}embedTxtFile("langchain.txt")

最后,我们通过 npx esno src/index.ts 命令来快速执行本地的 ts 文件。若成功执行 index.ts 中的代码,在终端将会输出以下结果:

本地运行性能超越 OpenAI Text-Embedding-Ada-002 的 Embedding 服务,太方便了!图片

其实,除了使用上述的方式之外,我们还可以直接利用 @langchain/community 模块中的 [OllamaEmbeddings](https://js.langchain.com/docs/integrations/text_embedding/ollama "OllamaEmbeddings") 对象,它内部封装了调用 ollama embedding 服务的逻辑:

import { OllamaEmbeddings } from "@langchain/community/embeddings/ollama";const embeddings = new OllamaEmbeddings({model: "nomic-embed-text", baseUrl: "http://127.0.0.1:11434",requestOptions: {useMMap: true,numThread: 6,numGpu: 1,},});const documents = ["Hello World!", "Bye Bye"];const documentEmbeddings = await embeddings.embedDocuments(documents);console.log(documentEmbeddings);

本文介绍的内容涉及开发 RAG 系统时,建立知识库内容索引的处理过程。如果你对 RAG 系统还不了解的话,可以阅读相关的文章。

参考资料

[1]Ollama: https://ollama.com/

[2]nomic-embed-text: https://ollama.com/library/nomic-embed-text

以上就是本地运行性能超越 OpenAI Text-Embedding-Ada-002 的 Embedding 服务,太方便了!的详细内容,更多请关注其它相关文章!


# 如果你  # 德化短视频seo优化  # seo证书考试  # 网站建设方案有哪几种  # 广告 模型网站推广方式  # 嘉兴电商网站建设费用  # 常德专业网站建设优势  # 企业推广网站哪个好用  # SEO基础会计转行面试  # 中山精品网站建设招商  # 辉县网站建设源码  # 让你  # 还没有  # 模型  # 文档  # 中国  # 上海  # 开源  # 丰田  # 便了  # 中国科学院  # type  # llama  # langchain  # openai  # 性能 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 用AI技术点亮老照片:Deep Nostalgia带给照片新生动感  严打“黑飞”,无人机检测反制设备护航大运会净空安全  AI和ML推动联网设备的增长  从医疗康复外骨骼到通用人形机器人,傅利叶智能推动核心技术升级  人工智能赋能无人驾驶:商业化进程再提速  微盟宣布联合腾讯云共建行业大模型:加快激活AI大模型智能应用  黄仁勋:5年前,我们对AI抱有巨大期望  会模仿笔迹的AI,为你创造专属字体  如何用Transformer BEV克服自动驾驶的极端情况?  再也不怕「视频会议」尬住了!谷歌CHI顶会发布新神器Visual Captions:让图片做你的字幕助手  马斯克发推讽刺人工智能,机器学习本质是统计?  稿见AI助手:提升写作效率与质量的必备工具  谷歌借AI打破十年排序算法封印,每天被执行数万亿次,网友却说是最不切实际的研究?  Goodnotes 6推出,带来多项全新AI功能,让电子笔记更智能  AI赋能艺术 超现实达利奇幻之旅在沪开启  OpenAI 静默关闭 AI 文本检测工具,准确率仅为 26%  商业智能决策技术助力降本增效,世界人工智能大会举办商业AI高峰论坛  12页线性代数笔记登GitHub热榜,还获得了Gilbert Strang大神亲笔题词  宇宙探索下一阶段,机器代替人类,AI会在太空探索中取代人类吗?  猿辅导发布最新SaaS业务进展公告:Motiff UI设计工具推出三项新的AI功能  英特尔张宇:边缘计算在整个AI生态系统中扮演重要角色  航拍无人机怎么选?大疆无人机盘点推荐  谷歌推出 SAIF 框架,倡导安全环境下探索和发展人工智能  人工智能“Aria”现身 Opera浏览器100版本更新:新功能“标签岛”  让AI助手带您轻松愉快地享受写作之旅  报告称 70% 程序员已使用各种 AI 工具编程  生成式AI与云结合,机遇与挑战并存  盘古大模型3.0正式发布 AI开发正走向新“工业化开发模式”  华为AI大模型将融入HarmonyOS 4  OpenAI大神Karpathy最新分享:为什么OpenAI内部对AI Agents最感兴趣  水路两栖艇、消防灭火机器人……这个展览“黑科技”抢眼  Meta将VR头显最低年龄限制从13岁降至10岁  探索人工智能在居家养老方面的应用  MiracleVision视觉大模型上线时间  爱设计PPT发布第二代AI一键生成PPT产品:智能、个性化、自动化  腾讯企点客服接待与营销分析能力升级!企业操作更高效、人机交互更智能  OpenAI宣布组建新团队 以控制“超级智能”人工智能  轻量级的深度学习框架Tinygrad  华为HarmonyOS 4将集|成人|工智能大型模型  国网辉南供电:无人机空中巡检 全力护航端午佳节  Prompt解锁语音语言模型生成能力,SpeechGen实现语音翻译、修补多项任务  微软更新服务协议,以防止通过AI服务进行逆向工程和数据抓取  纪录片 《寻找人工智能》全集1080P超清  “三夏”农忙保障用电,无人机高空巡视高压线  昇腾AI大模型训推一体化解决方案将在WAIC发布  美图设计室2.0使用教程  新闻传闻:迪士尼可能采用人工智能来控制电影制作成本  配 3D 机器人头像,谷歌展示全新安卓 LOGO  沐曦首款AI推理GPU亮相:INT8算力达160TOPS!  【首发】首款“消化内镜手术机器人”进入临床尾声,ROBO医疗获数千万元A轮融资 

 2024-04-15

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.