Skip to content

Интеграция LangChain

LangChain — популярный фреймворк для создания приложений на основе LLM. AITUNNEL полностью совместим с LangChain через OpenAI-интеграцию.

Установка

bash
pip install langchain langchain-openai

Настройка

Chat Models

python
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="claude-sonnet-4.5",
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
    max_tokens=1000,
)

response = llm.invoke("Объясни, что такое LangChain, в трёх предложениях.")
print(response.content)

Embeddings

python
from langchain_openai import OpenAIEmbeddings

embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

vectors = embeddings.embed_documents([
    "Искусственный интеллект",
    "Машинное обучение",
    "Нейронные сети",
])

print(f"Количество векторов: {len(vectors)}")
print(f"Размерность: {len(vectors[0])}")

Примеры использования

Простая цепочка

python
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "Ты — эксперт по {topic}. Отвечай кратко и по делу."),
    ("user", "{question}"),
])

chain = prompt | llm

response = chain.invoke({
    "topic": "Python",
    "question": "Какие основные отличия list и tuple?"
})

print(response.content)

Стриминг

python
for chunk in llm.stream("Напиши короткий рассказ о роботе"):
    print(chunk.content, end="", flush=True)

RAG (Retrieval-Augmented Generation)

python
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser

llm = ChatOpenAI(
    model="gemini-2.5-flash",
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

embeddings = OpenAIEmbeddings(
    model="text-embedding-3-small",
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

# Создаём векторное хранилище
texts = [
    "AITUNNEL предоставляет единый API для 100+ моделей ИИ.",
    "Оплата в AITUNNEL работает по модели pay-as-you-go.",
    "AITUNNEL поддерживает чат, изображения, видео, аудио и эмбеддинги.",
]
vectorstore = FAISS.from_texts(texts, embeddings)
retriever = vectorstore.as_retriever()

prompt = ChatPromptTemplate.from_template(
    "Контекст: {context}\n\nВопрос: {question}\n\nОтвет:"
)

chain = (
    {"context": retriever, "question": RunnablePassthrough()}
    | prompt
    | llm
    | StrOutputParser()
)

answer = chain.invoke("Как работает оплата?")
print(answer)

Использование с разными моделями

python
fast_llm = ChatOpenAI(
    model="gemini-2.5-flash",
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

smart_llm = ChatOpenAI(
    model="claude-sonnet-4.5",
    api_key="sk-aitunnel-xxx",
    base_url="https://api.aitunnel.ru/v1/",
)

# Быстрая модель для классификации
classification = fast_llm.invoke("Классифицируй: 'Хочу вернуть товар' → жалоба/вопрос/благодарность")

# Умная модель для генерации ответа
response = smart_llm.invoke(f"Напиши вежливый ответ клиенту: {classification.content}")

Лучшие практики

  1. Выбор модели: Используйте быстрые модели (gemini-2.5-flash) для промежуточных шагов и мощные (claude-sonnet-4.5) для финальной генерации
  2. Кеширование: Включите кеширование LangChain для повторяющихся запросов
  3. Стриминг: Используйте .stream() для пользовательских интерфейсов
  4. Переменные окружения: Храните API ключ в OPENAI_API_KEY, а не в коде

Дополнительные ресурсы

AITUNNEL