首页 > 其他分享 >使用Ollama

使用Ollama

时间:2024-07-25 22:52:45浏览次数:13  
标签:text langchain 使用 print import model Ollama

推荐

  1. Ollama 本地运行大模型(LLM)完全指南
  2. Ollama中文学习

应用

查看可支持的模型:https://ollama.com/library

  1. 查看运行中的模型
ollama ps
  1. 停止模型
方法1: kill -9 端口号

方法2: 关闭ollama的窗口
  1. API调用模型
  • 启动模型
  • 单次调用模型
from ollama import Client
import time

def llm(model, message):
  client = Client(host='http://localhost:11434')
  response = client.chat(model=model, messages=[
    {
      'role': 'user',
      'content': message,
    },
  ])
  return response['message']['content']

start = time.time()
res = llm('qwen2', '您好,请介绍一下自己')
end = time.time()
print(res)
print(f'time: {end-start} s')
  • 多次调用模型
import json
import requests

model = "qwen2"
def chat(messages):
    r = requests.post(
        "http://0.0.0.0:11434/api/chat",
        json={"model": model, "messages": messages, "stream": True},
    )
    r.raise_for_status()
    output = ""
    for line in r.iter_lines():
        body = json.loads(line)
        if "error" in body:
            raise Exception(body["error"])
        if body.get("done") is False:
            message = body.get("message", "")
            content = message.get("content", "")
            output += content
            print(content, end="", flush=True)

        if body.get("done", False):
            message["content"] = output
            return message
def main():
    messages = []
    while True:
        user_input = input("Enter a prompt: ")
        if not user_input:
            exit()
        print()
        messages.append({"role": "user", "content": user_input})
        message = chat(messages)
        messages.append(message)
        print("\n\n")

if __name__ == "__main__":
    main()
  1. 对接langchain
  • 安装langchain
pip install langchain

pip install -U langchain-community
  • langchain启动模型
from langchain.llms import Ollama
ollama = Ollama(base_url='http://localhost:11434',model="qwen2")
print(ollama("你好,请介绍自己"))
  1. 文档问答【RAG】
  • 加载文档

LangChainWebBaseLoader 来从任何网页加载文本。

from langchain.document_loaders import WebBaseLoader

loader = WebBaseLoader("https://www.gutenberg.org/files/1727/1727-h/1727-h.htm")

data = loader.load()
  • 选择向量库和嵌入模型

向量库:pip install chromadb

嵌入模型:ollama run nomic-embed-text

from langchain.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import Ollama

# 链接模型
ollama = Ollama(base_url='http://localhost:11434',model="qwen2")

# 加载文档
loader = WebBaseLoader("https://www.ruanyifeng.com/blog/2024/07/weekly-issue-308.html")
data = loader.load()
# print(data)

# 文档分割
text_splitter=RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)

# 文档存到向量库
oembed = OllamaEmbeddings(base_url="http://localhost:11434", model="nomic-embed-text")
vectorstore = Chroma.from_documents(documents=all_splits, embedding=oembed)
  • 通过相似度搜索匹配
from langchain.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import Ollama

# 链接模型
ollama = Ollama(base_url='http://localhost:11434',model="qwen2")

# 加载文档
loader = WebBaseLoader("https://www.ruanyifeng.com/blog/2024/07/weekly-issue-308.html")
data = loader.load()
# print(data)

# 文档分割
text_splitter=RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)

# 文档存到向量库
oembed = OllamaEmbeddings(base_url="http://localhost:11434", model="nomic-embed-text")
vectorstore = Chroma.from_documents(documents=all_splits, embedding=oembed)

# 相似度匹配
question="请问找不到工作,还能读博么?"
docs = vectorstore.similarity_search(question)
print(f'匹配长度:{len(docs)}')
print(f'匹配内容:{docs}')
  • 将问题和文档的相关部分拼接在一起,叫做链,发送给模型
from langchain.document_loaders import WebBaseLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OllamaEmbeddings
from langchain.vectorstores import Chroma
from langchain.chains import RetrievalQA
from langchain.llms import Ollama

# 链接模型
ollama = Ollama(base_url='http://localhost:11434',model="qwen2")

# 加载文档
loader = WebBaseLoader("https://www.ruanyifeng.com/blog/2024/07/weekly-issue-308.html")
data = loader.load()
# print(data)

# 文档分割
text_splitter=RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=0)
all_splits = text_splitter.split_documents(data)

# 文档存到向量库
oembed = OllamaEmbeddings(base_url="http://localhost:11434", model="nomic-embed-text")
vectorstore = Chroma.from_documents(documents=all_splits, embedding=oembed)

# 相似度匹配
question="请问找不到工作,还能读博么?"
docs = vectorstore.similarity_search(question)
print(f'匹配长度:{len(docs)}')
print(f'匹配内容:{docs}')

# 将搜索结果与问题拼接
qachain=RetrievalQA.from_chain_type(ollama, retriever=vectorstore.as_retriever())
res = qachain.invoke({"query": question})

print(res['result'])

标签:text,langchain,使用,print,import,model,Ollama
From: https://www.cnblogs.com/pam-sh/p/18324298

相关文章

  • 使用Apache Camel进行Java企业集成
    使用ApacheCamel进行Java企业集成大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!本文将介绍如何使用ApacheCamel进行Java企业集成,帮助您在企业应用中实现高效的数据交换和流程自动化。一、ApacheCamel简介ApacheCamel是一个强大的开源集成框架,它提......
  • Android开发 - Canvas类与Paint画笔的绘制详解与使用
    Canvas类是什么Android中Canvas类常用于自定义View等操作中,Canvas则如同一张画布可以在上面绘制内容,然后这张画布也可以叠加其他的图层或者平移旋转等操作。Canvas对象的获取方式有两种:一种我们通过重写onDraw方法,View中重写onDraw(Canvascanvas)Canvas对象会被当做参数传递过......
  • Android开发 - Canvas中Path路径的详解与使用
    Path回顾Path类封装复合(多轮廓)几何路径由直线段、二次曲线和三次曲线组成。它可以用画布绘制:canvas.drawPath(path,paint),填充或笔划(基于绘画的样式),或者可以用于剪裁或绘制路径上的文本。Path既是路径,路径走多了就变成一种套路,只要我们会解套,那这种套路就是高速公路。路径走完形......
  • .NET 中使用依赖注入时,如果将 DbContext 注册为单例,会导致一些严重的问题
    在.NET中使用依赖注入时,如果将DbContext注册为单例,会导致一些严重的问题。DbContext设计为一个短生命周期的对象,通常与一个请求(在Web应用中)或一个单元操作(在桌面应用中)相对应。以下是将DbContext注册为单例会导致的问题:1.线程安全问题DbContext不是线程安全的,将其注......
  • Kylin Cube监控:掌握数据立方体的资源使用
    KylinCube监控:掌握数据立方体的资源使用ApacheKylin是一个高性能的分布式分析引擎,它通过构建数据立方体(Cube)来加速对大数据集的查询。随着企业对数据的依赖日益增加,监控Cube的内存和磁盘使用变得尤为重要。本文将深入探讨Kylin是否支持Cube的内存和磁盘使用监控,并提供详......
  • 【unity实战】完美的2D横版平台跳跃玩家控制器,使用InputSystem+有限状态机实现人物加
    最终效果文章目录最终效果前言素材目录结构动画配置检测脚本状态机玩家有限状态机玩家控制脚本定义人物不同状态待机移动跳跃下落状态落地状态墙壁滑行状态蹬墙跳状态蹬墙跳下落状态一段近战攻击状态二段近战攻击状态冲锋状态土狼时间状态攀爬开始状态攀爬进行状态功能......
  • 使用阿里云实现图片存储
    文章目录前言一、为上传图片做准备二、代码实现图片上传添加依赖创建配置类创建工具类图片上传实现前言做一个图片上传的功能,图片存储到阿里云服务器。一、为上传图片做准备首先需要在阿里云充钱在阿里云上找到对象存储oos点击管理控制台点击创建Bucket创......
  • List<T> HashSet<T> ConcurrentBag<T> 通常会在什么场景下使用 性能对比 .container
    List<T>,HashSet<T>,和ConcurrentBag<T>是.NET中常用的集合类型,它们在不同的场景下各有优势。下面我们来详细介绍它们的使用场景、性能比较以及.Contains()方法的性能。ListList<T>是一个动态数组,提供了顺序访问和按索引访问的能力。使用场景:需要维护元素的顺序。......
  • 变量的定义、分类和使用的实例代码
    目录什么是变量变量的定义格式:变量的分类类变量和成员变量的区别什么是变量定义:在程序执行的过程中,有可能发生改变的值(可以简单理解为用来存储数据的盒子)变量的定义格式:数据类型变量名=数据值;inta=2;//这就是变量a的定义语句,赋初始值2变量的分类java中主要有:局......
  • 一文让你开始使用Anki
    文章目录前言主要界面的几个功能牌组添加浏览统计同步注册账号同步的三种情况正常情况冲突情况新增情况五种基本卡片问答题问答题翻转问答题翻转可选问答题输入答案填空题新增卡片相同卡片其他知识文件工具检查媒体清空卡片笔者的话前言anki我是一直想学习的......