个人笔记之Langchain快速入门(一) | 豆包MarsCode AI 刷题

163 阅读6分钟

青训营课程中,我们从《快速入门》开始,并且分析它的结构。

第一节

import os
from openai import OpenAI


# os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
# os.environ["OPENAI_BASE_URL"] = 'OpenAI 的 API URL'


  • os 模块:用于读取和操作操作系统的环境变量。

  • openai 模块:导入了 OpenAI 的 Python SDK,并假设其中包含一个 OpenAI 类,用于与 OpenAI API 进行交互。

  • 注释部分代码表示需要设置 OPENAI_API_KEYOPENAI_BASE_URL 环境变量。

    • OPENAI_API_KEY 是访问 OpenAI API 的密钥。
    • OPENAI_BASE_URL 是 OpenAI 服务的基础 URL,可能指向官方 URL 或企业内部部署的 API 网关。
  • 这些环境变量的目的是配置 API 客户端所需的验证信息和访问路径。

client = OpenAI()


  • 创建一个 OpenAI 客户端对象 client

  • 该对象内置了与 OpenAI API 交互的功能,比如发送请求、接收响应等。

response = client.completions.create(
    model=os.environ.get("LLM_MODELEND"),
    temperature=0.5,
    max_tokens=100,
    prompt="请给我的花店起个名",
)


print(response.choices[0].text.strip())


这是程序的核心部分,调用 OpenAI API 生成一个文本补全。以下是参数的含义:

  • model=os.environ.get("LLM_MODELEND")

    • 使用 os.environ.get("LLM_MODELEND") 获取环境变量 LLM_MODELEND,该变量指定了使用的模型名称(如 "text-davinci-003""gpt-3.5-turbo")。
    • 这允许模型灵活配置,支持切换不同版本。
  • temperature=0.5

    • 控制生成文本的随机性。
    • 值越低(如 0),生成的内容越确定;值越高(如 1),生成的内容越多样化。
  • max_tokens=100

    • 限制生成文本的最大长度(以 token 为单位,约等于单词数)。
  • prompt="请给我的花店起个名"

    • 提供模型的输入提示。模型根据这个提示生成相应的文本。

返回的结果存储在变量 response 中。

  • 从 API 的响应中提取生成的文本:

    • response.choices:响应中的多个生成选项列表。
    • [0]:选择第一个生成的结果。
    • .text:获取生成的具体文本内容。
    • .strip():去掉文本开头和结尾的多余空格或换行符。
  • 最后,将处理后的生成结果打印到控制台。

整体逻辑流程

  1. 导入模块:引入系统和 OpenAI SDK。
  2. 配置环境变量:准备好 API 调用所需的密钥和基础 URL。
  3. 初始化客户端:创建 OpenAI 客户端实例。
  4. 调用生成方法:使用 completions.create 方法发送请求,传入模型名称、提示词等参数。
  5. 处理并输出结果:从返回值中提取生成文本,去除多余符号并打印。

第二节

重复的部分不再赘述。

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,
)

这里是实现功能的核心代码。 调用了 client.chat.completions.create 方法,生成聊天对话内容。以下是参数的详细说明:

  1. model=os.environ.get("LLM_MODELEND")

    • 通过环境变量 LLM_MODELEND 获取模型名称,灵活选择不同的 OpenAI 模型(如 "gpt-3.5-turbo""gpt-4")。
    • 未设置时可能会导致错误,需要确保环境变量存在,或者提供默认值。
  2. messages

    • 这是聊天接口的核心参数,用于模拟对话历史。

    • 格式为一个列表,每个元素是一个字典,包含以下关键字段:

      • "role":定义消息发送方,常见值包括:

        • "system":系统角色,用于设定模型的行为或上下文信息。
        • "user":用户角色,用于表示用户的输入。
        • "assistant":AI 回复的角色,通常由 API 自动生成。
      • "content":消息的具体内容。

    • 本例中,messages 列表有两个消息:

      • {"role": "system", "content": "You are a creative AI."}:告知 AI 它是一个富有创造力的助手。
      • {"role": "user", "content": "请给我的花店起个名"}:用户请求为花店命名。
  3. temperature=0.8

    • 控制生成内容的随机性和创造性:

      • 值越低(如 0.2):生成内容更具确定性,适合精确任务。
      • 值越高(如 0.8):生成内容更具随机性和创造性,适合需要发散思维的任务。
  4. max_tokens=600

    • 限制生成回复的最大长度(以 token 为单位,1 token 大致相当于 4 个字符或 0.75 个单词)。
    • 设置为 600,允许较长的回复,适合生成多个命名建议或详细解释。

前后程序的区别

1. 调用的 API 接口类型

  • 上一个程序:调用的是 client.completions.create 接口,用于生成文本补全(completion)。

    • 适用场景:基于提示词生成一段连贯的文本结果(如写一段描述或完成某句话)。
    • 工作方式:通过一个 prompt 提供输入,模型以此生成一个连续的输出。
  • 当前程序:调用的是 client.chat.completions.create 接口,用于支持多轮对话(chat)。

    • 适用场景:设计模拟聊天交互的任务(如问答、角色扮演)。
    • 工作方式:通过 messages 提供对话上下文,模型根据历史消息生成更自然的聊天回复。

核心区别

  • 上一个程序:基于单个提示(prompt),适合单一任务的文本生成。
  • 当前程序:基于多轮对话(messages),更适合动态交互和上下文依赖的任务。

2. 输入参数的形式

  • 上一个程序

    response = client.completions.create(
        model=os.environ.get("LLM_MODELEND"),
        temperature=0.5,
        max_tokens=100,
        prompt="请给我的花店起个名",
    )
    
    • 使用 prompt:一个字符串作为输入(如 "请给我的花店起个名")。
    • 上下文缺失:无法包含多轮对话,生成的内容只基于这一段提示。
  • 当前程序

    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,
    )
    
    • 使用 messages:一个列表记录了对话的上下文(包含系统角色、用户输入等)。
    • 上下文保留:支持多轮对话,模型可以基于之前的消息生成更连贯的回复。

核心区别

  • 上一个程序以单个字符串为输入。
  • 当前程序以对话历史(消息列表)为输入,具有上下文感知能力。

3. 模型的角色和行为设定

  • 上一个程序

    • 没有显式设定 AI 的角色或行为。
    • 模型只根据 prompt 提供结果,输出的风格完全依赖提示词。
  • 当前程序

    • 通过 messages 中的 "system" 消息显式设定 AI 的角色:

      python
      复制代码
      {"role": "system", "content": "You are a creative AI."}
      
    • 模型行为会更贴近 "creative AI" 的角色设定,输出可能更加丰富和富有想象力。

核心区别

  • 上一个程序无法直接控制模型的角色或行为。
  • 当前程序通过 system 消息灵活设定模型的角色、任务背景等。