Интеграция LangChain с Alibaba Bailian
LangChain в настоящее время является самым популярным фреймворком для разработки приложений на основе больших языковых моделей (LLM). Он помогает разработчикам быстро создавать приложения с промптами, моделями, цепочками инструментов и агентами через унифицированные интерфейсы компонентов.
Alibaba Cloud Bailian (DashScope) — это платформа сервисов LLM от Alibaba Cloud, предоставляющая серию чат-моделей Tongyi Qianwen (qwen), модели текстовых эмбеддингов и модели reranker.
В этой статье объясняется, как интегрировать модели Bailian с LangChain, рассматриваются три категории: чат-модели, модели текстовых эмбеддингов и модели reranker. Также приводятся полные примеры на Python, JavaScript и Java.
Предварительные требования
Нам нужно активировать сервис моделей Alibaba Cloud Bailian и получить API-KEY.
Сначала мы можем использовать основную учётную запись Alibaba Cloud, чтобы посетить платформу сервиса моделей Bailian:https://bailian.console.aliyun.com/Затем нажмите «Login» в правом верхнем углу. После входа нажмите значок шестерёнки ⚙️ в правом верхнем углу, выберите «API Key» и скопируйте API-ключ. Если у вас его нет, вы также можете создать API-ключ:


Прежде чем начать, давайте сначала разберёмся с двумя ключевыми понятиями: «Классы интеграции моделей» в LangChain и «Два режима интеграции» в Bailian.
Классы интеграции моделей
LangChain оборачивает модели от разных провайдеров в единые «классы интеграции».
Код приложения программируется под единый интерфейс. При смене провайдера нужно изменить только класс интеграции и параметры; бизнес-логику почти никогда не требуется менять.
На примере чат-моделей: на стороне Python есть два класса интеграции — ChatOpenAI и ChatTongyi, соответствующие режиму Bailian, совместимому с OpenAI, и нативному режиму DashScope соответственно.
Два режима интеграции
Bailian предоставляет два набора протоколов интеграции; разные протоколы соответствуют разным классам интеграции LangChain.
Режим, совместимый с OpenAIПротокол API совпадает с OpenAI. Любой фреймворк, поддерживающий протокол OpenAI, может подключаться напрямую, что обеспечивает минимальные затраты на интеграцию.
Нативный режим DashScopeОн использует собственный протокол DashScope от Bailian и может вызывать все модели генерации текста Bailian, включая развёрнутые пользовательские модели.
Общая архитектура интеграции показана на следующей схеме:
Так называемый «интерфейс, совместимый с OpenAI» означает, что протокол HTTP API провайдера совпадает с OpenAI.
При условии совместимости протокола любой код или инструменты, написанные для OpenAI, можно использовать напрямую, изменив только конечную точку API.
Настройка переменных окружения
Все языки и способы интеграции единообразно используют переменную окруженияDASHSCOPE_API_KEYдля хранения API-ключа.
Экспорт в терминале в Linux / macOS:
export DASHSCOPE_API_KEY="sk-你的百炼APIKey"
Настройка в Windows (CMD):
set DASHSCOPE_API_KEY=sk-你的百炼APIKey
Рекомендуется записать команду экспорта в файл конфигурации оболочки (например, ~/.bashrc, ~/.zshrc), чтобы не задавать её заново каждый раз при открытии терминала.
Настройка через файл .env (рекомендуется)
Ещё более рекомендуемый подход — записать API-ключ в файл .env в корневом каталоге проекта и использовать python-dotenv для автоматической загрузки его в переменные окружения.
Отделение API-ключа от кода в сочетании с .gitignore предотвращает случайные коммиты и упрощает каждому поддержание собственной конфигурации при совместной работе.
Создайте файл .env в корневом каталоге проекта:
# 文件路径:项目根目录/.env DASHSCOPE_API_KEY=sk-你的百炼APIKey
Например, в нашем тестовом проектеexample-langchain-testсоздайте.envфайл и добавьте конфигурацию:

Установите python-dotenv:
pip install python-dotenv
Загрузите файл .env в начале вашего Python-кода:
Пример
load_dotenv() # Прочитать файл .env в корневой директории проекта и внедрить его как переменные окружения
После загрузки os.getenv("DASHSCOPE_API_KEY") в вашем коде сможет прочитать ключ, что даёт тот же эффект, что и ручной экспорт.
Этот способ загрузки уже был продемонстрирован в примерах в разделе "Чат-модель".
Файл .env содержит конфиденциальные данные. Пожалуйста, добавьте его в .gitignore (напишите строку ".env"), чтобы API-ключ не был закоммичен в репозиторий.
Пожалуйста, замените API-ключ в примерах на настоящий ключ и никогда не делитесь им с другими.
Сравнение двух режимов интеграции
Сначала посмотрите таблицу сравнения, затем выберите режим интеграции по необходимости.
| Пункт сравнения | Режим совместимости с OpenAI | Нативный режим DashScope |
|---|---|---|
| Принцип интеграции | Повторно использует класс интеграции протокола OpenAI | Использует нативный SDK DashScope |
| Поддерживаемые модели | Только некоторые модели | Все модели генерации текста и развёрнутые модели |
| Класс интеграции Python | ChatOpenAI | ChatTongyi |
| Класс интеграции JavaScript | ChatOpenAI | ChatAlibabaTongyi |
| Класс интеграции Java | OpenAiChatModel | QwenChatModel |
| Применимые сценарии | Существующий код OpenAI нужно быстро переключить | Требуются полные возможности модели или использование развернутых моделей |
Оба режима используют один и тот же домен dashscope.aliyuncs.com. Разница заключается в пути: путь режима, совместимого с OpenAI, — /compatible-mode/v1, тогда как путь нативного режима DashScope встроен в SDK.
Чат-модель
Чат-модели — наиболее часто используемый тип моделей, применяемый для таких задач, как многоходовой диалог, вопросы и ответы и генерация контента.
Ниже мы описываем способы интеграции по языкам. В примере единообразно используется модель qwen-plus, которую можно заменить при необходимости.
Python: режим, совместимый с OpenAI
Используйте класс интеграции ChatOpenAI из пакета langchain_openai, чтобы вызывать Bailian как сервис OpenAI.
Сначала установите зависимости:
pip install langchain_openai
Пример кода:
Пример
from dotenv import load_dotenv # Чтение конфигурации из файла .env
import os
load_dotenv() # Загрузка переменных окружения, таких как API-ключ, из файла .env в корневом каталоге проекта
# Создание экземпляра чат-модели с подключением к Bailian через протокол, совместимый с OpenAI
chatLLM = ChatOpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # Прочитать API-ключ Bailian из переменной окружения (обязательно)
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # Конечная точка API Bailian, совместимая с OpenAI (обязательно)
model="qwen-plus", # Имя модели (обязательно), здесь qwen-plus используется в качестве примера
# Другие необязательные параметры: temperature, max_tokens и т. д.
)
# Построить список сообщений многоходового диалога
messages = [
{"role": "system", "content": "Вы — полезный ассистент."}, # Системное сообщение, задаёт роль ассистента
{"role": "user", "content": "Кто вы?"}, # Сообщение пользователя, содержание вопроса
]
# Выполнить вызов и вернуть структурированный объект ответа
response = chatLLM.invoke(messages)
print(response.model_dump_json())
Результат вывода (некоторые поля опущены):
{
"content": "我是通义千问,由阿里云开发的大语言模型,可以回答你的问题、协助创作、提供建议等。",
"usage": { "prompt_tokens": 12, "completion_tokens": 28, "total_tokens": 40 }
}
После успешного вызова возвращается объект AIMessage. model_dump_json() может сериализовать его в JSON для удобного просмотра полного ответа.
Python: нативный режим DashScope
Используйте класс интеграции ChatTongyi из пакета langchain-community, который использует нативный протокол DashScope и поддерживает потоковый вывод.
ChatTongyi происходит из пакета langchain-community, и сам этот пакет, и dashscope больше не поддерживаются.
Для новых проектов рекомендуется отдавать предпочтение интеграции ChatOpenAI, совместимой с OpenAI. Рассматривайте этот подход только тогда, когда вам нужны нативные возможности DashScope (например, развёрнутые модели).
Сначала установите зависимости:
pip install langchain-community dashscope
Пример кода:
Пример
from langchain_core.messages import HumanMessage
from dotenv import load_dotenv # Чтение конфигурации из файла .env
import os
load_dotenv() # Загрузить переменные окружения, такие как API-ключи, из файла .env в корне проекта
# Создать чат-модель Qwen, используя нативный протокол DashScope
chatLLM = ChatTongyi(
model="qwen-plus", # Имя модели (обязательно)
dashscope_api_key=os.getenv("DASHSCOPE_API_KEY"), # Прочитать API-ключ из переменной окружения (обязательно)
streaming=True, # Включить потоковый вывод
)
# Потоковая передача вызова с получением и печатью содержимого ответа по частям
res = chatLLM.stream([HumanMessage(content="привет")], streaming=True)
for r in res:
print("ответ чата:", r.content)
Результат вывода:
chat resp: 你好 chat resp: !我是通义千问,有什么可以帮您的吗?
Потоковый вывод позволяет модели возвращать содержимое по частям во время генерации, что делает его подходящим для чат-интерфейсов, которым нужен эффект пишущей машинки.
Модель текстовых эмбеддингов
Модели эмбеддингов преобразуют текст в семантические векторы, формируя основу для таких приложений, как RAG (генерация с дополненной выборкой) и семантический поиск.
Выбор модели
Bailian предоставляет несколько версий моделей эмбеддингов. Вы можете сравнить их производительность с помощью метрик оценки MTEB и CMTEB; чем больше значение, тем лучше.
| Модель | MTEB | MTEB (задача поиска) | CMTEB | CMTEB (задача поиска) |
|---|---|---|---|---|
| text-embedding-v1 | 58.30 | 45.47 | 59.84 | 56.59 |
| text-embedding-v2 | 60.13 | 49.49 | 62.17 | 62.78 |
| text-embedding-v3 (размерность 1024) | 63.39 | 55.41 | 68.92 | 73.23 |
| text-embedding-v4 (размерность 1024) | 68.36 | 59.30 | 70.14 | 73.98 |
При вызове text-embedding-v3 и text-embedding-v4 через LangChain нельзя указать размерность вектора; по умолчанию они выдают 1024-мерные векторы.
Более новые версии работают лучше, поэтому отдавайте предпочтение v4.
Пример на Python
API эмбеддингов Bailian совместим со спецификацией OpenAI API. Просто используйте класс интеграции OpenAIEmbeddings из пакета langchain-openai и укажите base_url на совместимую конечную точку Bailian.
Не нужно устанавливать больше не поддерживаемые пакеты langchain-community и dashscope.
Сначала установите зависимости:
pip install langchain-openai
OpenAIEmbeddings требует три ключевых параметра: model (имя модели эмбеддингов), api_key (ключ API Bailian) и base_url (совместимая с OpenAI конечная точка Bailian).
base_url фиксирован как https://dashscope.aliyuncs.com/compatible-mode/v1, который совпадает с совместимой конечной точкой для чат-моделей.
Пример кода:
Пример
from dotenv import load_dotenv # Чтение конфигурации из файла .env
import os
load_dotenv() # Загрузить переменные окружения, такие как API-ключи, из файла .env в корне проекта
# Создайте экземпляр модели эмбеддингов для подключения к Bailian через протокол, совместимый с OpenAI
# chunk_size=10: Embedding API Bailian принимает не более 10 текстов за запрос.
# OpenAIEmbeddings по умолчанию упаковывает 1000 элементов за раз; если база знаний немного большая, будет превышен лимит и возникнет ошибка.
embeddings = OpenAIEmbeddings(
model="text-embedding-v4", # Имя модели эмбеддингов (обязательно), здесь в качестве примера используется v4
api_key=os.getenv("DASHSCOPE_API_KEY"), # Считать API-ключ Bailian из переменной окружения (обязательно)
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # OpenAI-совместимый эндпоинт Bailian (обязательно)
check_embedding_ctx_length=False,
chunk_size=10,
)
# Векторизовать один текст запроса
text = "Это тестовый документ."
query_result = embeddings.embed_query(text)
print("Длина вектора текста:", len(query_result), sep='')
# Пакетная векторизация нескольких документов
doc_results = embeddings.embed_documents(
[
"Привет!",
"О, привет!",
"Как тебя зовут?",
"Друзья зовут меня World",
"Hello World!"
])
print("Количество текстовых векторов:", len(doc_results), ", длина текстового вектора:", len(doc_results[0]), sep='')
Результат вывода:
文本向量长度:1024 文本向量数量:5 ,文本向量长度:1024
embed_query используется для векторизации пользовательского запроса, а embed_documents — для пакетной векторизации документов-кандидатов. Вычислять сходство можно только тогда, когда оба выходных вектора имеют одинаковую размерность.
Модель реранжировщика
Модели реранжировщика повторно оценивают и переранжируют результаты поиска, значительно повышая качество ответов RAG-приложений.
Параметры модели
Bailian предоставляет следующие модели реранжировщика; выбирайте в зависимости от языка, стоимости и сценария:
| Модель | Максимальное количество документов | Максимальный ввод на элемент | Поддержка языков | Цена за единицу (за тысячу токенов) | Применимые сценарии |
|---|---|---|---|---|---|
| qwen3-vl-rerank | 100 | 8,000 Token | 33 основных языка, включая китайский, английский, японский, корейский и т. д. | Изображение 0.0018 yuan / текст 0.0007 yuan | Кластеризация изображений, кросс-модальный поиск, поиск изображений |
| qwen3-rerank | 500 | 4,000 Token | 100+ языков, включая китайский, английский, испанский, французский, японский, корейский и т. д. | 0.0005 yuan | Семантический поиск по тексту, приложения RAG |
| gte-rerank-v2 | — | 30,000 Token | Более 50 языков, включая китайский, английский, японский, корейский, тайский и т. д. | 0.0008 yuan | Переранжирование длинных текстов |
Пример на Python
Используйте класс интеграции DashScopeRerank из пакета langchain-community.
В этом примере используется DashScopeRerank из пакета langchain-community.
langchain-community и dashscope больше не поддерживаются. Для новых проектов обратите внимание на альтернативные методы интеграции, официально предоставляемые Bailian.
Сначала установите зависимости:
pip install langchain-community dashscope
Пример кода:
Пример
from dotenv import load_dotenv # Чтение конфигурации из файла .env
load_dotenv() # Загрузить переменные окружения, такие как API-ключи, из файла .env в корне проекта
# Смоделировать список текстов-кандидатов, возвращаемых поиском
sequence = ["Пример — это китайский обучающий сайт, предоставляющий руководства по программированию", "text2", "text3"]
# Создать экземпляр модели реранкера
reranker = DashScopeRerank(
model="gte-rerank-v2", # Имя модели реранкера (обязательно)
)
# Переранжировать тексты-кандидаты на основе запроса, возвращая top_n с наивысшими оценками
print(reranker.rerank(documents=sequence, query="Что такое Python", top_n=2))
Метод rerank повторно оценивает и переранжирует документы-кандидаты на основе запроса, а top_n задаёт количество возвращаемых результатов. Обычно используется на этапе точного ранжирования после поиска RAG.
Интеграция JavaScript и Java
JavaScript: режим совместимости с OpenAI
В Node.js используйте класс интеграции ChatOpenAI из пакета @langchain/openai.
Сначала установите зависимости:
npm install @langchain/openai @langchain/core
Пример кода:
Пример
// Создать экземпляр чат-модели для подключения к Bailian через протокол, совместимый с OpenAI
const llm = new ChatOpenAI({
model: "qwen-plus", // Имя модели (обязательно), здесь в качестве примера используется qwen-plus
apiKey: process.env.DASHSCOPE_API_KEY, // Прочитать API-ключ Bailian из переменной окружения (обязательно)
configuration: {
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1", // Конечная точка API Bailian, совместимого с OpenAI (обязательно)
},
});
// Выполнить вызов чата, возвращающий объект сообщения ИИ
const aiMsg = await llm.invoke([
{ role: "system", content: "Вы — полезный помощник, который переводит с английского на французский. Переведите предложение пользователя." }, // Системное сообщение
{ role: "user", content: "Я люблю программировать." }, // Сообщение пользователя
]);
console.log('---------------------------');
console.log(aiMsg.content);
Результат вывода:
--------------------------- J'adore la programmation.
JavaScript: нативный режим DashScope
Используйте класс интеграции ChatAlibabaTongyi из пакета @langchain/community.
Сначала установите зависимости:
Пример
Пример кода:
Пример
import { HumanMessage } from "@langchain/core/messages";
// По умолчанию используется модель qwen-turbo; требуется только API-ключ
const qwenTurbo = new ChatAlibabaTongyi({
alibabaApiKey: process.env.DASHSCOPE_API_KEY, // Чтение API-ключа из переменной среды (обязательно)
});
// Используйте qwen-plus, и вы можете дополнительно указать параметры генерации, такие как temperature
const qwenPlus = new ChatAlibabaTongyi({
model: "qwen-plus", // Название модели (обязательно)
temperature: 1, // Температура генерации; чем больше значение, тем более разнообразным будет вывод
alibabaApiKey: process.env.DASHSCOPE_API_KEY, // Чтение API-ключа из переменной среды (обязательно)
});
const messages = [new HumanMessage("Привет")];
// Вызовите две модели по отдельности и выведите результаты
const res = await qwenTurbo.invoke(messages);
const res2 = await qwenPlus.invoke(messages);
console.log('---------------------------');
console.log(res.content);
console.log('---------------------------');
console.log(res2.content);
Java: режим совместимости с OpenAI (LangChain4j)
Экосистема Java использует фреймворк LangChain4j для подключения к Bailian через модуль langchain4j-open-ai.
Для LangChain4j 1.0.0-beta3 требуется Java 17 или выше.
При компиляции с Java 11 будет выдана ошибка "Unsupported class file major version 61". Обновление JDK решит эту проблему.
Добавьте зависимость в pom.xml:
<!-- 文件路径:pom.xml -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.0.0-beta3</version>
</dependency>
Пример кода:
Пример
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
public class LangChainOpenAITest {
public static void main(String[] args) {
// Создать модель чата, повторно использовать протокол OpenAI для подключения к Bailian
ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY")) // Считать ключ API из переменной окружения (обязательно)
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1") // Адрес Bailian, совместимый с OpenAI (обязательно)
.modelName("qwen-plus") // Имя модели (обязательно)
.build();
SystemMessage systemMessage = SystemMessage.from("Вы эксперт по психологии"); // Системное сообщение, задать роль
UserMessage userMessage = UserMessage.from("Привет"); // Сообщение пользователя
System.out.println(model.chat(systemMessage, userMessage).aiMessage().text());
}
}
Java: нативный режим DashScope (LangChain4j)
Используйте модуль langchain4j-community-dashscope, поддерживающий обычные и потоковые вызовы.
Добавьте зависимость в pom.xml:
<!-- 文件路径:pom.xml -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope</artifactId>
<version>1.0.0-beta3</version>
</dependency>
Пример кода (обычный вызов и потоковый вызов):
Пример
import dev.langchain4j.community.model.dashscope.QwenStreamingChatModel;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.chat.StreamingChatLanguageModel;
import dev.langchain4j.model.chat.request.ChatRequest;
import dev.langchain4j.model.chat.response.ChatResponse;
import dev.langchain4j.model.chat.response.StreamingChatResponseHandler;
public class LangChainDashScopeTest {
public static void main(String[] args) {
chatLanguageModelTest(); // Обычный вызов
// streamingChatLanguageModelTest(); // Потоковый вызов, раскомментируйте при необходимости
}
// Обычный вызов: возвращает полный результат сразу
public static void chatLanguageModelTest() {
ChatLanguageModel qwenModel = QwenChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY")) // Считать ключ API из переменной окружения (обязательно)
.modelName("qwen-plus") // Имя модели (обязательно)
.build();
// Построение запроса, сообщения расположены в хронологическом порядке
ChatRequest request = ChatRequest.builder()
.messages(new ChatMessage[]{
SystemMessage.from("Вы эксперт по психологии"), // Системное сообщение
UserMessage.from("Привет") // Сообщение пользователя
})
.build();
System.out.println(qwenModel.chat(request).aiMessage().text());
}
// Потоковый вызов: получать сгенерированный текст по сегментам
public static void streamingChatLanguageModelTest() {
StreamingChatLanguageModel model = QwenStreamingChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.modelName("qwen-plus")
.build();
model.chat("Привет", new StreamingChatResponseHandler() {
@Override
public void onPartialResponse(String s) { // Колбэк один раз для каждого сгенерированного сегмента
System.out.println(s);
}
@Override
public void onCompleteResponse(ChatResponse chatResponse) { // Генерация завершена
System.out.println("Диалог завершен");
System.exit(0);
}
@Override
public void onError(Throwable throwable) { // Возникло исключение
System.out.println("Возникло исключение");
System.exit(0);
}
});
}
}
LangChain4j также предоставляет Spring Boot Starter. Не нужно вручную создавать объекты моделей; достаточно настроить в application.properties.
Пример
# API-ключ (обязательно)
langchain4j.open-ai.chat-model.api-key=${DASHSCOPE_API_KEY}
# Имя модели (обязательно)
langchain4j.open-ai.chat-model.model-name=qwen-plus
# Адрес API, совместимого с OpenAI (обязательно)
langchain4j.open-ai.chat-model.base-url=https://dashscope.aliyuncs.com/compatible-mode/v1
# Порт сервиса
server.port=9000
У собственного Starter DashScope элементы конфигурации имеют те же имена. Просто измените префикс на langchain4j.community.dashscope.chat-model, и нет необходимости настраивать base-url.
Примечания / Часто задаваемые вопросы
При возникновении проблем во время интеграции вы можете быстро найти их, обратившись к контрольному списку ниже.
Требования к версии Java
LangChain4j 1.0.0-beta3 требует Java 17 или более поздней версии.
При компиляции с Java 11 будет выдано сообщение "Unsupported class file major version 61". Обновление JDK решит эту проблему.
Режим, совместимый с OpenAI, поддерживает только некоторые модели
API, совместимый с OpenAI, поддерживает только некоторые модели Bailian. Полный список см. в официальной документации.
Если вызываемая модель не входит в поддерживаемый диапазон, переключитесь на нативный режим DashScope.
Размерность векторов эмбеддингов по умолчанию
При вызове text-embedding-v3 / v4 через LangChain они по умолчанию выдают 1024-мерные векторы, и размерность нельзя указать вручную.
При создании таблиц базы данных, пожалуйста, зарезервируйте поле вектора размерности 1024.
Безопасность ключа API
Не встраивайте API Key в код жестко; единообразно внедряйте его через переменную среды DASHSCOPE_API_KEY.
Для production-сред рекомендуется использовать в сочетании с Alibaba Cloud Key Management Service (KMS).
Ссылки
Следующая официальная документация поможет вам разобраться в соответствующих деталях:
| Тема | Ссылка |
|---|---|
| Получить API-ключ | https://help.aliyun.com/zh/model-studio/get-api-key |
| Настройте переменные среды | https://help.aliyun.com/zh/model-studio/configure-api-key-through-environment-variables |
| Список моделей Bailian | https://help.aliyun.com/zh/model-studio/getting-started/models |
| Список моделей, совместимых с OpenAI | https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope |
| Документация по ChatOpenAI для Python | https://python.langchain.com/docs/integrations/chat/openai/ |
| Документация по OpenAIEmbeddings для Python | https://python.langchain.com/docs/integrations/text_embedding/openai/ |
| Документация Python ChatTongyi | https://python.langchain.com/docs/integrations/chat/tongyi/ |
| Документация LangChain4j DashScope | https://docs.langchain4j.dev/integrations/language-models/dashscope |