Интеграция 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}")Лучшие практики
- Выбор модели: Используйте быстрые модели (
gemini-2.5-flash) для промежуточных шагов и мощные (claude-sonnet-4.5) для финальной генерации - Кеширование: Включите кеширование LangChain для повторяющихся запросов
- Стриминг: Используйте
.stream()для пользовательских интерфейсов - Переменные окружения: Храните API ключ в
OPENAI_API_KEY, а не в коде