从0开始搭建AI Agent(四)
LangChain 文本嵌入模型(Embeddings)是 LangChain 框架中用于将非结构化文本转换为高维数值向量的核心组件接口,它本身不直接提供算法,而是统一封装了各类底层嵌入模型(如 OpenAI、Hugging Face、阿里云等)的调用逻辑 。
核心定义与功能
本质作用:充当“翻译官”,将人类可读的文字映射为计算机可计算的浮点数列表(向量),使机器能理解文本的语义信息 。
关键特性:遵循语义保持性,即语义相似的文本(如“猫”和“小狗”)在向量空间中的距离更近,从而支持相似度计算 。
统一接口:无论底层使用何种模型,LangChain 均通过标准方法暴露功能,便于开发者灵活切换供应商 。
文本嵌入作用
找相似的内容:让电脑搜索的时候不只找关键词,还能找到意思相近的内容;
分类文字:分类文章、商品的好评、差评;
推荐:根据用户关注的内容推荐相似的东西;
跨语言:不同国家语言,只要意思相近,都能够匹配到。
代码示例
网络文本模型
新建一个“TextEmbedded.ipynb”文件,同样,我们需要把上一章的模型加载部分代码搬过来,如下图:

点击运行;
新建代码段
from langchain_community.embeddings import ZhipuAIEmbeddings
#加载
embeddings = ZhipuAIEmbeddings(model="embedding-2")
#评论
comments = ["这个电视很好、很清晰","这个电视很差、很卡顿"]
#转换为向量
vector = embeddings.embed_documents(comments)
print(f"向量的维度:{len(vector[0])}")
print(f"向量:{vector[0]}")
直接运行会报错,提示ImportError: Could not import zhipuai python package.Please install it with `pip install zhipuai`.
需要按照提示进入我们的conda环境,执行pip install zhipuai;
注意:
有时候会发现,安装完pip install zhipuai后,还是会报“ImportError: Could not import zhipuai python package.Please install it with `pip install zhipuai`”错误,这个时候需要排查:
1.你的python是不是运行在你的conda环境里面?
2.你的conda环境是否正确安装了包?
查看方式:
conda activate 你自己的环境
#查看zhipuai版本
pip show zhipuai
如果有输出版本信息,则表示已经安装
3.以上两种都排除了,但是仍然有错误,执行一下这条命令:
python -c "from zhipuai import ZhipuAI; print('zhipuai 导入成功')"
可能会出现(也可能其它包缺失):
ModuleNotFoundError: No module named 'sniffio',这样我们需要再安装一下:pip install sniffio;
这个时候我们再运行代码,应该就不会出错了,打印如下:

预测测试
安装包
pip install scikit-learn
新建代码块
test_comment=['这个东西超好用!']
test_vector = embeddings.embed_documents(test_comment)
print(f"向量:{test_vector[0]}")
from sklearn.linear_model import LogisticRegression
labels = [1,0]#1好评0差评
clf = LogisticRegression().fit(vector,labels)
#预测
prediction = clf.predict(test_vector)
print("好评" if prediction[0]==1 else "差评")
点击运行,可以看到,模型将我们的“这个东西超好用”,评论归类到了好评上面。
本地文本模型
有时候我们不想用网络上的模型,我们可以去下载下来,部署到我们本地使用,推荐下载地址:ModelScope 魔搭社区,进去之后,再右上角搜索:bge-small-zh-v1.5,找到后进入下载页面,如下图:

点击“下载模型”,里面包含了很多下载方式,我这边是用git下载的,下载后,模型放到工程文件夹下面,如下图:
![]()
测试
安装包:
pip install langchain_huggingface
pip install sentence-transformers
测试代码:
from langchain_huggingface import HuggingFaceEmbeddings
#加载本地模型
embeddings = HuggingFaceEmbeddings(
model_name='bge-small-zh-v1.5',
model_kwargs={'device': 'cpu'},
encode_kwargs={'normalize_embeddings': False} #提升相似度计算精度
)
#测试
query = "这个电视怎么样?"
query_vector = embeddings.embed_query(query)
print(f"向量的维度:{len(query_vector)}")
print(f"向量:{query_vector}")
运行,输出下面结果:

代表我们本地的向量模型可以使用了;
一个简单的应用
下面我们以一个简单的应用来体现文本向量化的实际使用:
大概应用是这样:我们将一个公司考勤规定通过向量化后,并持久化保存到硬盘,然后用户可以根据自己的需求,搜索到相应的规定要求:比如:加班规定、年假规定、迟到处罚等;
1.在当前项目目录新建一个“.txt”文档,加入以下内容(也可以自己编写测试文档):

2.加载本地向量模型
from langchain_huggingface import HuggingFaceEmbeddings
#加载本地模型
embeddings = HuggingFaceEmbeddings(
model_name='bge-small-zh-v1.5',
model_kwargs={'device': 'cpu'},
encode_kwargs={'normalize_embeddings': False} #提升相似度计算精度
)
3.加载文档并持久化,测试搜索
持久化需要安装一个包:
pip install chromadb
from langchain_community.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
#加载文件
loader = TextLoader('./公司考勤.txt', encoding='utf-8')
documents = loader.load()
#中文分块
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=50, #适合中文段落的段落大小
chunk_overlap=0, #上下误差 避免上下文缺失
separators=["\n\n", "\n", " ", ",","。"]
)
splits = text_splitter.split_documents(documents)
#print(f"分块数量:{len(splits)}")
#print(f"第一个分块内容:{splits[0].page_content}")
#数据持久化
from langchain_community.vectorstores import Chroma
db = Chroma.from_documents(
documents=splits,
embedding=embeddings,
persist_directory="./chroma_db"
)
# 语义搜索
docs = db.similarity_search("加班规定", k=2)
print(f"搜索结果:")
for doc in docs:
print(f"内容:{doc.page_content}")
其中,docs = db.similarity_search("加班规定", k=2),k值代表搜索的结果,k=1,会返回最接近搜索的结果,k值越大,返回的结果就会越多(会返回和搜索相似的结果),这个需要根据实际应用去调整;
运行,打印出结果:

OK,文本嵌入模型就先讲到这里,实际应用中根据需求,加到自己的AI Agent里面;下一章继续介绍Langchain的工具封装调用......
更多推荐



所有评论(0)