推荐

  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'])

随机推荐

  1. HAL+CubeIDE,输入输出重定向

    ①将以下代码段复制到usart.c里: /******************************************************************************* ...

  2. CodeForces Round 898 (div 4) H题解析

    CodeForces Round 898 (div 4)H. Mad  City 大致思路    对于有n条边和n个点,说明这个图里面只有一个环 并且两人同时开始和结束移动,所以可以得到当Valeri ...

  3. apisix lua插件开发

    1. 怎么定义ngx自定义变量 ngx.var.custom_var nginx_config: # config for render the template to generate nginx. ...

  4. (Python基础教程之二)在Sublime Editor中配置Python环境

    Python基础教程 在SublimeEditor中配置Python环境 Python代码中添加注释 Python中的变量的使用 Python中的数据类型 Python中的关键字 Python字符串操 ...

  5. golang之基础语法

    Go 是一种强类型语言. 这意味着你声明的每个变量都绑定到特定的数据类型,并且只接受与此类型匹配的值. Go 有四类数据类型: 基本类型:数字.字符串和布尔值 聚合类型:数组和结构 引用类型:指针.切 ...

  6. OS开发笔记(1)——硬盘引导的尝试

    看前提醒:这一系列笔记完全是按照我的思考顺序写的,中间可能会绕弯路 定义 为了避免概念的混淆,我先在这里作一下(仅适用于本文的)名词的解释: 引导程序/boot程序:特指磁盘MBR或者VBR扇区中存放 ...

  7. PythonDay8Advance

    PythonDay8Advance 正则表达式 本身也是一个字符串,其中的字符具有特殊含义,将来我们可以根据这个字符串[正则表达式]去处理其他的字符串,比如可以对其他字符串进行匹配,切分,查找,替换等 ...

  8. 利用Catalina快速重新指定tomcat的代码路径

    思路: 在/tomcat/conf/Catalina/localhost目录下,建立对应的xml文件,来定义. 方法: 比如:想在 Http://localhost/test-api 显示,且代码放在 ...

  9. PM-数据治理-数据资产管理

      在组织中,并非所有的数据都构成数据资产,数据资产是能够为组织产生价值的数据,数据资产的形成需要对数据进行主动管理并形成有效控制.   数据资产管理是规划.控制和提供数据及信息资产的一组业务职能,包 ...

  10. 小程序 + node koa2 session存储验证码碰到最大的坑,(喜极而泣 /狗头)

    问题:session存验证码.本地拿postman测试了半天,都没有问题.   但到了小程序,服务端再获取(ctx.session.verifyCode)就一直提示不存在.undefined 小程序会 ...