首先要安裝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
運行之后的結果: