paint-brush
Cách sử dụng Ollama: Thực hành với LLM địa phương và xây dựng Chatbottừ tác giả@arjunrao1987
34,310 lượt đọc
34,310 lượt đọc

Cách sử dụng Ollama: Thực hành với LLM địa phương và xây dựng Chatbot

từ tác giả Arjun 7m2024/03/14
Read on Terminal Reader

dài quá đọc không nổi

Trong không gian LLM địa phương, lần đầu tiên tôi gặp LMStudio. Mặc dù bản thân ứng dụng này rất dễ sử dụng nhưng tôi thích sự đơn giản và khả năng cơ động mà Ollama mang lại. Để tìm hiểu thêm về Ollama bạn có thể vào đây. tl;dr: Ollama lưu trữ danh sách mô hình được tuyển chọn riêng mà bạn có quyền truy cập. Bạn có thể tải các mô hình này xuống máy cục bộ của mình, sau đó tương tác với các mô hình đó thông qua dấu nhắc dòng lệnh. Ngoài ra, khi bạn chạy mô hình, Ollama cũng chạy một máy chủ suy luận được lưu trữ tại cổng 11434 (theo mặc định) mà bạn có thể tương tác bằng API và các thư viện khác như Langchain.
featured image - Cách sử dụng Ollama: Thực hành với LLM địa phương và xây dựng Chatbot
Arjun  HackerNoon profile picture

Đây là phần đầu tiên của quá trình tìm hiểu sâu hơn về Ollama và những điều tôi đã học được về LLM cục bộ cũng như cách bạn có thể sử dụng chúng cho các ứng dụng dựa trên suy luận. Trong bài đăng này, bạn sẽ tìm hiểu về -


  1. Cách sử dụng Olama
  2. Cách tạo mô hình của riêng bạn trong Ollama
  3. Sử dụng Ollama để xây dựng chatbot


Để hiểu những điều cơ bản về LLM (bao gồm cả LLM địa phương), bạn có thể tham khảo bài viết trước của tôi về chủ đề này tại đây .

Đầu tiên, một số thông tin cơ bản

Trong không gian LLM địa phương, lần đầu tiên tôi gặp LMStudio. Mặc dù bản thân ứng dụng này rất dễ sử dụng nhưng tôi thích sự đơn giản và khả năng cơ động mà Ollama mang lại. Để tìm hiểu thêm về Ollama bạn có thể vào đây .

tl;dr: Ollama lưu trữ danh sách mô hình được tuyển chọn riêng mà bạn có quyền truy cập.


Bạn có thể tải các mô hình này xuống máy cục bộ của mình, sau đó tương tác với các mô hình đó thông qua dấu nhắc dòng lệnh. Ngoài ra, khi bạn chạy mô hình, Ollama cũng chạy một máy chủ suy luận được lưu trữ tại cổng 11434 (theo mặc định) mà bạn có thể tương tác bằng API và các thư viện khác như Langchain.


Tính đến bài đăng này, Ollama có 74 mô hình, bao gồm cả các danh mục như mô hình nhúng.

Cách sử dụng Olama

Tải xuống Ollama cho hệ điều hành bạn chọn. Sau khi thực hiện việc đó, bạn chạy lệnh ollama để xác nhận rằng nó đang hoạt động. Nó sẽ hiển thị cho bạn menu trợ giúp -

 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.


Để sử dụng bất kỳ mô hình nào, trước tiên bạn cần phải “kéo” chúng từ Ollama, giống như bạn kéo hình ảnh xuống từ Dockerhub (nếu bạn đã sử dụng mô hình đó trước đây) hoặc thứ gì đó như Elastic Container Register (ECR).


Ollama cung cấp một số mẫu mặc định (như llama2 là LLM nguồn mở của Facebook) mà bạn có thể thấy bằng cách chạy.


 ollama list 


Chọn mô hình (giả sử phi ) mà bạn muốn tương tác từ trang thư viện Ollama . Bây giờ bạn có thể kéo mô hình này xuống bằng cách chạy lệnh

 ollama pull phi 


Sau khi quá trình tải xuống hoàn tất, bạn có thể kiểm tra xem mô hình có khả dụng cục bộ hay không bằng cách chạy —

 ollama list


Bây giờ mô hình đã có sẵn, nó đã sẵn sàng để chạy. Bạn có thể chạy mô hình bằng lệnh -

 ollama run phi


Độ chính xác của các câu trả lời không phải lúc nào cũng ở mức cao nhất, nhưng bạn có thể giải quyết vấn đề đó bằng cách chọn các mô hình khác nhau hoặc có thể tự mình tinh chỉnh hoặc triển khai giải pháp giống RAG để cải thiện độ chính xác.


Điều tôi đã trình bày ở trên là cách bạn có thể sử dụng các mô hình Ollama bằng dấu nhắc dòng lệnh. Tuy nhiên, nếu bạn kiểm tra máy chủ suy luận mà Llama đang chạy, bạn có thể thấy rằng có nhiều cách lập trình để truy cập máy chủ này bằng cách nhấn vào cổng 11434.

Nếu bạn muốn sử dụng Langchain để truy cập mô hình Ollama của mình, bạn có thể sử dụng những thứ như —

 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)

Cách tạo mô hình của riêng bạn trong Ollama

Bạn cũng có thể tạo biến thể mô hình của riêng mình bằng cách sử dụng khái niệm Modelfile trong Ollama. Để biết thêm thông số cần định cấu hình trong Modelfile của bạn, bạn có thể xem các tài liệu này.


Tệp mô hình ví dụ -

 # 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. """


Khi bạn có Modelfile, bạn có thể tạo mô hình của mình bằng cách sử dụng

 ollama create arjunrao87/financellm -f Modelfile

trong đó financellm là tên mô hình LLM của bạn và arjunrao87 sẽ được thay thế bằng tên người dùng ollama.com của bạn (cũng đóng vai trò là không gian tên của cơ quan đăng ký ollama trực tuyến của bạn). Tại thời điểm này, bạn có thể sử dụng mô hình đã tạo của mình giống như bất kỳ mô hình nào khác trên Ollama.


Bạn cũng có thể chọn đẩy mô hình của mình vào sổ đăng ký ollama từ xa. Để thực hiện được điều này, bạn cần


  • Tạo tài khoản của bạn trên ollama.com
  • Thêm một mô hình mới
  • Thiết lập các khóa chung để cho phép bạn đẩy các mô hình từ máy từ xa của mình.


Khi bạn đã tạo llm cục bộ của mình, bạn có thể đẩy nó vào sổ đăng ký ollama bằng cách sử dụng —

 ollama push arjunrao87/financellm

🦄 Bây giờ chúng ta hãy đến phần hay nhất.

Sử dụng Ollama để xây dựng Chatbot

Trong quá trình tìm cách sử dụng Ollama, một trong những khám phá thú vị hơn là hệ sinh thái gồm các nhà xây dựng ứng dụng web dựa trên Python mà tôi đã gặp. Chainlit có thể được sử dụng để xây dựng một chatbot hoàn chỉnh như ChatGPT. Như trang của họ nói,


Chainlit là gói Python mã nguồn mở để xây dựng AI đàm thoại sẵn sàng cho sản xuất


Tôi đã xem qua một số hướng dẫn về Chainlit để hiểu những gì bạn có thể làm với chainlit, bao gồm những việc như tạo chuỗi nhiệm vụ (được gọi là “các bước”), bật các nút và hành động, gửi hình ảnh và tất cả mọi thứ. Bạn có thể theo dõi phần này của cuộc hành trình của tôi ở đây .


Sau khi hiểu rõ về Chainlit, tôi muốn tập hợp một chatbot đơn giản về cơ bản sử dụng Ollama để tôi có thể sử dụng LLM cục bộ để trò chuyện (thay vì nói ChatGPT hoặc Claude).


Với ít hơn 50 dòng mã, bạn có thể thực hiện điều đó bằng Chainlit + Ollama. Điều đó không điên rồ sao?

Chainlit như một thư viện cực kỳ dễ sử dụng. Tôi cũng sử dụng Langchain để sử dụng và tương tác với Ollama.


 from langchain_community.llms import Ollama from langchain.prompts import ChatPromptTemplate import chainlit as cl


Bước tiếp theo là xác định cách bạn muốn màn hình tải của chatbot trông như thế nào bằng cách sử dụng trình trang trí @cl.on_chat_start của chainlit —

 @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() .... ....


Giao diện Message là thứ mà Chainlit sử dụng để gửi phản hồi trở lại giao diện người dùng. Bạn có thể tạo tin nhắn bằng khóa content đơn giản và sau đó bạn có thể tô điểm nó bằng những thứ như elements mà trong trường hợp của tôi, tôi đã thêm Image để hiển thị hình ảnh khi người dùng đăng nhập lần đầu.


Bước tiếp theo là gọi Langchain để khởi tạo Ollama (với mô hình bạn chọn) và xây dựng mẫu lời nhắc. Việc sử dụng cl.user_session chủ yếu là để duy trì sự tách biệt giữa bối cảnh và lịch sử của người dùng, vốn chỉ nhằm mục đích chạy bản demo nhanh, không bắt buộc phải thực hiện.


Chain là một giao diện Langchain có tên Runnable được sử dụng để tạo các chuỗi tùy chỉnh. Bạn có thể đọc về điều ấy nhiều hơn tại đây .


 @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)


Bây giờ, bạn đã có tất cả các yếu tố để có giao diện người dùng chatbot và chấp nhận thông tin đầu vào của người dùng. Bạn làm gì với lời nhắc mà người dùng cung cấp? Bạn sẽ sử dụng trình xử lý @cl.on_message từ Chainlit để thực hiện điều gì đó với thông báo mà người dùng đã cung cấp.


 @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 như các tài liệu đề xuất “truyền lại các đoạn phản hồi không đồng bộ”, đây là những gì chúng tôi muốn cho bot của mình.


Đó thực sự là nó. Một vài lần nhập, một vài chức năng, một chút đường và bạn có một chatbot chức năng.

Một phản ứng sử học tốt


Một nhà sử học ngổ ngáo (có thể hiểu được) không giỏi toán;)


Để có mã đầy đủ, bạn có thể xem GitHub của tôi.


Nếu nội dung này thú vị với bạn, hãy nhấn nút 👏 đó hoặc đăng ký nhận bản tin của tôi tại đây → https://a1engineering.beehiiv.com/subscribe . Nó cho tôi phản hồi rằng tôi cần phải làm ít nhiều điều gì đó! Cảm ơn ❤️


Cũng được xuất bản ở đây