使用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'])
随机推荐
- 【性能测试】01基础知识篇-并发用户、RPS、TPS的解读
本文介绍并发用户.RPS.TPS的基本概念以及三者之间的关系. 术语定义 并发用户:在性能测试工具中,一般称为虚拟用户(Virtual User,简称VU),指的是现实系统中操作业务的用户. 说明 并 ...
- gal game 杂谈——前言
gal game 杂谈--前言 大年三十凌晨(早上)打算开始写了吧,作为第一篇先写一些前言好了. 第一次接触gal game还是在B站上看到有人玩<我和她的世界末日>当时觉得挺有意思的,加 ...
- Java虚拟机类加载机制浅谈
Java语言是一种编译后再经过解释器执行的过程, 解释器主要就是如何处理解释Class文件的二进制字节流.JVM主要包含三大核心部分:运行时数据区,类加载器和执行引擎. 虚拟机将描述类的数据从Clas ...
- PHP开源项目之YOURLS
YOURLS是一个开源的PHP的程序,可以利用它来构建属于自己的URL缩短服务,YOURLS还可以集成到WordPress博客中使用. YOURLS 的主要功能: 公开的(Public 任何人都可以用 ...
- WinUI(WASDK)使用BotSharp框架开发多智能体桌面机器人管理助手(生图开关灯不在话下)
前言 大语言模型(Large Language Models, LLMs)近年来在各行各业中展现出了巨大的潜力和影响力.从自然语言处理到自动化客服,从内容生成到智能助手,LLMs正在改变我们与技术互动 ...
- Springboot集成WebSocket实现智能聊天【Demo】
背景 openai 目前越来越流行,其他 ai 产业也随之而来,偶然翻到 openai接口文档,就想着可以调用接口实现智能聊天,接下来就写写我怎么接入 websocket 的过程,文笔不佳,谅解. 接 ...
- 使用nginx 解决开发过程中的跨域问题
遇到的问题 在开发vue 前端程序时,我们会创建多个项目,比如用户管理为一个应用,系统管理为一个应用,这样多个应用势必需要开多个端口,这样问题就来了,我们在登录后会生成一个token,这个token我 ...
- 一个大幅提高开发效率的工具库 WYBasisKit
WYBasisKit (持续更新) WYBasisKit 是做什么的? WYBasisKit 不仅可以帮助开发者快速构建一个工程,还有基于常用网络框架和系统API而封装的各种实用方法.扩展,开发者只需 ...
- 【C++】static 知识整理 【静态与局部静态】
目录 类外 类内 局部静态 local static 类外 类内 类外 C++的静态可以分为两种情况来讨论:在类外和在类内. 对于静态变量/函数,链接将只在内部 (如果不用static,那么在不同文件 ...
- SQLServer创建用户后无法登录,报错18456的解决方式
原因:SQLServer没有设置为混合模式. 解决方法: 服务器本地通过Windows验证,打开SQLServer 右键服务器,选择安全性,选择为混合验证模式,然后重启SQLServer服务即可.