AI Personal Learning
und praktische Anleitung
TRAE

Ollama in LangChain - Integration von JavaScript

kurz

In diesem Dokument wird beschrieben, wie Sie die Ollama Ollama ist ein Open-Source-Implementierungstool für große Sprachmodelle, und LangChain ist ein Framework für die Entwicklung von Sprachmodell-basierten Anwendungen. Durch die Kombination der beiden können wir fortschrittliche KI-Modelle in einer lokalen Umgebung schnell einsetzen und nutzen.

Hinweis: Dieses Dokument enthält wichtige Codeschnipsel und ausführliche Erklärungen. Der vollständige Code ist in notebook/c5/ollama_langchain_javascript zu finden.

 

1. umweltbezogene Einstellungen

Konfigurieren der Node.js-Umgebung

Stellen Sie zunächst sicher, dass Sie Node.js auf Ihrem System installiert haben. Sie können die neueste Version von der Node.js-Website herunterladen und installieren.

Erstellen eines Projekts und Installieren von Abhängigkeiten

  1. Wechseln Sie in das Ausführungsverzeichnis, um es auszuführen:
cd notebook/C5/ollama_langchain_javascript
npm init -y
  1. Installieren Sie die erforderlichen Abhängigkeiten:
npm install @langchain/ollama @langchain/core @langchain/community zod
  1. existieren package.json Datei durch Hinzufügen der "type": "module" um die Unterstützung von ES-Modulen zu aktivieren:
{
"type": "module",
// ... 其他配置
}

 

2. das gewünschte Modell herunterladen und Ollama initialisieren

Lama3.1-Modell herunterladen

  1. Besuchen Sie die offizielle Website https://ollama.com/download, um Ollama auf den verfügbaren unterstützten Plattformen herunterzuladen und zu installieren.
  2. Unter https://ollama.ai/library finden Sie alle verfügbaren Modelle.
  3. passieren (eine Rechnung oder Inspektion etc.) ollama pull <name-of-model> um die verfügbaren LLM-Modelle abzurufen (zum Beispiel:ollama pull llama3.1).

Die Befehlszeile wird wie in der Abbildung gezeigt ausgeführt:

Ollama in LangChain - JavaScript Integration-1


Speicherort des Modells:

  • Mac. ~/.ollama/models/
  • Linux (oder WSL). /usr/share/ollama/.ollama/models
  • Fenster. C:\Users\Administrator\.ollama\models

Sobald der Download abgeschlossen ist, müssen Sie sicherstellen, dass der Ollama-Dienst gestartet ist:

ollama ps

Ollama in LangChain - JavaScript Integration-2

 

3 Beispiele für die grundlegende Verwendung

Einfache Unterhaltungen mit ChatOllama

lauffähig base_chat.js Datei ist der spezifische Code wie folgt:

import { Ollama } from "@langchain/community/llms/ollama";
const ollama = new Ollama({
baseUrl: "http://localhost:11434",  // 确保Ollama服务已经启动
model: "llama3.1", // 替换为实际使用的模型
});
const stream = await ollama.stream(
`你比GPT4厉害吗?`
);
const chunks = [];
for await (const chunk of stream) {
chunks.push(chunk);
}
console.log(chunks.join(""));

Führen Sie den Code aus:

node base_chat.js

Dieser Code erfüllt mehrere Aufgaben:

  1. Importieren Sie die Klasse Ollama und initialisieren Sie sie, indem Sie das Modell und die Basis-URL angeben.
  2. ausnutzen stream Methode sendet eine Frage an das Modell, die es uns ermöglicht, die Antwort blockweise zu erhalten.
  3. Verwenden Sie eine for-await-Schleife, um alle Antwortblöcke zu sammeln.
  4. Kombinieren Sie alle Blöcke und drucken Sie die vollständige Antwort.

Verwendung von multimodalen Modellen

in Bewegung seinbase_multimodal.jsDatei ist der spezifische Code wie folgt:

import { Ollama } from "@langchain/community/llms/ollama";
import * as fs from "node:fs/promises";
const imageData = await fs.readFile("../../../docs/images/C5-1-4.png"); // 可以替换为你想询问的图片
const model = new Ollama({
model: "llava",
baseUrl: "http://127.0.0.1:11434",
}).bind({
images: [imageData.toString("base64")],
});
const res = await model.invoke("图片里是什么动物呀?");
console.log({ res });

Führen Sie den Code aus:

node base_multimodal.js

Dieser Code zeigt, wie Bild- und Texteingaben mit einem multimodalen Modell wie llava verarbeitet werden können:

  1. Liest eine Bilddatei und konvertiert sie in base64-Kodierung.
  2. Initialisieren Sie das Ollama-Modell und verwenden Sie die bind Methode bindet die Bilddaten an das Modell.
  3. ausnutzen invoke Methode sendet eine Frage zu einem Bild.
  4. Drucken Sie die Modellantwort.

Werkzeug Aufruf

in Bewegung sein base_tool.js Datei mit dem folgenden Code:

import { tool } from "@langchain/core/tools";
import { ChatOllama } from "@langchain/ollama";
import { z } from "zod";
// 定义简单计算器工具
const simpleCalculatorTool = tool((args) => {
const { operation, x, y } = args;
switch (operation) {
case "add":
return x + y;
case "subtract":
return x - y;
case "multiply":
return x * y;
case "divide":
if (y !== 0) {
return x / y;
} else {
throw new Error("Cannot divide by zero");
}
default:
throw new Error("Invalid operation");
}
}, {
name: "simple_calculator",
description: "Perform simple arithmetic operations",
schema: z.object({
operation: z.enum(["add", "subtract", "multiply", "divide"]),
x: z.number(),
y: z.number(),
}),
});
// 定义模型
const llm = new ChatOllama({
model: "llama3.1",
temperature: 0,
});
// 将工具绑定到模型
const llmWithTools = llm.bindTools([simpleCalculatorTool]);
// 使用模型进行工具调用
const result = await llmWithTools.invoke(
"你知道一千万乘二是多少吗?请使用 'simple_calculator' 工具来计算。"
);
console.log(result);

Führen Sie den Code aus:

node base_tool.js

Dieser Code zeigt, wie man Werkzeuge definiert und verwendet:

  1. ausnutzen tool Funktion definiert ein einfaches Taschenrechner-Tool, einschließlich der Betriebslogik und des Parameterschemas.
  2. Initialisieren Sie das ChatOllama-Modell.
  3. ausnutzen bindTools Methode bindet das Werkzeug an das Modell.
  4. ausnutzen invoke Methode sendet ein zu berechnendes Problem und das Modell ruft automatisch das entsprechende Werkzeug auf.

 

4. erweiterte Nutzung

Benutzerdefinierte Prompt-Vorlagen

Maßgeschneiderte Prompt-Vorlagen verbessern nicht nur die Effizienz der Inhaltserstellung, sondern gewährleisten auch die Konsistenz und Relevanz der Ausgabe. Mit gut gestalteten Vorlagen können wir die Fähigkeiten des KI-Modells voll ausschöpfen und gleichzeitig die Kontrolle und Anleitung über den Ausgabeinhalt behalten:

import { ChatOllama } from "@langchain/ollama";
import { ChatPromptTemplate, SystemMessagePromptTemplate, HumanMessagePromptTemplate } from "@langchain/core/prompts";
// 初始化ChatOllama模型
const model = new ChatOllama({
model: "llama3.1",
temperature: 0.7,
});
const systemMessageContent = `
你是一位经验丰富的电商文案撰写专家。你的任务是根据给定的产品信息创作吸引人的商品描述。
请确保你的描述简洁、有力,并且突出产品的核心优势。
`;
const humanMessageTemplate = `
请为以下产品创作一段吸引人的商品描述:
产品类型: {product_type}
核心特性: {key_feature}
目标受众: {target_audience}
价格区间: {price_range}
品牌定位: {brand_positioning}
请提供以下三种不同风格的描述,每种大约50字:
1. 理性分析型
2. 情感诉求型
3. 故事化营销型
`;
const prompt = ChatPromptTemplate.fromMessages([
SystemMessagePromptTemplate.fromTemplate(systemMessageContent),
HumanMessagePromptTemplate.fromTemplate(humanMessageTemplate),
]);
const chain = prompt.pipe(model);
async function generateProductDescriptions(productInfo) {
const response = await chain.invoke(productInfo);
return response.content;
}
// 示例使用
const productInfo = {
product_type: "智能手表",
key_feature: "心率监测和睡眠分析",
target_audience: "注重健康的年轻专业人士",
price_range: "中高端",
brand_positioning: "科技与健康的完美结合"
};
generateProductDescriptions(productInfo)
.then((result) => console.log(result))
.catch((error) => console.error("Error:", error));

Führen Sie den Code aus:

node advanced_prompt.js

Dieser Code zeigt, wie man eine benutzerdefinierte Eingabeaufforderungsvorlage erstellt und verwendet:

  1. Definieren Sie Vorlagen für Systemmeldungen und menschliche Meldungen.
  2. ausnutzen ChatPromptTemplate.fromMessages Erstellen Sie eine vollständige Prompt-Vorlage.
  3. ausnutzen pipe Methode verbindet die Cue-Vorlage mit dem Modell und bildet eine Verarbeitungskette.
  4. Definieren Sie eine Funktion zur Erstellung einer Produktbeschreibung, die eine Verarbeitungskette zur Verarbeitung der eingegebenen Produktinformationen verwendet.

Benutzerdefinierte Vorlagen für Eingabeaufforderungen sind in der Praxis vielfältig einsetzbar, insbesondere wenn Sie Inhalte in einem bestimmten Format oder Stil erstellen müssen. Im Folgenden finden Sie einige praktische Anwendungsszenarien:

  1. Generierung von Produktbeschreibungen im E-Commerce: Wie in diesem Beispiel gezeigt, können damit automatisch verschiedene Arten von Produktbeschreibungen generiert werden, um die Attraktivität der Produktseite und die Konversionsrate zu verbessern.
  2. Antwortvorlagen für den Kundenservice: Sie können Antwortvorlagen für verschiedene Szenarien erstellen, z. B. für die Bearbeitung von Beschwerden, die Bereitstellung von Produktinformationen usw., um die Konsistenz und Professionalität der Antworten im Kundenservice zu gewährleisten.
  3. Erstellung von Nachrichtenbeiträgen: Es können Vorlagen für verschiedene Arten von Nachrichtenbeiträgen erstellt werden, wie z. B. Eilmeldungen, ausführliche Analysen usw., um Journalisten bei der schnellen Erstellung ihrer ersten Entwürfe zu unterstützen.
  4. Personalisierte Marketing-E-Mails: Erstellen Sie personalisierte Marketing-E-Mail-Inhalte auf der Grundlage von Kundendaten und Marketingzielen, um die Effektivität des E-Mail-Marketings zu verbessern.

Erweiterte JSON-Ausgabe und Wissensgraphengenerierung

In diesem Beispiel zeigen wir, wie Ollama und LangChain verwendet werden können, um strukturierte JSON-Ausgaben zu erzeugen, insbesondere für die Erstellung von Wissensgraphen. Dieser Ansatz ist eng mit dem Open-Source-Projekt GraphRAG von Microsoft verwandt, insbesondere bei der Automatisierung der Wissensextraktion und der Generierung von Triaden.

import { ChatOllama } from "@langchain/ollama";
import { PromptTemplate } from "@langchain/core/prompts";
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
const systemTemplate = `
你是一位医疗领域的专家,擅长创建知识图谱。请将所有响应格式化为具有以下结构的JSON对象:
{
"节点": [
{"id": "string", "标签": "string", "类型": "string"}
],
"关系": [
{"源": "string", "目标": "string", "关系": "string"}
]
}
确保所有节点id都是唯一的,并且关系引用的是已存在的节点id。
`;
const humanTemplate = `
请为医疗主题"{topic}"创建一个知识图谱。包括以下相关概念: {concepts}。
提供至少5个节点和5个关系。请确保使用中文回答。
`;
const systemMessage = new SystemMessage(systemTemplate);
const humanPrompt = PromptTemplate.fromTemplate(humanTemplate);
const llmJsonMode = new ChatOllama({
baseUrl: "http://localhost:11434", // 默认值
model: "llama3.1",
format: "json",
});
async function generateMedicalKnowledgeGraph(topic, concepts) {
try {
const humanMessageContent = await humanPrompt.format({
topic: topic,
concepts: concepts.join("、"),
});
const humanMessage = new HumanMessage(humanMessageContent);
const messages = [systemMessage, humanMessage];
const result = await llmJsonMode.call(messages);
console.log(JSON.stringify(result, null, 2));
return result;
} catch (error) {
console.error("生成知识图谱时出错:", error);
}
}
// 使用示例
const topic = "糖尿病";
const concepts = ["胰岛素", "血糖", "并发症", "饮食管理", "运动疗法"];
generateMedicalKnowledgeGraph(topic, concepts);

Führen Sie den Code aus:

node advanced_json.js

Dieser Code zeigt, wie man mit Ollama eine strukturierte JSON-Ausgabe erzeugt:

  1. Definiert eine Systemvorlage, die die gewünschte JSON-Struktur angibt.
  2. Erstellen Sie eine Vorlage für die menschliche Eingabeaufforderung zur Erstellung von Anfragen für den Knowledge Graph.
  3. Initialisieren Sie das ChatOllama-Modell, setzen Sie die format: "json" um die JSON-Ausgabe zu erhalten.
  4. Definieren Sie eine Funktion zur Erstellung eines medizinischen Wissensgraphen, der Systemmeldungen und menschliche Meldungen kombiniert, und rufen Sie das Modell auf.

Anhand der spezifischen Ausgabe des json-Formats können wir uns ein Bild von den vielen Möglichkeiten machen, wie dies genutzt werden kann:

  1. Automatisierte ternäre Generierung Bei herkömmlichen Ansätzen erfordert die Erstellung von Wissensgraphen in der Regel einen erheblichen manuellen Beschriftungsaufwand. Experten müssen Dokumente sorgfältig lesen, wichtige Konzepte und ihre Beziehungen identifizieren und dann manuell Triples (Subjekt-Beziehung-Objekt) erstellen. Dieser Prozess ist nicht nur zeitaufwändig, sondern auch fehleranfällig, insbesondere bei einer großen Anzahl von Dokumenten. Mit unserem Ansatz kann das Big Language Model automatisch relevante Knoten und Beziehungen aus gegebenen Themen und Konzepten generieren. Dadurch wird der Prozess der Wissensgraphenerstellung erheblich beschleunigt.
  2. Datenerweiterung Dieser Ansatz kann nicht nur für die direkte Erstellung von Wissensgraphen, sondern auch für die Anreicherung von Daten verwendet werden. Zum Beispiel:
    • Erweiterung des vorhandenen Trainingsdatensatzes: Das Modell generiert neue relevante Tripel auf der Grundlage der vorhandenen Tripel.
    • Erstellung vielfältiger Beispiele: Durch die Erstellung von Wissensgraphen für verschiedene Krankheitsbilder wird die Vielfalt der Daten erhöht.
    • Sprachübergreifende Datengenerierung: Durch Anpassung der Eingabeaufforderungen können Wissensgraphen in verschiedenen Sprachen erstellt werden, um mehrsprachige Anwendungen zu unterstützen.
  3. Verbesserung der Datenqualität Big Language Model: Das Big Language Model kann genutzt werden, um hochwertige, kohärente Wissensgraphen aus seiner umfangreichen Wissensbasis zu erstellen. Mit gut konzipierten Eingabeaufforderungen können wir sicherstellen, dass die generierten Daten bestimmte Qualitätsstandards und Domänenspezifikationen erfüllen.
  4. Flexibilität und Skalierbarkeit Dieser Ansatz ist sehr flexibel und kann leicht an verschiedene Bereiche und Bedürfnisse angepasst werden:
    • Durch Änderung der Systemaufforderungen können wir die JSON-Struktur der Ausgabe ändern, um verschiedene Wissensgraphenformate zu berücksichtigen.
    • Dieser Ansatz lässt sich leicht auf andere Bereiche wie Technologie, Finanzen, Bildung usw. ausweiten.

 

zu einem Urteil gelangen

Anhand dieser Beispiele zeigen wir, wie Ollama und LangChain verwendet werden können, um eine Vielzahl von KI-Anwendungen in einer JavaScript-Umgebung zu erstellen, von einfachen Dialogsystemen bis hin zur komplexen Wissensgraphengenerierung. Diese Werkzeuge und Techniken bieten eine solide Grundlage für die Entwicklung leistungsstarker KI-Anwendungen.

Die Kombination von Ollama und LangChain bietet Entwicklern eine große Flexibilität und viele Möglichkeiten. Sie können die richtigen Modelle und Komponenten entsprechend Ihren spezifischen Anforderungen auswählen und ein KI-System aufbauen, das zu Ihrem Anwendungsszenario passt.

Da sich die Technologie weiter entwickelt, erwarten wir, dass noch mehr innovative Anwendungen entstehen. Wir hoffen, dass dieser Leitfaden Ihnen den Einstieg in die KI-Entwicklung erleichtert und Ihre Kreativität anregt, die unendlichen Möglichkeiten der KI-Technologie zu erkunden.

Darf nicht ohne Genehmigung vervielfältigt werden:Leiter des AI-Austauschkreises " Ollama in LangChain - Integration von JavaScript
de_DEDeutsch