Use this file to discover all available pages before exploring further.
Ollama allows you to run open-source Large Language Models (LLMs), such as Llama 3.1, locally.Ollama bundles model weights, configuration, and data into a single package, defined by a Modelfile. It optimizes setup and configuration details, including GPU usage.本指南将帮助你开始使用 ChatOllamachat models。有关所有 ChatOllama 功能和配置的详细文档,请前往 API 参考。
Ollama allows you to use a wide range of models with different capabilities. Some of the fields in the details table below only apply to a subset of models that Ollama offers.For a complete list of supported models and model variants, see the Ollama model library and search by tag.
const aiMsg = await llm.invoke([ [ "system", "You are a helpful assistant that translates English to French. Translate the user sentence.", ], ["human", "I love programming."],])aiMsg
AIMessage { "content": "Je adore le programmation.\n\n(Note: \"programmation\" is the feminine form of the noun in French, but if you want to use the masculine form, it would be \"le programme\" instead.)", "additional_kwargs": {}, "response_metadata": { "model": "llama3", "created_at": "2024-08-01T16:59:17.359302Z", "done_reason": "stop", "done": true, "total_duration": 6399311167, "load_duration": 5575776417, "prompt_eval_count": 35, "prompt_eval_duration": 110053000, "eval_count": 43, "eval_duration": 711744000 }, "tool_calls": [], "invalid_tool_calls": [], "usage_metadata": { "input_tokens": 35, "output_tokens": 43, "total_tokens": 78 }}
console.log(aiMsg.content)
Je adore le programmation.(Note: "programmation" is the feminine form of the noun in French, but if you want to use the masculine form, it would be "le programme" instead.)
Ollama now offers support for native tool calling for a subset of their available models. The example below demonstrates how you can invoke a tool from an Ollama model.
import { tool } from "@langchain/core/tools";import { ChatOllama } from "@langchain/ollama";import * as z from "zod";const weatherTool = tool((_) => "Da weather is weatherin", { name: "get_current_weather", description: "Get the current weather in a given location", schema: z.object({ location: z.string().describe("The city and state, e.g. San Francisco, CA"), }),});// Define the modelconst llmForTool = new ChatOllama({ model: "llama3-groq-tool-use",});// Bind the tool to the modelconst llmWithTools = llmForTool.bindTools([weatherTool]);const resultFromTool = await llmWithTools.invoke( "What's the weather like today in San Francisco? Ensure you use the 'get_current_weather' tool.");console.log(resultFromTool);
Ollama natively supports structured output for all models, allowing you to force the model to return a specific format by calling .withStructuredOutput().
import { ChatOllama } from "@langchain/ollama";import { z } from "zod";// Define the schemaconst Country = z.object({ name: z.string(), capital: z.string(), languages: z.array(z.string()),});// Define the modelconst llm = new ChatOllama({ model: "llama3.1", temperature: 0,});// Pass the schema to enforce a specific output formatconst structuredLlm = llm.withStructuredOutput(Country);const result = await structuredLlm.invoke("Tell me about Canada.");console.log(result);
If you prefer to use structured output via tool calling, pass the method: "functionCalling" option:
import { ChatOllama } from "@langchain/ollama";import { z } from "zod";// Define the schemaconst Sentence = z.object({ nouns: z.array(z.string()),});// Define the modelconst llm = new ChatOllama({ model: "llama3.1", temperature: 0,});// Use structured output via tool callingconst structuredLlm = llm.withStructuredOutput(Sentence, { method: "functionCalling" });const result = await structuredLlm.invoke("Extract all nouns: A cat named Luna who is 5 years old and loves playing with yarn. She has grey fur");console.log(result);
Ollama supports open source multimodal models like LLaVA in versions 0.1.15 and up.
You can pass images as part of a message’s content field to multimodal-capable models like this:
import { ChatOllama } from "@langchain/ollama";import { HumanMessage } from "@langchain/core/messages";import * as fs from "node:fs/promises";const imageData = await fs.readFile("../../../../../examples/hotdog.jpg");const llmForMultiModal = new ChatOllama({ model: "llava", baseUrl: "http://127.0.0.1:11434",});const multiModalRes = await llmForMultiModal.invoke([ new HumanMessage({ content: [ { type: "text", text: "What is in this image?", }, { type: "image_url", image_url: `data:image/jpeg;base64,${imageData.toString("base64")}`, }, ], }),]);console.log(multiModalRes);
AIMessage { "content": " The image shows a hot dog in a bun, which appears to be a footlong. It has been cooked or grilled to the point where it's browned and possibly has some blackened edges, indicating it might be slightly overcooked. Accompanying the hot dog is a bun that looks toasted as well. There are visible char marks on both the hot dog and the bun, suggesting they have been cooked directly over a source of heat, such as a grill or broiler. The background is white, which puts the focus entirely on the hot dog and its bun. ", "additional_kwargs": {}, "response_metadata": { "model": "llava", "created_at": "2024-08-01T17:25:02.169957Z", "done_reason": "stop", "done": true, "total_duration": 5700249458, "load_duration": 2543040666, "prompt_eval_count": 1, "prompt_eval_duration": 1032591000, "eval_count": 127, "eval_duration": 2114201000 }, "tool_calls": [], "invalid_tool_calls": [], "usage_metadata": { "input_tokens": 1, "output_tokens": 127, "total_tokens": 128 }}