kurz
In diesem Dokument wird beschrieben, wie Sie die Ollama Ollama ist ein Open-Source-Implementierungstool für große Sprachmodelle, während LangChain ein Framework für die Entwicklung von Sprachmodell-basierten Anwendungen ist. 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 Erläuterungen. Den vollständigen Code finden Sie in derDieses Jupyter-NotizbuchGefunden in.
1. umweltbezogene Einstellungen
Konfigurieren der Conda-Umgebung
Zunächst müssen wir die Conda-Umgebung in Jupyter verwenden. Führen Sie den folgenden Befehl in der Kommandozeile aus:
conda create -n handlm python=3.10 -y
conda activate handlm
pip install jupyter
python -m ipykernel install --user --name=handlm
Starten Sie Jupyter nach der Ausführung neu und wählen Sie den Kernel für diese Umgebung wie gezeigt aus:
⚠️ Hinweis
Achtung! Es ist auch möglich, die globale Umgebung direkt ohne die virtuelle Umgebung von conda zu verwenden.
Installation von Abhängigkeiten
Bevor wir beginnen, müssen wir die folgenden Pakete installieren:
langchain-ollama
Ollama: für die Integration des Ollama-Modells in den LangChain-Rahmenlangchain
Die Kernbibliothek von LangChain, die Werkzeuge und Abstraktionen für die Entwicklung von KI-Anwendungen bietetlangchain-community
: Enthält verschiedene Integrationen und Tools, die von der Gemeinschaft beigetragen wurdenPillow
Bildverarbeitung, die bei multimodalen Aufgaben eingesetzt wirdfaiss-cpu
: für den Bau einfacher RAG Retriever
Es kann mit dem folgenden Befehl installiert werden:
pip install langchain-ollama langchain langchain-community Pillow faiss-cpu
2. laden Sie die benötigten Modelle herunter und initialisieren Sie OllamaLLM
Lama3.1-Modell herunterladen
- Besuchen Sie die offizielle Website https://ollama.com/download, um Ollama auf den verfügbaren unterstützten Plattformen herunterzuladen und zu installieren.
- Unter https://ollama.ai/library finden Sie alle verfügbaren Modelle.
- 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:
Speicherort des Modells:
- Mac.
~/.ollama/models/
- Linux (oder WSL).
/usr/share/ollama/.ollama/models
- Fenster.
C:\Users\Administrator\.ollama\models
3 Beispiele für die grundlegende Verwendung
Führen eines Gesprächs mit ChatPromptTemplate
ChatPromptTemplate ermöglicht es uns, eine wiederverwendbare Vorlage mit einem oder mehreren Parametern zu erstellen. Diese Parameter können zur Laufzeit dynamisch ersetzt werden, um verschiedene Prompts zu erzeugen.
template = """
你是一个乐于助人的AI,擅长于解决回答各种问题。
问题:{question}
"""
prompt = ChatPromptTemplate.from_template(template)
chain = prompt | model
chain.invoke({"question": "你比GPT4厉害吗?"})
Verwenden Sie im Abschnitt Kette erstellen den Pipe-Operator |
Sie verbindet die Eingabeaufforderung mit dem Modell zu einem Verarbeitungsablauf. Diese Verkettung macht es einfach, verschiedene Komponenten zu kombinieren und wiederzuverwenden.
invoke
Methode löst die gesamte Verarbeitungskette aus, indem sie unsere Frage an die Vorlage übergibt und dann die formatierte Eingabeaufforderung zur Verarbeitung an das Modell sendet.
Streaming-Ausgang
Die Streaming-Ausgabe ist eine Technik, bei der die Ergebnisse inkrementell zurückgegeben werden, während sie einen langen Text erzeugen. Diese Methode hat mehrere wichtige Vorteile:
- Verbesserte Benutzerfreundlichkeit: Die Benutzer können Teilergebnisse sofort sehen und müssen nicht warten, bis die gesamte Antwort abgeschlossen ist.
- Verkürzung der Wartezeit: Bei langen Antworten können die Benutzer mit dem Lesen beginnen, bevor die vollständige Antwort generiert wird.
- Interaktion in Echtzeit: Ermöglicht Eingriffe oder Abbrüche während des Generierungsprozesses.
In der Praxis, vor allem bei Chatbots oder Echtzeit-Dialogsystemen, ist die Streaming-Ausgabe fast unerlässlich.
from langchain_ollama import ChatOllama
model = ChatOllama(model="llama3.1", temperature=0.7)
messages = [
("human", "你好呀"),
]
for chunk in model.stream(messages):
print(chunk.content, end='', flush=True)
model.stream()
Methode ist ein Wrapper um die Streaming-Output-Schnittstelle der Ollama-API, die ein Generator-Objekt zurückgibt. Beim Aufruf der model.stream(messages)
Wenn Sie dies tun, werden die folgenden Vorgänge abgeschlossen:
- Senden Sie eine Anfrage an die Ollama-API, um eine Antwort zu erzeugen.
- Die API beginnt mit der Generierung von Text, aber anstatt zu warten, bis der gesamte Text generiert ist, gibt sie ihn in kleinen Stücken zurück.
- Für jedes kleine Stück Text, das empfangen wird, wird die
stream()
Methode ergibt den Textblock. flush=True
Stellen Sie sicher, dass jeder Clip sofort angezeigt wird und nicht erst, wenn der Puffer voll ist.
Werkzeug Aufruf
Tool-Aufrufe sind die Fähigkeit eines KI-Modells, mit externen Funktionen oder APIs zu interagieren. Dadurch kann das Modell komplexe Aufgaben wie mathematische Berechnungen, Datenabfragen oder Aufrufe externer Dienste durchführen.
def simple_calculator(operation: str, x: float, y: float) -> float:
'''实际的代码处理逻辑'''
llm = ChatOllama(
model="llama3.1",
temperature=0,
).bind_tools([simple_calculator])
result = llm.invoke("你知道一千万乘二是多少吗?")
bind_tools
ermöglicht es uns, eine benutzerdefinierte Funktion im Modell zu registrieren. Wenn das Modell auf ein Problem stößt, das Berechnungen erfordert, kann es diese Funktion aufrufen, um genaue Ergebnisse zu erhalten, anstatt sich auf sein Vorwissen zu verlassen.
Diese Fähigkeit ist z. B. bei der Entwicklung komplexer KI-Anwendungen nützlich:
- Chatbots erstellen, die auf Echtzeitdaten zugreifen können
- Erstellen Sie intelligente Assistenten, die bestimmte Aufgaben erfüllen (z. B. Buchung, Anfrage usw.)
- Entwicklung von KI-Systemen, die präzise Berechnungen oder komplexe Operationen durchführen können
multimodales Modell
Ollama unterstützt multimodale Modelle wie bakllava und llava. Multimodale Modelle sind KI-Modelle, die mehrere Arten von Eingaben verarbeiten können (z. B. Text, Bilder, Audio usw.). Diese Modelle zeichnen sich dadurch aus, dass sie multimodale Inhalte verstehen und generieren können, was komplexere und natürlichere Interaktionen zwischen Mensch und Computer ermöglicht.
Zunächst muss das multimodale Modell heruntergeladen werden. Führen Sie es in der Befehlszeile aus:
ollama pull llava
Wir können dann den folgenden Code verwenden, um die Bild- und Texteingabe zu verarbeiten:
from langchain_ollama import ChatOllama
from langchain_core.messages import HumanMessage
from langchain_core.output_parsers import StrOutputParser
llm = ChatOllama(model="llava", temperature=0)
def prompt_func(data):
'''构造多模态输入'''
chain = prompt_func | llm | StrOutputParser()
query_chain = chain.invoke(
{"text": "这个图片里是什么动物啊?", "image": image_b64}
)
Der springende Punkt ist hier:
- Bildvorverarbeitung: Wir müssen das Bild in eine base64-kodierte Zeichenkette umwandeln.
- Hinweisfunktion:
prompt_func
Es wird eine multimodale Eingabe mit Text und Bildern erstellt. - Verkettung: Wir verwenden
|
Operator verbindet die Hinweisfunktion, das Modell und den Ausgabeparser.
Multimodale Modelle sind zum Beispiel in vielen Szenarien nützlich:
- Erzeugung von Bildbeschreibungen
- visuelles Frage- und Antwortsystem
- Bildbasierte Inhaltsanalyse und Empfehlungen
4. erweiterte Nutzung
Konversation mit ConversationChain
ConversationChain
ist ein leistungsfähiges Werkzeug, das von LangChain für die Verwaltung von Mehrrunden-Dialogen bereitgestellt wird. Es kombiniert Sprachmodelle, Prompt-Vorlagen und In-Memory-Komponenten, um die Erstellung kontextbezogener Dialogsysteme zu erleichtern.
memory = ConversationBufferMemory()
conversation = ConversationChain(
llm=model,
memory=memory,
verbose=True
)
# 进行对话
response = conversation.predict(input="你好,我想了解一下人工智能。")
print("AI:", response)
response = conversation.predict(input="能给我举个AI在日常生活中的应用例子吗?")
print("AI:", response)
response = conversation.predict(input="这听起来很有趣。AI在医疗领域有什么应用?")
print("AI:", response)
Die Schlüsselkomponente ist hier:
ConversationBufferMemory
Dies ist eine einfache In-Memory-Komponente, die den Verlauf aller bisherigen Unterhaltungen speichert.ConversationChain
Es kombiniert ein Sprachmodell, einen Speicher und eine Standardvorlage für Dialogansagen.
Die Pflege der Dialoghistorie ist wichtig, weil sie es den Modellen ermöglicht:
- Verstehen des Kontexts und der zuvor erwähnten Informationen
- kohärentere und relevantere Antworten zu generieren
- Umgang mit komplexen Mehrrunden-Dialogszenarien
In der Praxis müssen Sie möglicherweise die Verwendung von fortschrittlicheren Speicherkomponenten in Betracht ziehen, wie z. B. die ConversationSummaryMemory
um lange Dialoge zu handhaben und eine Überschreitung der Kontextlängengrenze des Modells zu vermeiden.
Benutzerdefinierte Prompt-Vorlagen
Gut gestaltete Prompt-Vorlagen sind der Schlüssel zur Erstellung effizienter KI-Anwendungen. In diesem Beispiel haben wir eine komplexe Eingabeaufforderung für die Erstellung von Produktbeschreibungen erstellt:
system_message = SystemMessage(content="""
你是一位经验丰富的电商文案撰写专家。你的任务是根据给定的产品信息创作吸引人的商品描述。
请确保你的描述简洁、有力,并且突出产品的核心优势。
""")
human_message_template = """
请为以下产品创作一段吸引人的商品描述:
产品类型: {product_type}
核心特性: {key_feature}
目标受众: {target_audience}
价格区间: {price_range}
品牌定位: {brand_positioning}
请提供以下三种不同风格的描述,每种大约50字:
1. 理性分析型
2. 情感诉求型
3. 故事化营销型
"""
# 示例使用
product_info = {
"product_type": "智能手表",
"key_feature": "心率监测和睡眠分析",
"target_audience": "注重健康的年轻专业人士",
"price_range": "中高端",
"brand_positioning": "科技与健康的完美结合"
}
Es gibt mehrere wichtige Überlegungen zur Gestaltung dieser Struktur:
- system_prompt: definiert die Rollen und allgemeinen Aufgaben der KI und gibt den Ton des gesamten Dialogs vor.
- human_message_template: enthält die Struktur der spezifischen Anweisungen und der erforderlichen Meldungen.
- Multi-Parameter-Design: ermöglicht die flexible Anpassung an unterschiedliche Produkte und Anforderungen.
- Vielfältige Anforderungen an den Output: Ermutigen Sie die Modelle, ihre Vielfalt zu demonstrieren, indem Sie unterschiedliche Beschreibungsstile verlangen.
Beachten Sie bei der Gestaltung einer effektiven Vorlage für die Eingabeaufforderung die folgenden Punkte:
- Klare Definition der Rolle und des Auftrags von AI
- Bereitstellung eines klaren, strukturierten Eingabeformats
- Enthält spezifische Ausgabeanforderungen und Formatierungshinweise
- Überlegen Sie, wie Sie die Kapazität und Kreativität des Modells maximieren können.
Aufbau eines einfachen RAG-Q&A-Systems
RAG (Retrieval-Augmented Generation) ist eine KI-Technik, die Retrieval und Generierung kombiniert, um die Antwortfähigkeit eines Sprachmodells durch das Abrufen relevanter Informationen zu erweitern:
- Aufteilung der Dokumente der Wissensdatenbank in Teile und Erstellung von Vektorindizes
- Vektorisierung des Benutzerproblems und Abruf der relevanten Dokumente in einem Index
- Bereitstellung der abgerufenen relevanten Dokumente für das Sprachmodell als Kontext zusammen mit der ursprünglichen Frage
- Das Sprachmodell erzeugt Antworten auf der Grundlage der abgerufenen Informationen
Der Vorteil von RAG besteht darin, dass es den Sprachmodellen hilft, auf aktuelle und spezialisierte Informationen zuzugreifen, die Desillusionierung zu verringern und die Genauigkeit und Relevanz der Antworten zu verbessern.
LangChain bietet eine Vielzahl von Komponenten, die nahtlos mit Ollama-Modellen integriert werden können. Hier werden wir zeigen, wie man das Ollama-Modell in Verbindung mit einem Vektorspeicher und einem Retriever verwendet, um ein einfaches RAG-Frage-Antwort-System zu erstellen.
Als Erstes müssen Sie sicherstellen, dass das Einbettungsmodell heruntergeladen wird, indem Sie den folgenden Befehl in der Befehlszeile ausführen:
ollama pull nomic-embed-text
Wir können dann das RAG-System aufbauen:
# 初始化 Ollama 模型和嵌入
llm = ChatOllama(model="llama3.1")
embeddings = OllamaEmbeddings(model="nomic-embed-text")
# 准备文档
text = """
Datawhale 是一个专注于数据科学与 AI 领域的开源组织,汇集了众多领域院校和知名企业的优秀学习者,聚合了一群有开源精神和探索精神的团队成员。
Datawhale 以" for the learner,和学习者一起成长"为愿景,鼓励真实地展现自我、开放包容、互信互助、敢于试错和勇于担当。
同时 Datawhale 用开源的理念去探索开源内容、开源学习和开源方案,赋能人才培养,助力人才成长,建立起人与人,人与知识,人与企业和人与未来的联结。
如果你想在Datawhale开源社区发起一个开源项目,请详细阅读Datawhale开源项目指南[https://github.com/datawhalechina/DOPMC/blob/main/GUIDE.md]
"""
# 分割文本
text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20)
chunks = text_splitter.split_text(text)
# 创建向量存储
vectorstore = FAISS.from_texts(chunks, embeddings)
retriever = vectorstore.as_retriever()
# 创建提示模板
template = """只能使用下列内容回答问题:
{context}
Question: {question}
"""
prompt = ChatPromptTemplate.from_template(template)
# 创建检索-问答链
chain = (
{"context": retriever, "question": RunnablePassthrough()}
| prompt
| llm
)
# 使用链回答问题
question = "我想为datawhale贡献该怎么做?"
response = chain.invoke(question)
Dieses RAG-System funktioniert wie folgt:
- Textsegmentierung: Verwendung
RecursiveCharacterTextSplitter
Teilen Sie lange Texte in kleinere Abschnitte auf. - Vektorisierung und Indexierung: Verwendung
OllamaEmbeddings
Konvertiert einen Textblock in einen Vektor und erstellt einen Vektorindex mit FAISS. - Abruf: Wenn eine Frage eingeht, vektorisiert das System die Frage und ruft den relevantesten Textblock aus dem FAISS-Index ab.
- Generierung von Antworten: Die abgerufenen relevanten Textabschnitte werden dem Sprachmodell zusammen mit der ursprünglichen Frage zur Verfügung gestellt, um die endgültige Antwort zu generieren.
Das RAG-System ist z. B. in vielen realen Situationen sehr nützlich:
- Kundendienst: Kundenanfragen können auf der Grundlage der Wissensbasis des Unternehmens schnell beantwortet werden.
- Recherchehilfe: Hilft Forschern, schnell relevante Literatur zu finden und die wichtigsten Informationen zusammenzufassen.
- Persönlicher Assistent: Kombiniert persönliche Notizen und Webinformationen, um personalisierte Informationen und Vorschläge zu liefern.
zu einem Urteil gelangen
Anhand dieser Beispiele zeigen wir, wie man mit Ollama und LangChain eine Vielzahl von KI-Anwendungen erstellen kann, von einfachen Dialogsystemen bis hin zu komplexen RAG-Q&A-Systemen. 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.