自 ChatGPT 于 2022 年底推出并广泛采用以来,我们看到了有关大型语言模型 (LLM) 和生成人工智能 (GenAI) 的工具、产品和创新的新闻风暴)。虽然许多科技潮流在几年内来来去去,但法学硕士和 GenAI 显然将继续存在。

您是否想知道许多新工具和产品背后的所有工具?此外,您甚至可能会问自己,开发人员和最终用户如何利用这些工具在生产中运行。当您深入了解这些工具和应用程序时,您可能会遇到LangChain、PythonHeroku

这些是我们将在本文中讨论的部分。我们将通过一个实际示例来了解 AI/ML 开发人员如何使用它们来构建和轻松部署复杂的 LLM 管道组件。

揭秘 LLM 工作流程和管道

对于刚接触 AI 世界的人来说,机器学习管道和工作流程似乎是一个黑匣子。对于法学硕士及其相关工具来说更是如此,因为它们是(相对)新技术。与法学硕士合作可能具有挑战性,特别是当您希望创建工程强化且可投入生产的管道、工作流程和部署时。使用新工具、快速变化的文档和有限的说明,了解从哪里开始或使用什么可能很困难。那么,我们先来了解一下LangChain和Heroku的基础知识。

LangChain 文档告诉我们这一点:
<块引用>

LangChain 是一个用于开发由语言模型支持的应用程序的框架。

同时,Heroku 是这样描述自己的

<块引用>

Heroku 是一个云平台,可让公司构建、交付、监控和扩展应用程序。

如果我们将其放在构建 LLM 申请的背景下,那么 LangChain 和 Heroku 就是天作之合。我们需要一个经过充分测试且易于使用的框架(LangChain)来构建我们的 LLM 应用程序,然后我们需要一种部署和托管该应用程序的方法(Heroku)。

让我们更详细地研究每一项技术。

深入了解浪链

我们简单讨论一下LangChain是如何使用的。 LangChain是一个帮助开发人员构建基于LLM模型和用例的应用程序的框架。它支持 Python、JavaScriptTypeScript。例如,假设我们正在构建一个工具,可以根据用户输入生成报告或自动执行客户支持响应。 LangChain充当我们项目的脚手架,提供工具和结构以将语言模型有效地集成到我们的解决方案中。

在LangChain中,我们有几个关键组件:

代理

代理是与根据我们的要求执行任务的语言模型。这是我们应用程序的大脑,使用语言模型的功能来理解和生成文本。

链条

这些是我们的代理完成任务所遵循的一系列操作或流程。例如,如果我们要自动化客户支持,chain 可能会包括接受客户查询、查找相关信息,然后制定响应。

模板

模板提供了一种构建语言模型输出的方法。例如,如果我们的应用程序生成报告,那么我们将利用一个模板,根据模型的输出帮助一致地格式化这些报告。

语言服务

使开发者能够将 LangChain 应用程序作为 REST API 部署和服务

朗史密斯

此工具可帮助开发人员评估、测试和完善语言模型应用程序中的交互,为生产做好准备。

<小时/>

LangChain 是一种广泛采用的用于构建 AI 和 LLM 应用程序的框架,原因很容易理解。 LangChain提供了端到端构建和部署产品的功能。

深入了解 Heroku

Heroku 因云平台即服务 (PaaS) 而闻名,它使将应用程序部署到云变得异常简单。开发人员通常希望只关注代码和实现。当您已经在处理复杂的数据管道和基于 LLM 的应用程序时,您可能没有资源或专业知识来处理服务器、网络和持久存储等基础设施问题。

能够通过 Heroku 轻松部署应用程序,轻松解决项目生产的主要障碍。

使用LangChain构建

为了更好地理解 LangChain 在 LLM 申请中的使用方式,让我们通过一些示例问题来阐明该过​​程。一般来说,我们会将以下部分链接在一起,形成 LLM 链的单个工作流程:

  1. 提示模板根据用户的参数生成提示。
  2. 添加一个检索器到用于检索语言模型最初未训练的数据的链(例如,从文档数据库中)。
  3. 添加 对话检索链包含聊天历史记录,以便语言模型具有制定更好响应的上下文。
  4. 添加与实际 LLM 交互的代理。

LangChain 让我们将构成 LLM 申请基础的流程“链接”在一起。这使得我们的实施变得简单易行。让我们来看一个简单的例子。

在我们的示例中,我们将使用 OpenAI。我们将这样制作提示:

  1. 告诉 OpenAI 扮演一位鼓舞人心的健身教练的角色。
  2. 输入最终用户的问题。

为了保持美观和简单,我们不会担心外部数据或聊天历史记录检索中的链接。一旦掌握了 LangChain 的窍门,向您的链添加其他功能就很简单了。

在我们的本地计算机上,我们激活一个虚拟环境。然后,我们安装我们需要的包:

 

(venv) $ pip install langchain langchain_openai

我们将创建一个名为 main.py 的新文件。我们的基本 Python 代码如下所示:

Python

 

导入操作系统
从 langchain_core.prompts 导入 ChatPromptTemplate
从 langchain_openai 导入 ChatOpenAI


my_prompt = ChatPromptTemplate.from_messages([
    (“系统”,“你是一位友善且鼓舞人心的健身教练。”),
    (“用户”,“{输入}”)
])

llm = ChatOpenAI(openai_api_key=os.getenv("OPENAI_API_KEY"))

链= my_prompt |勒姆

就是这样!在这个基本示例中,我们使用 LangChain 将提示模板和 OpenAI 代理链接在一起。

要从命令行使用它,我们将添加以下代码:

Python

 

user_input = input("问我一个与您的健身目标相关的问题。\n")
响应 = chain.invoke({
  “输入”:用户输入
})


打印(响应)

让我们从命令行测试我们的应用程序。

 

(venv) $ OPENAI_API_KEY=在此插入密钥 python3 main.py
问我一个与您的健身目标相关的问题。
如何才能做到平板支撑 60 秒?
content="这是一个值得努力的伟大目标!朝着平板支撑 60 的方向前进 \
秒,重要的是从正确的形式开始并逐渐增加\
你的木板能撑住。以下是一些可帮助您取得进步的提示:\n\n1.从较短的 \ 开始
持续时间:首先以良好的形式尽可能长时间地握住木板,即使它是\
只是几秒钟。当你变得更强时,逐渐增加时间。\n\n2.专注于 \
正确的形式:确保你的身体从头到脚跟呈一条直线,
核心肌肉,并将肩膀保持在肘部正上方。\n\n3.定期练习:\
目标是将平板支撑纳入您的日常锻炼中,每周几次。一致性是关键\
增强力量和耐力。\n\n4.混合起来:尝试不同的木板变体,例如\
作为侧平板支撑或抬腿平板支撑,可以锻炼不同的肌肉群并保持您的\
锻炼具有挑战性。\n\n5.倾听身体的声音:督促自己很重要,但也\
知道你的极限。如果您感到任何疼痛或不适,请停下来休息。\n\n记住,进步\
需要时间和耐心。庆祝一路走来的每一个里程碑,无论是举行“
多做几秒钟平板支撑或掌握新的平板支撑变化。你有这个了!”

(为了便于阅读,我在上面添加了换行符。)

这是一个很好的开始。但如果输出的格式更易于人类阅读,那就太好了。为此,我们只需添加一个 输出解析器 到我们的连锁店。我们将使用 StrOutputParser .

Python

 

导入操作系统
从 langchain_core.prompts 导入 ChatPromptTemplate
从 langchain_openai 导入 ChatOpenAI
从 langchain_core.output_parsers 导入 StrOutputParser


my_prompt = ChatPromptTemplate.from_messages([
    (“系统”,“你是一位友善且鼓舞人心的健身教练。”),
    (“用户”,“{输入}”)
])

llm = ChatOpenAI(openai_api_key=os.getenv("OPENAI_API_KEY"))

链= my_prompt | LLM |输出解析器

user_input = input("问我一个与您的健身目标相关的问题。\n")
响应 = chain.invoke({
  “输入”:用户输入
})


打印(响应)

现在,在命令行中,我们的应用程序如下所示:

 

(venv) $ OPENAI_API_KEY=在此插入密钥 python3 main.py
问我一个与您的健身目标相关的问题。
如何学习手枪深蹲?
这是一个值得努力的伟大目标!手枪深蹲可能具有挑战性,但通过练习和耐心,您绝对可以学会如何做。

您可以遵循以下一些步骤来逐步实现手枪深蹲:

1. 首先通过深蹲、弓步和踏步等练习来提高下半身的力量。
2. 通过练习单腿平衡练习来增强平衡性和稳定性。
3. 通过将自己放低到长凳或椅子上来练习部分手枪深蹲,直到您最终可以进行完整的手枪深蹲。
4. 使用 TRX 带或杆等支撑物来帮助您保持平衡并降低自己,直到您有足够的力量可以在无人帮助的情况下完成此操作。

请记住,在尝试手枪深蹲之前一定要热身,并倾听身体的声音,以避免受伤。最重要的是,在努力掌握这项具有挑战性的练习时,请对自己保持积极和耐心。你已经得到了这个!

LLM 回复现已格式化,以提高可读性。

为了构建强大的 LLM 应用程序,我们的链将比这复杂得多。但这就是浪链的强大和简单。该框架允许特定于您的需求的逻辑模块化,因此您可以轻松地将复杂的工作流程链接在一起。

现在我们已经构建了一个简单的 LLM 应用程序,我们仍然需要能够部署、托管和服务我们的应用程序以使其有用。作为专注于应用程序构建而不是基础设施的开发人员,我们转向 LangServe 和 Heroku。

使用 LangServe 提供服务

LangServe 帮助我们通过 REST API 与 LangChain 链进行交互。要编写 LangChain LLM 应用程序的服务部分,我们需要三个关键组件:

  1. 一条有效的链(就像我们上面构建的那样)
  2. API应用框架(如FastAPI)< /里>
  3. 路由定义(就像我们构建任何类型的 REST API 一样)

LangServe 文档提供了一些有用的示例,说明如何启动并运行。对于我们的示例,我们只需要使用 FastAPI 启动 API 服务器并从 LangServe 调用 add_routes() 即可通过 API 端点访问我们的链。

除此之外,我们还需要对现有代码进行一些小的修改。

  1. 我们将删除 StrOutputParser 的使用。这将使我们的 API 调用者能够灵活地选择如何格式化和使用输出。
  2. 我们不会提示用户从命令行输入。 API调用请求将提供用户的输入。
  3. 我们不会调用 chain.invoke(),因为 LangServe 将负责处理 API 请求的这一部分。

我们确保将 FastAPI 和 LangServe 包添加到我们的项目中:

 

(venv) $ pip install langserve fastapi

我们的最终 main.py 文件如下所示:

Python

 

导入操作系统
从 langchain_core.prompts 导入 ChatPromptTemplate
从 langchain_openai 导入 ChatOpenAI
从 fastapi 导入 FastAPI
从 langserve 导入 add_routes


my_prompt = ChatPromptTemplate.from_messages([
    (“系统”,“你是一位友善且鼓舞人心的健身教练。”),
    (“用户”,“{输入}”)
])

llm = ChatOpenAI(openai_api_key=os.getenv("OPENAI_API_KEY"))

链= my_prompt |勒姆

app = FastAPI(title="健身教练"")

add_routes(应用程序,链)

如果 __name__ == "__main__":
    进口uvicorn

uvicorn.run(应用程序,主机=“localhost”,端口=8000)

在运行 Python 3.8.10 的本地计算机(Ubuntu 20.04.6 LTS)上,我还需要安装一些额外的软件包来消除一些警告。您可能不需要在您的计算机上执行此操作。

 

(venv) $ pip install sse_starlette pydantic==1.10.13

现在,我们启动我们的服务器:

 

Procfile” data-lang=”文本/x-sh”>

$ echo 'web: uvicorn main:app --host=0.0.0.0 --port=${PORT}' > Procfile

这告诉 Heroku 运行 uvicorn< /a>,这是 Python 中的 Web 服务器实现。

对于 requirements.txt,我们可以使用 pip freeze 命令输出已安装软件包的列表。

 

$ pip freeze >requirements.txt

最后,对于 runtime.txt,我们将使用 Python 3.11.8。

 

$ echo 'python-3.11.8>runtime.txt

这些文件就位后,我们的项目根文件夹应如下所示:

 

$ 树
。
├── main.py
├── 概要文件
├── 需求.txt
└── 运行时.txt

0个目录,4个文件

我们将所有这些文件提交到 GitHub 存储库。

4.将 Heroku 连接到 GitHub 存储库

最后要做的就是为我们的创建一个 Heroku 远程 GitHub repo,然后将我们的代码推送到远程。 Heroku 将检测新代码的推送,然后将该代码部署到我们的应用程序中。

 

$ heroku git:remote -a my-langchain-app
$ git push heroku main

当我们的代码被推送到 Heroku 远程时,Heroku 会构建应用程序,安装依赖项,然后在我们的 Procfile 中运行命令。我们的 git push 命令的最终结果如下所示:

 

... 远程:----->发现进程类型 远程:Procfile 声明类型 -> web 偏僻的: 远程:-----> 正在压缩... 远程:完成:71.8M 远程:-----> 正在启动... 远程:发布 v4 远程: https://my-langchain-app-ea95419b2750.herokuapp.com/ 部署到 Heroku 偏僻的: 远程:验证部署...完成。

这显示了我们的 Heroku 应用程序的 URL。在我们的浏览器中,我们访问 https://my-langchain-app-ea95419b2750.herokuapp.com/playground

LangServe Playground on LangChain

我们还可以在 https://my-langchain-app-ea95419b2750.herokuapp.com/docs 查看 Swagger UI 文档页面。

健身教练:Swagger UI 文档页面

就这样,我们就开始运行了!

当使用 LangChain 处理大型、复杂的 LLM 管道时,此过程是减少开发人员时间和开销的最佳方法。使用 LangChain 构建的 API 并通过一些简单的命令行参数无缝部署到 Heroku 的能力使得 LangChain 和 Heroku 的配对变得轻而易举。

结论

当今的企业和开发人员顺应人工智能和法学硕士的浪潮是正确的。这些领域有很大的创新和新发展的空间。然而,成功和失败之间的差异在很大程度上取决于他们用来构建和部署这些应用程序的工具链。

使用LangChain框架使得构建基于LLM的应用程序的过程变得平易近人且可重复。但是,实施只是成功的一半。构建应用程序后,您需要能够轻松快速地将这些应用程序 API 部署到云中。这就是您将获得更快迭代和开发的优势,而 Heroku 是实现这一目标的好方法。

Comments are closed.