掘金 人工智能 前天 16:23
(二)大模型应用落地必杀技之LangChain——开发第一个简单的LLM应用程序
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了如何使用 LangChain 框架构建一个简单的 LLM 应用程序,该程序可以将英文文本翻译成其他语言。文章详细阐述了使用语言模型、提示模板以及 LangSmith 进行调试和跟踪的步骤,并通过实例展示了如何快速上手 LangChain,构建基础的 LLM 应用。通过学习,读者可以掌握 LangChain 程序的基本架构和开发方法,为后续更复杂的应用开发打下基础。

💡 **LangChain 框架介绍**: LangChain 是一个用于开发由语言模型驱动的应用程序的框架,它简化了与语言模型的交互,并提供了诸如提示模板、链和代理等高级功能。

🛠️ **核心组件:语言模型与提示模板**: 使用 LangChain 构建 LLM 应用的核心在于语言模型和提示模板。语言模型用于生成文本,而提示模板则用于将用户输入转换为语言模型可理解的格式,例如系统消息和用户消息的组合。

⚙️ **LangSmith 的重要性**: LangSmith 是一个用于调试和跟踪 LangChain 应用程序的工具。它允许开发者检查程序内部的运行情况,例如 Token 使用情况、延迟和模型参数等,这对于理解和优化应用程序至关重要。

💻 **代码示例与实践**: 文章提供了详细的代码示例,演示了如何在 Jupyter Notebook 中安装 LangChain、配置 API 密钥、调用语言模型以及创建提示模板。这些示例有助于读者快速上手,并理解 LangChain 的基本用法。

使用 LangChain 构建一个简单的 LLM 应用程序。该应用程序将英文文本翻译成另一种语言。这是一个相对简单的 LLM 应用程序——它只是一个 LLM 调用加上一些提示。尽管如此,这也是开始使用 LangChain 的好方法——只需一些提示和一个 LLM 调用,就可以构建许多功能!

通过这个小程序,将会学到:

这是一个通过LangChain调用提示模版,再去调用大语言模型的一个例子,通过这个例子,可以初步的知道一个LangChain程序的程序架构和开发方式,快速熟悉如何使用Langchain框架。

Setup  设置

Jupyter Notebook

这些程序可以最方便地运行在 Jupyter notebooks 中。在交互式环境中浏览指南是更好地理解它们的好方法。 Jupyter Notebook的安装可以参阅这里

可以使用Jupyter Lab,更方便的使用和管理文件。

 安装Langchain

pip install langchain

更多详情,可以参阅安装指南

Jupiter Notebook中安装langchain直接使用以下方式进行安装:

%pip install langchain

安装Langchain

pip install langchain

更多详情,可以参阅安装指南

Jupiter Notebook中安装langchain直接使用以下方式进行安装:

%pip install langchain

LangSmith

使用 LangChain 构建的许多应用程序将包含多个步骤,涉及多次 LLM 调用。随着这些应用程序变得越来越复杂,最好是使用LangSmith检查程序中的链或代理内部具体发生了什么,这变得至关重要。

注册LangSmith后,请确保设置环境变量以开始记录跟踪:

export LANGSMITH_TRACING="true"export LANGSMITH_API_KEY="..."export LANGSMITH_PROJECT="default" # or any other project name

如果在笔记本中,可以使用以下方式设置:

import getpassimport ostry:    # load environment variables from .env file (requires `python-dotenv`)    from dotenv import load_dotenv    load_dotenv()except ImportError:    passos.environ["LANGSMITH_TRACING"] = "true"if "LANGSMITH_API_KEY" not in os.environ:    os.environ["LANGSMITH_API_KEY"] = getpass.getpass(        prompt="Enter your LangSmith API key (optional): "    )if "LANGSMITH_PROJECT" not in os.environ:    os.environ["LANGSMITH_PROJECT"] = getpass.getpass(        prompt='Enter your LangSmith Project Name (default = "default"): '    )    if not os.environ.get("LANGSMITH_PROJECT"):        os.environ["LANGSMITH_PROJECT"] = "default"if "OPENAI_API_KEY" not in os.environ:    os.environ["OPENAI_API_KEY"] = getpass.getpass(        prompt="Enter your OpenAI API key (required if using OpenAI): "    )

LangSmith可以选择不安装,并不影响后续的程序运行。 

Using Language Models 使用语言模型

首先,让我们学习如何单独使用一个语言模型。LangChain 支持多种不同的语言模型,你可以互换使用。有关如何开始使用特定模型的详细信息,请参考支持集成的文档。

选择聊天模型:

pip install -qU "langchain[openai]"
import getpassimport osif not os.environ.get("OPENAI_API_KEY"):  os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")from langchain.chat_models import init_chat_modelmodel = init_chat_model("gpt-4o-mini", model_provider="openai")

OPENAI API 的接口调用起来比较麻烦,需要先科学到非中国区域的网络,我用的是新加坡是可以访问的,还需要注册申请key后,用信用卡保证账户有钱。

建议用本地的大模型进行开发调试,可以使用Ollama进行模型管理安装,具体Ollama安装教程可以参考本文档。然后通过以下命令安装本地版deepseek-r1:7b并启动。

ollama pull deepseek-r1:7bollama run deepseek-r1:7b

在ChatModels初始化的时候,通过Ollama和OPENAI的初始化有一些差异

//安装langchain-ollama%pip install -U langchain-ollama
//初始化modelfrom langchain_ollama import ChatOllamamodel = ChatOllama(    base_url = "http://127.0.0.1:11434", # ollama的端口默认11434    model = "deepseek-r1:7b", # 选择刚才在ollama启动的模型    temperature = 0.8, # 下面是一些参数,适当调整一下就好,具体我们先不解释含义    num_predict = 256,    max_tokens = 2500)

让我们首先直接使用模型。ChatModels 是 LangChain 可运行实例,这意味着它们提供了与它们交互的标准接口。要简单地调用模型,我们可以将消息列表传递给 .invoke 方法。

from langchain_core.messages import HumanMessage, SystemMessagemessages = [    SystemMessage("Translate the following from English into Italian"),    HumanMessage("hi!"),]model.invoke(messages)

 API 参考:HumanMessage | SystemMessage

以下是返回的结果:

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")])

流式传输

由于聊天模型是可运行对象,它们提供了一个标准接口,其中包括异步和流式调用模式。这使我们能够从聊天模型中流式传输单个标记:

for token in model.stream(messages):    print(token.content, end="|")
|C|iao|!||

你可以在本指南中找到更多关于流式聊天模型输出的详细信息

Prompt Templates  提示模板

目前我们直接将消息列表传递给语言模型。这个消息列表从何而来?通常,它是由用户输入和应用逻辑的组合构成的。这种应用逻辑通常将原始用户输入转换为准备传递给语言模型的消息列表。常见的转换包括添加系统消息或使用用户输入格式化模板。

提示模板是 LangChain 中的一个概念,旨在协助这种转换。它们接收原始用户输入,并返回准备传递给语言模型的数据(提示)。

让我们在这里创建一个提示模板。它将接收两个用户变量:

from langchain_core.prompts import ChatPromptTemplatesystem_template = "Translate the following from English into {language}"prompt_template = ChatPromptTemplate.from_messages(    [("system", system_template), ("user", "{text}")])

 API 参考:ChatPromptTemplate

请注意, 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!

消息 content 可以包含文本和具有额外结构的內容块。有关更多信息,请参阅此指南

Conclusion  结论

就这样!在这个教程中,你学习了如何创建你的第一个简单的 LLM 应用程序。你学习了如何使用语言模型,如何创建提示模板,以及如何使用 LangSmith 获取你创建的应用程序的出色可观察性。

这仅仅是您想要成为熟练 AI 工程师所需学习内容的一小部分。幸运的是——我们还有许多其他资源!

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

LangChain LLM 语言模型 提示模板 LangSmith
相关文章