你好,我是方可乐。
一个正在深耕AI编程的30+的AI应用开发工程师。
用AI编程开发过Web应用网站,浏览器插件,微信小程序,AI智能体,RAG系统。
关注公众号&添加微信:ThinkFun666
领取【AI编程资料包】
去年6月份,我做了一个连自己都觉得疯狂的决定:裸辞,All in AI。
现在已经换赛道成功,继续在工作中探索。
在上一篇文章,我们把公司规章制度文档做了切分,但是还没有向量化,今天我们重点讲讲这部分的内容。
切分后的文本片段,依然只是普通字符串。计算机并不能理解“请假制度”和“打卡规则”之间的关系。要让检索具备语义能力,我们必须把文本转成 向量。
为什么文本不行,向量就能行呢?
我们接着看。
为什么要向量化?
向量化的作用就是把 自然语言 → 数字向量。 这样我们就能用数学方法来度量相似度:
-
• 用户问「请假流程」, -
• 系统把问题转成一个向量, -
• 在知识库中找到最接近的向量(例如“员工请假需提前 3 天申请”)。
有了向量化,检索才能从“关键词匹配”进化到“语义匹配”。
向量模型选型
选择向量模型时,可以从这三个维度考虑:
-
1. 准确性(embedding 质量) -
1. 语义表示是否足够好? -
2. 检索结果是否稳定? -
2. 性能(速度与大小) -
1. 模型是否轻量,适合实时场景? -
2. 是否支持在本地快速运行? -
3. 成本与部署方式 -
1. 是否需要联网调用? -
2. 模型大小是否能接受?
下面我们用 bge-small 模型来演示下如何向量化文本:
-
• 参数量小,推理速度快; -
• 效果在大多数中文/英文检索任务中已经足够好; -
• 可以在本地运行,方便教学和实验。
案例:用 bge-small 对规章制度向量化
我们继续用上一节切分出来的规章制度,做 embedding。
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 原始文本
raw_text = """
## 考勤制度
1. 员工必须每天打卡。
2. 上班期间禁止使用私人手机。
## 请假制度
3. 员工请假需提前 3 天申请。
4. 公司提供每年 10 天带薪年假。
"""
# 1. 切分
splitter = RecursiveCharacterTextSplitter(chunk_size=50, chunk_overlap=10)
docs = splitter.create_documents([raw_text])
# 2. 向量化 (bge-small)
model_name = "BAAI/bge-small-zh-v1.5"
embedding = HuggingFaceEmbeddings(model_name=model_name)
vectors = [embedding.embed_query(doc.page_content) for doc in docs]
print("向量维度:", len(vectors[0]))
print("第一个文档内容:", docs[0].page_content)
print("对应向量前10维:", vectors[0][:10])
运行结果如下:
langchain干了什么呢?其实它只是帮你调用不同的向量模型,封装好了函数,让你用起来更方便,代码更简洁。
下一篇文章,我们来聊聊这些向量如何存进向量数据库。
对AI应用开发感兴趣的同学,欢迎加微信申请入群交流学习。
想要学习AI应用开发的同学,可以参照我的代码跑起来,举一反三,一天一个脚印的进步,我相信,会足够坚实。
接下来100天,我会记录从Java程序员到AI应用开发工程师的完整转型路:每一个困惑、每一次突破、每一个真实瞬间。
当前是33/100。
如果你也想了解AI应用开发到底是什么,如果你也在考虑转型但还在犹豫,那就跟着我的记录,一起探索。
继续折腾中,有问题随时交流 🤝
微信号:ThinkFun666
我的免费AI编程交流群,欢迎加入讨论AI编程玩法(说明需求和来意,申请入群)
推荐阅读:
我就喜欢干这种傻事!为什么转型AI应用开发,我不建议你直接从看书开始学起?

