LangChain-Integration mit Alibaba Bailian
LangChain ist derzeit das beliebteste Entwicklungsframework für Anwendungen großer Sprachmodelle (LLM). Es hilft Entwicklern, mithilfe einheitlicher Komponentenschnittstellen schnell Prompt-, Modell-, Toolchain- und Agent-Anwendungen zu erstellen.
Alibaba Cloud Bailian (DashScope) ist die LLM-Serviceplattform von Alibaba Cloud und bietet die Chat-, Text-Embedding- und Reranker-Modelle der Tongyi-Qianwen-(qwen)-Serie.
Dieser Artikel erklärt, wie Bailian-Modelle in LangChain integriert werden, und behandelt drei Kategorien: Chat-Modelle, Text-Embedding-Modelle und Reranker-Modelle. Außerdem bietet er vollständige Beispiele in Python, JavaScript und Java.
Voraussetzungen
Wir müssen den Alibaba Cloud Bailian-Modellservice aktivieren und einen API-KEY erhalten.
Zuerst können wir mit dem Hauptkonto von Alibaba Cloud die Bailian-Modellservice-Plattform besuchen:https://bailian.console.aliyun.com/Klicken Sie dann oben rechts auf "Anmelden". Klicken Sie nach der Anmeldung oben rechts auf das Zahnrad-Symbol ⚙️, wählen Sie "API Key" und kopieren Sie den API-Schlüssel. Wenn Sie noch keinen haben, können Sie auch einen API-Schlüssel erstellen:


Bevor wir beginnen, wollen wir zunächst zwei Schlüsselkonzepte verstehen: LangChains "Modell-Integrationsklassen" und Bailians "Zwei Integrationsmodi".
Modell-Integrationsklassen
LangChain verpackt Modelle verschiedener Anbieter in einheitliche "Integrationsklassen".
Der Anwendungscode programmiert gegen eine einheitliche Schnittstelle. Beim Wechsel des Anbieters müssen Sie nur die Integrationsklasse und die Parameter ändern; die Geschäftslogik muss selten geändert werden.
Nehmen wir Chat-Modelle als Beispiel: Auf der Python-Seite gibt es zwei Integrationsklassen, ChatOpenAI und ChatTongyi, die jeweils dem OpenAI-kompatiblen Modus und dem nativen DashScope-Modus von Bailian entsprechen.
Zwei Integrationsmodi
Bailian bietet zwei Sätze von Integrationsprotokollen; verschiedene Protokolle entsprechen unterschiedlichen LangChain-Integrationsklassen.
OpenAI-kompatibler ModusDas API-Protokoll ist mit OpenAI konsistent. Jedes Framework, das das OpenAI-Protokoll unterstützt, kann sich direkt verbinden, was zu den geringsten Integrationskosten führt.
Nativer DashScope-ModusEr verwendet Bailians eigenes DashScope-Protokoll und kann alle Textgenerierungsmodelle von Bailian aufrufen, einschließlich bereitgestellter benutzerdefinierter Modelle.
Die Gesamtintegrationsarchitektur ist im folgenden Diagramm dargestellt:
Die sogenannte "OpenAI-kompatible Schnittstelle" bedeutet, dass das HTTP-API-Protokoll des Anbieters mit OpenAI konsistent ist.
Solange das Protokoll kompatibel ist, kann jeder für OpenAI geschriebene Code oder jedes Tool direkt wiederverwendet werden; nur der API-Endpunkt muss geändert werden.
Umgebungsvariablen konfigurieren
Alle Sprachen und Integrationsmethoden verwenden einheitlich die UmgebungsvariableDASHSCOPE_API_KEY, um den API-Schlüssel zu speichern.
Export im Terminal unter Linux / macOS:
export DASHSCOPE_API_KEY="sk-你的百炼APIKey"
Einrichtung unter Windows (CMD):
set DASHSCOPE_API_KEY=sk-你的百炼APIKey
Es wird empfohlen, den Export-Befehl in die Shell-Konfiguration (z. B. ~/.bashrc, ~/.zshrc) zu schreiben, damit man ihn nicht bei jedem Öffnen eines Terminals erneut setzen muss.
Konfiguration über .env-Datei (empfohlen)
Noch empfehlenswerter ist es, den API-Schlüssel in eine .env-Datei im Projektstammverzeichnis zu schreiben und python-dotenv zu verwenden, um ihn automatisch in Umgebungsvariablen zu laden.
Die Trennung des API-Schlüssels vom Code verhindert in Kombination mit .gitignore versehentliche Commits und erleichtert es jedem, bei der Zusammenarbeit seine eigene Konfiguration zu pflegen.
Erstellen Sie eine .env-Datei im Projektstammverzeichnis:
# 文件路径:项目根目录/.env DASHSCOPE_API_KEY=sk-你的百炼APIKey
Erstellen Sie zum Beispiel in unserem Testprojektexample-langchain-testeine.env-Datei und fügen Sie die Konfiguration hinzu:

Installieren Sie python-dotenv:
pip install python-dotenv
Laden Sie die .env-Datei am Anfang Ihres Python-Codes:
Beispiel
load_dotenv() # Liest die .env-Datei im Projektstammverzeichnis ein und injiziert sie als Umgebungsvariablen
Nach dem Laden kann os.getenv("DASHSCOPE_API_KEY") in Ihrem Code den Schlüssel lesen, was denselben Effekt hat wie das manuelle Exportieren.
Diese Ladevorgehensweise wurde bereits in den Beispielen im Abschnitt "Chat Model" gezeigt.
Die .env-Datei ist sensibel. Bitte fügen Sie sie zu .gitignore hinzu (schreiben Sie eine Zeile ".env"), um zu verhindern, dass der API-Schlüssel ins Repository committet wird.
Bitte ersetzen Sie den API-Schlüssel in den Beispielen durch einen echten Schlüssel und teilen Sie ihn niemals mit anderen.
Vergleich der beiden Integrationsmodi
Sehen Sie sich zuerst eine Vergleichstabelle an und wählen Sie dann den Integrationsmodus nach Bedarf.
| Vergleichspunkt | OpenAI-kompatibler Modus | Nativer DashScope-Modus |
|---|---|---|
| Integrationsprinzip | Wiederverwendet die OpenAI-Protokoll-Integrationsklasse | Verwendet das native DashScope-SDK |
| Unterstützte Modelle | Nur einige Modelle | Alle Textgenerierungsmodelle und bereitgestellten Modelle |
| Python-Integrationsklasse | ChatOpenAI | ChatTongyi |
| JavaScript-Integrationsklasse | ChatOpenAI | ChatAlibabaTongyi |
| Java-Integrationsklasse | OpenAiChatModel | QwenChatModel |
| Geeignete Szenarien | Bestehender OpenAI-Code muss schnell umgestellt werden | Benötigen Sie volle Modellfunktionen oder verwenden Sie bereitgestellte Modelle |
Beide Modi verwenden dieselbe Domain, dashscope.aliyuncs.com. Der Unterschied liegt im Pfad: Der Pfad des OpenAI-kompatiblen Modus ist /compatible-mode/v1, während der Pfad des DashScope-nativen Modus in das SDK integriert ist.
Chat-Modell
Chat-Modelle sind der am häufigsten verwendete Modelltyp und werden für Aufgaben wie mehrstufigen Dialog, Fragen und Antworten sowie Inhaltsgenerierung verwendet.
Im Folgenden stellen wir die Integrationsmethoden nach Sprache vor. Das Beispielmodell verwendet einheitlich qwen-plus, das nach Bedarf ersetzt werden kann.
Python: OpenAI-kompatibler Modus
Verwenden Sie die ChatOpenAI-Integrationsklasse aus dem langchain_openai-Paket, um Bailian als OpenAI-Dienst aufzurufen.
Installieren Sie zuerst die Abhängigkeiten:
pip install langchain_openai
Beispielcode:
Beispiel
from dotenv import load_dotenv # Konfiguration aus der .env-Datei lesen
import os
load_dotenv() # Umgebungsvariablen wie den API-Schlüssel aus der .env-Datei im Projektstammverzeichnis laden
# Erstellen Sie eine Chat-Modellinstanz, die über das OpenAI-kompatible Protokoll eine Verbindung zu Bailian herstellt
chatLLM = ChatOpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # Liest den Bailian-API-Schlüssel aus der Umgebungsvariable (erforderlich)
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # OpenAI-kompatibler API-Endpunkt von Bailian (erforderlich)
model="qwen-plus", # Modellname (erforderlich), hier wird qwen-plus als Beispiel verwendet
# Weitere optionale Parameter: temperature, max_tokens, usw.
)
# Eine Nachrichtenliste für eine Multi-Turn-Konversation erstellen
messages = [
{"role": "system", "content": "Du bist ein hilfreicher Assistent."}, # Systemnachricht, legt die Assistentenrolle fest
{"role": "user", "content": "Wer bist du?"}, # Benutzernachricht, der Inhalt der Frage
]
# Den Aufruf durchführen und ein strukturiertes Antwortobjekt zurückgeben
response = chatLLM.invoke(messages)
print(response.model_dump_json())
Ausgabeergebnis (einige Felder ausgelassen):
{
"content": "我是通义千问,由阿里云开发的大语言模型,可以回答你的问题、协助创作、提供建议等。",
"usage": { "prompt_tokens": 12, "completion_tokens": 28, "total_tokens": 40 }
}
Nach einem erfolgreichen Aufruf wird ein AIMessage-Objekt zurückgegeben. model_dump_json() kann es zur einfachen Ansicht der vollständigen Antwort in JSON serialisieren.
Python: DashScope Native-Modus
Verwenden Sie die Integrationsklasse ChatTongyi aus dem Paket langchain-community, die das native DashScope-Protokoll verwendet und Streaming-Ausgabe unterstützt.
ChatTongyi stammt aus dem Paket langchain-community, und sowohl dieses Paket als auch dashscope werden nicht mehr gepflegt.
Für neue Projekte wird empfohlen, die OpenAI-kompatible ChatOpenAI-Integration zu bevorzugen. Ziehen Sie diesen Ansatz nur in Betracht, wenn Sie native DashScope-Funktionen benötigen (z. B. bereitgestellte Modelle).
Installieren Sie zuerst die Abhängigkeiten:
pip install langchain-community dashscope
Beispielcode:
Beispiel
from langchain_core.messages import HumanMessage
from dotenv import load_dotenv # Konfiguration aus der .env-Datei lesen
import os
load_dotenv() # Umgebungsvariablen wie API-Schlüssel aus der .env-Datei im Projektstamm laden
# Erstellen Sie das Qwen-Chat-Modell mit dem nativen DashScope-Protokoll
chatLLM = ChatTongyi(
model="qwen-plus", # Modellname (erforderlich)
dashscope_api_key=os.getenv("DASHSCOPE_API_KEY"), # API-Key aus einer Umgebungsvariable lesen (erforderlich)
streaming=True, # Streaming-Ausgabe aktivieren
)
# Streame den Aufruf, empfange und gebe den Antwortinhalt Stück für Stück aus
res = chatLLM.stream([HumanMessage(content="hi")], streaming=True)
for r in res:
print("chat resp:", r.content)
Ausgabeergebnis:
chat resp: 你好 chat resp: !我是通义千问,有什么可以帮您的吗?
Streaming-Ausgabe ermöglicht es dem Modell, Inhalte während der Generierung Stück für Stück zurückzugeben, was sie für Chat-Oberflächen geeignet macht, die einen Schreibmaschineneffekt benötigen.
Text-Embedding-Modell
Embedding-Modelle wandeln Text in semantische Vektoren um und bilden die Grundlage für Anwendungen wie RAG (Retrieval-Augmented Generation) und semantische Suche.
Modellauswahl
Bailian bietet mehrere Versionen von Embedding-Modellen. Sie können ihre Leistung anhand der Evaluierungsmetriken MTEB und CMTEB vergleichen; je größer der Wert, desto besser.
| Modell | MTEB | MTEB (Retrieval-Aufgabe) | CMTEB | CMTEB (Retrieval-Aufgabe) |
|---|---|---|---|---|
| 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 Dimensionen) | 63.39 | 55.41 | 68.92 | 73.23 |
| text-embedding-v4 (1024 Dimensionen) | 68.36 | 59.30 | 70.14 | 73.98 |
Wenn text-embedding-v3 und text-embedding-v4 über LangChain aufgerufen werden, können Sie die Vektordimension nicht angeben; standardmäßig geben sie 1024-dimensionale Vektoren aus.
Höhere Versionen bieten eine bessere Leistung, priorisieren Sie daher v4.
Python-Beispiel
Die Embedding-API von Bailian ist mit der OpenAI-API-Spezifikation kompatibel. Verwenden Sie einfach die OpenAIEmbeddings-Integrationsklasse aus dem langchain-openai-Paket und richten Sie base_url auf den kompatiblen Endpunkt von Bailian.
Es ist nicht nötig, die nicht mehr gepflegten Pakete langchain-community und dashscope zu installieren.
Installieren Sie zuerst die Abhängigkeiten:
pip install langchain-openai
OpenAIEmbeddings erfordert drei Schlüsselparameter: model (Name des Embedding-Modells), api_key (Bailian-API-Schlüssel) und base_url (OpenAI-kompatibler Endpunkt von Bailian).
base_url ist fest auf https://dashscope.aliyuncs.com/compatible-mode/v1 eingestellt, was dem kompatiblen Endpunkt für Chat-Modelle entspricht.
Beispielcode:
Beispiel
from dotenv import load_dotenv # Konfiguration aus der .env-Datei lesen
import os
load_dotenv() # Umgebungsvariablen wie API-Schlüssel aus der .env-Datei im Projektstamm laden
# Erstellen Sie eine Embedding-Modellinstanz, um eine Verbindung zu Bailian über das OpenAI-kompatible Protokoll herzustellen.
# chunk_size=10: Bailians Embedding-API akzeptiert höchstens 10 Texte pro Anfrage.
# OpenAIEmbeddings packt standardmäßig 1000 Elemente auf einmal; wenn die Wissensdatenbank etwas groß ist, wird das Limit überschritten und ein Fehler gemeldet.
embeddings = OpenAIEmbeddings(
model="text-embedding-v4", # Name des Embedding-Modells (erforderlich), hier wird v4 als Beispiel verwendet
api_key=os.getenv("DASHSCOPE_API_KEY"), # Bailian-API-Key aus einer Umgebungsvariable lesen (erforderlich)
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1", # OpenAI-kompatibler Bailian-Endpunkt (erforderlich)
check_embedding_ctx_length=False,
chunk_size=10,
)
# Einzelnen Abfragetext vektorisieren
text = "Dies ist ein Testdokument."
query_result = embeddings.embed_query(text)
print("Textvektorlänge:", len(query_result), sep='')
# Mehrere Dokumente im Batch vektorisieren
doc_results = embeddings.embed_documents(
[
"Hallo!",
"Oh, hallo!",
"Wie heißt du?",
"Meine Freunde nennen mich World",
"Hello World!"
])
print("Anzahl der Textvektoren:", len(doc_results), ", Textvektorlänge:", len(doc_results[0]), sep='')
Ausgabeergebnis:
文本向量长度:1024 文本向量数量:5 ,文本向量长度:1024
embed_query wird verwendet, um eine Benutzerabfrage zu vektorisieren, und embed_documents wird verwendet, um Kandidatendokumente stapelweise zu vektorisieren. Nur wenn beide Ausgabevektoren dieselbe Dimension haben, kann die Ähnlichkeit berechnet werden.
Reranker-Modell
Reranker-Modelle bewerten die Abrufergebnisse neu und ordnen sie neu, wodurch die Antwortqualität von RAG-Anwendungen deutlich verbessert wird.
Modellparameter
Bailian bietet die folgenden Reranker-Modelle; wählen Sie basierend auf Sprache, Kosten und Szenario:
| Modell | Maximale Anzahl von Dokumenten | Maximale Eingabe pro Element | Sprachunterstützung | Einheitspreis (pro tausend Token) | Anwendbare Szenarien |
|---|---|---|---|---|---|
| qwen3-vl-rerank | 100 | 8,000 Token | 33 gängige Sprachen, darunter Chinesisch, Englisch, Japanisch, Koreanisch usw. | Bild 0.0018 yuan / Text 0.0007 yuan | Bildclustering, crossmodale Suche, Bildabruf |
| qwen3-rerank | 500 | 4,000 Token | 100+ Sprachen, darunter Chinesisch, Englisch, Spanisch, Französisch, Japanisch, Koreanisch usw. | 0.0005 yuan | Semantische Textsuche, RAG-Anwendungen |
| gte-rerank-v2 | — | 30,000 Token | Mehr als 50 Sprachen, darunter Chinesisch, Englisch, Japanisch, Koreanisch, Thai usw. | 0.0008 yuan | Langtext-Reranking |
Python-Beispiel
Verwenden Sie die Integrationsklasse DashScopeRerank aus dem Paket langchain-community.
Dieses Beispiel verwendet DashScopeRerank aus dem Paket langchain-community.
langchain-community und dashscope werden nicht mehr gepflegt. Bitte beachten Sie bei neuen Projekten die offiziell von Bailian bereitgestellten alternativen Integrationsmethoden.
Installieren Sie zuerst die Abhängigkeiten:
pip install langchain-community dashscope
Beispielcode:
Beispiel
from dotenv import load_dotenv # Konfiguration aus der .env-Datei lesen
load_dotenv() # Umgebungsvariablen wie API-Schlüssel aus der .env-Datei im Projektstamm laden
# Simuliere eine Liste von Kandidatentexten, die vom Retrieval zurückgegeben werden
sequence = ["example ist eine chinesische Lernwebsite, die Programmier-Tutorials anbietet", "text2", "text3"]
# Reranker-Modellinstanz erstellen
reranker = DashScopeRerank(
model="gte-rerank-v2", # Reranker-Modellname (erforderlich)
)
# Kandidatentexte anhand der Anfrage neu ranken und die top_n mit den höchsten Scores zurückgeben
print(reranker.rerank(documents=sequence, query="Was ist Python", top_n=2))
Die Rerank-Methode bewertet Kandidatendokumente anhand der Anfrage neu und ordnet sie neu, und top_n gibt die Anzahl der zurückzugebenden Ergebnisse an. Sie wird häufig in der Feinranking-Phase nach dem RAG-Retrieval verwendet.
JavaScript- und Java-Integration
JavaScript: OpenAI-kompatibler Modus
Verwenden Sie unter Node.js die ChatOpenAI-Integrationsklasse aus dem Paket @langchain/openai.
Installieren Sie zuerst die Abhängigkeiten:
npm install @langchain/openai @langchain/core
Beispielcode:
Beispiel
// Eine Chat-Modellinstanz erstellen, um Bailian über das OpenAI-kompatible Protokoll zu verbinden
const llm = new ChatOpenAI({
model: "qwen-plus", // Modellname (erforderlich), hier wird qwen-plus als Beispiel verwendet
apiKey: process.env.DASHSCOPE_API_KEY, // Bailian-API-Schlüssel aus einer Umgebungsvariable auslesen (erforderlich)
configuration: {
baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1", // OpenAI-kompatibler API-Endpunkt von Bailian (erforderlich)
},
});
// Einen Chat-Aufruf durchführen, der das KI-Nachrichtenobjekt zurückgibt
const aiMsg = await llm.invoke([
{ role: "system", content: "Du bist ein hilfreicher Assistent, der Englisch ins Französische übersetzt. Übersetze den Satz des Benutzers." }, // Systemnachricht
{ role: "user", content: "Ich liebe das Programmieren." }, // Benutzernachricht
]);
console.log('---------------------------');
console.log(aiMsg.content);
Ausgabeergebnis:
--------------------------- J'adore la programmation.
JavaScript: DashScope Native-Modus
Verwende die Integrationsklasse ChatAlibabaTongyi aus dem Paket @langchain/community.
Installieren Sie zuerst die Abhängigkeiten:
Beispiel
Beispielcode:
Beispiel
import { HumanMessage } from "@langchain/core/messages";
// Das Standardmodell ist qwen-turbo; nur der API-Schlüssel wird benötigt
const qwenTurbo = new ChatAlibabaTongyi({
alibabaApiKey: process.env.DASHSCOPE_API_KEY, // API-Schlüssel aus einer Umgebungsvariable lesen (erforderlich)
});
// qwen-plus verwenden; zusätzlich können Generierungsparameter wie temperature angegeben werden
const qwenPlus = new ChatAlibabaTongyi({
model: "qwen-plus", // Modellname (erforderlich)
temperature: 1, // Generierungstemperatur; je größer der Wert, desto divergenter die Ausgabe
alibabaApiKey: process.env.DASHSCOPE_API_KEY, // API-Schlüssel aus einer Umgebungsvariable lesen (erforderlich)
});
const messages = [new HumanMessage("Hello")];
// Die beiden Modelle separat aufrufen und die Ergebnisse ausgeben
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-kompatibler Modus (LangChain4j)
Das Java-Ökosystem verwendet das LangChain4j-Framework, um über das langchain4j-open-ai-Modul eine Verbindung zu Bailian herzustellen.
LangChain4j 1.0.0-beta3 erfordert Java 17 oder höher.
Beim Kompilieren mit Java 11 wird der Fehler "Unsupported class file major version 61" gemeldet. Ein Upgrade des JDK behebt das Problem.
Fügen Sie die Abhängigkeit zu pom.xml hinzu:
<!-- 文件路径:pom.xml -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>1.0.0-beta3</version>
</dependency>
Beispielcode:
Beispiel
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) {
// Chat-Modell erstellen, OpenAI-Protokoll wiederverwenden, um eine Verbindung zu Bailian herzustellen
ChatLanguageModel model = OpenAiChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY")) // API-Schlüssel aus Umgebungsvariable lesen (erforderlich)
.baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1") // Bailian OpenAI-kompatible Adresse (erforderlich)
.modelName("qwen-plus") // Modellname (erforderlich)
.build();
SystemMessage systemMessage = SystemMessage.from("Du bist ein Psychologie-Experte"); // Systemnachricht, Rolle festlegen
UserMessage userMessage = UserMessage.from("Hallo"); // Benutzernachricht
System.out.println(model.chat(systemMessage, userMessage).aiMessage().text());
}
}
Java: DashScope Native-Modus (LangChain4j)
Verwenden Sie das Modul langchain4j-community-dashscope; es unterstützt reguläre Aufrufe und Streaming-Aufrufe.
Fügen Sie die Abhängigkeit zu pom.xml hinzu:
<!-- 文件路径:pom.xml -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-dashscope</artifactId>
<version>1.0.0-beta3</version>
</dependency>
Beispielcode (regulärer Aufruf und Streaming-Aufruf):
Beispiel
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(); // Regulärer Aufruf
// streamingChatLanguageModelTest(); // Streaming-Aufruf, bei Bedarf Kommentarzeichen entfernen
}
// Regulärer Aufruf: liefert das vollständige Ergebnis auf einmal zurück
public static void chatLanguageModelTest() {
ChatLanguageModel qwenModel = QwenChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY")) // API-Schlüssel aus Umgebungsvariable lesen (erforderlich)
.modelName("qwen-plus") // Modellname (erforderlich)
.build();
// Anfrage aufbauen, Nachrichten sind in chronologischer Reihenfolge angeordnet
ChatRequest request = ChatRequest.builder()
.messages(new ChatMessage[]{
SystemMessage.from("Du bist ein Psychologie-Experte"), // Systemnachricht
UserMessage.from("Hallo") // Benutzernachricht
})
.build();
System.out.println(qwenModel.chat(request).aiMessage().text());
}
// Streaming-Aufruf: generierten Text Segment für Segment empfangen
public static void streamingChatLanguageModelTest() {
StreamingChatLanguageModel model = QwenStreamingChatModel.builder()
.apiKey(System.getenv("DASHSCOPE_API_KEY"))
.modelName("qwen-plus")
.build();
model.chat("Hallo", new StreamingChatResponseHandler() {
@Override
public void onPartialResponse(String s) { // Callback einmal für jedes generierte Segment
System.out.println(s);
}
@Override
public void onCompleteResponse(ChatResponse chatResponse) { // Generierung abgeschlossen
System.out.println("Konversation beendet");
System.exit(0);
}
@Override
public void onError(Throwable throwable) { // Eine Ausnahme ist aufgetreten
System.out.println("Eine Ausnahme ist aufgetreten");
System.exit(0);
}
});
}
}
LangChain4j bietet außerdem einen Spring Boot Starter. Sie müssen keine Modellobjekte manuell erstellen; konfigurieren Sie einfach in application.properties.
Beispiel
# API-Schlüssel (erforderlich)
langchain4j.open-ai.chat-model.api-key=${DASHSCOPE_API_KEY}
# Modellname (erforderlich)
langchain4j.open-ai.chat-model.model-name=qwen-plus
# OpenAI-kompatible API-Adresse (erforderlich)
langchain4j.open-ai.chat-model.base-url=https://dashscope.aliyuncs.com/compatible-mode/v1
# Dienstport
server.port=9000
Die Konfigurationseinträge des nativen DashScope-Starters haben dieselben Namen. Ändern Sie einfach das Präfix in langchain4j.community.dashscope.chat-model, und base-url muss nicht konfiguriert werden.
Hinweise / Häufig gestellte Fragen
Bei Problemen während der Integration können Sie diese anhand der untenstehenden Checkliste schnell lokalisieren.
Java-Versionsanforderungen
LangChain4j 1.0.0-beta3 erfordert Java 17 oder höher.
Beim Kompilieren mit Java 11 wird "Unsupported class file major version 61" gemeldet. Ein Upgrade des JDK behebt das.
Der OpenAI-kompatible Modus unterstützt nur einige Modelle.
Die OpenAI-kompatible API unterstützt nur einige Bailian-Modelle. Die vollständige Liste finden Sie in der offiziellen Dokumentation.
Wenn das aufgerufene Modell nicht im unterstützten Bereich liegt, wechseln Sie in den nativen DashScope-Modus.
Standardmäßige Dimensionen von Embedding-Vektoren
Beim Aufruf von text-embedding-v3 / v4 über LangChain geben diese standardmäßig 1024-dimensionale Vektoren aus, und die Dimension kann nicht manuell angegeben werden.
Beim Erstellen von Datenbanktabellen reservieren Sie bitte ein 1024-dimensionales Vektorfeld.
API-Key-Sicherheit
Hardcodieren Sie den API Key nicht im Code; injizieren Sie ihn einheitlich über die Umgebungsvariable DASHSCOPE_API_KEY.
Für Produktionsumgebungen wird empfohlen, den Alibaba Cloud Key Management Service (KMS) in Verbindung damit zu verwenden.
Referenzlinks
Die folgende offizielle Dokumentation kann Ihnen helfen, die relevanten Details zu verstehen:
| Thema | Link |
|---|---|
| API-Schlüssel abrufen | https://help.aliyun.com/zh/model-studio/get-api-key |
| Umgebungsvariablen konfigurieren | https://help.aliyun.com/zh/model-studio/configure-api-key-through-environment-variables |
| Bailian-Modellliste | https://help.aliyun.com/zh/model-studio/getting-started/models |
| OpenAI-kompatible Modellliste | https://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope |
| Python ChatOpenAI-Dokumentation | https://python.langchain.com/docs/integrations/chat/openai/ |
| Python OpenAIEmbeddings-Dokumentation | https://python.langchain.com/docs/integrations/text_embedding/openai/ |
| Python-ChatTongyi-Dokumentation | https://python.langchain.com/docs/integrations/chat/tongyi/ |
| LangChain4j DashScope-Dokumentation | https://docs.langchain4j.dev/integrations/language-models/dashscope |