5.3 KiB
5.3 KiB
In [1]:
from langchain_milvus import BM25BuiltInFunction, Milvus
from typing import List
URI = "http://10.10.10.9:19530"
tongyiKey = "sk-9464b2498c184982a9fe9d2c2e725ab5"
from langchain_community.embeddings import DashScopeEmbeddings
embeddings = DashScopeEmbeddings(
model="text-embedding-v3",
dashscope_api_key= tongyiKey,
)
memVectorstore = Milvus(
embedding_function=embeddings,
connection_args={"uri": URI, "token": "root:Milvus", "db_name": "bbit_ai_lab"},
collection_name="memory",
index_params={"index_type": "FLAT", "metric_type": "L2"},
consistency_level="Strong",
auto_id=True,
primary_field = "id",
text_field="text",
vector_field="vector",
partition_key_field = "ai_id",
enable_dynamic_field = True,
drop_old=False, # set to True if seeking to drop the collection with that name if it exists
)
In [2]:
def get_memory_by_key_words(key_words: str, ai_ids: List[str]) -> str:
print("ai_id是:" , ai_ids)
"""
根据关键词和 ai_ids 列表,在知识库中检索相关内容,并返回整理后的文本字符串
"""
# 构建过滤表达式:只查 kn_ids 范围内的
if ai_ids:
ids_expr = " or ".join([f'ai_id == "{kid}"' for kid in ai_ids])
expr = f"({ids_expr})"
else:
expr = "" # 不限制 kn_id todo 实际上应该不反悔任何内容
result = knVectorstore.similarity_search(
query=key_words,
k=5, # 可调节返回条数
expr=expr
)
# 整理成字符串
doc_texts = []
for idx, doc in enumerate(result, start=1):
text = doc.page_content.strip()
if text:
# 可以加个编号,便于LLM区分
doc_texts.append(f"[记忆{idx}]: {text}")
# 拼成一个大字符串,用换行隔开
combined_text = "\n\n".join(doc_texts)
return combined_textIn [3]:
get_memory_by_key_words("共育室 部署 地方",["3730f279-8b56-46ec-bde9-8a9e6c27f021"])ai_id是: ['3730f279-8b56-46ec-bde9-8a9e6c27f021']
[0;31m---------------------------------------------------------------------------[0m [0;31mNameError[0m Traceback (most recent call last) Cell [0;32mIn[3], line 1[0m [0;32m----> 1[0m [43mget_memory_by_key_words[49m[43m([49m[38;5;124;43m"[39;49m[38;5;124;43m共育室 部署 地方[39;49m[38;5;124;43m"[39;49m[43m,[49m[43m[[49m[38;5;124;43m"[39;49m[38;5;124;43m3730f279-8b56-46ec-bde9-8a9e6c27f021[39;49m[38;5;124;43m"[39;49m[43m][49m[43m)[49m Cell [0;32mIn[2], line 13[0m, in [0;36mget_memory_by_key_words[0;34m(key_words, ai_ids)[0m [1;32m 10[0m [38;5;28;01melse[39;00m: [1;32m 11[0m expr [38;5;241m=[39m [38;5;124m"[39m[38;5;124m"[39m [38;5;66;03m# 不限制 kn_id todo 实际上应该不反悔任何内容[39;00m [0;32m---> 13[0m result [38;5;241m=[39m [43mknVectorstore[49m[38;5;241m.[39msimilarity_search( [1;32m 14[0m query[38;5;241m=[39mkey_words, [1;32m 15[0m k[38;5;241m=[39m[38;5;241m5[39m, [38;5;66;03m# 可调节返回条数[39;00m [1;32m 16[0m expr[38;5;241m=[39mexpr [1;32m 17[0m ) [1;32m 19[0m [38;5;66;03m# 整理成字符串[39;00m [1;32m 20[0m doc_texts [38;5;241m=[39m [] [0;31mNameError[0m: name 'knVectorstore' is not defined