【AI】Langchain框架学习08
向量化数据的存储
Redis, PGVector等均可
# 安装LangChain的Redis扩展
pip install -q langchain-redis
# 连接(已经在docker启动的)Redis服务
redis_url = "redis://Localhost:6379"
import redis
redis_client = redis.from_url(redis_url)
prin(redis_client.ping())# 测试连接 返回True表示连接成功
from langchain_redis import RedisConfig, RedisVectorStore
config = RedisConfig(
index_name="fruit",
redis_url=redis_url
)
# 必填args:文本向量话模型,数据库配置
vector_store = RedisVectorStore(embedding_model, config=config)
# 将文本的向量数据存到数据库中
vector_store.add_texts(["香蕉很长","苹果很甜","西瓜又大又圆"])
scored_results = vector_store.similarity_search_with_score("又圆又大的水果是什么", k=3)
# 打印相似性分数,这里是分数越小越相似
for doc, score in scored_results:
print(f" {doc.page_content} - {score}")
- 针对检索数据库的专门组件:retriver类。便于做相似性检索的工具,并且便于以后嵌入LCEL链式表达中。
# 构建检索器,类型为similarity,检索的文档个数为3
retriver = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 3})
retriver.invoke("长长的水果是什么?")
- 链式使用Retriver
from langchain_core.prompts import ChatPromptTemplate
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("human", "{question]"),
])
# 格式转换函数,prompt.invoke方法返回PromptValue,而retriver.invoke需要传入的参数为str。中间做个格式转换
def format_prompt_value(prompt_value):
return prompt_value.to_string()
# 链式连接检索器和提示模板
chain = prompt | format_prompt_value | retriver
# 调用链并传入用户的问题
documents = chain.invoke({"question":"又长又甜的水果是什么?"})
for document in documents:
print(document.page_content)

浙公网安备 33010602011771号