当前位置: 首页 > news >正文

LangChain-AI应用开发框架(十一)

一.嵌入与嵌入模型(Embedding and Embedding Models)

1.什么是向量?

2.嵌入模型应用场景

二.Embeddings嵌入模型类

更多的链接:https://docs.langchain.com/oss/python/integrations/providers/overview

1.定义嵌入模型

pip install --upgrade langchain langchain-community zhipuai

# 直接替换:将 OpenAI 改为智谱的 Embeddings 类 from langchain_community.embeddings import ZhipuAIEmbeddings # 定义嵌入模型(1:1 对应你的 OpenAI 写法) embeddings = ZhipuAIEmbeddings( model="embedding-3", # 对应 OpenAI 的 text-embedding-3-large dimensions=1024 # 支持自定义维度:256/512/1024/2048 )

2.嵌入文档列表

import os import getpass # 1. 配置 API Key(智谱AI) if not os.getenv("ZHIPUAI_API_KEY"): os.environ["ZHIPUAI_API_KEY"] = getpass.getpass("请输入智谱AI API Key: ") # 2. 导入基础模块(保持不变) from langchain_community.document_loaders import UnstructuredMarkdownLoader from langchain_text_splitters import CharacterTextSplitter # 3. 核心替换:导入智谱的 Embeddings 类 from langchain_community.embeddings import ZhipuAIEmbeddings # 加载 Markdown 文件 markdown_path = "../Docs/Markdown/脚手架级微服务租房平台Q&A.md" loader = UnstructuredMarkdownLoader(markdown_path) data = loader.load() # 分割文档 text_splitter = CharacterTextSplitter.from_tiktoken_encoder( encoding_name="cl100k_base", chunk_size=200, chunk_overlap=50 ) documents = text_splitter.split_documents(data) # 4. 定义嵌入模型(1:1 对应你的 OpenAI 写法) embeddings = ZhipuAIEmbeddings( model="embedding-3", # 对应 OpenAI 的 text-embedding-3-large dimensions=1024 # 智谱支持自定义维度(256~2048) ) # 5. 嵌入文档列表,生成向量列表 texts = [doc.page_content for doc in documents] documents_vector = embeddings.embed_documents(texts) # 6. 打印结果 print(f"文档数量为: {len(documents)}, 生成了{len(documents_vector)}个向量的列表") print(f"第一个文档向量维度: {len(documents_vector[0])}") print(f"第二个文档向量维度: {len(documents_vector[1])}")

3.嵌入单个查询

# 直接替换:将 OpenAI 改为智谱的 Embeddings 类 from langchain_community.embeddings import ZhipuAIEmbeddings # 定义嵌入模型(1:1 对应你的 OpenAI 写法) embeddings = ZhipuAIEmbeddings( model="embedding-3", # 对应 OpenAI 的 text-embedding-3-large dimensions=1024 # 支持自定义维度:256/512/1024/2048 ) #将query转化成向量标识 query_vector = embeddings.embed_query("你好") print(f"embedding-3 向量维度: {len(query_vector)}") print(f"向量前5个数值: {query_vector[:5]}")

三.向量存储(Vector Stores)

1.向量数据库介绍

链接:https://python.langchain.com/docs/integrations/vectorstores/

2.内存存储

from langchain_openai import OpenAIEmbeddings from langchain_core.vectorstores import InMemoryVectorStore # 定义嵌⼊模型 embeddings = OpenAIEmbeddings(model="text-embedding-3-large") # 内存存储初始化 vector_store = InMemoryVectorStore(embedding=embeddings)

from langchain_community.document_loaders import UnstructuredMarkdownLoader from langchain_text_splitters import CharacterTextSplitter # ⽣成分割器 text_splitter = CharacterTextSplitter.from_tiktoken_encoder( encoding_name="cl100k_base", chunk_size=200, chunk_overlap=50 ) # 加载⽂档 data = UnstructuredMarkdownLoader("../Docs/Markdown/脚⼿架级微服务租房平台 Q&A.md").load() # 分割⽂档 documents = text_splitter.split_documents(data) # 添加⽂档 ids = vector_store.add_documents(documents=documents) print(f"共编排了{len(ids)}个⽂档索引") print(f"前3个⽂档的索引是:{ids[:3]}")

from langchain_community.document_loaders import UnstructuredMarkdownLoader from langchain_community.embeddings import ZhipuAIEmbeddings from langchain_core.vectorstores import InMemoryVectorStore from langchain_text_splitters import CharacterTextSplitter embeddings = ZhipuAIEmbeddings( model="embedding-3", # 对应 OpenAI 的 text-embedding-3-large ) vector_store = InMemoryVectorStore(embedding=embeddings) # 加载 Markdown 文件 markdown_path = "../Docs/Markdown/脚手架级微服务租房平台Q&A.md" loader = UnstructuredMarkdownLoader(markdown_path) data = loader.load() # 分割文档 text_splitter = CharacterTextSplitter.from_tiktoken_encoder( encoding_name="cl100k_base", chunk_size=400, chunk_overlap=50 ) #文档列表 documents = text_splitter.split_documents(data) #存储文档到内存向量存储中 ids = vector_store.add_documents(documents) print(f"共有{len(documents)}个文档,编排了{len(ids)}个索引") print(f"前三个文档的索引:{ids[:3]}") # #根据索引获取文档 # doc_2 = vector_store.get_by_ids(ids[:2]) # print(doc_2) # # #删除文档 # vector_store.delete(ids=ids[:2]) # doc_2 = vector_store.get_by_ids(ids[:3]) # print(doc_2) #检索 search_dosc = vector_store.similarity_search(query="项目介绍",k=2) for doc in search_dosc: print("*" * 30) print(doc.page_content)

from langchain_core.documents import Document def _filter_function(doc: Document) -> bool: return doc.metadata.get("source") == "hahaha" search_docs = vector_store.similarity_search( query="数据库表怎么设计的?", k=2, filter=_filter_function ) for doc in search_docs: print("*" * 30) print(doc.page_content)

我们把source换成../Docs/markdown/....就又可以进行检索了

http://www.jsqmd.com/news/643147/

相关文章:

  • Django从入门到精通:构建高效Web应用的完整指南
  • Langgraph中的agent与工具调用
  • 小白必看!6个AI大模型核心概念,用大白话教你快速入门,看完就能装懂!
  • 【算法日记】Day 15 动态规划专题——树状DP基础(三)
  • 钢制柱形散热器适配场景与实用性如何?
  • 新乡银河机械餐厨垃圾干化设备,处理一吨成本约100元
  • 稳压二极管在5种常见电路中的实战应用(附电路图详解)
  • 从Prompt到铂金单曲,AIAgent音乐工作流全拆解,2026奇点大会TOP3开源框架横向测评,错过再等三年!
  • 保姆级教程:在Ubuntu 22.04上为GDB手动添加glibc 2.35的调试符号与源码
  • 美胸-年美-造相Z-Turbo在机器学习教学中的应用:可视化案例集
  • 5分钟上手Llama Factory:可视化训练平台快速部署与使用
  • StructBERT-Large效果展示:社交媒体热评语义聚类与话题发现真实案例
  • 论文降AI太耗时?零成本大模型指令与4款主流工具测评
  • Node.js后端服务调用Phi-3-mini:构建AI中间层REST API实战
  • Qwen3.5-9B GPU优化:梯度检查点+序列并行降低显存峰值方案
  • PyTorch底层揭秘:c10::ArrayRef和at::IntArrayRef如何优化张量操作性能
  • 北航毕设论文排版终极指南:告别格式焦虑的完整解决方案
  • 什么是增值税发票
  • 从生活案例到统计检验:正态分布、卡方分布、t分布、F分布及其检验方法全解析
  • 独立站建站平台怎么选?新手一看就懂的选型指南|帮你少走弯路
  • AI核心知识119—大语言模型之 监督微调 (简洁且通俗易懂版)
  • Cursor Free VIP:终极解决方案,突破Cursor AI限制,免费享受Pro功能
  • 比斯特自动化动力电池组半自动生产线的工艺革新与效率提升
  • Vue前端集成Hunyuan-MT 7B:实时翻译Web应用开发实战
  • AIAgent情感陪伴不是拟人化,而是神经符号融合——2026奇点大会首席科学家亲授4步验证法
  • Qwen3在网络安全领域的应用:音视频内容安全审核字幕生成
  • 小白也能用!MedGemma医学影像分析系统快速部署教程
  • 告别机械音!用Step-Audio-EditX的标签魔法,为你的视频配音注入灵魂(附情绪/方言标签大全)
  • 2026最新数据抓取实战:如何用 ChatGPT 实现网页数据抓取?
  • **发散创新:基于Rust的内存安全防御技术实战解析**在现代软件开