02- LangChain安装和入门的一些笔记 | 豆包MarsCode AI刷题

257 阅读8分钟

吐槽

上次写笔记是啥时间?看了下,11.4日,好好好,6天没写了?!!但是我也挺无奈的,这几天尽量坚持刷题和学习掘金小册了。不是谁家学校周六和周日都是满课啊!白天上了一天课,晚上回宿舍,匆匆看看掘金小册和刷题,然后就快半夜12点了,问题是晚上11点断电,哥们还没干啥呢电脑就关机了。

前言

本应该写在一周前的笔记现在才开始,不说废话。
总览:

  1. 如如何安装LangChain(不过大家在ai练中学进行学习的话,不用考虑)
  2. 使用OpenAi(我们用豆包)的api来调用Chat 和 Text 模型
  3. 使用LangChain来调用Chat和Text模型

1.LangChain的安装

LangChain的依赖有很多,仅仅安装它不够,比如它要和各种模型、数据存储库等集成。因此我们使用教程推荐的安装方式。

pip install langchain[llms]
pip install --upgrade langchain

这种方式会自动安装 LangChain 的所有必要依赖,尤其是与大型语言模型(LLMs)相关的扩展依赖,减少了不必要的麻烦。
这一种用于本地开发的安装方式,大概有以下的作用:

  • 可编辑安装:在开发模式下安装的包会直接引用本地文件夹中的代码。这样,如果你修改了源码,不需要重新安装包,更新会直接反映到已安装的包中,非常方便用于调试和开发。

  • 灵活测试:适合在开发和测试时使用,尤其是在需要频繁更改代码并即时测试效果的场景。

  • 创建便捷的开发环境:与 git 结合使用,可以拉取、更新和切换代码分支,而不用反复安装依赖或构建包。

个人建议使用第一种方式。

2.Chat Text两种模型介绍

Chat ModelText Model 是大语言模型的两种常见类型,它们的主要区别在于使用场景和交互方式。简单来说:

  1. Chat Model(对话模型)

    • 主要用途:用于对话或聊天应用,设计为在连续互动中保持上下文、提供自然的对话体验。
    • 交互方式:Chat Model 通常会记住对话的上下文。例如,它会根据对话的前后内容,理解用户的提问并提供合适的回答。用户可以像和人对话一样提问,它会理解对话的背景。
    • API 特性:一般使用“聊天”格式的 API,比如每一条消息都带有角色信息(如“用户”和“助手”),这样模型能跟踪角色间的互动。
    • 常见场景:像 ChatGPT、客户支持助手、互动问答机器人等,都适合使用 Chat Model。
  2. Text Model(文本模型)

    • 主要用途:用于生成和处理独立的文本片段,适合完成一次性任务,例如生成文章、回答单次提问。
    • 交互方式:Text Model 更适合一次性生成完整的文本,它不会主动保留对话的上下文。这意味着,每次与 Text Model 交互时,通常都提供完整的问题或任务说明。
    • API 特性:一般使用文本生成格式的 API,输入的是完整的任务或请求,输出的是独立的文本结果。
    • 常见场景:适合用于内容生成(如写文章、生成代码片段)、情感分析、文本摘要等。

3.Openai调用两种模型

1

调用Text模型 (调用前默认已将环境变量里的豆包api配置好了,如果没,我00环环境配置篇有写)

from openai import OpenAI
import os
client = OpenAI()
response = client.completions.create(
    model=os.environ.get("LLM_MODELEND"),
    temperature=0.5,
    max_tokens=100,
    prompt="请给我的花店起个名",
)
print(response.choices[0].text.strip())

这是最精简的模板了,下面是一些解释:

  1. OpenAI() 是一个类的构造函数,它会生成一个 OpenAI 的实例,保存在 client 变量中。 client 是我们与 OpenAI API 交互的“桥梁”。所有的 API 请求都会通过这个对象来发送。
  2. 调用 client.completions.create() 方法,它会向 OpenAI 的 API 发送一个请求,生成文本的补全结果。
    每一个参数的含义如下:
  • model=os.environ.get("LLM_MODELEND")
    解释:这里 model= 的参数值是从系统的环境变量中获取的。 os.environ.get("LLM_MODELEND") 会查找环境变量 LLM_MODELEND 中的值,这个值代表模型的名称,比如 gpt-3.5-turbo

    如果模型名称是写死在代码里,我们可以直接用一个字符串代替,比如 model="gpt-3.5-turbo"

  • temperature=0.5
    解释:这个参数控制生成结果的“随机性”。

    • 温度越低(比如接近 0),生成的文本就越保守,更偏向于常规回答;
    • 温度越高(比如接近 1),回答就可能更加随机和多样。
      这里的值 0.5 表示回答会兼具一定的随机性和稳定性。
  • max_tokens=100
    解释:这个参数控制生成文本的长度,token 可以理解为文字单位。

    • 100 表示最多生成 100 个 tokens,可能会生成的文字量大约是 75~100 个字符。
      作用:防止生成太长的文本,控制输出的字符数量。
  • prompt="请给我的花店起个名"
    解释:这就是你想要模型完成的任务说明。这里的 prompt 提示请求模型给花店起一个名字。

  1. 打印出生成的结果。
  • response 是之前生成的文本结果对象,里面有多个 choices 选项(生成的多个结果)。
  • response.choices[0] 选择第一个生成的结果。
  • .text.strip() 提取出生成的文本,并去掉开头和结尾的空格。
    作用:最终将模型生成的花店名字输出到控制台。

2

调用Chat模型

import os
from openai import OpenAI
client = OpenAI()
response = client.chat.completions.create(
    model=os.environ.get("LLM_MODELEND"),
    messages=[
        {"role": "system", "content": "You are a creative AI."},
        {"role": "user", "content": "请给我的花店起个名"},
    ],
    temperature=0.8,
    max_tokens=600,
)
print(response.choices[0].message.content)

有了上一个的详细解释,这个代码就好理解多了,很多地方都差不多,区别子在于这里的response的创建方式,这里是client.chat.completions.create,多了个chat,另外就是里面的messages参数。

  • messages 是一个列表,表示对话的内容。

  • 列表中包含多个字典,每个字典表示对话中的一句话。

  • {"role": "system", "content": "You are a creative AI."}

    • 设置系统消息,告诉 AI 它的角色或任务,比如这里是一个“有创造力的 AI”。
  • {"role": "user", "content": "请给我的花店起个名"}

    • 表示用户消息,内容是“请给我的花店起个名”。

4. LangChain调用两种模型

1

调用Text模型

import os
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(
    model=os.environ.get("LLM_MODELEND"),
    temperature=0.8,
    max_tokens=600,
)
response = llm.predict("请给我的花店起个名")
print(response)

这段代码,具体作用如下:

  1. 库和环境变量设置

    • 代码首先导入 osChatOpenAI 类。
    • 使用 os.environ.get("LLM_MODELEND") 获取模型的名称,通常设置在环境变量中,以便动态调用模型。
  2. ChatOpenAI 类的初始化

    • 创建 llm 对象时,传入模型名称、temperaturemax_tokens
    • temperature=0.8 设置生成文本的多样性,使输出具有一定创造性。
    • max_tokens=600 限制返回的文本长度。
  3. 生成响应

    • 使用 llm.predict 方法输入 "请给我的花店起个名",请求模型生成花店名称。
    • 最后,将模型返回的结果通过 print(response) 输出。

2

调用Chat模型

import os
from langchain_openai import ChatOpenAI
from langchain.schema import HumanMessage, SystemMessage
chat = ChatOpenAI(model=os.environ.get("LLM_MODELEND"), temperature=0.8, max_tokens=600)
messages = [
    SystemMessage(content="你是一个很棒的智能助手"),
    HumanMessage(content="请给我的花店起个名"),
]
response = chat(messages)
print(response)

关键的部分和参数如下:

  1. 设置和导入

    • os 用于访问系统环境变量,ChatOpenAI 和消息类型(HumanMessageSystemMessage)用于构建对话。
    • 通过 os.environ.get("LLM_MODELEND") 获取环境变量中存储的模型名称,这样可以灵活地更换模型。
  2. 初始化对话模型

    • 创建 ChatOpenAI 对象 chat,设定模型、temperaturemax_tokens
    • temperature=0.8 用于控制生成的内容多样性,较高的值会使生成的答案更具创意。
    • max_tokens=600 用于限制模型生成的最大字符数。
  3. 构建消息列表

    • SystemMessageHumanMessage 构建对话的内容。
    • SystemMessage(content="你是一个很棒的智能助手") 表示系统给模型的指令,以帮助模型确定角色。
    • HumanMessage(content="请给我的花店起个名") 模拟用户请求,向模型询问花店名称。
  4. 获取并输出响应

    • chat(messages) 将消息列表发送给模型,模型处理这些信息后返回一个结果。
    • print(response) 输出生成的响应,即模型为花店起的名称。

总结

我觉得,理解了这四段代码的意思,那我们已经可以比葫芦画瓢,自己写出来这四段代码了,可能具体导入的包的名字你记不清楚,但是大概要写啥代码,导啥包,然后创建啥,给啥参数......这个大概的过程心里已经有了印象,这不就是一种收获吗?