本文档涵盖了用于访问外部知识库和 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 中
来源: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 集成
| 步骤 | 组件 | 操作 |
|---|---|---|
| 1 | chat_completion_with_function_execution | 确定是否需要函数调用 |
| 2 | call_arxiv_function | 路由到适当的函数 |
| 3 | 函数实现 | 执行知识检索 |
| 4 | 响应集成 | 将函数结果添加到对话中 |
| 5 | 最终响应 | 生成自然语言响应 |
该系统通过以下方式实现强大的错误处理
@retry(wait=wait_random_exponential(min=1, max=40), stop=stop_after_attempt(3))知识工件跨对话持久化
./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/ 等)中的示例)外,函数调用使得
混合方法结合了这两种模式的优点,用于全面的知识检索应用。
来源:examples/vector_databases/qdrant/Getting_started_with_Qdrant_and_OpenAI.ipynb1-728 examples/vector_databases/pinecone/Using_Pinecone_for_embeddings_search.ipynb1-796