当前位置: 首页 > news >正文

构建LangChain应用程序的示例代码:14、使用LangChain、GPT和Activeloop的Deep Lake来处理代码库

使用LangChain、GPT和Activeloop的Deep Lake来处理代码库

在本教程中

我们将使用Langchain + Activeloop的Deep Lake与GPT一起分析LangChain本身的代码库。

设计

准备数据:

  • 使用langchain_community.document_loaders.TextLoader上传所有Python项目文件。我们将称这些文件为文档。
  • 使用langchain_text_splitters.CharacterTextSplitter将所有文档拆分为块。
  • 使用langchain.embeddings.openai.OpenAIEmbeddingslangchain_community.vectorstores.DeepLake将块嵌入并上传到DeepLake。

问答:

  • 构建一个由langchain.chat_models.ChatOpenAIlangchain.chains.ConversationalRetrievalChain组成的链。
  • 准备问题。
  • 运行链以获取答案。

实现

集成准备

我们需要为外部服务设置密钥并安装必要的Python库。

!python3 -m pip install --upgrade langchain deeplake openai

设置OpenAI嵌入、Deep Lake多模态向量存储API并进行身份验证。

有关Deep Lake的完整文档,请访问 Activeloop文档 和 API参考。

import os
from getpass import getpassos.environ["OPENAI_API_KEY"] = getpass("请输入OpenAI密钥")

如果您想创建自己的数据集并发布,请对Deep Lake进行身份验证。您可以在 Activeloop平台 上获取API密钥。

activeloop_token = getpass("Activeloop Token:")
os.environ["ACTIVELOOP_TOKEN"] = activeloop_token

准备数据

加载所有仓库文件。这里我们假设此笔记本是作为langchain fork的一部分下载的,并且我们处理的是langchain repo的Python文件。

from langchain_community.document_loaders import TextLoaderroot_dir = "../../../../../libs"
docs = []for dirpath, dirnames, filenames in os.walk(root_dir):for file in filenames:if file.endswith(".py") and "*venv/" not in dirpath:try:loader = TextLoader(os.path.join(dirpath, file), encoding="utf-8")docs.extend(loader.load_and_split())except Exception:passprint(f"文档数量:{len(docs)}")

然后,将文件分块。

from langchain_text_splitters import CharacterTextSplittertext_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_documents(docs)
print(f"块的数量:{len(texts)}")

然后嵌入块并上传到DeepLake。

这可能需要几分钟时间。

from langchain_openai import OpenAIEmbeddingsembeddings = OpenAIEmbeddings()
from langchain_community.vectorstores import DeepLakeusername = ""db = DeepLake.from_documents(texts, embeddings, dataset_path=f"hub://{username}/langchain-code", overwrite=True
)

可选:您也可以使用Deep Lake的托管张量数据库作为托管服务,并在那里运行查询。

from langchain_community.vectorstores import DeepLakedb = DeepLake.from_documents(texts, embeddings, dataset_path=f"hub://{username}/langchain-code", runtime={"tensor_db": True}
)

问答

首先加载数据集,构建检索器,然后构建对话链。

db = DeepLake(dataset_path=f"hub://{username}/langchain-code",read_only=True,embedding=embeddings,
)
retriever = db.as_retriever()
retriever.search_kwargs["distance_metric"] = "cos"
retriever.search_kwargs["fetch_k"] = 20
retriever.search_kwargs["maximal_marginal_relevance"] = True
retriever.search_kwargs["k"] = 20

您也可以使用Deep Lake过滤器指定用户定义的函数。

def filter(x):# 基于源代码过滤if "something" in x["text"].data()["value"]:return False# 打开下面的自定义过滤
retriever.search_kwargs['filter'] = filter
from langchain.chains import ConversationalRetrievalChain
from langchain_openai import ChatOpenAImodel = ChatOpenAI(model_name="gpt-3.5-turbo-0613"
)qa = ConversationalRetrievalChain.from_llm(model, retriever=retriever)
questions = ["类层次结构是什么?","哪些类是从Chain类派生的?","LangChain有哪些类型的检索器?",
]chat_history = []
qa_dict = {}for question in questions:result = qa({"question": question, "chat_history": chat_history})chat_history.append((question, result["answer"]))qa_dict[question] = result["answer"]print(f"-> 问题:{question} \n")print(f"答案:{result['answer']} \n")
print(qa_dict)
print(qa_dict["类层次结构是什么?"])
print(qa_dict["哪些类是从Chain类派生的?"])
print(qa_dict["LangChain有哪些类型的检索器?"])

总结

本教程介绍了如何结合使用LangChain、GPT和Deep Lake来分析和理解代码库。通过上传Python项目文件,将其拆分为块,并使用OpenAI的嵌入技术上传到Deep Lake,我们构建了一个问答系统,能够对代码库进行深入分析并回答问题。这个过程不仅展示了代码分析的自动化能力,还体现了AI技术在提升开发效率和代码质量方面的潜力。

相关文章:

  • 稍微学学react
  • 56.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(4)
  • 43.bug:mapper接口参数使用@param重命名导致的错误
  • 怎么换自己手机的ip地址
  • C语言---深入指针(4)
  • springboot+minio+kkfileview实现文件的在线预览
  • 09 platfrom 设备驱动
  • 【Linux】信号(二)
  • 光伏电站绘制软件的基本方法
  • html标签
  • Swift 序列(Sequence)排序面面俱到 - 从过去到现在(三)
  • 【全部更新完毕】2024全国大学生数据统计与分析竞赛B题思路代码文章教学数学建模-电信银行卡诈骗的数据分析
  • K8s Pod的QoS类
  • 拼接sql字符串工具类
  • AB测试实战
  • [Vue CLI 3] 配置解析之 css.extract
  • 〔开发系列〕一次关于小程序开发的深度总结
  • bootstrap创建登录注册页面
  • CentOS从零开始部署Nodejs项目
  • github指令
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Intervention/image 图片处理扩展包的安装和使用
  • Java-详解HashMap
  • Linux后台研发超实用命令总结
  • React-redux的原理以及使用
  • SpingCloudBus整合RabbitMQ
  • vue.js框架原理浅析
  • Vue实战(四)登录/注册页的实现
  • vue--为什么data属性必须是一个函数
  • Zepto.js源码学习之二
  • 编写高质量JavaScript代码之并发
  • 第十八天-企业应用架构模式-基本模式
  • 猴子数据域名防封接口降低小说被封的风险
  • 基于 Ueditor 的现代化编辑器 Neditor 1.5.4 发布
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 开发基于以太坊智能合约的DApp
  • 前端路由实现-history
  • 如何编写一个可升级的智能合约
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 延迟脚本的方式
  • ​Redis 实现计数器和限速器的
  • ​浅谈 Linux 中的 core dump 分析方法
  • ​数据链路层——流量控制可靠传输机制 ​
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • #java学习笔记(面向对象)----(未完结)
  • #laravel部署安装报错loadFactoriesFrom是undefined method #
  • (02)Unity使用在线AI大模型(调用Python)
  • (c语言+数据结构链表)项目:贪吃蛇
  • (SpringBoot)第七章:SpringBoot日志文件
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (黑马点评)二、短信登录功能实现
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (四)c52学习之旅-流水LED灯