In this article, we will learn how to create a custom agent that uses an open source llm (llama3.1) that runs locally on our PC. We will also use Ollama and LangChain.
Follow the instructions based on your OS type in its GitHub README to install Ollama:
https://github.com/ollama/ollama
I am on a Linux-based PC, so I am going to run the following command in my terminal:
curl -fsSL https://ollama.com/install.sh | sh
Fetch the available LLM model via the following command:
ollama pull llama3.1
This will download the default tagged version of the model. Typically, the default points to the latest, smallest sized-parameter model. In this case, it will be llama3.1:8b model.
To download another version of the model, you can go to: https://ollama.com/library/llama3.1 and select the version to install, and then run the ollama pull command with the model and its version number. Example: ollama pull llama3.1:70b
On Mac, the models will be downloaded to ~/.ollama/models
On Linux (or WSL), the models will be stored at /usr/share/ollama/.ollama/models
Run the following command to start ollama without running the desktop application.
ollama serve
All models are automatically served on localhost:11434
Create a new folder on your computer and then open it with a code editor like VS Code.
Open the terminal. Use the following command to create a virtual environment .venv and activate it:
python3 -m venv .venv
source .venv/bin/activate
Run the following command to install langchain and langchain-ollama:
pip install -U langchain langchain-ollama
The above command will install or upgrade the LangChain and LangChain-Ollama packages in Python. The -U flag ensures that the latest versions of these packages are installed, replacing any older versions that may already be present.
Create a Python file for example: main.py and add the following code:
from langchain_ollama import ChatOllama from langchain.agents import tool from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder from langchain.agents.format_scratchpad.openai_tools import ( format_to_openai_tool_messages, ) from langchain.agents import AgentExecutor from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser llm = ChatOllama( model="llama3.1", temperature=0, verbose=True ) @tool def get_word_length(word: str) -> int: """Returns the length of a word.""" return len(word) tools = [get_word_length] prompt = ChatPromptTemplate.from_messages( [ ( "system", "You are very powerful assistant", ), ("user", "{input}"), MessagesPlaceholder(variable_name="agent_scratchpad"), ] ) llm_with_tools = llm.bind_tools(tools) agent = ( { "input": lambda x: x["input"], "agent_scratchpad": lambda x: format_to_openai_tool_messages( x["intermediate_steps"] ), } | prompt | llm_with_tools | OpenAIToolsAgentOutputParser() ) # Create an agent executor by passing in the agent and tools agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) result = agent_executor.invoke({"input": "How many letters in the word educa"}) if result: print(f"[Output] --> {result['output']}") else: print('There are no result..')
The above code snippet sets up a LangChain agent using the ChatOllama model (llama3.1) to process user input and utilize a custom tool that calculates word length. It defines a prompt template for the agent, binds the tool to the language model, and constructs an agent that processes input and formats intermediate steps. Finally, it creates an AgentExecutor to invoke the agent with a specific input. We pass a simple question to ask "How many letters in the word educa" and then we print the output or indicate if no result was found.
When we run, we get the following result:
> Entering new AgentExecutor chain... Invoking: `get_word_length` with `{'word': 'educa'}` 5The word "educa" has 5 letters. > Finished chain. [Output] --> The word "educa" has 5 letters.
You see the agent used the model (llama3.1) to call the tool correctly to get the count of letters in the word.
Thanks for reading.
Check Ollama repo here: https://github.com/ollama/ollama
The above is the detailed content of Create your own Custom LLM Agent Using Open Source Models (llama). For more information, please follow other related articles on the PHP Chinese website!