이것은 Ollama에 대한 심층 분석의 첫 번째 부분이며, 제가 로컬 LLM에 대해 배운 내용과 이를 추론 기반 애플리케이션에 사용할 수 있는 방법입니다. 이 게시물에서는 다음에 대해 배울 것입니다.
LLM(로컬 LLM 포함)의 기본 사항을 이해하려면 여기에서 이 주제에 대한 이전 게시물을 참조하세요.
지역 LLM 공간에서 저는 LMStudio를 처음 접했습니다. 앱 자체는 사용하기 쉽지만 Ollama가 제공하는 단순성과 조작성이 마음에 들었습니다. Ollama에 대해 자세히 알아보려면 여기로 이동하세요.
요약: Ollama는 귀하가 액세스할 수 있는 자체 선별된 모델 목록을 호스팅합니다.
이러한 모델을 로컬 시스템에 다운로드한 다음 명령줄 프롬프트를 통해 해당 모델과 상호 작용할 수 있습니다. 또는 모델을 실행할 때 Ollama는 API 및 Langchain과 같은 기타 라이브러리를 통해 상호 작용할 수 있는 포트 11434(기본값)에서 호스팅되는 추론 서버도 실행합니다.
이 게시물을 기준으로 Ollama에는 임베딩 모델과 같은 카테고리를 포함하는 74개의 모델이 있습니다.
원하는 OS에 맞는 Ollama를 다운로드하세요 . 그런 다음 ollama
명령을 실행하여 작동하는지 확인합니다. 도움말 메뉴가 표시됩니다.
Usage: ollama [flags] ollama [command] Available Commands: serve Start ollama create Create a model from a Modelfile show Show information for a model run Run a model pull Pull a model from a registry push Push a model to a registry list List models cp Copy a model rm Remove a model help Help about any command Flags: -h, --help help for ollama -v, --version Show version information Use "ollama [command] --help" for more information about a command.
모델을 사용하려면 먼저 Dockerhub(과거에 사용한 적이 있는 경우) 또는 ECR(Elastic Container Registry)과 같은 것에서 이미지를 가져오는 것과 마찬가지로 Ollama에서 해당 모델을 "가져와야" 합니다.
Ollama에는 실행을 통해 확인할 수 있는 일부 기본 모델(예: Facebook의 오픈 소스 LLM인 llama2
)이 포함되어 있습니다.
ollama list
Ollama 라이브러리 페이지 에서 상호 작용하려는 모델( phi
라고 가정)을 선택하세요. 이제 다음 명령을 실행하여 이 모델을 풀다운할 수 있습니다.
ollama pull phi
다운로드가 완료되면 다음을 실행하여 모델을 로컬에서 사용할 수 있는지 확인할 수 있습니다.
ollama list
이제 모델을 사용할 수 있으므로 실행할 준비가 되었습니다. 다음 명령을 사용하여 모델을 실행할 수 있습니다.
ollama run phi
답변의 정확성이 항상 최고는 아니지만 다른 모델을 선택하거나 미세 조정을 수행하거나 RAG와 유사한 솔루션을 직접 구현하여 정확성을 향상함으로써 문제를 해결할 수 있습니다.
위에서 설명한 것은 명령줄 프롬프트를 사용하여 Ollama 모델을 사용하는 방법입니다. 그러나 Llama가 실행 중인 추론 서버를 확인하면 포트 11434를 눌러 이에 액세스하는 프로그래밍 방식이 있음을 알 수 있습니다.
Langchain을 사용하여 Ollama 모델에 액세스하려면 다음과 같이 사용할 수 있습니다.
from langchain_community.llms import Ollama from langchain.chains import RetrievalQA prompt = "What is the difference between an adverb and an adjective?" llm = Ollama(model="mistral") qa = RetrievalQA.from_chain_type( llm=llm, chain_type="stuff", retriever=retriever, return_source_documents=True, ) response = qa(prompt)
Ollama의 Modelfile
개념을 사용하여 자신만의 모델 변형을 만들 수도 있습니다. Modelfile에서 구성할 추가 매개변수를 보려면 다음 문서를 참조하세요.
예제 모델 파일 —
# Downloaded from Hugging Face https://huggingface.co/TheBloke/finance-LLM-GGUF/tree/main FROM "./finance-llm-13b.Q4_K_M.gguf" PARAMETER temperature 0.001 PARAMETER top_k 20 TEMPLATE """ {{.Prompt}} """ # set the system message SYSTEM """ You are Warren Buffet. Answer as Buffet only, and do so in short sentences. """
Modelfile이 있으면 다음을 사용하여 모델을 생성할 수 있습니다.
ollama create arjunrao87/financellm -f Modelfile
여기서 financellm
LLM 모델의 이름이고 arjunrao87
ollama.com 사용자 이름(온라인 ollama 레지스트리의 네임스페이스 역할도 함)으로 대체됩니다. 이 시점에서 생성된 모델을 Ollama의 다른 모델처럼 사용할 수 있습니다.
모델을 원격 ollama 레지스트리로 푸시하도록 선택할 수도 있습니다. 이를 실현하려면 다음을 수행해야 합니다.
로컬 LLM을 생성한 후에는 다음을 사용하여 ollama 레지스트리에 푸시할 수 있습니다.
ollama push arjunrao87/financellm
🦄 이제 좋은 부분을 살펴보겠습니다.
Ollama를 사용하려고 노력하는 동안 가장 기분 좋은 발견 중 하나는 제가 발견한 Python 기반 웹 애플리케이션 빌더의 생태계였습니다. Chainlit을 사용하여 ChatGPT와 같은 본격적인 챗봇을 구축할 수 있습니다. 그들의 페이지에 따르면,
Chainlit은 생산 준비가 완료된 대화형 AI를 구축하기 위한 오픈 소스 Python 패키지입니다.
저는 일련의 작업 생성("단계"라고 함), 버튼 및 작업 활성화, 이미지 전송 및 모든 종류의 작업을 포함하여 Chainlit로 수행할 수 있는 작업을 다루기 위해 몇 가지 Chainlit 튜토리얼을 살펴보았습니다. 여기에서 내 여정의 이 부분을 따라갈 수 있습니다.
Chainlit에 익숙해지면 기본적으로 Ollama를 사용하는 간단한 챗봇을 구성하여 (ChatGPT 또는 Claude 대신) 로컬 LLM을 사용하여 채팅할 수 있기를 원했습니다.
50줄 미만의 코드로 Chainlit + Ollama를 사용하여 이를 수행할 수 있습니다. 그거 미친거 아니야?
라이브러리로서의 Chainlit은 사용이 매우 간단합니다. 나는 또한 Ollama를 사용하고 상호 작용하기 위해 Langchain을 사용했습니다.
from langchain_community.llms import Ollama from langchain.prompts import ChatPromptTemplate import chainlit as cl
다음 단계는 chainlit의 @cl.on_chat_start
데코레이터를 사용하여 챗봇의 로딩 화면이 어떻게 보이도록 정의하는 것입니다.
@cl.on_chat_start async def on_chat_start(): elements = [cl.Image(name="image1", display="inline", path="assets/gemma.jpeg")] await cl.Message( content="Hello there, I am Gemma. How can I help you?", elements=elements ).send() .... ....
Message
인터페이스는 Chainlit이 응답을 UI로 다시 보내는 데 사용하는 것입니다. 간단한 content
키를 사용하여 메시지를 구성한 다음 elements
등으로 장식할 수 있습니다. 제 경우에는 사용자가 처음 로그인할 때 이미지를 표시하기 위해 Image
추가했습니다.
다음 단계는 Langchain을 호출하여 Ollama(선택한 모델)를 인스턴스화하고 프롬프트 템플릿을 구성하는 것입니다. cl.user_session
의 사용법은 대부분 사용자 컨텍스트와 기록의 분리를 유지하는 것입니다. 이는 단지 빠른 데모를 실행하기 위한 목적으로만 엄격히 요구되는 것은 아닙니다.
Chain은 사용자 정의 체인을 생성하는 데 사용되는 Runnable
이라는 Langchain 인터페이스입니다. 자세한 내용은 여기에서 읽어보실 수 있습니다.
@cl.on_chat_start async def on_chat_start(): .... .... model = Ollama(model="mistral") prompt = ChatPromptTemplate.from_messages( [ ( "system", "You are a knowledgeable historian who answers super concisely", ), ("human", "{question}"), ] ) chain = prompt | model cl.user_session.set("chain", chain)
이제 챗봇 UI를 갖추고 사용자 입력을 수용할 수 있는 모든 부분이 준비되었습니다. 사용자가 제공하는 프롬프트로 무엇을 합니까? Chainlit의 @cl.on_message
핸들러를 사용하여 사용자가 제공한 메시지로 작업을 수행합니다.
@cl.on_message async def on_message(message: cl.Message): chain = cl.user_session.get("chain") msg = cl.Message(content="") async for chunk in chain.astream( {"question": message.content}, ): await msg.stream_token(chunk) await msg.send()
chain.astream
문서에서는 우리가 봇에 원하는 "응답 비동기 청크의 스트림백"을 제안합니다.
정말 그렇습니다. 몇 가지 가져오기, 몇 가지 기능, 약간의 설탕만 있으면 기능적인 챗봇을 갖게 됩니다.
전체 코드를 보려면 내 GitHub를 참조하세요.
이 콘텐츠가 흥미롭다면 👏 버튼을 누르거나 여기에서 제 뉴스레터를 구독하세요 → https://a1engineering.beehiiv.com/subscribe . 그것은 나에게 어떤 일을 더 많이 또는 더 적게 해야 한다는 피드백을 줍니다! 감사합니다 ❤️
여기에도 게시됨