使用LangChain进行LLM应用开发(2)——理解模型I/O (模型、提示词、输出)

【课程链接】
<智见无极>官网

【适用人群】

  • 入门学习Langchain的同学
  • 轻体验ChatOpenAI的同学,平台提供Api-key,应该是很小的token额度,仅供练习

在这里插入图片描述
课程笔记大纲

1. 模型、提示词模板和解析器的定义
2. OpenAI 原生与 LangChain 的模型调用对比
3. 模型的支持
4. 提示词模板(prompt)
5. 解析器
6. 代码实践

在本节中,我们将深入探讨三个核心概念:模型提示词解析器,它们是构建任何语言模型应用的基础。

  • 模型是应用的核心,负责处理输入并生成输出。
  • 提示词是指导模型生成预期结果的输入文本,
  • 而解析器则将模型的输出转换为结构化数据,便于后续处理。

模型、提示词模板和解析器的定义

模型、提示词模板和解析器在人工智能 LLM 应用程序中的关键作用, 这三个概念是构建智能系统和应用程序的基础。

首先,我们将对这些概念进行简要定义:

  • 模型(Model):在 LangChain 框架中,模型指的是 LangChain 的模型包装器。由于 LangChain 并不提供模型,它封装了市面上的大模型厂商的 API,开发者可以使用这些包装器,调用模型厂商的 API 能力。

而人工智能领域的模型指的是一种经过训练的算法,它能够接收输入数据,基于学习到的模式和规则,生成相应的输出结果。例如,GPT 模型通过分析大量文本数据,学习语言的结构和模式,从而能够生成连贯且有意义的文本输出。在自然语言处理中,模型通常是大型语言模型,如 GPT(Generative Pre-trained Transformer)模型。我们教程中使用的模型均为 GPT 模型,默认使用 OpenAI 的“gpt-3.5-turbo”。

  • 提示词模板(Prompt Template)提示词是一段精心设计的文本,用于引导模型根据特定的上下文生成目标输出。它们不仅包含输入信息,还可能包含对期望结果的描述,从而对模型的生成过程产生指导作用。

  • 解析器(Parser)解析器的作用是将模型生成的非结构化文本转换为结构化数据。这一过程涉及提取关键信息,并将其组织成易于计算机程序处理的格式,以便于后续的数据存储、检索和分析。

环境配置

import os
API_SECRET_KEY = "填写【个人资料】中获取的最新token"
BASE_URL = "https://www.ai360labs.com/openai/v1/"

os.environ["OPENAI_API_KEY"] = API_SECRET_KEY
os.environ["OPENAI_BASE_URL"] = BASE_URL

import openai
from langchain_openai import ChatOpenAI,OpenAI

OpenAI原生调用

OpenAI原生的chat API 被视为行业的标准调用方式。其他模型厂商的API接口都跟OpenAI的调用方式雷同。学习了OpenAI的方式,等同于学习了整个行业的标准。

定义一个辅助函数 get_completion,你可以使用get completion来询问1加1等于什么,这将调用ChatGPT,或技术上说是模型GPT 3.5 Turbo,来给你回答。

def get_completion(prompt, model="gpt-3.5-turbo"):
    messages = [{
   "role": "user", "content": prompt}]
    response = openai.chat.completions.create(model=model,messages=messages)
    return response.choices[0].message.content

输入你的问题。

print(get_completion("中国的首都是哪里?"))

中国的首都是北京市。

为了激发对LangChain模型、提示和解析器抽象的兴趣,假设你需要一个翻译助理,帮你翻译客户发来的邮件。

提示词可以使用模板字符串,包含变量,比如要设置不同的说话口吻选择不同的邮件内容,就将口吻和邮件内容设置为一个变量

最后的prompt使用f-string拼接一体。例如在线代码的{style}{customer_email}

customer_email = """
Arrr, I be fuming that me blender lid \
flew off and splattered me kitchen walls \
with smoothie! And to make matters worse,\
the warranty don't cover the cost of \
cleaning up me kitchen. I need yer help \
right now, matey!
"""

为了解决这个问题,我们将要求这个LLM将邮件翻译中文,并保持冷静和尊重的语气。

style = "保持冷静和尊重的语气"

请你尝试尝试修改提示,看看你是否能得到不同的输出。修改风格或者邮件内容,指导大型语言模型完成翻译任务。

prompt = f"""我不懂英语,现在请你为我翻译客户的邮件为中文。 \
翻译的风格是:{
     style}。\
需要翻译的内容是: ```{
     customer_email}```
"""

print(prompt)

我不懂英语,现在请你为我翻译客户的邮件为中文。 翻译的风格是:保持冷静和尊重的语气。需要翻译的内容是:
```
Arrr, I be fuming that me blender lid flew off and splattered me kitchen walls with smoothie! And to make matters worse,the warranty don’t cover the cost of cleaning up me kitchen. I need yer help right now, matey!
```

response = get_completion(prompt)
response 

‘尊敬的客服团队,\n\n我非常生气,因为我的搅拌机盖子飞了起来,洒了一地的水果奶昔,弄得厨房墙壁一片狼藉!更糟糕的是,保修不包括清理厨房的费用。请您立即提供帮助,非常感谢!\n\n此致, \n[您的名字]’

如果你有不同的客户以不同的语言写评论,不仅仅是英语,还有法语、德语、日语等,你可以想象需要生成一系列提示来生成这样的翻译。

LangChain封装调用

现在我们看看LangChain又是如何达成这个目标的。还记得创始人为什么发明LangChain吗?在LLM的编程实践中,AI开发者需要很多胶水代码。LangChain做了很多这样的抽象,简化AI开发者的编程。

LangChain的设计目标之一是简化AI开发者的工作流程,减少对不同模型厂商API的依赖和学习成本。

使用LangChain后,我们无需封装每个模型厂商的API函数,也无需查看每个模型厂商的API格式。

LangChain提供了一套统一的接口和抽象,使得开发者可以更方便地使用不同模型厂商的模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华尔街的幻觉

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值