调用OpenAI函数进行子问题查询引擎¶
在这个笔记本中,我们展示了如何使用OpenAI的函数调用来提高我们的子问题查询引擎的稳健性。
子问题查询引擎旨在接受实现BaseQuestionGenerator
接口的可交换问题生成器。为了利用openai函数调用API的功能,我们实现了一个新的OpenAIQuestionGenerator
(由我们的OpenAIPydanticProgram
提供支持)。
OpenAI问题生成器¶
这个项目使用OpenAI的GPT-3模型来生成问题,用户可以输入文本作为问题的上下文。
与默认的LLMQuestionGenerator
不同,它通过完成API支持通用LLMs,OpenAIQuestionGenerator
仅适用于支持函数调用API的最新OpenAI模型。
好处在于这些模型经过微调以输出JSON对象,因此我们可以更少地担心输出解析问题。
如果您在colab上打开这个笔记本,您可能需要安装LlamaIndex 🦙。
In [ ]:
Copied!
%pip install llama-index-question-gen-openai
%pip install llama-index-question-gen-openai
In [ ]:
Copied!
!pip install llama-index
!pip install llama-index
In [ ]:
Copied!
from llama_index.question_gen.openai import OpenAIQuestionGenerator
from llama_index.question_gen.openai import OpenAIQuestionGenerator
In [ ]:
Copied!
question_gen = OpenAIQuestionGenerator.from_defaults()
question_gen = OpenAIQuestionGenerator.from_defaults()
让我们测试一下
In [ ]:
Copied!
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 [ ]:
Copied!
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=(
"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"
),
),
]
In [ ]:
Copied!
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(
"Compare the fastest growing sectors for Uber in the first two"
" quarters of 2022"
),
)
In [ ]:
Copied!
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')]