使用Ollama
推荐
应用
查看可支持的模型:https://ollama.com/library
- 查看运行中的模型
ollama ps
- 停止模型
方法1: kill -9 端口号
方法2: 关闭ollama的窗口
- 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()
- 对接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("你好,请介绍自己"))
- 文档问答【RAG】
- 加载文档
LangChain 的 WebBaseLoader 来从任何网页加载文本。
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'])
随机推荐
- HAL+CubeIDE,STM32F407ZGT6正点原子探索者,舵机驱动,从零开始
CubeIDE_HAL库_从零开始玩舵机 1.材料准备 开发板:正点原子STM32F407ZGT6探索者 舵机:SG90 舵机线材分辨:褐色 / 红色 / 橘黄色 -- GND / VCC / PWM ...
- 2024ICPC 武汉邀请赛题解 更新至 8 题
目录 Preface Problem I. 循环苹果串 Problem K. 派对游戏 Problem B. 无数的我 Problem F. 订制服装 Problem E. 回旋镖 Problem D ...
- 鸿蒙NEXT自定义组件:太极Loading
[引言](完整代码在最后面) 本文将介绍如何在鸿蒙NEXT中创建一个自定义的"太极Loading"组件,为你的应用增添独特的视觉效果. [环境准备] 电脑系统:windows 10 ...
- delphi Image32 图片转换成SVG
image32中有2种算法转换图像为svg,一种是按透明度计算找边缘,另一种是分析像素梯度找边缘,demo代码整理后如下: unit uFrmImageToSVG; interface uses Wi ...
- Nuxt.js 应用中的 webpackConfigs 事件钩子
title: Nuxt.js 应用中的 webpackConfigs 事件钩子 date: 2024/11/20 updated: 2024/11/20 author: cmdragon excerp ...
- 基于 JUnit 的全局单元测试程序
在 Java 程序中,JUnit 是备受开发人员喜爱的单元测试工具.通常,程序员会对每个程序的每个模块写单元测试.对于小型程序来说,程序员只需要手工执行这些单元测试程序就可以,工作量并不大,但是对于中 ...
- An Entry Example of Log4j
The log4j can be configured both programmatically and externally using special configuration files. ...
- SharpZipLib解压.tar.gz
上一篇文章我们说了如何用SharpZipLib来压缩.tar.gz,这篇文章我们来看看如何解压. 直接上代码: using ICSharpCode.SharpZipLib.GZip; using IC ...
- http相关知识要点
1.TCP/IP协议分为哪几层?每一层主要作用是什么?为什么要分层? 应用层 传输层 网络层 数据链路层 2.HTTP请求有哪些方式? GET:用于从服务器获取资源.不会改变资源状态,无副作用,幂等. ...
- Taro微信小程序获取Tab页可视区域高度
前情 公司有自己的小程序项目,因公司主要技术栈为react,所以选择了Taro来开发,Taro是京东出品的多端统一开发解决方案,用来开发小程序也相比用原生开发,在开发体验上好很多,而且还能使用成熟的R ...