Android开发转AI Agent:第8天——把文字变成数字,让计算机“读懂“语义
作者:一位Android开发工程师 | 2026年6月10日
系列:第二阶段开始,进入RAG(检索增强生成)核心
前言
前7天我一直在调 LLM API,但有一个根本限制——LLM 只能回答训练数据里有的东西。你问它"公司内部 API 文档怎么写",它不知道。
RAG(检索增强生成)解决这个问题:先把相关资料检索出来,再和问题一起发给 LLM。而 RAG 的第一步,就是今天要学的 Embedding——把文字变成数字向量。
Embedding 是什么
一句话:把"文字"翻译成"坐标",让语义相近的句子在数学空间里挨得近。
类比 Kotlin:就像给每部电影打分(剧情/画面/演技),然后两部评分相近的电影就是"相似"的。
"Android开发" → [0.12, -0.34, 0.78, ..., 0.45] (384个数字) "移动端编程" → [0.15, -0.31, 0.72, ..., 0.41] (384个数字,非常接近!) "今天下雨" → [-0.82, 0.61, -0.23, ..., 0.03] (差很远)实验代码
fromsentence_transformersimportSentenceTransformerimportnumpyasnp model=SentenceTransformer("all-MiniLM-L6-v2")vec_a=model.encode("Android 应用开发")vec_b=model.encode("移动端 App 编程")vec_c=model.encode("今天天气很好适合出去跑步")# 余弦相似度:两个向量越接近,值越接近 1defcosine(a,b):returnnp.dot(a,b)/(np.linalg.norm(a)*np.linalg.norm(b))print(f"Android vs 移动端:{cosine(vec_a,vec_b):.4f}")# 预期 > 0.7print(f"Android vs 天气:{cosine(vec_a,vec_c):.4f}")# 预期 < 0.5print(f"移动端 vs 天气:{cosine(vec_b,vec_c):.4f}")# 预期 < 0.5运行结果
Android vs 移动端: 0.7894 ← 高!意思相近 Android vs 天气: 0.4317 ← 低!不相关 移动端 vs 天气: 0.4487 ← 低!不相关结果完美:语义相近的得分高,不相关的得分低。
关于模型选择
我用的是all-MiniLM-L6-v2(80MB,轻量级,支持中英文)。但后面第11天发现它对中文检索精度不够,换成了shibing624/text2vec-base-chinese(专为中文优化)。
国内下载 HuggingFace 模型需要镜像:
importos os.environ["HF_ENDPOINT"]="https://hf-mirror.com"今天的一句话总结
Embedding 把"不可计算的语义"变成"可计算的数字"——两段文字的语义相似度,变成了两个向量的余弦距离。这是 RAG 检索的数学基础。
下一篇预告
第9天:向量检索——把多段文档向量化存储,查询时找到最相关的。
本系列记录一位Android开发者转行AI Agent的完整学习过程,欢迎关注交流。
