LangChain入门 | 豆包MarsCode AI 刷题
本篇文章为《LangChain 实战课》前三节课的总结性文章,主要内容包含内容梳理与总结,学习记录,以及一些思考。
01开篇词|带你亲证AI应用开发的“奇点”时刻
内容
这篇文章介绍了Lang Chain是什么,特别地,提出了LangChain的六大组件,模型、提示模板、数据检索、记忆、链、代理。文章中展示了LangChain的两个简单应用:(1)使用LangChain写情人节玫瑰宣传标语(2)使用LangChain读图,为图片生成文案。
遇到的问题
这篇文章的代码都要使用OPENAI的API KEY,由于我没有一个正规的OPENAI 账号,无法申请API KEY,因此这些代码我都没有成功运行。为了初步尝试大模型API的调用, 我根据项目中README.md文件的指导,去注册了豆包大模型的账户,并且申请了API KEY——api-key-20241106232444,
并且运行了demo文件,代码如下:
from volcenginesdkarkruntime import Ark
import os
client = Ark(base_url = os.environ["OPENAI_BASE_URL"],api_key = os.environ["OPENAI_API_KEY"],
)# Non-streaming:
print("----- standard request -----")
completion = client.chat.completions.create(model=os.environ["LLM_MODELEND"],messages = [{"role": "system", "content": "你是一个人工智能专家"},{"role": "user", "content": "使用100个字讲一讲Transformer?"},],
)
print(completion.choices[0].message.content)# Streaming:
print("----- streaming request -----")
stream = client.chat.completions.create(model=os.environ["LLM_MODELEND"],messages = [{"role": "system", "content": "人工智能专家"},{"role": "user", "content": "使用50个字讲一讲什么是聚类"},],stream=True
)
# 遍历流中的每个分块
for chunk in stream:# 如果分块没有选择项,则跳过当前循环迭代if not chunk.choices:continue# 打印分块的第一个选择项的增量内容,并在末尾添加空字符以避免换行print(chunk.choices[0].delta.content, end="")
# 循环结束后,打印一个空行
print()
运行结果:
02LangChain系统安装和快速入门
内容
这篇文章介绍了两种模型,Chat Model和Text Model,并且给出了调用两个模型的两个demo,通过demo,介绍了两种模型在request和response时的一些常用参数。最后,文中给出了使用LangChian调用两种模型的实例。
遇到的问题
(1)LLMs、Text Model和Chat Model三者的关系
文章并没有介绍着三者的关系,在查阅资料后,我明白了:
-
LLMs 是底层核心:
- LLM 是一种底层的、广义的技术,可以支持多种语言任务。
- Text 模型和 Chat 模型都是 LLM 的具体应用。
-
Text 模型 vs. Chat 模型:
- Text 模型专注于单次任务处理,面向生成和分析任务,不具备多轮对话能力。
- Chat 模型专注于对话交互,强化了对上下文的理解和对人类语言意图的捕捉。
(2)使用已经被OPEN AI被淘汰的API
在这一次的demo中,我没有注意到注释的提醒,这份代码只做示意,无法运行,因此卡在这里好几天,一直想把代码跑通。
这给我提了一个打醒,要关注开源代码顶部的一些注释,有时候代码没有达到预期效果,可能就是没有注意这些注释的提示。
03用LangChain快速构建基于“易速鲜花”本地知识库的智能问答系统
内容
这篇文章详细介绍了构建一个基于本地知识和大模型的智能问答系统的步骤。文中给出了两张概括性图片,这里引用一下:
-
基于LangChain框架实现一个知识库文档问答系统的整体框架
-
系统的数据处理管道
对于构建一般智能问答系统的具体步骤,我自己进行一个简单的总结:
- 数据收集:从本地或者互联网中收集数据;
- 数据处理:对数据进行清洗,之后分片,为存储做准备;
- 数据存储:选用合适的向量数据库,将分片数据“嵌入”向量空间
- 构建RetrievalQA 链:根据用户提问,在向量数据库中检索相似或相近的一些分片数据,将这些分片数据和用户提问作为对大模型的提问,让大模型来回答问题
- 渲染前端页面:将大模型返回的结果通过一定的Web架构展示给用户。
问题与优化:
代码能否进行优化,使得对数据分片进行持久化,第一次运行后,后续运行不需要进行文本分片和储存,而可以直接从数据库中检索(Qdrant数据库的持久化问题),打算等学完所有课程后进行进一步探索。
知识积累
1.使用命令行查看操作系统类型
- Linux:
uname -a
- windows
systeminfo
2.操作Linux系统上的环境变量
- 查看特定环境变量
echo $变量名
- 为当前会话设置临时环境变量
export 变量名="变量值"
- 设置永久环境变量
在 ~/.bashrc
文件中添加以下行:
export MY_VAR="some_value"
然后,运行 source ~/.bashrc
来使更改生效。