AI大模型agent开发之基于知识库的聊天机器人

  1. 文本知识库的加载和分割

实现一个智能文档助手,基于已有知识库给向ai发起提问使ai能够基于知识库回答更加准确的答案,首先需要加载对应的文档,文档类型可以是docx,xlsx,md等格式。并且对文档进行分割,将其分割成一块一块的Document类型并转成list类型方便后续处理。

    def getFile(self):
        print(f"Attempting to load document: {self.doc}")
        doc \= self.doc
        loaders \= {
            "docx": Docx2txtLoader,
            "pdf": PyPDFLoader,
            "excel": UnstructuredExcelLoader
        }
        file\_extension \= doc.split(".")\[-1\]
        loader\_class \= loaders.get(file\_extension)

        if loader\_class:
            try:
                print(f"Using loader: {loader\_class.\_\_name\_\_}")
                loader \= loader\_class(doc)
                text \= loader.load()
                print("Loaded text:", text)

                # 处理返回的 text 是 list 但内容是 Document 类型的情况
                if isinstance(text, list):
                    processed\_text \= \[\]
                    for t in text:
                        if isinstance(t, Document):
                            processed\_text.append(t)
                        else:
                            print(f"Unknown object type in list: {type(t)}")
                    return processed\_text
                elif isinstance(text, str):
                    return \[text\]
                else:
                    raise ValueError("Loaded content is neither string nor list of strings.")
            except Exception as e:
                print(f"Error loading {file\_extension} file: {e}")
                print(f"Document path: {doc}")
                return None
        else:
            print(f"Unsupported file extension: {file\_extension}")
            return None
  1. 文档向量化存储

将上述切割好的文档保存在类实例‘splitText’中选择‘all-MiniLM-L6-v2’文本嵌入模型,这是一种轻量级小模型。根据该模型对列表中的每个文本块进行向量化处理,然后通过Chroma向量化数据库保存生成的向量。

    # 向量化与向量存储
    def embeddingAndVectorDB(self):
        # 确保 self.splitText 不为空
        if not self.splitText or len(self.splitText) == 0:
            raise ValueError("Document list is empty. Please provide valid documents.")

        # 使用本地的预训练模型,如 'all-MiniLM-L6-v2'
        embedding\_model = LocalEmbedding('sentence-transformers/all-MiniLM-L6-v2')
        page\_texts \= \[\]
        for t in self.splitText:
            page\_texts.append(t.page\_content)
        print(f"page: {page\_texts}")
        # 生成嵌入
        embeddings = embedding\_model.embed\_documents(page\_texts)
        if not embeddings or len(embeddings) != len(page\_texts):
            raise ValueError("Mismatch between document count and embedding count.")

        # 打印调试信息
        print(f"Documents: {self.splitText}")
        print(f"Embeddings: {embeddings}")

        # 使用 Chroma 存储这些向量
        db = Chroma.from\_texts(
            texts\=page\_texts,  # 文档列表
            embedding=embedding\_model  # 传入自定义的嵌入模型
        )

        return db
  1. 索引并使用自然语言找出相关文本块

在本模块中首先获取到向量数据库并与传入的问题一起根据余弦相似度算法计算出评分最高的文本块,并将文本块返回。

    # 提问并找到相关文本块(在向量存储时使用最大边际相似性和相似性打分)
    def askAndFindFiles(self, question):
        db \= self.embeddingAndVectorDB()
        print(f"Vector DB created: {db}")  # 确保数据库创建成功
        retriever = db.as\_retriever(search\_type="similarity\_score\_threshold",
                                    search\_kwargs\={"score\_threshold": 0.1, "k": 1})
        context \= retriever.invoke(input=question)
        print(f"Retrieved documents: {context}")  # 确保检索到内容
        return context
  1. 开始和文件聊天

首先需要传入知识库文本地址,然后引用获取问题的接口,该接口回将与问题相关的文本块返回来,然后将文本块拼接好传入到本地大模型中作为提示词。

# 和文本机器人聊天
def chatWithyl(question):
    \_content \= ""
    context \= chat\_yl.askAndFindFiles(question)
    for i in context:
        \_content += i.page\_content
    msgs \= chat\_yl.prompts.format\_messages(context=\_content, question=question)
    print(msgs)
    response \= llm(msgs)
    print(f"answer: {response}")

最后运行向大模型提出某一领域问题,即可得到相关的答案。

程序员为什么要学大模型?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉优快云大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

在这里插入图片描述

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

在这里插入图片描述

三、LLM大模型系列视频教程

在这里插入图片描述

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

在这里插入图片描述

LLM大模型学习路线

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。

  • 内容

    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
    • L1.4.1 知识大模型
    • L1.4.2 生产大模型
    • L1.4.3 模型工程方法论
    • L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

  • 内容

    • L2.1 API接口
    • L2.1.1 OpenAI API接口
    • L2.1.2 Python接口接入
    • L2.1.3 BOT工具类框架
    • L2.1.4 代码示例
    • L2.2 Prompt框架
    • L2.3 流水线工程
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

  • 内容

    • L3.1 Agent模型框架
    • L3.2 MetaGPT
    • L3.3 ChatGLM
    • L3.4 LLAMA
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

  • 内容

    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉优快云大礼包🎁:全网最全《LLM大模型入门+进阶学习资源包》免费分享(安全链接,放心点击)👈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值