翻译: LLM构建 GitHub 提交记录的聊天机器人二 使用 Timescale Vector、pgvector 和 LlamaIndex

这篇具有很好参考价值的文章主要介绍了翻译: LLM构建 GitHub 提交记录的聊天机器人二 使用 Timescale Vector、pgvector 和 LlamaIndex。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

接着上篇内容:翻译: LLM构建 GitHub 提交记录的聊天机器人一 使用 Timescale Vector、pgvector 和 LlamaIndex

TSV Time Machine 示例应用有三个页面:

  • Home主页:提供应用程序使用说明的应用程序主页。
  • Load Data加载数据:页面以加载所选存储库的 Git 提交历史记录。
  • Time Machine Demo:与加载的任何 GitHub 存储库聊天的界面。

由于该应用程序是 ~600 行代码,我们不会逐行解压(尽管您可以要求 ChatGPT 向您解释任何棘手的部分!让我们看一下其中涉及的关键代码片段:

  1. 从要与之聊天的 GitHub 存储库加载数据
  2. 通过时间感知检索time-aware retrieval augmented generation增强聊天效果

第 1 部分:使用 Timescale Vector 和 LlamaIndex 加载基于时间的数据

输入要为其加载数据的 GitHub 存储库的 URL,TSV Time Machine 使用 LlamaIndex 加载数据,为其创建向量嵌入,并将其存储在 Timescale Vector 中。

翻译: LLM构建 GitHub 提交记录的聊天机器人二 使用 Timescale Vector、pgvector 和 LlamaIndex,LLM-Large Language Models,langchain,prompt,chatgpt,人工智能,python
在文件0_LoadData.py中,我们从您选择的 GitHub 存储库中获取数据,使用 OpenAI 的 text-embedding-ada-002 模型和 LlamaIndex 为其创建嵌入,并将其存储在 Timescale Vector 的表中。这些表包含与 Git 提交关联的向量嵌入、原始文本和元数据,包括反映提交时间戳的 UUID。

首先,我们定义一个 load_git_history() 函数。此函数将要求用户输入 GitHub 存储库 URL、分支和提交数,以通过 st.text_input 元素加载。然后它将获取存储库的 Git 提交历史记录,使用 LlamaIndex 嵌入提交历史记录文本并将它们转换为 LlamaIndex 节点,并将嵌入和元数据插入到 Timescale Vector 中:

s, and insert the embeddings and metadata into Timescale Vector:
首先,我们定义一个 load_git_history() 函数。此函数将要求用户输入 GitHub 存储库 URL、分支和提交数,以通过 st.text_input 元素加载。然后它将获取存储库的 Git 提交历史记录,使用 LlamaIndex 嵌入提交历史记录文本并将它们转换为 LlamaIndex 节点,并将嵌入和元数据插入到 Timescale Vector 中:

# Load git history into the database using LlamaIndex
def load_git_history():
   repo = st.text_input("Repo", "<https://github.com/postgres/postgres>")
   branch = st.text_input("Branch", "master")
   limit = int(st.text_input("Limit number commits (0 for no limit)", "1000"))
   if st.button("Load data into the database"):
       df = get_history(repo, branch, limit)
       table_name = record_catalog_info(repo)
       load_into_db(table_name, df)

用于从用户定义的 URL 加载 Git 历史记录的函数。默认为 PostgreSQL 项目。

虽然帮助程序函数 get_history()record_catalog_info()load_into_db() 的完整代码位于示例应用存储库中,但下面是概述:

  • get_history():获取存储库的 Git 历史记录并将其存储在 Pandas DataFrame 中。我们获取提交哈希、作者姓名、提交日期和提交消息。
  • record_catalog_info():在我们的 Timescale Vector 数据库中创建一个关系表,用于存储已加载的 GitHub 存储库的信息。存储库 URL 和表提交的名称存储在数据库中。
  • load_into_db():在 LlamaIndex 中创建一个 TimescaleVectorStore,用于存储提交数据的嵌入和元数据。
  • 我们将time_partition_interval参数设置为 365 天。此参数表示按时间对数据进行分区的每个间隔的长度。每个分区将包含指定时间长度的数据。
# Create Timescale Vectorstore with partition interval of 1 year
   ts_vector_store = TimescaleVectorStore.from_params(
       service_url=st.secrets["TIMESCALE_SERVICE_URL"],
       table_name=table_name,
       time_partition_interval=timedelta(days=365),
   )

💡选择正确的分区间隔
此示例使用 365 天作为分区间隔,但选择对应用查询有意义的值。
例如,如果您经常查询最近的向量,使用较小的时间间隔(例如一天)。如果查询十年内向量,请使用更大的时间间隔(例如六个月或一年)。
大多数查询应该只涉及几个分区,而整个数据集应该适合 1,000 个分区。

创建 TimescaleVectorStore 后,我们为每个提交创建 LlamaIndex TextNodes,并批量为每个节点的内容创建嵌入。

create_uuid() 从与节点和向量嵌入关联的提交datetime创建一个 UUID v1。这个 UUID 使我们能够按时间有效地将节点存储在分区中,并根据其分区查询嵌入。

# Create UUID based on time
def create_uuid(date_string: str):
   datetime_obj = datetime.fromisoformat(date_string)
   uuid = client.uuid_from_time(datetime_obj)
   return str(uuid)

创建带有时间组件的 UUID v1 有助于按时间进行相似性搜索。我们使用 Timescale Vector Python 客户端中的 uuid_from_time() 函数来帮助我们。
翻译: LLM构建 GitHub 提交记录的聊天机器人二 使用 Timescale Vector、pgvector 和 LlamaIndex,LLM-Large Language Models,langchain,prompt,chatgpt,人工智能,python
“加载数据”页面显示从用户指定的 GitHub URL 加载和矢量化数据的进度。

最后,我们创建一个 TimescaleVectorIndex,这将允许我们对时间感知 RAG 进行快速相似性搜索和基于时间的搜索。我们使用 st.spinnerst.progress 来显示加载进度。

st.spinner("Creating the index...")
progress = st.progress(0, "Creating the index")
start = time.time()
ts_vector_store.create_index()
duration = time.time()-start
progress.progress(100, f"Creating the index took {duration} seconds")
st.success("Done")

2. 第 2 部分:构建聊天机器人

在文件1_TimeMachineDemo.py中,我们使用 LlamaIndex 的自动检索器通过从 Timescale Vector 获取数据来回答用户问题,以用作 GPT-4 的上下文。
翻译: LLM构建 GitHub 提交记录的聊天机器人二 使用 Timescale Vector、pgvector 和 LlamaIndex,LLM-Large Language Models,langchain,prompt,chatgpt,人工智能,python
Time Machine 演示页面显示示例用户对话。以下是主要功能的概述:

  • get_repos():获取已加载的可用 GitHub 存储库列表,你可以与之聊天,因此你可以在侧边栏中轻松地在它们之间切换。

  • get_autoretriever():从 TimescaleVectorStore 创建一个 LlamaIndex 自动检索器,这使 GPT-4 能够使用元数据过滤器形成矢量存储查询。这使 LLM 能够将用户查询的答案限制在特定的时间范围内。

  • 例如,查询:“过去 6 个月发布了哪些新功能”将仅搜索 Timescale Vector 中包含现在到 6 个月前数据的分区,并获取最相关的向量用作 RAG 的上下文。

# Creates a LlamaIndex auto-retriever interface with the TimescaleVector database
def get_auto_retriever(index, retriever_args):
   vector_store_info = VectorStoreInfo(
       # Note: Modify this to match the metadata of your data
       content_info="Description of the commits to PostgreSQL. Describes changes made to Postgres",
       metadata_info=[
           MetadataInfo(
               name="commit_hash",
               type="str",
               description="Commit Hash",
           ),
           MetadataInfo(
               name="author",
               type="str",
               description="Author of the commit",
           ),
           MetadataInfo(
               name="__start_date",
               type="datetime in iso format",
               description="All results will be after this datetime",
  
           ),
           MetadataInfo(
               name="__end_date",
               type="datetime in iso format",
               description="All results will be before this datetime",
  
           )
       ],
   )
   retriever = VectorIndexAutoRetriever(index,
                                      vector_store_info=vector_store_info,
                                      service_context=index.service_context,
                                      **retriever_args)
  
   # build query engine
   query_engine = RetrieverQueryEngine.from_args(
       retriever=retriever, service_context=index.service_context
   )
   
   # convert query engine to tool
   query_engine_tool = QueryEngineTool.from_defaults(query_engine=query_engine)

   chat_engine = OpenAIAgent.from_tools(
       tools=[query_engine_tool],
       llm=index.service_context.llm,
       verbose=True,
       service_context=index.service_context
   )
   return chat_engine
  • vector_store_info 为 LLM 提供有关元数据的信息,以便它可以创建有效的过滤器来获取数据以响应用户问题。如果您使用自己的数据(与 Git 提交历史记录不同),则需要修改此方法以匹配您的元数据。
  • __start_date__end_date 是 Timescale Vector 用于支持基于时间的搜索的特殊过滤器名称。如果您在 Timescale Vector 中启用了时间分区(通过在创建 TimescaleVectorStore 时指定 time_partition_interval 参数),则可以在 VectorStoreInfo 中指定这些字段,以使 LLM 能够执行对每个 LlamaIndex 节点的 UUID 进行基于时间的搜索。
  • 返回的 chat_engine 是一个 OpenAIAgent,它可以使用 QueryEngine 工具来执行任务 - 在本例中,回答有关 GitHub 存储库提交的问题。
  • tm_demo() 处理用户和LLM之间的聊天交互。它提供了一个 st.slider 元素,供用户指定要获取的时间段和提交次数。然后,它提示用户输入,使用 get_autoretriever() 处理输入,并显示聊天消息。在 GitHub 存储库 中查看此方法。

3. Deployment部署

3.1 ☁️ 在 Streamlit 社区云上

  1. Fork and clone this repository.
  2. 使用 Timescale Vector 创建新的云 PostgreSQL 数据库(在此处注册帐户)。下载包含数据库连接字符串的备忘单或 .env 文件。
  3. 创建一个新的 OpenAI API 密钥以在此项目中使用,或者按照这些说明注册 OpenAI 开发者帐户以获取一个密钥。我们将使用 OpenAI 的嵌入模型来生成文本嵌入,并使用 GPT-4 作为 LLM 来为我们的聊天引擎提供支持。
  4. 在 Streamlit 社区云 中:
  • 点击New app,然后选择适当的存储库、分支和文件路径。
  • 单击Advanced Settings并设置以下配置:
OPENAI_API_KEY=”YOUR_OPENAI_API KEY”

TIMESCALE_SERVICE_URL=”YOUR_TIMESCALE_SERVICE_URL”

ENABLE_LOAD=1

点击Deploy

3.2 💻 在您的本地计算机上

  1. 为您的项目创建一个新文件夹,然后按照上面的步骤 1-3 进行操作。
  2. 安装依赖项。导航到 tsv-timemachine 目录并在终端中运行以下命令,这将安装所需的 python 库:
pip install -r requirements.txt
  1. tsv-timemachine 目录中,创建一个新的 .streamlit 文件夹并创建一个 secrets.toml 文件,其中包含以下内容:
OPENAI_API_KEY=”YOUR_OPENAI_API KEY”

TIMESCALE_SERVICE_URL=”YOUR_TIMESCALE_SERVICE_URL”

ENABLE_LOAD=1

包含 Streamlit 机密的 TOML 文件示例。您需要使用 OpenAI 和 Timescale Vector 设置这些来嵌入和存储数据。

  1. 要在本地运行应用程序,请在命令行中输入以下内容:
streamlit run Home.py

🎉恭喜! 现在,您可以使用 LlamaIndex 作为数据框架,使用 Timescale Vector 作为向量数据库,加载任何存储库的 Git 提交历史记录并与之聊天。

Git 提交历史记录可以替换您选择的任何基于时间的数据。其结果是一个应用程序可以有效地对基于时间的数据执行 RAG,并使用特定时间段的数据回答用户问题。

4. 您将如何使用基于时间的检索time-based retrieval ?

基于上面的示例,以下是时间感知 RAG 解锁的一些用例示例:

  • 时间范围内的相似性搜索:在与文档语料库聊天时按创建日期、发布日期或更新日期过滤文档。
  • 查找最新的嵌入:查找有关特定主题的最相关和最新的新闻或社交媒体帖子。
  • 让LLMs思考的时间:利用 LangChain’s self-query retriever或LlamaIndex’s auto-retriever 等工具来询问基于时间和语义的问题文档知识库。
  • 搜索和检索聊天历史记录:搜索用户之前的对话以检索与当前聊天相关的详细信息。

5. 总结

您了解到,时间感知 RAG 对于构建处理基于时间的数据的强大 LLM 应用程序至关重要。您还使用 Timescale Vector 和 LlamaIndex 构建基于时间的 RAG 管道,从而生成一个能够回答有关 GitHub 提交历史记录或任何其他基于时间的知识库的问题的 Streamlit 聊天机器人。

参考

https://blog.streamlit.io/using-time-based-rag-llm-apps-with-timescale-vector/文章来源地址https://www.toymoban.com/news/detail-809420.html

到了这里,关于翻译: LLM构建 GitHub 提交记录的聊天机器人二 使用 Timescale Vector、pgvector 和 LlamaIndex的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 聊天机器人意图构建与反馈收集

    聊天机器人意图构建与反馈收集 随着越来越多的企业投入到聊天机器人项目,如何管理日益复杂的聊天机器人成为行业的一个挑战。构建一个聊天机器人变得越来越容易,但项目中出现问题也变得越发普遍,特别是在意图(intent)架构不恰当时。 不恰当意图架构引发的问题 聊

    2024年04月12日
    浏览(39)
  • Azure Machine Learning - 聊天机器人构建

    本文介绍如何部署和运行适用于 Python 的企业聊天应用示例。 此示例使用 Python、Azure OpenAI 服务和 Azure AI 搜索中的检索扩充生成(RAG)实现聊天应用,以获取虚构公司员工福利的解答。 关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理

    2024年01月19日
    浏览(51)
  • 使用LangChain构建问答聊天机器人案例实战(三)

    使用LangChain构建问答聊天机器人案例实战 LangChain开发全流程剖析 接下来,我们再回到“get_prompt()”方法。在这个方法中,有系统提示词(system prompts)和用户提示词(user prompts),这是从相应的文件中读取的,从“system.prompt”文件中读取系统提示词(system_template),从“u

    2024年02月14日
    浏览(46)
  • 使用LangChain构建问答聊天机器人案例实战(一)

    使用LangChain构建问答聊天机器人案例实战 现场演示GPT-4代码生成 本节我们会通过一个综合案例,跟大家讲解LangChain,这个案例产生的代码会直接在浏览器中运行,并且会输出结果,如图14-1所示,用户问:“What was the highest close price of IBM?”(“IBM的最高收盘价是多少?”)

    2024年02月15日
    浏览(67)
  • ChatGPT实践-构建简单的AI聊天机器人(python)

    本文指导如何通过调用OpenAI的API完成一个简单的聊天机器人。 我们可以通过任何语言的 HTTP 请求、官方 Python 、 Node.js 库或社区维护的库与 ChatGPT的API 进行交互,官方API文档: API Reference - OpenAI API (可自行去查看) 所以python是有现成包用的,会比调用原始的HTTP请求容易一些

    2024年02月09日
    浏览(49)
  • 使用ChatGPT构建一个AIML聊天机器人是什么体验

    ​ 使用ChatGPT构建一个AIML聊天机器人是什么体验,使用ChatGPT将C#代码转换为Swift代码以实现Swift版的Aiml聊天机器人,AIML(全名为Artificial Intelligence Markup Language)是一种基于XML模式匹配的人工智能标记语言,最早是一个名为\\\"A.L.I.C.E.\\\" (“Artificial Linguistic Internet Computer Entity”)的高

    2024年02月11日
    浏览(46)
  • AIGC:ColossalChat(基于LLM和RLHF技术的类似ChatGPT的聊天机器人)的简介、安装、使用方法之详细攻略

    LLMs:ColossalChat(基于LLM和RLHF技术的类似ChatGPT的聊天机器人)/ColossalAI的简介、安装、使用方法之详细攻略 导读 :ColossalChat 是 第一个 基于LLaMA预训练模型 开源完整RLHF pipline实现 ,包括有监督数据收集、有监督微调、奖励模型训练和强化学习微调。只需要 不到100亿个参数 ,就

    2024年02月09日
    浏览(54)
  • ChatGPT聊天机器人搭建全攻略精心整理汇总:微信 Discord 小爱同学 VSCode QQ 飞书 Siri OpenAI Translato翻译插件

    一、ChatGPT接入微信: ChatGPT接入微信 ChatGPT近期以强大的对话和信息整合能力风靡全网,可以写代码、改论文、讲故事,几乎无所不能,这让人不禁有个大胆的想法,能否用他的对话模型把我们的微信打造成一个智能机器人,可以在与好友对话中给出意想不到的回应,而且再

    2024年02月04日
    浏览(67)
  • 如何使用OpenAI API和Python SDK构建自己的聊天机器人

    近日,OpenAI公司的ChatGPT模型走红网络。同时,OpenAI也推出了Chat API和gpt-3.5-turbo模型,让开发者能够更轻松地使用与ChatGPT类似的自然语言处理模型。 通过OpenAI API,我们可以使用gpt-3.5-turbo模型,实现多种任务,包括:撰写电子邮件或其他文本内容,编写Python代码,创建对话代

    2024年02月01日
    浏览(43)
  • 用通俗易懂的方式讲解:使用 MongoDB 和 Langchain 构建生成型AI聊天机器人

    想象一下:你收到了你梦寐以求的礼物:一台非凡的时光机,可以将你带到任何地方、任何时候。 你只有10分钟让它运行,否则它将消失。你拥有一份2000页的PDF,详细介绍了关于这台时光机的一切:它的历史、创造者、构造细节、操作指南、过去的用户,甚至还有一种回到过

    2024年01月23日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包