当前位置: 首页 > news >正文

mac测试ollama llamaindex

LlamaIndexs 将大语言模型和外部数据连接在一起的工具。大模型prompt有一个长度限制,当外部知识的内容超过这个长度,无法同时将有效信息传递给大模型,因此就诞生了 LlamaIndex。

具体操作就是通过多轮对话的方式不断提纯外部数据,达到在有限的输入长度限制下,传达更多的信息给大模型。

本文在mac平台验证ollama llamaindex,假设ollama已安装,mac安装ollama安装参考

在mac m1基于ollama运行deepseek r1_m1 mac deepseek-r1-CSDN博客

1 llama-index运行环境搭建

环境向量搭建

conda create -n llama-index python=3.12

conda activte llama-index

pip install llama-index

# chromadb依赖

pip install llama-index-llms-ollama

pip install llama-index-embeddings-ollama

pip install llama_index-vector_stores-chroma

# 开源向量存储

pip install chromadb

ollama embedding模型下载

由于mac本地计算能力有限,所以使用qwen3:1.7b小模型。

ollama pull yxl/m3e

ollama pull qwen3:1.7b

ollama list

2 向量本地化 & 自定义查询

以pdf文件"长安的荔枝- 马伯庸.pdf"为例(可以替换为其他PDF书籍),通过llama_index读取为documents,为减少计算量,取前10个子document。

docs/长安的荔枝- 马伯庸.pdf

documents向量本地目录为./chromadb_v0

rm -rf ./chromadb_v0

mkdir -p ./chromadb_v0

向量集合名称为"llama_index_test"

本地向量化代码如下

import chromadb
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, get_response_synthesizer, Settings
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
from llama_index.core.node_parser import SentenceSplitter
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core import StorageContextSettings.embed_model = OllamaEmbedding(model_name="yxl/m3e:latest")
Settings.llm = Ollama(model="qwen3:1.7b", request_timeout=360)documents = SimpleDirectoryReader("docs").load_data()
documents = documents[:10]
print(f"documents: {len(documents)}")db = chromadb.PersistentClient(path="./chromadb_v0")
chroma_collection = db.get_or_create_collection("llama_index_test")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)index = VectorStoreIndex.from_documents(documents, storage_context=storage_context, transformations=[SentenceSplitter(chunk_size=256)]
)print(index)

然后是自定义查询,prompt=“李善德”


import chromadb
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader, get_response_synthesizer, Settings
from llama_index.vector_stores.chroma import ChromaVectorStore
from llama_index.core import StorageContext
from llama_index.llms.ollama import Ollama
from llama_index.embeddings.ollama import OllamaEmbedding
from llama_index.core.retrievers import VectorIndexRetriever
from llama_index.core.query_engine import RetrieverQueryEngineSettings.embed_model = OllamaEmbedding(model_name="yxl/m3e:latest")  
Settings.llm = Ollama(model="qwen3:1.7b", request_timeout=720)  db = chromadb.PersistentClient(path="./chromadb_v1")
chroma_collection = db.get_or_create_collection("llama_index_test")
vector_store = ChromaVectorStore(chroma_collection=chroma_collection)
storage_context = StorageContext.from_defaults(vector_store=vector_store)index = VectorStoreIndex.from_vector_store(vector_store, storage_context=storage_context
)retriever = VectorIndexRetriever(index=index,similarity_top_k=5,  # 返回最相似的前 n 个文档片段
)response_synthesizer = get_response_synthesizer()query_engine = RetrieverQueryEngine(retriever=retriever,response_synthesizer=response_synthesizer,    
)response = query_engine.query("李善德")
print(response)  # 输出查询结果

llama_index的回复如下。

<think>
</think>

李善德是《长安的荔枝》一书中的一位重要角色,他因在官场中表现出的忠诚与谨慎,而逐渐被世人所知。他曾在多个衙署任职,包括司农寺和上林署,负责处理各种政务事务。在一次重要的政务活动中,他被圣人指派为荔枝使,负责运输珍贵的荔枝,这一职位对他来说具有极大的意义。他的经历展现了他在官场中的沉稳与担当,也体现了他在复杂的政治环境中所展现出的智慧与忠诚。

可见,llamaindex,借助外部知识库chromadb,和向量检索,找到知识库中最相关内容,然后通过大模型将这些内容提纯为最终答案。

reference

---

ollama - qwen3:1.7b

https://www.ollama.com/library/qwen3:1.7b

Ollama LLM llamaindex

https://docs.llamaindex.ai/en/stable/examples/llm/ollama/

RAG+Agent 实战 llama-index+ollama 本地环境构建rag、agent

https://blog.csdn.net/yierbubu1212/article/details/142718139

http://www.xdnf.cn/news/1175491.html

相关文章:

  • Ubuntu22.04.5 LTS安装与使用Docker
  • 最长递增子序列(LIS)问题详解
  • dev软件开发阶段的环境代号
  • 9、STM32的启动过程
  • 【STM32】FreeRTOS的移植(一)(详细流程)
  • ​​SBOM 软件供应链安全(转)
  • pandas库
  • 基于YOLOv5+pyQT6的目标检测系统通用项目模板
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(8):自動詞 & 他動詞 「~ている」「~ておく」「~てある」
  • 系统学习算法:专题十四 链表
  • 华为7月23日机考真题
  • 关于在VS2022配置启动项目的问题
  • 表征工程中哪里用到内积 :内积vs余弦相似度--谁更胜一筹?
  • 力扣面试150题--搜索旋转排序数组
  • 开源 Arkts 鸿蒙应用 开发(九)通讯--tcp客户端
  • C#知识点表格大全
  • HDFS写性能优化技巧详解:从理论到实践
  • CSS 基础
  • 【科研绘图系列】R语言绘制黑白填充等显著性标记条形图
  • 网安-SQL注入-sqli-labs
  • 内积(Inner Product)和余弦相似度区别
  • LeetCode热题100--205
  • 糖尿病数据分析:血压与年龄关系可视化
  • 变频器带动电机:全方位解析参数变化
  • SparkSQL 聚合函数 MAX 对 NULL 值的处理
  • Linux -- 进程【下】
  • Python Day22 - 复习日
  • 如何用 Kafka + Redis + 线程池搭建高吞吐异步消息处理架构
  • 数据结构自学Day13 -- 快速排序--“前后指针法”
  • 西门子 S7-1500分布式 I/O通信 :PROFINET IO 与 PROFIBUS DP详解(下)