吐槽
上次写笔记是啥时间?看了下,11.4日,好好好,6天没写了?!!但是我也挺无奈的,这几天尽量坚持刷题和学习掘金小册了。不是谁家学校周六和周日都是满课啊!白天上了一天课,晚上回宿舍,匆匆看看掘金小册和刷题,然后就快半夜12点了,问题是晚上11点断电,哥们还没干啥呢电脑就关机了。
前言
本应该写在一周前的笔记现在才开始,不说废话。
总览:
- 如如何安装LangChain(不过大家在ai练中学进行学习的话,不用考虑)
- 使用OpenAi(我们用豆包)的api来调用Chat 和 Text 模型
- 使用LangChain来调用Chat和Text模型
1.LangChain的安装
LangChain的依赖有很多,仅仅安装它不够,比如它要和各种模型、数据存储库等集成。因此我们使用教程推荐的安装方式。
pip install langchain[llms]
pip install --upgrade langchain
这种方式会自动安装 LangChain 的所有必要依赖,尤其是与大型语言模型(LLMs)相关的扩展依赖,减少了不必要的麻烦。
这一种用于本地开发的安装方式,大概有以下的作用:
-
可编辑安装:在开发模式下安装的包会直接引用本地文件夹中的代码。这样,如果你修改了源码,不需要重新安装包,更新会直接反映到已安装的包中,非常方便用于调试和开发。
-
灵活测试:适合在开发和测试时使用,尤其是在需要频繁更改代码并即时测试效果的场景。
-
创建便捷的开发环境:与
git结合使用,可以拉取、更新和切换代码分支,而不用反复安装依赖或构建包。
个人建议使用第一种方式。
2.Chat Text两种模型介绍
Chat Model 和 Text Model 是大语言模型的两种常见类型,它们的主要区别在于使用场景和交互方式。简单来说:
-
Chat Model(对话模型)
- 主要用途:用于对话或聊天应用,设计为在连续互动中保持上下文、提供自然的对话体验。
- 交互方式:Chat Model 通常会记住对话的上下文。例如,它会根据对话的前后内容,理解用户的提问并提供合适的回答。用户可以像和人对话一样提问,它会理解对话的背景。
- API 特性:一般使用“聊天”格式的 API,比如每一条消息都带有角色信息(如“用户”和“助手”),这样模型能跟踪角色间的互动。
- 常见场景:像 ChatGPT、客户支持助手、互动问答机器人等,都适合使用 Chat Model。
-
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())
这是最精简的模板了,下面是一些解释:
OpenAI()是一个类的构造函数,它会生成一个OpenAI的实例,保存在client变量中。client是我们与 OpenAI API 交互的“桥梁”。所有的 API 请求都会通过这个对象来发送。- 调用
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提示请求模型给花店起一个名字。
- 打印出生成的结果。
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)
这段代码,具体作用如下:
-
库和环境变量设置:
- 代码首先导入
os和ChatOpenAI类。 - 使用
os.environ.get("LLM_MODELEND")获取模型的名称,通常设置在环境变量中,以便动态调用模型。
- 代码首先导入
-
ChatOpenAI 类的初始化:
- 创建
llm对象时,传入模型名称、temperature和max_tokens。 temperature=0.8设置生成文本的多样性,使输出具有一定创造性。max_tokens=600限制返回的文本长度。
- 创建
-
生成响应:
- 使用
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)
关键的部分和参数如下:
-
设置和导入:
os用于访问系统环境变量,ChatOpenAI和消息类型(HumanMessage和SystemMessage)用于构建对话。- 通过
os.environ.get("LLM_MODELEND")获取环境变量中存储的模型名称,这样可以灵活地更换模型。
-
初始化对话模型:
- 创建
ChatOpenAI对象chat,设定模型、temperature和max_tokens。 temperature=0.8用于控制生成的内容多样性,较高的值会使生成的答案更具创意。max_tokens=600用于限制模型生成的最大字符数。
- 创建
-
构建消息列表:
SystemMessage和HumanMessage构建对话的内容。SystemMessage(content="你是一个很棒的智能助手")表示系统给模型的指令,以帮助模型确定角色。HumanMessage(content="请给我的花店起个名")模拟用户请求,向模型询问花店名称。
-
获取并输出响应:
chat(messages)将消息列表发送给模型,模型处理这些信息后返回一个结果。print(response)输出生成的响应,即模型为花店起的名称。
总结
我觉得,理解了这四段代码的意思,那我们已经可以比葫芦画瓢,自己写出来这四段代码了,可能具体导入的包的名字你记不清楚,但是大概要写啥代码,导啥包,然后创建啥,给啥参数......这个大概的过程心里已经有了印象,这不就是一种收获吗?