LanChain实战01-从0到1构建模型|豆包MarsCode AI 刷题

149 阅读5分钟

一.LamgChain是什么

1.基本概念:

LangChain是一个基于大语言模型(LLMs)用于构建端到端语言模型应用的框架。

2.基本组件:

1.模型(Models),包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。

2.提示模板(Prompts),使提示工程流线化,进一步激发大语言模型的潜力。

3.数据检索(Indexes),构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。

4.记忆(Memory),通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你是谁。

5.链(Chains),是LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成常见用例。

6.代理(Agents),是另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具。

二.基础代码

前言:本文更加注重基础代码的理解,无论是否学过python等等知识,希望在看完本篇文章后可以有一个基本的认知。其实不了解代码的部分原因可能是不清楚单词的意思,所以经常向豆包提问,或许你就会恍然大悟了。

1.对于代码中出现的一些英文,以下是几个例子,或许你看过后能有一个更深刻的理解:

1.llm:large language model,即大语言模型

2.os:operating system,即操作系统

3.environ:environment,即环境

4.API:Application Programming Interface,即应用程序接口

5.URL:Uniform Resource Locator,即统一资源定位符

6.Ark:方舟

2.常用代码

1.import os:用于导入 Python 的标准库模块 os

2.from OpenAI import ChatOpenAI:导入ChatOpenAI类(text模型调用OpenAI即可)

3.from langchain_openai import ChatOpenAI:通过langchain调用OpenAI

4.os.environ[]:给环境中的变量赋值,例如os.environ[OPEN_API_KEY]='abcdefg'

5.os.environ.get():访问环境变量,例如os.environ.get("OPENAI_API_KEY")可以用来访问搭建环境中的AI的KEY

6.llm=ChatOpenAI():初始化大语言模型

7.llm.predict/invoke():使用predict/invoke方法输出结果

3.常见参数

1.model:模型

2.max_tokens:输出的最大长度(以Tokens为单位)

3.temperatrue:随机性,值越大随机性越大,输出结果越不同

4.OPENAI_API_KEY:OpenAI_接口_密钥

5.OPENAI_BASE_URL:OpenAI_Url地址

6.prompt:text模型输入提示词

7.messages:chat模型输入中的消息,每个消息包含role(可以是system、user或assistant)和content

8.response:模型的输出响应

三.基础应用

注意:1.本文将使用两种大语言模型:Chat Model和Text Model,两种模型使用方式有所区别。2.本文调用模型方式分为直接调用和通过LangChain调用。具体内容看后文。

1.环境配置(/home/cloudide/.cloudiderc)

此处信息均可到火山引擎中获取,并且配置了环境后在代码中无需再获取

export OPENAI_API_KEY=****************************
export OPENAI_BASE_URL="https://ark.cn-beijing.volces.com/api/v3"
export LLM_MODELEND=ep-**********************************
export EMBEDDING_MODELEND=ep-**************************

2.实战一.给花店起名(直接调用Chat模型,此处调用ark接口)

注意:文章中接口废弃,改用火山引擎中的接口,源自这位大佬的解决方法。

从最开始的接入OpenAI(或其它大模型)接口,到构建自己所需的client客户端,并填充最基本的参数:模型,temperatrue,max_tokens,prompt/messages等等,最后再输出结果,这一过程还是清晰明了的。

import os
from volcenginesdkarkruntime import ark # 具体使用请到火山引擎模型API调用下方代码处学习

# 创建Ark客户端
client=Ark()

# 调用chat接口的completions.create方法生成文本
response=client.chat.completions.create(
    model=os.get(LLM_MOODLEND),
    temperature=0.5,
    max_tokens=400, 
    messages=[
        {"role":"system","content":"You are a creative AI."}
        {"role":"user","content":"请给我的花店取个名"}
    ]
)

print(response.choices[0].message.content.strip()) 

为了引入两种模型差异,下面给出text模型代码

与chat模型相比在代码上没有本质性的区别。

import os
from openai import OpenAI

client=OpenAI()

response=client.completions.create(
    model=os.get(LLM_MOODLEND),
    temperature=0.5,
    max_tokens=400, 
    prompt="请给我的花店取个名"
)

print(response.choices[0].text.strip())
含义:

其中choices字段是一个列表,因为在某些情况下,你可以要求模型生成多个可能的输出。每个选择都是一个字典,其中包含以下字段:

1.text:模型生成的文本。
2.finish_reason:模型停止生成的原因,可能的值包括 stop(遇到了停止标记)、length(达到了最大长度)或 temperature(根据设定的温度参数决定停止)。

所以最后print(response.choices[0].text.strip())的具体含义为:从响应中获取第一个(如果在调用大模型时,没有指定n参数,那么就只有唯一的一个响应)选择,然后获取该选择的文本,并移除其前后的空白字符。

模型差异:

1.chat模型的completions.create方法前需要添加一个chat。

2.text模型中使用prompt输入问题,而chat模型中使用messages列表。

3.text模型print函数中使用.text,而chat模型print函数中使用.message.content

3.实战二.情人节玫瑰花宣传语(通过LangChain调用text和chat模型)

若是你已经完全理解了上面的代码,这道实战理解起来还是很轻松的。

text模型

从代码量上就能看出LangChain调用模型的便捷性,直接利用OpenAI接口生成模型llm并输出。

import os
from langchian_openai import OpenAI

# langchain库对API调用进行了一定的封装,获取模型的生成结构更加便捷
llm = OpenAI(  
    model=os.environ.get[LLM_MOODLEND],
    temperature=0.8,
    max_tokens=60
)

response=llm.predict("写几条情人节玫瑰花宣传语")
print(response)

chat模型

比text模型多调用了LangChain中的两种Message,比直接调用模型中messages的构建更加清晰规范。

import os
from langchain.openai import ChatOpenAI

from langchain.schema import (
    HumanMessage,
    SystemMessage
)

chat = ChatOpenAI(
    model=os.environ.get[LLM_MOODLEND],
    temperature=0.8,
    max_tokens=60
)

messages = [
    SystemMessage(content="你是一个很棒的智能助手"),
    HumanMessage(content="写几条情人节玫瑰花宣传语")
]

response = chat(messages)
print(response)

调用模型方式的差异(text/chat)

1.直接调用为from openai import OpenAI(包括Text和Chat模型),通过LangChain调用为from langchain_ai import OpenAI(Text模型)/ChatOpenAI(Chat模型)

2.直接调用为client=OpenAI(),通过LangChain调用模型为llm/chat=OpenAI/ChatOpenAI(模型参数)

3.直接调用为

response=client.chat.completions.create
print(response.choices[0].text/(message.content).strip())

通过LangChain调用为

response=llm.predict(问题)/chat(messages)
print(response)
以上就是学习00/01中代码的认识了,所以无非就是接入——搭建——输出这么一个流程,把这两节内容梳理清楚,对后面的学习速率肯定会大大加快。