Головна / Статті

LangChain плюс Ollama: локальні ланцюги Qwen, інструменти та структура

Налаштуйте langchain-ollama на локальний тег Qwen, щоб отримувати ланцюги, стрімінг, виклики інструментів та структурований вихід без використання ключів хмари. Інструкції з налаштування та особливості, на які варто звернути увагу.

Видавець: REACTAPP.TOP4 хв читання931 слів

Джерела: LangChain integrations with Ollama local LLM - qwen3.8:27b

Локальний Qwen через Ollama, підключений до LangChain

Запустіть моделі чату з відкритими вагами, такі як qwen3.8:27b, на власному комп’ютері та підключіть їх до ланцюгів, агентів та інструментів LangChain — без ключів API хмари та без рахунків за кожен токен.

Ollama в одному абзаці

Ollama об’єднує ваги, конфігурацію та процес виконання за допомогою інтерфейсу, зручного для Modelfile, та керує деталями прискорення за рахунок GPU для поширених налаштувань. Скористайтеся тегом, введіть запит, і API буде доступний за портом 11434.

Інтеграція Ollama в LangChain

Пакет langchain-ollama надає доступ до моделей чату з можливістю виклику інструментів, структурованого виводу, багатомодальних вхідних даних, стрімінгу, асинхронної роботи та обліку ймовірностей — це той самий інтерфейс, який ви очікуєте від хмарних обгорток для чату, але працює на локальному комп’ютері.

Опис налаштування

Встановіть Ollama, завантажте потрібну модель чату та перевірьте, чи правильно відповідає API. У Python встановіть інтеграцію Ollama від LangChain та створіть модель чату, налаштовану на ваш локальний базовий URL.

ollama pull qwen3.8:27b
ollama list

Ланцюги та запити

Створіть простий ланцюг „запит → модель“ для стиснення інформації чи запитань та відповідей без необхідності виходу з пристрою:

from langchain_ollama import ChatOllama

llm = ChatOllama(
    model="qwen3.8:27b",
    temperature=0.3,
)

Транслюйте токени, якщо ваш інтерфейс потребує поступових оновлень:

messages = [
    ChatMessage(role="control", content="thinking"),
    HumanMessage("What is 3^3?"),
]

Інструменти та агенти

Під’єднуйте інструменти так само, як це робиться з хостованою моделлю. Локальна модель має підтримувати виклик інструментів для надійної роботи агентів — обирайте теги, відомі за свою сумісність з протоколом інструментів Ollama.

messages = [
    SystemMessage(
        content="""
You are an expert at reading screenshots and technical documentation.

Rules:
- Extract information only from the image.
- Do not hallucinate missing values.
- Return concise answers.
- Preserve commands exactly as shown.
"""
    ),
    HumanMessage(
        content=[
            {
                "type": "image_url",
                "image_url": f"data:image/png;base64,{image_b64}",
            },
            {
                "type": "text",
                "text": "What is the download command for the Gemma 7B model?",
            },
        ],
    ),
]
SystemMessage
    ↓
"You are a technical documentation analyst.
 Extract information only from the image.
 Do not guess.
 Return concise answers."

HumanMessage #1
    ↓
"What is the download command?"

HumanMessage #2
    ↓
"What version of the model is shown?"

HumanMessage #3
    ↓
"What is the model's parameter count?"

Структурований вихід

Якщо вам потрібен JSON, використовуйте інструменти для структурованого вихіду замість простих запитів на повернення JSON:

HumanMessage(
    content=[
        {
            "type": "image_url",
            "image_url": f"data:image/png;base64,{image_b64}",
        },
        {
            "type": "text",
            "text": """
The image is a screenshot from an Ollama model page.

Task:
1. Find the section containing model download instructions.
2. Locate the Gemma 7B model.
3. Return only the exact Ollama pull command.

Output format:
Return JSON only:

{
    "model_name": "",
    "download_command": "",
    "confidence": ""
}

Do not include explanations.
"""
        },
    ]
)

Чому саме ця стек-технологія

Ви зберігаєте дані безпосередньо на пристрої, можете постійно їх оновлювати без обмежень за швидкістю, при цьому продовжуєте використовувати словниковий запас LangChain для ланцюгів/агентів. Ви можете пожертвувати максимальною якістю чи швидкістю заради приватності та передбачуваності витрат — це хороша пропозиція для прототипів, внутрішніх інструментів та офлайн-демонстрацій.

Бажано використовувати чіткі теги моделей у кожному прикладі, щоб оновлення не змінювали поведінку програми непомітно під час навчання.

Бажано використовувати чіткі теги моделей у кожному прикладі, щоб оновлення не змінювали поведінку програми непомітно під час навчання.

Бажано використовувати чіткі теги моделей у кожному прикладі, щоб оновлення не змінювали поведінку програми непомітно під час навчання.

Бажано використовувати чіткі теги моделей у кожному прикладі, щоб оновлення не змінювали поведінку програми непомітно під час навчання.

Бажано використовувати чіткі теги моделей у кожному прикладі, щоб оновлення не змінювали поведінку програми непомітно під час навчання.

Бажано використовувати чіткі теги моделей у кожному прикладі, щоб оновлення не змінювали поведінку програми непомітно під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.

Будь ласка, використовуйте чіткі теги моделей у кожному прикладі, щоб оновлення не таємно змінювали поведінку під час навчання.