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:

LangChain 集成阿里云百炼架构图

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

from dotenv import load_dotenv

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.

VergleichspunktOpenAI-kompatibler ModusNativer DashScope-Modus
IntegrationsprinzipWiederverwendet die OpenAI-Protokoll-IntegrationsklasseVerwendet das native DashScope-SDK
Unterstützte ModelleNur einige ModelleAlle Textgenerierungsmodelle und bereitgestellten Modelle
Python-IntegrationsklasseChatOpenAIChatTongyi
JavaScript-IntegrationsklasseChatOpenAIChatAlibabaTongyi
Java-IntegrationsklasseOpenAiChatModelQwenChatModel
Geeignete SzenarienBestehender OpenAI-Code muss schnell umgestellt werdenBenö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 langchain_openai import ChatOpenAI
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_community.chat_models.tongyi import ChatTongyi
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.

ModellMTEBMTEB (Retrieval-Aufgabe)CMTEBCMTEB (Retrieval-Aufgabe)
text-embedding-v158.3045.4759.8456.59
text-embedding-v260.1349.4962.1762.78
text-embedding-v3 (1024 Dimensionen)63.3955.4168.9273.23
text-embedding-v4 (1024 Dimensionen)68.3659.3070.1473.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 langchain_openai import OpenAIEmbeddings
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:

ModellMaximale Anzahl von DokumentenMaximale Eingabe pro ElementSprachunterstützungEinheitspreis (pro tausend Token)Anwendbare Szenarien
qwen3-vl-rerank1008,000 Token33 gängige Sprachen, darunter Chinesisch, Englisch, Japanisch, Koreanisch usw.Bild 0.0018 yuan / Text 0.0007 yuanBildclustering, crossmodale Suche, Bildabruf
qwen3-rerank5004,000 Token100+ Sprachen, darunter Chinesisch, Englisch, Spanisch, Französisch, Japanisch, Koreanisch usw.0.0005 yuanSemantische Textsuche, RAG-Anwendungen
gte-rerank-v2—30,000 TokenMehr als 50 Sprachen, darunter Chinesisch, Englisch, Japanisch, Koreanisch, Thai usw.0.0008 yuanLangtext-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 langchain_community.document_compressors.dashscope_rerank import DashScopeRerank
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

import { ChatOpenAI } from "@langchain/openai";

// 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

npm install @langchain/community @langchain/core

Beispielcode:

Beispiel

import { ChatAlibabaTongyi } from "@langchain/community/chat_models/alibaba_tongyi";
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.SystemMessage;
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.QwenChatModel;
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

# Dateipfad: application.properties
# 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:

ThemaLink
API-Schlüssel abrufenhttps://help.aliyun.com/zh/model-studio/get-api-key
Umgebungsvariablen konfigurierenhttps://help.aliyun.com/zh/model-studio/configure-api-key-through-environment-variables
Bailian-Modelllistehttps://help.aliyun.com/zh/model-studio/getting-started/models
OpenAI-kompatible Modelllistehttps://help.aliyun.com/zh/model-studio/compatibility-of-openai-with-dashscope
Python ChatOpenAI-Dokumentationhttps://python.langchain.com/docs/integrations/chat/openai/
Python OpenAIEmbeddings-Dokumentationhttps://python.langchain.com/docs/integrations/text_embedding/openai/
Python-ChatTongyi-Dokumentationhttps://python.langchain.com/docs/integrations/chat/tongyi/
LangChain4j DashScope-Dokumentationhttps://docs.langchain4j.dev/integrations/language-models/dashscope
Weitere Erweiterungen