深入浅出LangChain与智能Agent(三)利用LangChain与人脸问答知识库进行交互

利用LangChain与人脸问答知识库进行交互

下面这些技术模块共同构成了一个基于LangChain与人脸知识库进行交互的系统。

模块1: 问题与答案数据的加载

这个模块负责读取问题和答案对,并将它们存储在一个字典结构中,以便后续检索。

def load_qa_data(filepath):
    qa_data = {}
    with open(filepath, 'r', encoding='utf-8') as file:
        lines = file.readlines()
    current_question = None
    answer_lines = []  # 用于累积多行答案的列表
    for line in lines:
        if line.startswith('问题: '):
            if current_question:
                # 将之前问题的答案存储到字典中
                qa_data[current_question] = ' '.join(answer_lines).strip()
            # 去除"问题: "部分,并去除两端空白字符
            current_question = line[len('问题: '):].strip()
            answer_lines = []  # 为新的问题重置答案行列表
        elif current_question:
            # 这是一个答案的一部分,可能不是第一行
            answer_lines.append(line.strip())

    # 不要忘记处理文件中的最后一个问题
    if current_question and answer_lines:
        qa_data[current_question] = ' '.join(answer_lines).strip()

    return qa_data

模块2: 嵌入向量的生成和Faiss索引创建

Faiss 是 Facebook AI Research (FAIR) 精心打造的一款强大向量数据库,专为高效执行相似性搜索和稠密向量聚类而设计。在处理大型数据集时表现尤为出色,能迅速在海量向量中锁定与查询向量最为匹配的项,极大地加速了搜索流程。无论是机器学习还是数据挖掘,Faiss 都是一个不可或缺的工具,常见的应用场景包括但不限于推荐系统、图像搜索和自然语言处理。

除了 Faiss,LangChain 支持的向量数据库范围广泛,覆盖了多种语言和平台。这些数据库包括阿里云的 OpenSearch、AnalyticDB、Annoy、Atlas、AwaDB,以及 Azure Cognitive Search、BagelDB、Cassandra、Chroma、Clarifai 等。此外,还有 ClickHouse Vector Search、Activeloop’s Deep Lake、Dingo,以及各种DocArray搜索能力,如DocArrayHnswSearch和DocArrayInMemorySearch。ElasticSearch、Hologres、LanceDB、Marqo、MatchingEngine、Meilisearch、Milvus、MongoDB Atlas 和 MyScale 也在支持之列。OpenSearch 和 pg_embedding 也提供了优质的搜索服务。这些多样化的数据库选择使得LangChain能够在不同的环境和需求下提供灵活、高效的搜索能力。

OpenAIEmbeddings() 初始化

embeddings_model = OpenAIEmbeddings()

这一行创建了一个OpenAIEmbeddings实例,它是用来生成文本embedding的。这些embedding是高维向量,可以捕捉文本内容的语义信息,用于文本之间的相似性比较。

创建FAISS索引

#创建FAISS索引
def create_faiss_index(embedding_matrix):
    dimension = embedding_matrix.shape[1]  # 获取向量的维度
    index = faiss.IndexFlatL2(dimension)  # 创建基于L2距离的FAISS索引
    index.add(embedding_matrix.astype(np.float32))  # 向索引中添加向量
    return index

create_faiss_index函数接受一个embedding矩阵(通常是二维数组,其中每行是一个向量),初始化一个FAISS索引,并将这些向量添加到索引中。这个索引后续将用于相似性搜索。

在FAISS索引中搜索

def search_faiss_index(query_embedding, index):
    query_embedding = np.array(query_embedding).astype(np.float32)  # 确保查询向量为float32类型
    _, indices = index.search(np.array([query_embedding]), 1)  # 在索引中搜索最相似的向量
    return indices[0][0]  # 返回最相似向量的索引

search_faiss_index函数获取一个查询向量和一个FAISS索引作为输入,然后使用这个索引来找到与查询向量最相似的存储向量。函数返回最相似项的索引,这通常用来在一个数据库或列表中检索具体项。

模块3: 精确匹配查询

当用户提出一个特定的问题时,这个功能会根据用户的输入在知识库中查找精确匹配的问题。

def search_by_exact_query(user_query):
    # 从文件加载问题和答案
    qa_data = load_qa_data(filepath)

    # 获取答案并打印
    return(get_answer(qa_data, user_query))
模块4: 模糊匹配查询

这个模块使用嵌入向量和Faiss索引来找到与用户查询最相似的问题,并返回相应的答案。

1.初始化文本嵌入模型。

2.使用文本嵌入模型将文本转换为向量。

3.使用这些嵌入向量创建FAISS索引。

4.当用户提出查询时,将查询文本也转换为嵌入向量。

5.使用FAISS索引找到最相似的嵌入向量。

def search_by_fuzzy_query(user_query):
    # 从文件加载问题和答案
    qa_data = load_qa_data(filepath)
    # Get embedding vectors for all questions and convert to numpy array
    questions = list(qa_data.keys())
    question_embeddings_list = embeddings_model.embed_documents(questions)
    question_embeddings = np.array(question_embeddings_list)

    # Create the faiss index
    faiss_index = create_faiss_index(question_embeddings)

    # # Prompt user for a query and process
    user_query_embedding_list = embeddings_model.embed_documents([user_query])
    user_query_embedding = np.array(user_query_embedding_list[0])

    # Search the faiss index for the most similar question
    closest_question_index = search_faiss_index(user_query_embedding, faiss_index)
    closest_question = questions[closest_question_index]

    # Print the closest question's answer
    return(qa_data[closest_question])

search_by_exact 和 search_by_fuzzy 工具

在tools列表中,增加search_by_exact 和 search_by_fuzzy 两个工具能力,其他逻辑不变。

tools = [
    Tool(
        name="search_by_exact",
        func=search_by_exact_query,
        description="当需要准确回答用户问题时使用此工具。使用时需提供参数['query']。如果查询为错误代码,直接查询并返回对应的错误原因和解决方法;如果观察结果显示有必要或可选发送邮件,请调用send_email工具。"
    ),
    Tool(
        name="search_by_fuzzy",
        func=search_by_fuzzy_query,
        description="当需要回答用户问题时使用此工具。使用时需提供参数['query']。如果查询为错误代码,直接查询并返回对应的错误原因和解决方法;如果查询非错误代码,可咨询此工具相关解决方案;如果观察结果显示有必要或可选发送邮件,请调用send_email工具。"
    ),
    send_email_tool,  # Assuming definition is provided elsewhere
    compare_scores_tool,
    local_group_size_tool,
    actual_group_size_tool,
    blacklist_query_tool,
    zmng_query_tool
]

通过LangChain的灵活性和模块化,这个能够自动化处理人脸识别问题的智能排查助手,大大提高了问题诊断的效率并减轻了人工负担。

注意观察下面agent的Observation Thought Action三个阶段,agent会自动提取出tool需要的参数,形成action:


在这里插入图片描述


最后分享

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

1. 成长路线图&学习规划

要学习一门新的技术,作为新手一定要先学习成长路线图方向不对,努力白费

这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
在这里插入图片描述

2. 大模型经典PDF书籍

书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)

在这里插入图片描述

3. 大模型视频教程

对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识

在这里插入图片描述

4. 大模型项目实战

学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。

在这里插入图片描述

5. 大模型面试题

面试,不仅是技术的较量,更需要充分的准备。在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。

在这里插入图片描述

全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以微信扫描下方CSDN官方认证二维码,免费领取【保证100%免费

如有侵权,请联系删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值