使用聊天模型和提示模板构建简单的 LLM 应用
在这个快速入门中,我们将向您展示如何使用 LangChain 构建一个简单的 LLM 应用程序。此应用程序将把文本从英语翻译成另一种语言。这是一个相对简单的 LLM 应用程序 - 它只是一个单一的 LLM 调用加上一些提示。尽管如此,这仍然是开始使用 LangChain 的好方法 - 很多功能只需一些提示和 LLM 调用即可构建!
阅读本教程后,您将对以下内容有一个高层次的了解
让我们开始吧!
设置
Jupyter Notebook
本教程和其他教程在 Jupyter Notebook 中运行可能最方便。在交互式环境中学习指南是更好地理解它们的好方法。有关如何安装的说明,请参阅此处。
安装
要安装 LangChain,请运行
- Pip
- Conda
pip install langchain
conda install langchain -c conda-forge
有关更多详细信息,请参阅我们的安装指南。
LangSmith
您使用 LangChain 构建的许多应用程序将包含多个步骤,并多次调用 LLM。随着这些应用程序变得越来越复杂,能够检查您的链或代理内部到底发生了什么变得至关重要。最好的方法是使用LangSmith。
在上面的链接注册后,请确保设置您的环境变量以开始记录跟踪
export LANGCHAIN_TRACING_V2="true"
export LANGCHAIN_API_KEY="..."
或者,如果在 notebook 中,您可以使用以下方式设置它们
import getpass
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = getpass.getpass()
使用语言模型
首先,让我们学习如何单独使用语言模型。LangChain 支持许多不同的语言模型,您可以互换使用。有关开始使用特定模型的详细信息,请参阅支持的集成。
pip install -qU langchain-openai
import getpass
import os
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")
from langchain_openai import ChatOpenAI
model = ChatOpenAI(model="gpt-4o-mini")
让我们首先直接使用模型。ChatModels是 LangChain Runnables的实例,这意味着它们公开了一个用于与之交互的标准接口。要简单地调用模型,我们可以将消息列表传递给 .invoke
方法。
from langchain_core.messages import HumanMessage, SystemMessage
messages = [
SystemMessage("Translate the following from English into Italian"),
HumanMessage("hi!"),
]
model.invoke(messages)
AIMessage(content='Ciao!', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 3, 'prompt_tokens': 20, 'total_tokens': 23, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-mini-2024-07-18', 'system_fingerprint': 'fp_0705bf87c0', 'finish_reason': 'stop', 'logprobs': None}, id='run-32654a56-627c-40e1-a141-ad9350bbfd3e-0', usage_metadata={'input_tokens': 20, 'output_tokens': 3, 'total_tokens': 23, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}})
如果我们启用了 LangSmith,我们可以看到此运行已记录到 LangSmith,并且可以看到LangSmith 跟踪。LangSmith 跟踪报告token使用信息、延迟、标准模型参数(如温度)和其他信息。
请注意,ChatModels 接收消息对象作为输入,并生成消息对象作为输出。除了文本内容之外,消息对象还传递对话角色并保存重要数据,例如工具调用和 token 使用计数。
LangChain 还支持通过字符串或OpenAI 格式的聊天模型输入。以下内容是等效的
model.invoke("Hello")
model.invoke([{"role": "user", "content": "Hello"}])
model.invoke([HumanMessage("Hello")])
流式传输
因为聊天模型是Runnables,所以它们公开了一个标准接口,其中包括异步和流式调用模式。这允许我们从聊天模型流式传输单个 token
for token in model.stream(messages):
print(token.content, end="|")
|C|iao|!||
您可以在本指南中找到有关流式传输聊天模型输出的更多详细信息。
提示模板
现在我们直接将消息列表传递给语言模型。此消息列表来自哪里?通常,它是从用户输入和应用程序逻辑的组合中构建的。此应用程序逻辑通常接收原始用户输入并将其转换为准备传递给语言模型的消息列表。常见的转换包括添加系统消息或使用用户输入格式化模板。
提示模板是 LangChain 中旨在帮助进行此转换的概念。它们接收原始用户输入并返回准备传递到语言模型的数据(提示)。
让我们在此处创建一个提示模板。它将接收两个用户变量
language
:要将文本翻译成的语言text
:要翻译的文本
from langchain_core.prompts import ChatPromptTemplate
system_template = "Translate the following from English into {language}"
prompt_template = ChatPromptTemplate.from_messages(
[("system", system_template), ("user", "{text}")]
)
请注意,ChatPromptTemplate
在单个模板中支持多个消息角色。我们将 language
参数格式化为系统消息,并将用户 text
格式化为用户消息。
此提示模板的输入是一个字典。我们可以单独使用此提示模板来查看它本身的作用
prompt = prompt_template.invoke({"language": "Italian", "text": "hi!"})
prompt
ChatPromptValue(messages=[SystemMessage(content='Translate the following from English into Italian', additional_kwargs={}, response_metadata={}), HumanMessage(content='hi!', additional_kwargs={}, response_metadata={})])
我们可以看到它返回一个由两条消息组成的 ChatPromptValue
。如果我们想直接访问这些消息,我们可以这样做
prompt.to_messages()
[SystemMessage(content='Translate the following from English into Italian', additional_kwargs={}, response_metadata={}),
HumanMessage(content='hi!', additional_kwargs={}, response_metadata={})]
最后,我们可以在格式化的提示上调用聊天模型
response = model.invoke(prompt)
print(response.content)
Ciao!
如果我们查看LangSmith 跟踪,我们可以准确地看到聊天模型接收到的提示,以及token使用信息、延迟、标准模型参数(如温度)和其他信息。
结论
就是这样!在本教程中,您学习了如何创建您的第一个简单的 LLM 应用程序。您学习了如何使用语言模型、如何创建提示模板,以及如何使用 LangSmith 获取对您创建的应用程序的强大可观察性。
这只是您要成为一名熟练的 AI 工程师所需要学习的皮毛。幸运的是 - 我们还有很多其他资源!
有关 LangChain 核心概念的更多阅读材料,我们提供了详细的概念指南。
如果您对这些概念有更具体的问题,请查看操作指南的以下部分
以及 LangSmith 文档