OpenAI 函数调用用于子问题查询引擎¶
在本 Notebook 中,我们将展示如何使用 OpenAI 函数调用来提高子问题查询引擎的鲁棒性。
子问题查询引擎旨在接受实现 BaseQuestionGenerator
接口的可替换问题生成器。
为了利用 OpenAI 函数调用 API 的能力,我们实现了一个新的 OpenAIQuestionGenerator
(由我们的 OpenAIPydanticProgram
提供支持)
OpenAI 问题生成器¶
与通过补全 API 支持通用 LLM 的默认 LLMQuestionGenerator
不同,OpenAIQuestionGenerator
仅适用于支持函数调用 API 的最新 OpenAI 模型。
优点在于这些模型经过微调以输出 JSON 对象,因此我们可以减少对输出解析问题的担忧。
如果您在 colab 上打开此 Notebook,您可能需要安装 LlamaIndex 🦙。
In [ ]
已复制!
%pip install llama-index-question-gen-openai
%pip install llama-index-question-gen-openai
In [ ]
已复制!
!pip install llama-index
!pip install llama-index
In [ ]
已复制!
from llama_index.question_gen.openai import OpenAIQuestionGenerator
from llama_index.question_gen.openai import OpenAIQuestionGenerator
In [ ]
已复制!
question_gen = OpenAIQuestionGenerator.from_defaults()
question_gen = OpenAIQuestionGenerator.from_defaults()
我们来测试一下!
In [ ]
已复制!
from llama_index.core.tools import ToolMetadata
from llama_index.core import QueryBundle
from llama_index.core.tools import ToolMetadata from llama_index.core import QueryBundle
In [ ]
已复制!
tools = [
ToolMetadata(
name="march_22",
description=(
"Provides information about Uber quarterly financials ending March"
" 2022"
),
),
ToolMetadata(
name="june_22",
description=(
"Provides information about Uber quarterly financials ending June"
" 2022"
),
),
ToolMetadata(
name="sept_22",
description=(
"Provides information about Uber quarterly financials ending"
" September 2022"
),
),
ToolMetadata(
name="sept_21",
description=(
"Provides information about Uber quarterly financials ending"
" September 2022"
),
),
ToolMetadata(
name="june_21",
description=(
"Provides information about Uber quarterly financials ending June"
" 2022"
),
),
ToolMetadata(
name="march_21",
description=(
"Provides information about Uber quarterly financials ending March"
" 2022"
),
),
]
tools = [
ToolMetadata(
name="march_22",
description=(
"提供有关 Uber 截至 2022 年 3 月的季度财务信息"
),
),
ToolMetadata(
name="june_22",
description=(
"提供有关 Uber 截至 2022 年 6 月的季度财务信息"
),
),
ToolMetadata(
name="sept_22",
description=(
"提供有关 Uber 截至 2022 年 9 月的季度财务信息"
),
),
ToolMetadata(
name="sept_21",
description=(
"提供有关 Uber 截至 2022 年 9 月的季度财务信息"
),
),
ToolMetadata(
name="june_21",
description=(
"提供有关 Uber 截至 2022 年 6 月的季度财务信息"
),
),
ToolMetadata(
name="march_21",
description=(
"提供有关 Uber 截至 2022 年 3 月的季度财务信息"
),
),
]
ToolMetadata(
name="march_22",
description=(
"提供有关 Uber 截至 2022 年 3 月的季度财务信息"
),
),
ToolMetadata(
name="june_22",
description=(
"提供有关 Uber 截至 2022 年 6 月的季度财务信息"
),
),
ToolMetadata(
name="sept_22",
description=(
"提供有关 Uber 截至 2022 年 9 月的季度财务信息"
),
),
ToolMetadata(
name="sept_21",
description=(
"提供有关 Uber 截至 2022 年 9 月的季度财务信息"
),
),
ToolMetadata(
name="june_21",
description=(
"提供有关 Uber 截至 2022 年 6 月的季度财务信息"
),
),
ToolMetadata(
name="march_21",
description=(
"提供有关 Uber 截至 2022 年 3 月的季度财务信息"
),
),
]
In [ ]
已复制!
sub_questions = question_gen.generate(
tools=tools,
query=QueryBundle(
"Compare the fastest growing sectors for Uber in the first two"
" quarters of 2022"
),
)
sub_questions = question_gen.generate(
tools=tools,
query=QueryBundle(
"比较 Uber 在 2022 年前两个季度增长最快的部门"
),
)
tools=tools,
query=QueryBundle(
"比较 Uber 在 2022 年前两个季度增长最快的部门"
),
)
In [ ]
已复制!
sub_questions
sub_questions
Out [ ]
[SubQuestion(sub_question='What were the fastest growing sectors for Uber in March 2022?', tool_name='march_22'), SubQuestion(sub_question='What were the fastest growing sectors for Uber in June 2022?', tool_name='june_22')]