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

LangChain-结合魔塔社区modelscope的embeddings实现搜索

首先要安装modelscope

pip install modelscope

安装完成后测试

from langchain_community.embeddings import ModelScopeEmbeddingsembeddings = ModelScopeEmbeddings(model_id="iic/nlp_gte_sentence-embedding_chinese-base")text = "这是一个测试句子"
query_result = embeddings.embed_query(text)
print(f"嵌入向量长度: {len(query_result)}")

运行后,会自动下载,最后输出:

以下使用 智谱AI大模型 + modelscope + LangChain 实现搜索功能

from langchain_community.embeddings import  ModelScopeEmbeddings
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableLambda, RunnablePassthrough
from langchain_community.vectorstores import Chroma
from langchain_core.documents import Document# 实例化自定义语言模型
from langchain_openai import ChatOpenAIllm = ChatOpenAI(temperature=1,model='glm-4-plus',openai_api_key='*****',openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)documents = [Document(page_content='狗是伟大的伴侣,以其忠诚和友好而闻名。',metadata={'source': '哺乳动物宠物文档'},),Document(page_content='猫是独立的宠物,通常喜欢自己的空间。',metadata={'source': '哺乳动物宠物文档'},),Document(page_content='金鱼是初学者的流行宠物,需要比较简单的护理。',metadata={'source': '鱼类宠物文档'},),Document(page_content='鹦鹉是聪明的鸟类,能模仿人数的语言。',metadata={'source': '鸟类动物宠物文档'},),Document(page_content='白兔是社交动物,需要足够的跳跃空间。',metadata={'source': '哺乳动物宠物文档'},),
]embeddings = ModelScopeEmbeddings(model_id="iic/nlp_gte_sentence-embedding_chinese-base")# 实例化向量数据库
vector_store = Chroma.from_documents(documents, embedding=embeddings)# 相似度的查询:返回相似的分数,分数越低相似度越高
# print(vector_store.similarity_search_with_score('咖啡猫'))# 检索器:bind(k=1) 返回相似度最高的第一个
retriever = RunnableLambda(vector_store.similarity_search).bind(k=1)
# print(retriever.batch(['咖啡猫', '鲨鱼']))# 提示模板
message = """
使用提供的上下文仅回答这个问题。
{question}
上下文:{context}
"""prompt_temp = ChatPromptTemplate.from_messages([('human', message)
])# RunnablePassthrough 允许我们将用户的问题之后再传递给 prompt 和 model
chain = {'question': RunnablePassthrough(), 'context': retriever} | prompt_temp | llm
resp = chain.invoke('请介绍一个猫?')
print(resp.content)

以上代码:

1.先定义要使用的AI大模型 

2.定义documents,这里可以自己使用本地的文档内容

3.然后使用modelscope的embeddings实例化向量数据库

4.创建检索器,取向量返回的相似度最高的第一个值

5.定义一个用户提示词模板,用于上下文中问题的回答

6.构建一个chain,调用链invoke

运行之后的结果:

http://www.xdnf.cn/news/10033.html

相关文章:

  • Java八股文——Java基础「概念篇」
  • azure web app创建分步指南
  • 从虚拟化到云原生与Serverless
  • CSS 渐变完全指南:从基础概念到实战案例(线性渐变/径向渐变/重复渐变)
  • 异步并发控制代码详细分析
  • (c++)string的模拟实现
  • 【Office】Excel两列数据比较方法总结
  • 基于大模型预测的FicatIII-IV期股骨头坏死综合治疗研究报告
  • 多模态大语言模型arxiv论文略读(100)
  • LNMP环境中php7.2升级到php7.4
  • Android Native 之 adbd进程分析
  • 视频监控汇聚平台EasyCVR安防小知识:如何通过视频融合平台解决信息孤岛问题?
  • @Pushgateway 数据自动清理
  • 碰一碰发视频系统--基于H5场景开发
  • 选择if day5
  • QPS 和 TPS 详解
  • 竞争加剧,美团的战略升维:反内卷、科技与全球化
  • C++ 游戏开发详细流程
  • 大规模JSON反序列化性能优化实战:Jackson vs FastJSON深度对比与定制化改造
  • Elasticsearch 分析器介绍
  • Camera相机人脸识别系列专题分析之六:MTK ISP6S平台人脸识别fdnode流程FdNodeImp.cpp详解
  • Xamarin劝退之踩坑笔记
  • 苹果签名!
  • 数据清理的例子
  • 【仿生机器人】仿生机器人认知-情感系统架构设计报告
  • 【Java工程师面试全攻略】Day4:JVM原理与性能调优深度解析
  • 达梦数据库:同1台服务器如何启动不同版本的DMAP服务
  • 【Docker管理工具】部署Docker管理面板DweebUI
  • 思维革命:DeepSeek-R1-0528 如何用一次小更新颠覆大模型格局
  • 每日算法-250530