青训营X豆包MarsCode 技术训练营AI方向第一课
作者:冬灵
青训营介绍
很高兴能在此处青训营和大家见面,我叫冬灵,是一个爱学习ai的小白,希望能在青训营里找到许多朋友。
这是我的飞书:www.feishu.cn/invitation/…
这是我的个人主页:j1mbx7va0zr.feishu.cn/wiki/GxHbwo…
第一节课
课程链接:
在第一节课中主要介绍当前AI应用的背景和LangChain介绍
一、当前的AI应用背景
能看到我这边篇文章的读者,想必以及对ChatGPT等应用有所了解,在国内,常用的ai助手有文小言、kimi、通义千问、科大讯飞等。
GPT-4的出现是革命性的,课程中也提到的”AI 应用开发——新的历史节点“,为什么这么说,那么我们要了解一下过去的ai为什么不够聪明
二、LLM类型
预测型语言模型(如 RNN、GPT 等):
-
工作原理是基于序列生成,通过逐步预测下一个词构建整个句子。
-
示例:RNN 在给定一段文本的情况下,会基于历史上下文预测后续的词语。早期的 LLM 如 GPT-2 等也是基于这种方式。
提示驱动型语言模型(如 GPT-3、ChatGPT):
- 这类模型通过 prompts(提示)生成基于更复杂指令的内容。用户提供一个 prompt 后,模型会依据它生成相应的回答、文本或执行其他特定任务。
- 这类模型适合广泛的场景,比如编写文章、代码生成、对话机器人等,且通过 prompt 工程可以优化输出质量。
2022年之前主要以预测型语言模型为主,而2022年GPT-3.5的出现让提示驱动型语言模型上了一个台阶,于此开启了”新的历史节点“
面向AI时代,所有产品都值得用大模型重新升级。
这句话,可以理解为目前需要的场景、行业都能加入大模型,及“AI+”,这是应用的新一代升级浪潮,在这之下,如何学习对接大模型尤为重要
于是LangChain出现了,作为一种专为开发基于语言模型的应用而设计的框架,通过LangChain,我们不仅可以通过API调用如 ChatGPT、GPT-4、Llama 2 等大型语言模型,还可以实现更高级的功能。
三、LangChain的6个重要部分
LangChain中的具体组件包括:
-
模型(Models) ,包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。 不同模型的api调用就在这边修改
-
提示模板(Prompts) ,使提示工程流线化,进一步激发大语言模型的潜力。如何发挥大模型的能力,Prompt工程尤其重要
-
数据检索(Indexes) ,构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。知识库,最简单的理解就是存放大模型额外需要的特点知识
-
记忆(Memory) ,通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你是谁。
-
链(Chains) ,是LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成常见用例。
-
代理(Agents) ,是另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使强大的“智能化”自主Agent成为可能!你的 App 将产生自驱力!
这边我们要稍微提一下Agents,在后续的课程会讲到更多
四、智能体是什么?
智能体,即Agent,是一种能自主规划,完成人类所指定的任务的AI工具
OpenAI应用研究主管翁丽莲(Lilian Weng)撰写过一篇blog: LLM Powered Autonomous Agents,将 Agents 定义为LLM + memory + planning skills + tool use,即大语言模型、记忆、任务规划、工具使用的集合。
其中,LLM是Agent的大脑,属于“中枢”模型,要求有以下3种能力:
- planning skills:对问题进行拆解得到解决路径,既进行任务规划
- tool use:评估自己所需的工具,进行工具选择,并生成调用工具请求
- memory:短期记忆包括工具的返回值,已经完成的推理路径;长期记忆包括可访问的外部长期存储,例如知识库
五、如何安装LangChain
LangChain支持Python和JavaScript两个开发版本,我们以Python版本为主。
安装方式LangChain的基本安装特别简单。前提是你已经配置好python或者Anaconda(推荐)
pip install langchain
这是安装 LangChain 的最低要求。这里要注意的是,LangChain 要与各种模型、数据存储库集成,比如说最重要的OpenAI的API接口,比如说开源大模型库HuggingFace Hub,再比如说对各种向量数据库的支持。默认情况下,是没有同时安装所需的依赖项。
安装LangChain时包括常用的开源LLM(大语言模型) 库:
pip install langchain[llms]
安装完成之后,还需要更新到 LangChain 的最新版本,这样才能使用较新的工具。
pip install --upgrade langchain
如果你想从源代码安装,可以克隆存储库并运行:
pip install -e
GitHub链接:langchain-ai/langchain: 🦜🔗 Build context-aware reasoning applications
课程中的LangChain的API文档有所变动:LangChain Python API Reference — 🦜🔗 LangChain documentation
OpenAI API
关于ChatGPT和GPT-4,网上有很多教程
如果你是小白,且想试试看gpt,可以看一下我写的教程:j1mbx7va0zr.feishu.cn/wiki/E8Duwd…
但是不要忘记, LangChain本质上就是对各种大模型提供的API的套壳,是为了方便我们使用这些API,搭建起来的一些框架、模块和接口。
注册openai API ,我在这不过多阐述,调用大模型最重要的也是api
因为open ai 的ChatCompletion接口已经修改, 详情可以看官方文档Developer quickstart - OpenAI API
首先安装 openai
:
pip install openai
然后可以使用以下代码:
import openai
# 设置 API 密钥
openai.api_key = "your_openai_api_key"
def call_gpt(prompt, model="gpt-4"):
try:
response = openai.ChatCompletion.create(
model=model,
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": prompt}
],
max_tokens=100, # 设置返回内容的最大长度
temperature=0.7, # 控制生成内容的随机性,值越高生成内容越随机
)
# 提取 GPT 的回复
reply = response['choices'][0]['message']['content']
return reply
except Exception as e:
print(f"Error calling GPT: {e}")
return None
# 示例:调用 GPT
user_prompt = "请给我写一个Python的天气查询代码。"
gpt_response = call_gpt(user_prompt)
print("GPT的回答:", gpt_response)
说明:
model
参数设置为"gpt-4"
,可以根据需求选择合适的模型。temperature
参数控制回复的随机性,值越高生成内容越随机。max_tokens
是 GPT 回复的最大长度,可根据需要调整。
更多的参数说明
两种不同的模型:聊天模型(Chat Model)和文本模型(Text Model)
在 OpenAI 的 API 中,**聊天模型(Chat Model)和文本模型(Text Model)**是两种不同的模型接口,尽管它们的底层大多使用同样的 GPT 技术,但它们的工作方式和应用场景有所不同。我们可以从结构、输入输出、使用场景等几个方面来对比它们。
1. 聊天模型(Chat Model)
-
结构:
- 聊天模型是专门设计用于多轮对话的。它引入了角色概念,每轮对话中可以指定角色,比如
"user"
(用户)、"assistant"
(助手)和"system"
(系统)。 - 角色帮助模型理解不同信息的来源,使得模型可以更好地理解对话的上下文和用户意图。
- 聊天模型是专门设计用于多轮对话的。它引入了角色概念,每轮对话中可以指定角色,比如
-
输入:
- 聊天模型的输入一般是一组消息,这些消息按顺序构成对话历史。例如:
messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "帮我写一个天气查询的代码。"} ]
- 可以在对话过程中不断添加新的消息,让模型保留上下文。
- 聊天模型的输入一般是一组消息,这些消息按顺序构成对话历史。例如:
-
输出:
- 聊天模型的输出是助手的回答,它直接回应最后一条消息。聊天模型在回复时会参考之前的上下文。
-
应用场景:
- 适用于需要多轮对话的场景,如客服助手、问答系统、智能聊天机器人。
- 可以通过历史记录实现更加复杂的交互,因为它会根据多轮对话的上下文来生成更相关的回答。
-
相关参数:
2. 文本模型(Text Model)
-
结构:
- 文本模型主要是生成或补全文本的一种模型,没有明确的角色分配。
- 只需要一个连续的文本输入,可以是一个句子、段落或其他格式的提示,模型根据提示生成补全内容。
-
输入:
- 文本模型的输入是单个字符串,如
"帮我写一个天气查询的代码。"
. - 它并不会自动保存上下文,而是将输入当作一个完整的文本块来处理。因此多轮对话需要手动拼接上下文。
- 文本模型的输入是单个字符串,如
-
输出:
- 文本模型生成一段新文本,作为对输入的补全或直接生成的结果。
- 不考虑对话历史,因此不会理解用户的连续提问或对话。
-
应用场景:
- 适用于完成单一任务的场景,如文本生成、补全、文案写作、摘要生成、代码补全等。
- 因为没有上下文的角色分配,也不适合用作需要多轮对话的应用。
-
相关参数:
3. 使用示例对比
-
聊天模型调用示例:
import openai openai.api_key = "your_openai_api_key" response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": "告诉我什么是聊天模型和文本模型的区别。"} ] ) print(response['choices'][0]['message']['content'])
-
文本模型调用示例:
import openai openai.api_key = "your_openai_api_key" prompt = "告诉我什么是聊天模型和文本模型的区别。" response = openai.Completion.create( model="text-davinci-003", prompt=prompt, max_tokens=100 ) print(response['choices'][0]['text'])
4. 选择依据
- 如果需要上下文记忆、多轮互动的场景,聊天模型更合适。
- 如果是单一指令生成文本结果,比如写作或简单补全,则文本模型更加适合。
总结来说,聊天模型适合对话和连续性任务,而文本模型更适合单轮的文本生成或补全任务。根据不同的应用需求,可以选择合适的模型来优化效果。
通过 LangChain 调用 Text 和 Chat 模型
调用 Text 模型
代码如下:
import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'
from langchain.llms import OpenAI
llm = OpenAI(
model="gpt-3.5-turbo-instruct",
temperature=0.8,
max_tokens=60,)
response = llm.predict("请给我的花店起个名")
print(response)
输出:
plain
复制代码
AI练中学
花之缘、芳华花店、花语心意、花风旖旎、芳草世界、芳色年华
这只是一个对OpenAI API的简单封装:先导入LangChain的OpenAI类,创建一个LLM(大语言模型)对象,指定使用的模型和一些生成参数。使用创建的LLM对象和消息列表调用OpenAI类的__call__方法,进行文本生成。生成的结果被存储在response变量中。没有什么需要特别解释之处。
调用 Chat 模型
代码如下:
import os
os.environ["OPENAI_API_KEY"] = '你的Open API Key'
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的ChatOpenAI类,创建一个Chat模型对象,指定使用的模型和一些生成参数。然后从LangChain的schema模块中导入LangChain的SystemMessage和HumanMessage类,创建一个消息列表。消息列表中包含了一个系统消息和一个人类消息。你已经知道系统消息通常用来设置一些上下文或者指导AI的行为,人类消息则是要求AI回应的内容。之后,使用创建的chat对象和消息列表调用ChatOpenAI类的__call__方法,进行文本生成。生成的结果被存储在response变量中。
输出:
plain
复制代码
AI练中学
content='当然可以,叫做"花语秘境"怎么样?'
additional_kwargs={} example=False
从响应内容“当然可以,叫做‘花语秘境’怎么样? ”不难看出,GPT-4的创造力真的是胜过GPT-3,她给了我们这么有意境的一个店名,比我自己起的“易速鲜花”好多了。
另外,无论是langchain.llms中的OpenAI(Text模型),还是langchain.chat_models中的ChatOpenAI中的ChatOpenAI(Chat模型),其返回的结果response变量的结构,都比直接调用OpenAI API来得简单一些。这是因为,LangChain已经对大语言模型的output进行了解析,只保留了响应中最重要的文字部分。
总结
open ai的模型会不断更新,但是LangChain的代码已经固定了,而且未来也会调用不同平台的模型,所以建议多去看看别的模型的调用方式,同时明白LangChain只是一个框架
更多文档
- LangChain官方文档(Python版)(JavaScript版),
- OpenAI API 官方文档,深入学习OpenAI API的地方。
- HuggingFace 官方网站,玩开源大模型的好地方。
- Kimi API - Moonshot AI 开放平台,kimi模型文档
- 讯飞星火大模型-AI大语言模型-星火大模型-科大讯飞科大讯飞模型文档