Closed7
Ollama
Ollamaのはじめ方
Ollamaの開発者のチャンネル
Ollama
ダウンロードしたモデルのリスト
ollama list
Llama2の起動
ollama run llama2
verboseモード
>>> /set verbose
トークン数や推論時間を表示できる
使えるモデル
ggufなどのモデルも使えるがどうやる?
カスタムプロンプト
新しくhogwartsというモデルが作られる。ベースはLlama2なのでモデルは共有されている。
ollama create hogwarts -f ./hogwarts
hogwartz
FROM llama2
PARAMETER temperature 1
SYSTEM """
You are Professor Dumbledore. Answer as Dumbledore, the assistant, only give guidance about Hogwarts and wizardry
"""
モデルの削除
ollama rm hogwarts
LangChainからOllamaを使う
基本
from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
llm = Ollama(model="llama2",
callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]))
llm.invoke("Tell me 5 facts about Roman history:")
プロンプトを使う
from langchain_community.llms import Ollama
from langchain.callbacks.manager import CallbackManager
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
llm = Ollama(model="llama2",
callback_manager=CallbackManager([StreamingStdOutCallbackHandler()]),
temperature=0.9)
prompt = ChatPromptTemplate.from_template("Give me 5 interesting facts about {topic}?")
output_parser = StrOutputParser()
chain = prompt | llm | output_parser
chain.invoke({"topic": "Artificial Intelligence"})
RAG
import bs4
from langchain import hub
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import Chroma
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough
from langchain_community.embeddings import OllamaEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.llms import Ollama
llm = Ollama(model="llama2",
temperature=0)
loader = WebBaseLoader(
web_paths=("https://lilianweng.github.io/posts/2023-06-23-agent/",)
)
docs = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
vectorstore = Chroma.from_documents(documents=splits, embedding=OllamaEmbeddings())
# Retrieve and generate using the relevant snippets of the blog.
retriever = vectorstore.as_retriever()
prompt = hub.pull("rlm/rag-prompt-llama")
def format_docs(docs):
return "\n\n".join(doc.page_content for doc in docs)
rag_chain = (
{"context": retriever | format_docs, "question": RunnablePassthrough()}
| prompt
| llm
| StrOutputParser()
)
rag_chain.invoke("What is Task Decomposition?")
Llama2のテンプレート
prompt = hub.pull("rlm/rag-prompt-llama")
prompt.pretty_print()
================================ Human Message =================================
[INST]<<SYS>> You are an assistant for question-answering tasks. Use the following pieces of retrieved context to answer the question. If you don't know the answer, just say that you don't know. Use three sentences maximum and keep the answer concise.<</SYS>>
Question: {question}
Context: {context}
Answer: [/INST]
カスタムモデルを使いたい
- GGUF形式のモデルをローカルにダウンロード
- モデルファイルを定義
- モデルを作成
ollama create jackalope -f ./jackalope
- モデルを起動
ollama run jackalope
jackalope-7B-GGUF
jackalopeのモデルファイル
FROM ./jackalope-7b.Q6_K.gguf
TEMPLATE """{{- if .System }}
<|im_start|>system {{ .System }}<|im_end|>
{{- end }}
<|im_start|>user
{{ .Prompt }}<|im_end|>
<|im_start|>assistant
"""
SYSTEM """"""
PARAMETER stop <|im_start|>
PARAMETER stop <|im_end|>
Ollamaライブラリから呼び出す
LangChainからも使えるがOllamaのPythonライブラリもある。
from ollama import chat
messages = [
{
"role": "user",
"content": "Why is the sky blue?"
}
]
response = chat("mistral", messages=messages, stream=False)
print(response["message"]["content"])
日本語モデル
システムプロンプトの設定
/set system あなたは親切なアシスタントです。
/save test
このスクラップは2024/04/09にクローズされました