Langchain,框架快速入门

Langchain, 框架快速入门

Django/Flask/Fastapi

当我们想要实现一个web后端服务时,我们可以选择手动使用Python来编写所有的功能,但这样做通常会非常耗时且容易出错。为了提高效率和稳定性,我们通常会选择使用像Django或Flask这样的web框架。

1. 因为它们提供了许多内置功能,比如路由、中间件、模板引擎和数据库集成,这些都可以帮助我们快速且可靠地搭建web服务。
2. 并且Django或Flask变成了Web开发的标准,因此它们有着庞大的社区和丰富的生态系统,这意味着我们可以轻松地找到大量的教程、文档和第三方库。
3. 基于Django或Flask的标准化开发模式或工程项目,我们可以更容易地与其他开发者合作,或者将我们的项目交给其他开发者维护。

什么是langchain

任何大模型应用程序的核心元素是大模型本身。LangChain在构建大模型应用程序方面,扮演着类似Flask和Django在web开发中的角色。Langchain的作用就是为了使与太模型的工作变得更容易。它是一个开发框架,旨在简化和加速基于大模型的应用程序的创建和部署。

Model I/O

这主要涉及明确的模型接口定义、辅助工具用于构建模型输入,以及用于处理模型输出的辅助工具。

模型(Models)

LangChain 集成了两种主要类型的模型:LLMs 和 Chat Models。这些模型根据它们的输入和输出类型来定义。

LLMS

LanaChain 中的 LLMs 指的是纯文本完成模型。它们封装的 API接受字符串提示作为输入,并输出字符串完成OpenAl的 GPT-3 就是作为 LLM 实现的。

Chat Models

Chat models 通常由 LLMs 支持,但专门调整用于进行对话。关键是,它们的提供商 API使用与纯文本完成模型不同的接口。它们不是接受单个字符串,而是接受一个聊天消息列表作为输入,并返回一个 A 消息作为输出。GPT-4 和Anthropic的Claude-2都是作为 chat models 实现的。

注意

这两种 AP| 类型具有非常不同的输入和输出架构。这意味着与它们交互的最佳方式可能大不相同。尽管 LangChain使得可以互换地对待它们,但这并不意味着你应该这么做。特别是,Ls与 chatModels 的提示策略可能大不相同。这意味着你需要确保你使用的提示是为你正在使用的模型类型设计的。

 

学会给openAl大模型下达指令

OpenAl的文本生成模型(通常称为生成预训练变换器GPT或大型语言模型LLM)能够理解自然语言、代码和图像。这些模型根据输入提供文本输出。这些模型的输入也称为“提示”。设计提示本质上是如何“编程”一个大型语言模型,通常是通过提供指令或一些示例来成功完成任务。

Completions APl

Completions翻译成中文是完成。但在这里中文翻译成补全更合适,即补全用户输入的内容。它允许用户输入一段文本(称为prompt),然后由AI模型自动生成接下来的文本内容。这种补全可以用于多种应用场景,比如写作辅助、代码生成、自动回复等。

如果在其他地方看到 补全接口 或 完成接口 都是指的这个。

示例:

  • 美国总统是
  • 小明摔倒了,他要去
  • https://platform.openai.com/docs/api-reference/completions/create

Completions模型将字符串作为输入,模型将返回一个或多个预测的完成项。大多数开发者应该使用的chat completions API 来使用OpenAl最好和最新的模型。大部分支持传统Completions端点的模型将在
2024年1月4日停止服务。

 

Chat Completions APl

Chat Completions服务是一种特定的Completion服务,它专门为对话和聊天类应用设计。这种服务模式使得AI模型更擅长于处理对话流程,能够更自然地进行问答、对话或模拟聊天场景。

在Chat Completions模式下,AI模型会根据上下文来生成回复,这通常涉及到以下特性:

  • 对话历史管理:模型能够记住之前的对话内容,以便生成连贯的回答。
  • 适应性回复:模型会根据对话的上下文来调整其回答的风格和内容。
  • 更加自然的交流:生成的文本更符合人类的聊天习惯,包括非正式的语言、俚语等


Chat Completions模型将消息列表作为输入,并返回模型生成的消息作为输出。尽管 Chat Completions格式旨在使多轮对话变得简单,但它对于单轮对话也是有效的,也就是Completions的场景。

如果在其他地方看到 聊天补全接口 或 聊天完成接口 都是指的这个。

 

消息(Messages)

ChatModels 以消息列表作为输入,并返回一条消息。有几种不同类型的消息。所有消息都有一个角色 role 和内容 content 属性。角色描述了 WHO 在说这条消息。LangChain 为不同的角色 role 提供了不同的消息类。内
容 content 属性描述了消息的内容。这可以是几种不同的事情:

  • 字符串(大多数模型都是这样)
  • 字典列表(这用于多模态输入,其中字典包含关于该输入类型和该输入位置的信息)

       另外,消息有一个 additional_kwargs 属性。这是可以传递有关消息的额外信息的地方。这主要用于特定于提供商的输入参数,而不是通用的。最著名的例子是OpenAl的 function_call 。

  • HumanMessage

   这代表了用户的消息。通常只包含内容。

  • AlMessage

   这代表了模型的消息。这可能包含 additional_kwargs --例如,如果使用 OpenAl 函数调用,则为functional call.

  • SystemMessage

   这代表了系统消息。只有一些模型支持这一点。这告诉模型如何行为。这通常只包含内容。

  • FunctionMessage

   这代表了函数调用的结果。除了角色 role 和内容 content ,这条消息还有一个 name 参数,它传达了产生此结与的函数的名称。

  • ToolMessage

   这代表了工具调用的结果。这与 FunctionMessage 不同,以匹配 OpenAl 的函数和工具消息类型。除了角色和内容,这条消息还有一个 tool_call id 参数,它传达了产生此结果的工具调用的 id。

 

提示(Prompts)

语言模型的输入通常被称为提示 prompts 。通常情况下,你的应用程序中的用户输入并不是直接输入到模型中的。相反,他们的输入以某种方式转换,以产生确实进入模型的字符串或消息列表。将用户输入转换为最终字符串或消息的对象
被称为“提示模板”Prompt Templates 。LangChain 提供了几种抽象概念,以便更容易地处理提示 prompts 。

以下是智能翻译的示例流程图:

此次模型是 阿里的通义 ,前往现在由阿里云百炼维护,前往百炼开通

https://bailian.console.aliyun.com/#/home

代码。

from langchain_community.llms.tongyi import Tongyi
from langchain.prompts.prompt import PromptTemplate

from dotenv import find_dotenv, load_dotenv
import os
load_dotenv(find_dotenv())
DASHSCOPE_API_KEY = os.environ["DASHSCOPE_API_KEY"]


def translate():
    model = Tongyi(model_name='qwen-max', model_kwargs={'temperature': 0.01})
    prompt_template = PromptTemplate.from_template('你是英语翻译官,对用户的输入翻译成英文,不要解释: \n\n{input}')
    user_input = input("请输入要翻译的中文:")
    print("用户输入的内容是: ", user_input)
    prompt = prompt_template.format(input=user_input)
    print("\n", f"2. 生成翻译英文的Prompts:,\n'''\n{prompt}'''")
    print("\n", "3. 开始调用大语言模型进行翻译")
    res = model.invoke(prompt)
    print('\n', "4.输出翻译后的英文内容: ", res)


translate()

  • PromptValue

  chatModels 和 LMS 接受不同类型的输入。PromptValue 是一个旨在两者之间互操作的类。它公开了一个方法,可以转换为字符串(与 LUs一起使用),以及另一个方法,可以转换为消息列表(与chatModels 一起使用)。

  • PromptTemplate

  这是一个提示模板的示例。这包括一个模板字符串。然后使用用户输入格式化这个字符串,以产生最终的字符串。

  • MessagePromptTemplate

  这是一个提示模板的示例。它包括一个模板消息-意味着一个特定的角色role和一个 PromptTemplate 。然后使用用户输入格式化这个 PromptTemplate,以产生最终的字符串,成为这个消息的内容。
    HumanMessagePromptTemplate

    这是产生HumanMessage的MessagePromptTemplate 。

    AlMessagePromptTempiate

    这是产生AIMessage的MessagePromptTemplate。

    SystemMessagePromptTemplate

    这是产生SystemMessage的MessagePromptTemplate。

  • ChatPromptTemplate

  这是一个提示模板的示例。它由一系列 MessagePromptTemplates或 MessagePlaceholders 组成。然后使用用户输入格式化这些,以产生最终的消息列表

 

输出解析器(Output Parsers)

模型的输出要么是字符串,要么是消息。通常,字符串或消息包含以特定格式格式化的信息,以供下游使用例如,以逗号分隔的列表或 JSON数据块)。输出解析器负责接收模型的输出,并将其转换为更可用的形式。这些通常作用于输出消息的内容,但偶尔也作用于 additional kwargs 字段中的值。以下是*输出解析器(Output Parsers)*工作流程图:

StrOutputParser

这是一个简单的输出解析器,它只是将语言模型(LLM 或 Chatodel)的输出转换为字符串。如果模型是 LLM(因此输出字符串),它就直接传递该字符串。如果输出是 ChatModel(因此输出消息),它传递消息的.content 属性。

OpenAlFunctions Parsers

有一些解析器专门用于处理 OpenAl 函数调用。它们获取 function_call 和 arguments 参数的输出(这些参数在additional_kwargs 内部)并使用这些参数,大部分忽略内容。

Agent Qutput Parsers

代理是使用大语言模型来确定采取哪些步骤的系统。因此,大语言模型的输出需要被解析成可以表示要采取的行动 action(如果有的话)的某种输入格式 schema 。AgentoutputParsers 负责获取原始 LLM 或 ChatModel 输出,并将其转换为该行action 的要求的输入格式 schema 。这些输出解析器内部的逻辑可以根据所使用的模型和提示策略而有所不同。

以下是天气预报应用的流程图:

 

 

 

Langchain生态

 

LangChain生态包含了几个主要的组成部分:

LangChain Libraries:

这是Python和javaScript的库,包含了与大语言模型交互的接口和集成,以及用于将这些组件组合成chains和Agent的基本运行时。

langchain-core:

关键抽象的基本接口以及将它们组合成Chain的逻辑。

langchain-community:

各种组件(Components)的第三方集成。

langchain-experimental:

组件(Components)和chains是实验性的,无论是因为技术是新颖的且仍在测试中还是因为它们需要给LLM更多的访问权限,这在大多数生产系统中都是有风险的。

LangChain Templates:

这是一系列预先设计好的参考架构,用于快速部署各种任务的应用程序

LangServe:

一个库,用于将LangChain chains作为RESTAPI部署,从而简化了将语言模型功能集成到现有系统中
的过程。

LangSmith:

一个开发者平台,提供了调试、测试、评估和监控在任何LLM(Large Language Model,大型语言模
型)框架上构建的chains的工具。

 

通过使用LangChain,开发者可以更加专注于应用程序的核心逻辑,而不是底层的实现细节。这使得从快速原型制作到生产部署的过程变得更加高效。它还提供了LangChain表达式语言(LangChain Expression Language,LCEL),这是一种声明式编程语言,旨在简化链的组合过程。

 

 

end..

posted @   王竹笙  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示