前言
估计很多人和我一样,运行00没问题,运行01的时候就报错了,然后听说是环境配置,就自己去配api,结果还有疑问或者错误,因此本人打算分享一下详细的配置过程。 声明:本人是小白,有很多地方都不懂,大佬勿喷,如有疑问,可以发评论一起交流。
详细步骤
按照redame文件的指导去登录注册,然后最右侧点击api key管理创建api,名字随意
创建后点击点击右侧->在线推理->创建推理接入点
名字随便起,按照我的截图选择模型点击确定创建
然后右拉找到api调用,进去点击选择第三方sdk调用示例,下拉找到代码里的base_rul和model,复制下来,然后回到api key管理复制api
在ai练中学找到.cloudiderc文件并把该文件的三个变量配置为自己刚才复制的,注意带双引号哈
然后点击新建终端,在终端里输入命令source ~/.cloudiderc后回车,至此初步的环境就配置好了
然后去00-02里面将模型换成自己配置的就好啦,点击运行,成功!(在此感谢一位友友,参考了他的文章我恍然大悟。大家可以去看看他的文章,里面还讲了01-1的报错如何解决。他文章的链接 我当时明明配好环境了还一直报错,相信有人跟我一样,其实问题就在于我们虽然配好了api啥的,但是我们没有用呀,我们要把模型的名字改成LLM_MODELEND,因为这才是我们配置的)
如何理解LangChain
可以把 LangChain 想象成一个工具箱,这个工具箱专门用来帮助我们更方便地使用各种“语言模型”(也就是 AI 模型,例如 OpenAI 的 GPT 系列模型)。这些模型通常通过 API(应用程序接口)来提供服务。
- 套壳:LangChain 通过封装和管理这些 API,把不同模型的功能包装起来,就像给模型“穿了个壳子”。这样我们在操作时,只需使用 LangChain 提供的接口,就能方便地与模型进行交互,而不必直接管理底层的 API 细节。
- 搭建框架、模块和接口:LangChain 提供了很多现成的“模块”(功能块)和“接口”(操作方式),帮助我们把各种模型的功能组合在一起。比如,你可能想让一个语言模型生成文本,另一个模型翻译文本,LangChain 可以提供一整套工具来简化这些操作。
总之,LangChain 的作用就是“中介”和“简化器”,它帮我们把不同的大模型 API 整合在一起,用简单的模块和接口去操作它们,让这些复杂的 AI 功能使用起来更方便。
直接用大模型岂不是更方便,为何还要用你LangChain呢?
原来是LangChain主要用在复杂,多步骤的应用场景里,如:
- 自动化工作流:假设你要搭建一个复杂的系统,既需要问答功能、还要有文本分析、翻译、总结等能力。用 LangChain 可以很方便地把这些功能“串联”起来,形成一个自动化流程,比如从分析文档到生成报告再到翻译输出。
- 模型组合:LangChain 还可以让多个不同的模型一起工作,比如用一个模型生成文本,再用另一个模型对文本进行总结,最后用另一个模型做情感分析。它提供了一个框架,可以让这些模型在同一个项目中无缝合作,而不是一个个单独调用。
- 灵活性和控制:在 LangChain 里,可以自定义更多参数,调整模型的行为,甚至切换模型来源。比如你可以选择不同公司的语言模型(如 OpenAI、Anthropic、Cohere),并动态地决定使用哪个模型。这种控制在更高级的应用中非常有用。
- 数据管理:LangChain 提供一些功能来处理和保存数据,比如把对话记录、分析结果保存在数据库中,以便随时调用或做进一步处理。
看起来好像挺牛逼的,但是我也不知道啥自动化工作流或者模型组合,还没接触过,总之就是听着很牛逼就对了。
大模型的token是啥,什么是16K长度的Token
在大模型(如 GPT 系列模型)中,Token 是指模型处理文本时的最小单元。它可以是一个词、一部分词,甚至一个符号。模型不会直接读取原始的文字,而是把文字拆分成这些 token,然后逐一分析、生成结果。
1. Token 是什么?
简单理解,token 是一种文本的“编码”方式:
- 一个简单的单词,像 "hello",可能被拆分成一个 token;
- 复杂的词或较长的句子可能会被分解成多个 token;
- 标点符号、空格等也会被单独算作 token。
举个例子:
- 句子 "I love programming" 被模型处理时,可能拆分成 ["I", " love", " programming"],总共是 3 个 token。
- 而对于更长的句子,像 "Python is an incredibly versatile language," 可能会拆分成 6-8 个 token。
不同的语言模型对 token 的划分规则略有不同。
2. 16K 长度的 Token
“16K” 指的是 模型最多可以处理 16,000 个 token 的上下文长度。这是模型在一次交互中能处理的文本量的上限。这相当于在一次对话中,模型能够“记住”16,000 个 token 的内容。
如果我们用英文单词来粗略估算:
- 通常 1 个 token 大约相当于 3-4 个字符。
- 16K token 大约可以包含 12,000 到 16,000 个单词,视内容而定。
在长篇文本、复杂对话场景或处理多段上下文时,这种 16K token 的限制决定了模型能理解和处理的内容范围。
代码的详细含义
代码1 情人节玫瑰宣传语
python
代码解读
复制代码
import os
os.environ["OPENAI_API_KEY"] = '你的OpenAI Key'
from langchain_openai import OpenAI
llm = OpenAI(model_name="gpt-3.5-turbo-instruct",max_tokens=200)
text = llm.invoke("请给我写一句情人节红玫瑰的中文宣传语")
print(text)
每一行的含义
python
代码解读
复制代码
import os
- 作用:引入 Python 的
os
模块,提供与操作系统进行交互的功能。 - 用途:使用
os
模块可以读取、修改环境变量,管理文件系统,获取系统信息等。
python
代码解读
复制代码
os.environ["OPENAI_API_KEY"] = '你的OpenAI Key'
- 作用:设置环境变量
OPENAI_API_KEY
,其值为'你的OpenAI Key'
。 - 用途:
OPENAI_API_KEY
是用于身份验证的 API 密钥,通过设置该环境变量可以让程序在后续代码中使用这个密钥与 OpenAI 服务器进行安全通信。这样避免直接在代码中暴露密钥,提升安全性。
python
代码解读
复制代码
from langchain_openai import OpenAI
- 作用:从
langchain_openai
模块中导入OpenAI
类。 - 用途:
langchain_openai
是一个专门用于与 OpenAI 的 API 进行交互的库,OpenAI
类可以调用 OpenAI 的模型(如 GPT-3.5)来生成文本。这里导入的OpenAI
类后面会用于与 OpenAI API 进行交互。
python
代码解读
复制代码
llm = OpenAI(model_name="gpt-3.5-turbo-instruct", max_tokens=200)
-
作用:实例化
OpenAI
类,创建一个llm
对象。 -
参数解释:
model_name="gpt-3.5-turbo-instruct"
:指定要使用的 OpenAI 模型,这里选择的是gpt-3.5-turbo-instruct
模型。max_tokens=200
:设定生成的文本最大长度为 200 个 token。token
是 OpenAI 模型生成文本的最小单位,一般一个 token 约等于一个英文单词(或部分中文字符)。
-
用途:
llm
对象是一个基于 OpenAI 的语言模型实例,可以使用该对象与 OpenAI API 进行交互,生成指定内容。
python
代码解读
复制代码
text = llm.invoke("请给我写一句情人节红玫瑰的中文宣传语")
- 作用:调用
llm
对象的invoke
方法,向模型发送请求生成文本。 - 参数解释:
"请给我写一句情人节红玫瑰的中文宣传语"
是要传递给模型的指令,用中文请求模型生成一句宣传语。 - 用途:该行代码发送请求并获取模型生成的内容,将生成的文本保存到变量
text
中。
python
代码解读
复制代码
print(text)
将 text
变量中的内容输出到控制台,没啥好说的。这下整段代码大概是怎么回事的了,我们就有了初步的了解,后面还会经常看到这几行代码的。
代码2 海报文案生成器
这段代码的目的是给一批鲜花的推广海报的每一个海报,给它的内容写几句话。 先导入相关的必要的包
python
代码解读
复制代码
pip install --upgrade langchain
pip install transformers
pip install pillow
pip install torch torchvision torchaudio
python
代码解读
复制代码
#---- Part 0 导入所需要的类
import os
import requests
from PIL import Image
from transformers import BlipProcessor, BlipForConditionalGeneration
from langchain.tools import BaseTool
from langchain import OpenAI
from langchain.agents import initialize_agent, AgentType
#---- Part I 初始化图像字幕生成模型
# 指定要使用的工具模型(HuggingFace中的image-caption模型)
hf_model = "Salesforce/blip-image-captioning-large"
# 初始化处理器和工具模型
# 预处理器将准备图像供模型使用
processor = BlipProcessor.from_pretrained(hf_model)
# 然后我们初始化工具模型本身
model = BlipForConditionalGeneration.from_pretrained(hf_model)
#---- Part II 定义图像字幕生成工具类
class ImageCapTool(BaseTool):
name = "Image captioner"
description = "为图片创作说明文案."
def _run(self, url: str):
# 下载图像并将其转换为PIL对象
image = Image.open(requests.get(url, stream=True).raw).convert('RGB')
# 预处理图像
inputs = processor(image, return_tensors="pt")
# 生成字幕
out = model.generate(**inputs, max_new_tokens=20)
# 获取字幕
caption = processor.decode(out[0], skip_special_tokens=True)
return caption
def _arun(self, query: str):
raise NotImplementedError("This tool does not support async")
#---- PartIII 初始化并运行LangChain智能代理
# 设置OpenAI的API密钥并初始化大语言模型(OpenAI的Text模型)
os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
llm = OpenAI(temperature=0.2)
# 使用工具初始化智能代理并运行它
tools = [ImageCapTool()]
agent = initialize_agent(
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
tools=tools,
llm=llm,
verbose=True,
)
img_url = 'https://mir-s3-cdn-cf.behance.net/project_modules/hd/eec79e20058499.563190744f903.jpg'
agent.invoke(input=f"{img_url}\n请创作合适的中文推广文案")
Part I: 初始化图像字幕生成模型
python
代码解读
复制代码
hf_model = "Salesforce/blip-image-captioning-large"
作用:指定 Hugging Face 上的图像字幕模型 "Salesforce/blip-image-captioning-large"
,即将使用该模型生成图像描述。
python
代码解读
复制代码
processor = BlipProcessor.from_pretrained(hf_model)
model = BlipForConditionalGeneration.from_pretrained(hf_model)
作用:加载并初始化 BLIP
模型的处理器和生成模型。
processor
:用于对图像进行预处理,以便模型能理解图像数据。model
:加载预训练的图像字幕生成模型BLIP
,并准备使用该模型生成字幕。
Part II: 定义图像字幕生成工具类
python
代码解读
复制代码
class ImageCapTool(BaseTool):
name = "Image captioner"
description = "为图片创作说明文案."
作用:定义 ImageCapTool
类,继承自 BaseTool
,用于生成图像说明。
name
:定义工具名称,在代理中调用时可以用该名称来标识。description
:描述该工具的功能。
python
代码解读
复制代码
def _run(self, url: str):
image = Image.open(requests.get(url, stream=True).raw).convert('RGB')
作用:定义 _run
方法,该方法接受一个图像的 URL,并返回生成的字幕。
requests.get(url, stream=True).raw
:通过 URL 下载图像。Image.open(...).convert('RGB')
:将图像转换为 PIL 格式,并确保图像为 RGB 模式,适配模型需求。
python
代码解读
复制代码
inputs = processor(image, return_tensors="pt")
作用:使用 processor
对图像进行预处理,将图像数据转换为模型所需的张量(PyTorch格式)。
python
代码解读
复制代码
out = model.generate(**inputs, max_new_tokens=20)
作用:调用 model.generate()
方法生成图像的字幕。
max_new_tokens=20
:限制生成的字幕最多包含 20 个 token,以控制输出长度。
python
代码解读
复制代码
caption = processor.decode(out[0], skip_special_tokens=True)
return caption
作用:将模型的输出解码成字幕文本。
processor.decode(...)
:对模型输出的编码文本解码,并移除特殊 token。return caption
:返回生成的字幕文本。
python
代码解读
复制代码
def _arun(self, query: str):
raise NotImplementedError("This tool does not support async")
作用:定义 _arun
方法,这是异步方法的占位符。
raise NotImplementedError(...)
:抛出异常,表明该工具不支持异步调用。
Part III: 初始化并运行 LangChain 智能代理
python
代码解读
复制代码
os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
作用:将 OpenAI API 密钥存入环境变量,供后续代码调用
python
代码解读
复制代码
llm = OpenAI(temperature=0.2)
作用:初始化 OpenAI 语言模型 llm
。
temperature=0.2
:设置输出的“温度”,值越低,模型输出的随机性越低,生成内容越稳定。
python
代码解读
复制代码
tools = [ImageCapTool()]
作用:将 ImageCapTool
类实例化,并添加到工具列表 tools
中。
tools
列表包含所有用于初始化代理的工具。
python
代码解读
复制代码
agent = initialize_agent(
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
tools=tools,
llm=llm,
verbose=True,
)
作用:使用 initialize_agent
函数初始化智能代理。
AgentType.ZERO_SHOT_REACT_DESCRIPTION
:指定代理类型,该代理会使用零次学习方法分析输入内容,并动态选择合适的工具。tools=tools
:将tools
列表中的工具传递给代理。llm=llm
:指定代理使用的语言模型llm
。verbose=True
:设置代理为详细模式,以便输出执行过程的详细信息。
python
代码解读
复制代码
img_url = 'https://mir-s3-cdn-cf.behance.net/project_modules/hd/eec79e20058499.563190744f903.jpg'
agent.invoke(input=f"{img_url}\n请创作合适的中文推广文案")
作用:定义图像的 URL,并使用 agent.invoke
方法调用代理生成推广文案。
input=f"{img_url}\n请创作合适的中文推广文案"
:向代理传递输入,包含图像 URL 和推广文案请求
结束
关于代码的详细意思有了,现在大概能知道代码是干啥的了,但是,但是但是,对于小白来说,谁知道要导入这么多库,谁又知道要用库里的什么模块什么方法呢?谁又又能知道我要用某个方法可以实现我想要的功能,这个方法的参数是啥,返回值类型又是啥???我只能说,太多的疑问了,现在能做的也就是,结合ai大模型来研究一下代码的意思然后自己运行看看结果。不知道各位都是如何学习的呢,如果谁有什么学习方法,经验,思路等,我们大家可以一起交流交流