背景介绍
在当今时代,科技的发展如同汹涌澎湃的浪潮,正以前所未有的速度和力度重塑着我们的世界。其中,人工智能领域无疑是这股浪潮中最为耀眼的浪尖,它以惊人的创新力和广泛的应用场景,渗透到了社会生活的方方面面。
面对如此蓬勃发展且极具潜力的 AI 领域,我内心涌起强烈的探索欲望,不愿错过这一时代赋予的宝贵机遇,于是毅然决然地加入了青训营的 AI 方向。
而我即将开启的,是为期一个月的 LangChain 实战课学习之旅。LangChain 作为近年来在 AI 开发领域崭露头角且备受瞩目的一个强大框架,它为开发者们提供了一套极为便捷且高效的工具集,能够助力我们更加顺畅地实现各类基于语言模型的应用开发,在本次实践中,我将跟随黄老师逐步地对它进行探索,进而能够实现对它的运用。
与AI在python中的第一次交流
在本次的课程中,由于掘金社区先进的AI练中学功能,已经提前为我们配置了一个虚拟环境,因此在AI练中学中可以直接运行黄老师给出的例子
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct",max_tokens=200)
text = llm.invoke("请给我写一句情人节红玫瑰的中文宣传语")
print(text)
情人节,红玫瑰炽热盛开,那一抹娇艳欲滴的红,是爱情最浓烈的表达,一朵红玫瑰,胜过千言万语的爱。
上述的代码与运行结果,不仅仅是体现了人机交互在python中的可行性,更体现出了使用LangChain的简洁的特点,仅需四行就能实现从调用,给出prompt,再到输出的一系列步骤。
一些关键参数的学习
示例代码:
from openai import OpenAI
client = OpenAI()
response = client.completions.create( model="gpt-3.5-turbo-instruct",
temperature=0.5,
max_tokens=100,
prompt="请给我的花店起个名")
print(response.choices[0].text.strip())
在这段代码中,首先要创建一个client,然后使用client调用completions.create的方法,这个方法会返回一个响应对象,该对象包含了模型生成的输出和其他一些信息。这个响应对象是一个字典结构,包含了多个字段。 以下是其中几个参数的解释:
model:模型的类型 temperature:随机性,值越接近1,结果越随机,越接近0,结果越稳定 max_tokens:模型输出的最大长度 prompt:提示词
那么,如何理解最后的print语句中不是简单的print(response)呢?
黄老师提到:
response.choices[0].text.strip()这行代码的含义是:从响应中获取第一个(如果在调用大模型时,没有指定n参数,那么就只有唯一的一个响应)选择,然后获取该选择的文本,并移除其前后的空白字符。这通常是你想要的模型的输出。
以上是调用Text模型,下面的是调用Chat模型(更加先进)
response = client.chat.completions.create(
model="gpt-4",
messages=[
{"role": "system", "content": "You are a creative AI."},
{"role": "user", "content": "请给我的花店起个名"},
],
temperature=0.8,
max_tokens=60
)
我们可以发现,有两个专属于Chat模型的概念,一个是消息,一个是角色。
消息就是messages参数,它是一个列表,包含了多个消息。每个消息都有一个role(可以是system、user或assistant)和content(消息的内容)。
在OpenAI的Chat模型中,system、user和assistant都是消息的角色。每一种角色都有不同的含义和作用。简单的说,在这里,system的作用就是告诉ai,它应该怎样做,而user的作用就是告诉ai,我需要它帮我做什么。
使用LangChain调用模型
import os
from langchain.chat_models import ChatOpenAI
chat = ChatOpenAI(model="gpt-4",
temperature=0.8,
max_tokens=60)
from langchain.schema import (
HumanMessage,
SystemMessage
)
messages = [
SystemMessage(content="你是一个很棒的智能助手"),
HumanMessage(content="请给我的花店起个名")
]
response = chat(messages)
print(response)
可以发现,使用LangChain调用时,代码的可读性提高了,并且在print的时候也不需要进行额外的操作,这是因为
LangChain已经对大语言模型的output进行了解析,只保留了响应中最重要的文字部分。
今天的总结
今天了解了一下两个模型,Text模型和Chat模型,对于简单的单轮文本生成任务,使用Text模型可能会更简单、更直接。而Chat模型给我们输出的文本则更加完善。 并且具体地对它们进行了调用,实现了小小的回答功能,不可不谓是一个好的开始。