菜单

用于知识检索的函数调用

相关源文件

本文档涵盖了用于访问外部知识库和 API 以检索信息以响应用户查询的高级函数调用模式。它侧重于多函数工作流,其中函数可以访问不同的数据源,并且一个函数的输出可以为后续函数调用提供信息。

有关基本函数调用模式和工具集成,请参阅基本函数调用模式。有关 GPT Actions 和外部系统集成,请参阅GPT Actions 和外部系统集成

系统架构概览

知识检索系统将 OpenAI 的函数调用功能与外部 API 和本地知识存储相结合,创建了一个可以搜索、检索和综合学术来源信息的智能代理。

高层架构

来源:examples/How_to_call_functions_for_knowledge_retrieval.ipynb1-796

核心组件

搜索工具

系统实现了多个用于管理知识检索和存储的实用函数

功能目的输入输出
embedding_request生成具有重试逻辑的嵌入文本字符串OpenAI 嵌入响应
get_articles搜索并下载 arXiv 论文查询字符串,top_k 计数文章元数据列表
strings_ranked_by_relatedness查找最相似的论文查询,DataFrame,top_n排序后的论文文件路径列表
read_pdf从 PDF 文件提取文本文件路径提取的文本字符串
create_chunks将文本分割成易于管理的块文本,块大小,分词器Token 块的生成器
extract_chunk总结文本块内容,模板提示总结后的文本
summarize_text完整的论文总结工作流查询字符串全面的总结

来源:examples/How_to_call_functions_for_knowledge_retrieval.ipynb141-351

代理配置

对话管理系统使用 Conversation 类来维护多轮对话中的状态

代理配置了两个主要函数,定义在 arxiv_functions

  • get_articles:从 arXiv 搜索学术论文,提供带引文 URL 的摘要
  • read_article_and_summarize:对之前搜索到的特定论文进行深度分析

来源:examples/How_to_call_functions_for_knowledge_retrieval.ipynb463-529

函数定义和执行流程

函数模式定义

系统使用 OpenAI 的函数调用模式格式定义函数

函数执行路由器

call_arxiv_function 根据函数名称处理函数分派

来源:examples/How_to_call_functions_for_knowledge_retrieval.ipynb551-593

知识检索工作流

论文搜索和存储过程

get_articles 函数实现了一个用于发现和存储学术论文的全面工作流

论文分析过程

summarize_text 函数对存储的论文进行深度分析

来源:examples/How_to_call_functions_for_knowledge_retrieval.ipynb284-351

集成模式

对话流程

该系统通过多步流程将函数调用与对话式 AI 集成

步骤组件操作
1chat_completion_with_function_execution确定是否需要函数调用
2call_arxiv_function路由到适当的函数
3函数实现执行知识检索
4响应集成将函数结果添加到对话中
5最终响应生成自然语言响应

错误处理和重试逻辑

该系统通过以下方式实现强大的错误处理

  • 重试装饰器@retry(wait=wait_random_exponential(min=1, max=40), stop=stop_after_attempt(3))
  • 异常处理:函数执行周围的 try-catch 块
  • 回退行为:在函数失败时进行优雅降级

数据持久化

知识工件跨对话持久化

  • 论文存储:下载的 PDF 位于 ./data/papers/ 目录中
  • 元数据索引arxiv_library.csv 包含嵌入和文件引用
  • 对话状态:维护在 Conversation 类实例中

来源:examples/How_to_call_functions_for_knowledge_retrieval.ipynb441-593 examples/How_to_call_functions_for_knowledge_retrieval.ipynb614-771

向量数据库集成

此知识检索模式是对相关示例中介绍的向量数据库方法的补充。虽然向量数据库提供可扩展的相似性搜索(请参阅examples/vector_databases/qdrant/examples/vector_databases/pinecone/ 等)中的示例)外,函数调用使得

  • 动态数据采集:实时访问外部 API
  • 多步推理:基于先前结果链式调用函数
  • 结构化分析:将特定处理工作流应用于检索到的内容
  • 对话上下文:在用户交互中维护状态

混合方法结合了这两种模式的优点,用于全面的知识检索应用。

来源:examples/vector_databases/qdrant/Getting_started_with_Qdrant_and_OpenAI.ipynb1-728 examples/vector_databases/pinecone/Using_Pinecone_for_embeddings_search.ipynb1-796