LangChain Chat Model – Häufige Parameter
Im vorherigen Abschnitt haben wirinit_chat_model()die grundlegende Verwendung von gelernt
In diesem Abschnitt werden die gängigen Steuerungsparameter erläutert, die beim Aufrufen von Modellen verwendet werden, damit Sie das Modellverhalten besser steuern können.
temperature - Steuerung von Kreativität und Determinismus
temperatureEs ist der am häufigsten verwendete Parameter mit einem Wertebereich von 0 bis 2. Er steuert die Zufälligkeit der Modellausgabe.
Beispiel
# Vergleich verschiedener Temperaturwerte für dieselbe Frage
question = "Stelle Python Tutorial Python in einem Satz vor"
# temperature=0: Die Ausgabe ist sehr deterministisch, fast jedes Mal identisch
model_low = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)
resp1 = model_low.invoke(question)
resp2 = model_low.invoke(question)
print(f"temperature=0 1. Mal: {resp1.content}")
print(f"temperature=0 2. Mal: {resp2.content}")
print(f"Beide Ergebnisse sind identisch: {resp1.content == resp2.content}")
print()
# temperature=1.5: Die Ausgabe ist vielfältig, kann sich jedes Mal unterscheiden
model_high = init_chat_model("deepseek:deepseek-v4-flash", temperature=1.5)
resp1 = model_high.invoke(question)
resp2 = model_high.invoke(question)
print(f"temperature=1.5 1. Mal: {resp1.content}")
print(f"temperature=1.5 2. Mal: {resp2.content}")
Ausgabe:
temperature=0 第1次: Example是一个为编程初学者提供免费教程的学习平台。 temperature=0 第2次: Example是一个为编程初学者提供免费教程的学习平台。 两次结果相同: True temperature=1.5 第1次: Example是一个简单易懂的编程与网络技术入门学习平台。 temperature=1.5 第2次: Example是深受编程新手喜爱的中文免费在线技术学习平台。
| Temperaturwert | Wirkung | Anwendungsfälle |
|---|---|---|
| 0 ~ 0.3 | Stabile und deterministische Ausgabe, die Ergebnisse sind bei jedem Durchlauf nahezu identisch | Datenextraktion, Klassifizierung, Codegenerierung, Übersetzung |
| 0.5 ~ 0.7 | Mittlere Kreativität, natürliche Ausgabe, die beim Thema bleibt | Alltagsgespräche, Inhaltszusammenfassung |
| 0.8 ~ 1.2 | Vielfältige Ausgabe mit mehr Spielraum für Kreativität | Kreatives Schreiben, Brainstorming |
| 1.3 ~ 2.0 | Sehr zufällige Ausgabe, unerwartete Inhalte können auftauchen | Explorative Generierung (nicht für die Produktion empfohlen) |
temperature=0 bedeutet nicht "exakt identisch". Aufgrund von Gleitkomma-Präzisionsunterschieden in den internen Berechnungen des Modells kann es in extremen Fällen dennoch winzige Unterschiede geben. Wenn absoluter Determinismus benötigt wird, bieten einige Modelle einen seed-Parameter.
max_tokens - Steuerung von Ausgabelänge und Kosten
max_tokensBegrenzt die maximale Anzahl von Tokens in der Modellausgabe. Ein Token entspricht ungefähr 0.75 englischen Wörtern oder 0.5 chinesischen Schriftzeichen.
Beispiel
model = init_chat_model("deepseek:deepseek-v4-flash", temperature=0)
# max_tokens=30: Ausgabe auf maximal 30 Tokens begrenzen
response_short = model.invoke(
"Beschreibe die Example Tutorial EXAMPLE-Plattform ausführlich",
max_tokens=30
)
print(f"Begrenzt auf 30 Tokens ({len(response_short.content)} Zeichen):")
print(response_short.content)
print()
# max_tokens=200: Längere Ausgabe zulassen
response_long = model.invoke(
"Beschreibe die Example Tutorial EXAMPLE-Plattform ausführlich",
max_tokens=200
)
print(f"Begrenzt auf 200 Tokens ({len(response_long.content)} Zeichen):")
print(response_long.content)
Ausgabe:
限制 30 tokens (42 字符): Example是一个面向编程初学者的在线学习平台,提供各种编程语言的教程和实例。 限制 200 tokens (306 字符): Example是一个面向编程初学者的在线学习平台,提供了丰富的编程教程和参考资料。 该平台涵盖了 HTML、CSS、JavaScript、Python、Java、C、C++、PHP、SQL 等多种编程语言和技术。 Example的特点包括: 1. 内容系统化:从基础到进阶,帮助学习者逐步掌握编程知识 2. 实例丰富:每个知识点都配有可运行的代码示例 3. ...
max_tokens ist eine harte Obergrenze für die Ausgabelänge. Wenn sie zu niedrig eingestellt wird, kann die Antwort des Modells mitten im Satz abrupt abgeschnitten werden. Im Allgemeinen wird empfohlen, sie je nach Szenario zwischen 100-2000 einzustellen. Für Szenarien mit "Ein-Satz-Antwort" sind 30-100 ausreichend; für Szenarien mit "detaillierter Erklärung" werden 500-2000 empfohlen.
timeout und max_retries - Netzwerkzuverlässigkeit
In Produktionsumgebungen können Netzwerkanfragen aus verschiedenen Gründen fehlschlagen. Diese beiden Parameter helfen Ihnen, das Anfrageverhalten zu steuern.
Beispiel
# Empfohlene Konfiguration für die Produktionsumgebung
model = init_chat_model(
"deepseek:deepseek-v4-flash",
# Höchstens 30 Sekunden auf eine einzelne Anfrage warten
timeout=30,
# Nach einem Fehler bis zu 3-mal wiederholen (insgesamt 4 Anfrageversuche)
max_retries=3,
)
# Einen normalen Aufruf simulieren
try:
response = model.invoke("Was ist Python Tutorial Python?")
print(f"Aufruf erfolgreich: {response.content[:50]}...")
except Exception as e:
print(f"Aufruf fehlgeschlagen: {e}")
| Parameter | Beschreibung | Empfohlener Wert |
|---|---|---|
| timeout | Maximale Wartezeit für eine einzelne Anfrage (Sekunden). None bedeutet keine Begrenzung | 30~60 (zu kurz kann Zeitüberschreitungen verursachen; zu lang beeinträchtigt die Benutzererfahrung) |
| max_retries | Anzahl der Wiederholungsversuche nach einem Fehler. 0 bedeutet keine Wiederholung | 2~3 (ausreichend für die Behandlung gelegentlicher Netzwerkprobleme) |
Zeitkostenanalyse für die Einstellung von timeout und max_retries:
假设 timeout=30, max_retries=3: 单次成功: ~2s 第1次失败+重试成功: ~2s + ~2s = ~4s 全部失败: 4次 × 30s = 最多 120s 才抛出异常
base_url - Benutzerdefinierte API-Adresse
Der Parameter base_url ist sehr nützlich, wenn Sie über einen Proxy, einen Relay-Dienst oder eine private Bereitstellung auf Modelle zugreifen müssen.
Beispiel
# Szenario 1: Zugriff auf OpenAI über einen Proxy
model = init_chat_model(
"deepseek:deepseek-v4-flash",
base_url="https://your-proxy-domain.com/v1", # Proxy-Adresse
)
# Szenario 2: Verwendung eines Drittanbieterdienstes, der mit der OpenAI-API kompatibel ist
# Viele inländische Modelle bieten OpenAI-kompatible Schnittstellen
model = init_chat_model(
"deepseek:deepseek-v4-flash", # Anbieter auf openai setzen
base_url="https://api.third-party.com/v1", # Aber es zeigt tatsächlich auf einen Drittanbieter
api_key="your-third-party-key", # API-Schlüssel von Drittanbietern
)
# Szenario 3: Verbindung mit lokalen Modellen (z. B. vLLM, Ollama)
model = init_chat_model(
"openai:qwen2.5", # Name des lokalen Modells
base_url="http://localhost:8000/v1", # Adresse des lokalen Dienstes
api_key="not-needed", # Lokal wird normalerweise kein Schlüssel benötigt
)
base_url ändert die API-Endpunktadresse, aber der Parameter provider bestimmt den Verhaltensmodus. Zum Beispiel verwendet provider="openai" das Nachrichtenformat von OpenAI, selbst wenn base_url auf einen anderen Dienst zeigt. Stellen Sie sicher, dass der Zieldienst mit dem von Ihnen angegebenen Provider-Format kompatibel ist.
Weitere häufige Parameter
top_p - Nucleus-Sampling
Beispiel
# top_p ist eine weitere Möglichkeit, die Zufälligkeit zu steuern
# Das Modell zieht nur Stichproben aus Wörtern, deren kumulierte Wahrscheinlichkeit top_p erreicht
# top_p=0.1 bedeutet, dass nur aus den 10% Wörtern mit der höchsten Wahrscheinlichkeit ausgewählt wird
model = init_chat_model(
"deepseek:deepseek-v4-flash",
top_p=0.9, # Nur Wörter in den obersten 90% der kumulierten Wahrscheinlichkeit berücksichtigen
)
response = model.invoke("Stelle Python Tutorial Python vor")
print(response.content[:100])
Es wird im Allgemeinen empfohlen, nur einen von temperature oder top_p anzupassen, nicht beide gleichzeitig. Wenn beide gesetzt sind, kann das Verhalten des Modells schwer vorherzusagen sein.
stop - Stoppsequenz
Beispiel
model = init_chat_model("deepseek:deepseek-v4-flash")
# Der stop-Parameter gibt Stoppsequenzen an; das Modell beendet die Generierung sofort, wenn es auf diese Wörter trifft
response = model.invoke(
"Nenne fünf Websites zum Programmierenlernen, eine pro Zeile",
stop=["\n"] # Beende, wenn ein Zeilenumbruch auftritt, und gib nur den ersten zurück
)
print(f"Begrenzung stop=['\n']: {response.content}"\\n']: {response.content}")
Ausgabe:
限制 stop=['\n']: 1. Example
seed - Reproduzierbarkeit (von einigen Modellen unterstützt)
Beispiel
# Einige Modelle unterstützen den seed-Parameter, um deterministische Ausgaben zu erhalten
# Gleicher seed + gleiche Eingabe = gleiche Ausgabe
model = init_chat_model("deepseek:deepseek-v4-flash", seed=42, temperature=0)
resp1 = model.invoke("Stelle Python Tutorial vor")
resp2 = model.invoke("Python-Tutorial vorstellen")
print(f"seed=42, Ergebnisse identisch: {resp1.content == resp2.content}")
Parameter-Kurzreferenztabelle
| Parameter | Type | Standardwert | Wann verwenden |
|---|---|---|---|
| temperature | float | Variiert je nach Modell | Auf 0~0.3 setzen, wenn die Aufgabe Stabilität erfordert, und auf 0.7~1.0, wenn Kreativität benötigt wird |
| max_tokens | int | Modell-Obergrenze | Wenn die Ausgabelänge gesteuert werden muss |
| timeout | int/float | Keine | Empfohlen, in Produktionsumgebungen immer festzulegen |
| max_retries | int | Variiert je nach Modell | 2~3 empfohlen, wenn das Netzwerk instabil ist |
| base_url | str | Offizielle Adresse | Bei Verwendung eines Proxys, Relays oder lokalen Dienstes |
| top_p | float | 1.0 | Wenn Nucleus-Sampling-Steuerung benötigt wird (als Alternative zur Temperatur) |
| stop | list[str] | Keine | Wenn eine präzise Kontrolle über das Ende der Ausgabe erforderlich ist |