审查上下文
通过鼓励模型审查所提供上下文中的每个来源,我们可以帮助减轻不相关上下文的影响。这提高了推理性能和最终输出。这被称为 思维线 (Thread Of Thought) 1。
我们可以使用以下模板实现思维线 (Thread Of Thought)。
思维线 (Thread Of Thought) 模板
[ 输入提示 ]
系统地浏览上下文,专注于可能提供我们正在寻找答案的区域
我们可以使用 instructor
实现这一点,如下所示。
import instructor
from openai import OpenAI
from pydantic import BaseModel, Field
from textwrap import dedent
client = instructor.from_openai(OpenAI())
class ThreadOfThoughtResponse(BaseModel):
analysis: list[str] = Field(
description="""An explanation for each relevant source explaining
its relevance and content""",
)
correct_answer: int
def analyze_context_and_generate_response(query: str, context: list[str]):
return client.chat.completions.create(
model="gpt-4o",
response_model=ThreadOfThoughtResponse,
messages=[
{
"role": "system",
"content": dedent(
f"""
You are an expert Question Answerer.
Here are all of the sources that you should refer to
for context:
{'\n'.join(context)}
"""
),
},
{
"role": "user",
"content": query,
},
{
"role": "assistant",
"content": dedent(
"""
Navigate through the context incrementally,
identifying and summarizing relevant portions.
"""
),
},
],
)
if __name__ == "__main__":
context = [
"The price of a house was $100,000 in 2024",
"""The Great Wall of China is not visible from space
with the naked eye""",
"""Honey never spoils; archaeologists have found pots
of honey in ancient Egyptian tombs that are over
3,000 years old""",
"""The world's oldest known living tree is over 5,000
years old and is located in California""",
"The price of a house was $80,000 in 2023",
]
query = "What was the increase in the price of a house from 2023 to 2024"
response = analyze_context_and_generate_response(query, context)
print(response.model_dump_json(indent=2))
"""
{
"analysis": [
"The price of a house was $80,000 in 2023",
"The price of a house was $100,000 in 2024"
],
"correct_answer": 20000
}
"""
有用提示¶
以下是一些可以添加到提示中的替代短语,以便在模型生成响应之前生成思维线。
- 逐步浏览上下文,找出可能有用的重要信息。
- 逐段带我浏览这份冗长的文档,重点关注每一部分的意义。
- 逐部分引导我浏览上下文,并在过程中提供见解。
- 将文档分成可管理的部分,并引导我逐一浏览,在进行过程中提供见解。
- 让我们逐段浏览这份文档,密切关注每个部分。
- 逐步带我浏览上下文,确保我们抓住所有重要的方面。
- 分块审查文档,在移至下一部分之前批判性地评估每一部分。
- 将上下文分解为多个部分进行分析,在进行过程中总结每一部分。
- 逐步浏览上下文,识别并总结相关部分。
- 系统地浏览上下文,专注于可能提供我们正在寻找答案的区域。
- 逐步带我浏览这份长文档,确保不错过任何重要的细节。
- 分段分析这份冗长的文档,总结每一部分并记下所有要点。
- 通过将这份长文档分解为更小的部分并总结每一部分来浏览它,这样我们就不会错过任何内容。
- 让我们逐节浏览上下文,识别每一部分的关键要素。
- 让我们将上下文剖析成更小的部分,审查每一部分的其重要性和相关性。
- 仔细逐段分析上下文,为每个问题突出相关要点。
- 分段阅读上下文,专注于收集能够回答当前问题的见解。
- 让我们逐节通读这份文档,在进行过程中仔细分析每一部分。
- 让我们一点一点地剖析这份文档,确保理解每一部分的细微之处。
- 系统地处理这份文档,在进行过程中总结和分析每一部分。
- 让我们一步一步地探索上下文,仔细检查每个片段。
- 系统地浏览上下文,单独关注每一部分。
- 有条不紊地检查上下文,重点关注可能回答查询的关键片段。
- 逐步筛选上下文,确保我们捕获所有相关的细节。
- 对上下文采用模块化方法,在得出任何结论之前总结每一部分。
- 仔细检查上下文的每个片段,然后我们讨论发现。
- 逐步处理上下文,花时间充分理解每一部分。
- 让我们分块仔细检查上下文,留意能够回答我们查询的信息。
- 逐步带我浏览这份上下文的可管理部分,在进行过程中进行总结和分析。
- 让我们对上下文采用分段方法,仔细评估每一部分与所提出问题的相关性。
参考文献¶
1: 思维线:解开混乱的上下文