langchain实现文档向量检索

文章详细描述了眼部疾病如上睑下垂的不同类型,包括机械性、麻痹性和先天性,以及与结核病相关的呼吸系统和皮肤症状。还提及了分枝杆菌感染可能导致的症状和并发症。

symptoms.txt数据如下:

09 视觉系统疾病 > 眼附属器或眼眶疾患 > 眼睑或眼周区疾患 > 9A03 获得性眼睑错位 > 9A03.0 上睑下垂 > 9A03.00 下颌瞬目综合征::::上睑下垂|患侧上睑与下颌的联带运动|吸吮上睑提高|闭口时患侧上睑回到原来位置|张口上睑提高|咀嚼上睑提高|下颌朝向对侧方向运动时上睑提高
01 某些感染性疾病或寄生虫病 > 分枝杆菌病 > 结核病 > 1B10 呼吸系统结核::::喘息症状|胸痛|咳嗽|咳痰|痰中带血|咯血|呼吸困难|发热
LA14.04 先天性上睑下垂::::上睑抬起困难|下颌上抬|患侧眉毛高竖|屈光不正|弱视|斜视|额部皮肤有明显的横行皱纹
09 视觉系统疾病 > 眼附属器或眼眶疾患 > 眼睑或眼周区疾患 > 9A03 获得性眼睑错位 > 9A03.0 上睑下垂 > 9A03.01 机械性睑下垂::::上睑遮盖部分角膜|沙眼性睑板浸润|外伤性瘢痕增厚|睑神经纤维瘤|血管瘤|上睑遮盖全部角膜
09 视觉系统疾病 > 眼附属器或眼眶疾患 > 眼睑或眼周区疾患 > 9A03 获得性眼睑错位 > 9A03.0 上睑下垂 > 9A03.03 麻痹性上睑下垂::::瞳孔扩大|眼球向内运动受限|向上运动受限|向下运动受限|瞳孔固定|单眼上睑下垂|眼球运动受限|复视
09 视觉系统疾病 > 眼附属器或眼眶疾患 > 眼睑或眼周区疾患 > 9A03 获得性眼睑错位 > 9A03.1 睑内翻::::畏光|流泪|疼痛|异物感|视力下降
09 视觉系统疾病 > 眼附属器或眼眶疾患 > 眼睑或眼周区疾患 > 9A03 获得性眼睑错位 > 9A03.1 睑内翻 > 9A03.10 瘢痕性睑内翻::::畏光|流泪|疼痛|异物感|视力下降
01 某些感染性疾病或寄生虫病 > 分枝杆菌病 > 结核病 > 1B12 其他系统和器官的结核 > 1B12.6 周围淋巴结结核病::::低热|眼痒|畏光|红肿|流泪|红色或者紫红色结节|盗汗|皮肤苍白|消瘦|全身无力
01 某些感染性疾病或寄生虫病 > 分枝杆菌病 > 结核病 > 1B11 神经系统结核 > 1B11.0 结核性脑脊膜炎::::低热|高热|食欲缺乏|恶心|头晕|头痛|咳嗽|呕吐|咳痰|便秘|易激动|畏光|盗汗|乏力
01 某些感染性疾病或寄生虫病 > 分枝杆菌病 > 1B21 非结核分枝杆菌所致感染 > 1B21.2 皮肤的非结核分枝杆菌感染 > 1B21.20 溃疡分枝杆菌感染::::结节|水疱|黄色坏死物|瘢痕|坏死性溃疡|典型的 Buruli 溃疡以慢性,坏死性,进行性,无痛性,无炎症性,潜行性,难治性为其临床特征|溃疡愈合时,常有瘢痕组织挛缩,导致肢体畸形,活动障碍

代码如下:

# -*- coding: utf-8 -*-

from langchain.embeddings import ModelScopeEmbeddings
from langchain.document_loaders import TextLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.vectorstores import Chroma


def split_document(filepath='./symptoms.txt'):
    # Load the document, split it into chunks
    raw_documents = TextLoader(filepath, encoding='utf-8').load()
    text_splitter = RecursiveCharacterTextSplitter(chunk_size=1, chunk_overlap=0, separators=["\n"])
    documents = text_splitter.split_documents(raw_documents)
    return documents


def load_embedding_function():
    # create the open-source embedding function
    embedding_function = ModelScopeEmbeddings(model_id="damo/nlp_corom_sentence-embedding_chinese-base-medical")
    return embedding_function


# save chroma db of embeds to disk
def save_document_embedding_db(documents, embedding_function, db_filepath='./chroma_db'):
    chroma_db = Chroma.from_documents(documents, embedding_function, persist_directory=db_filepath)
    return chroma_db


# load chroma db of embeds from disk
def load_document_embedding_db(db_filepath='./chroma_db'):
    # load from disk
    chroma_db = Chroma(persist_directory=db_filepath, embedding_function=embedding_function)
    return chroma_db


def document_query(query, embed_db, k=10):
    results = embed_db.similarity_search(query, k=k)
    return results


if __name__ == '__main__':
    document_filepath = './disease_search/symptoms.txt'
    db_filepath = './disease_search/chroma_db'

    documents = split_document(document_filepath)
    embedding_function = load_embedding_function()
    # save_document_embedding_db(documents, embedding_function, db_filepath='./chroma_db')
    embed_db = load_document_embedding_db(db_filepath)
    print("向量检索库构造完成!开始进行文本相似度检索...")

    query = "患者,男,26岁,湖南籍防空兵中士,因“双侧腋窝多汗3年,发现左侧腋毛起皮疹2天”就诊。患者3年前无诱因双侧腋窝出现多汗,训练及加班后加重。近1年因工作压力大、加班多自觉出汗增多明显,偶可沿腋毛滴下,个别时有轻微异味,2天前体检时发现左侧腋窝腋毛干上附着白色细小结节,特来就诊。患者既往体健,无系统性疾病史,无药物过敏史,有掌跖部及会阴部多汗史,军队计划免疫。患者所在单位既往曾有“腋毛癣”患者。体格检查:一般情况好,心、肺及腹部查体未见异常,全身淋巴结未触及肿大。皮肤科情况:双侧腋窝腋毛浓密,局部多汗,左侧腋窝部分腋毛上附着冰凌状白色小结节,与毛干紧密黏着,无自觉症状。相邻淋巴结无肿大。实验室及辅助检查:血、尿、便常规、胸片未见异常。心电图示窦性心律,正常心电图。"
    query_results = document_query(query, embed_db, k=10)

    for result in query_results:
        print(result.page_content)
        print('-' * 30)

<think> 我们正在处理用户关于“使用langchain和redis实现向量检索的方法”的查询。根据提供的引用内容,我们可以总结出以下关键点: 1. 引用[1]和[3]提到,Redis可以作为向量存储,并与LangChain集成实现智能数据检索。 2. 引用[3]给出了安装必要的Python库的命令。 3. 引用[4]提到多模态RAG模板,但用户的问题主要集中在向量检索(可能是文本向量)上。 因此,回答应该包括: - 安装必要的库 - 如何设置Redis作为向量存储 - 使用LangChain创建向量存储的索引并进行检索 我们将按照以下步骤构建回答: 1. 环境准备:安装必要的库。 2. 连接Redis:设置Redis连接。 3. 创建向量存储:使用LangChain的RedisVectorStore类。 4. 索引文档:将文档分割并嵌入,然后存储到Redis。 5. 检索:使用相似度搜索进行检索。 注意:由于引用中没有提供具体的代码示例,我们将根据LangChain和Redis的一般用法构建一个示例流程。 注意:用户要求使用中文回答,并且按照系统级指令处理数学公式(但本问题不涉及数学公式,所以可以忽略)。 同时,根据要求,我们需要在回答末尾生成相关问题。 我们参考的引用内容在相关位置添加引用标识。 </think>### 使用LangChain和Redis实现向量检索的方法 以下是实现向量检索的完整步骤,基于Redis的高效向量存储能力和LangChain检索框架: #### 1. 环境准备 ```bash pip install redis langchain langchain-openai langchain-community ``` #### 2. 核心实现代码 ```python from langchain_community.vectorstores import Redis from langchain_openai import OpenAIEmbeddings from langchain_text_splitters import CharacterTextSplitter # 初始化Redis连接 rds = Redis.from_texts( texts=["LangChain文档内容1", "Redis向量检索说明2", "多模态RAG示例3"], # 替换为实际文本 embedding=OpenAIEmbeddings(), # 使用OpenAI嵌入模型 index_name="langchain-demo", # 自定义索引名 redis_url="redis://localhost:6379" # Redis连接地址 ) # 创建检索器 retriever = rds.as_retriever(search_type="similarity", search_kwargs={"k": 3}) # 执行向量检索 query = "如何实现多模态检索?" results = retriever.invoke(query) print(f"相关结果: {results}") ``` #### 3. 关键步骤说明 1. **向量化处理** 使用`OpenAIEmbeddings`将文本转换为高维向量,Redis会建立高效的向量索引[^3]。 2. **数据存储** Redis作为向量数据库存储: - 原始文本 - 对应的向量嵌入 - 元数据(可选添加来源、时间戳等)[^1] 3. **相似度检索** 当输入查询时: - 查询文本被转换为向量 - Redis执行K近邻搜索(KNN) - 返回余弦相似度最高的结果[^4] #### 4. 配置建议 ```yaml # Redis配置建议 (redis.conf) maxmemory 2GB # 根据数据量调整 maxmemory-policy allkeys-lru timeout 300 # 连接超时设置 ``` #### 5. 高级功能 - **混合检索**:结合关键词过滤和向量搜索 ```python retriever = rds.as_retriever( search_type="similarity", search_kwargs={"k": 5, "filter": {"category": "AI"}} ) ``` - **多模态扩展**:使用GPT-4V处理图像向量(需额外配置视觉模型)[^4] > **性能提示**:10万条文本的检索延迟通常<$10$ms,建议定期运行`redis-cli --bigkeys`优化存储[^2]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值