You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向OpenAI的ChatCompletion.create接口调用添加检索信息?

如何向ChatCompletion.create接口调用添加检索信息

问题说明

OpenAI曾推出过向Completion.create接口添加网站信息的教程,但该接口已被上下文控制能力更强的ChatCompletion.create取代。目前需要明确如何向ChatCompletion.create接口传入检索到的信息。

在Completion.create中,需将网页内容按特定格式放入prompt字段,示例代码如下:

prompt = f"""请根据以下上下文回答问题,如果无法基于上下文回答,请说"我不知道"

上下文:{context}

---

问题:{question}
回答:"""

其中context是用\n\n###\n\n分隔的不同网页文本,question是实际要回答的问题。

但ChatCompletion.create没有prompt字段,改用messages字段,原格式似乎不生效。尝试过以下写法:

'messages': [{'role': 'user', 'content': prompt}]

但返回的答案比使用Completion.create时短很多,需要正确的实现方法。

正确实现方案

方案1:拆分系统消息与用户消息传递

将任务规则和上下文放入系统消息,具体问题单独放入用户消息,这种分工更贴合Chat模型的设计逻辑,能让模型更清晰地理解任务边界:

messages = [
    {
        "role": "system",
        "content": f"""请根据以下上下文回答问题,如果无法基于上下文回答,请说"我不知道"。

上下文:{context}"""
    },
    {
        "role": "user",
        "content": question
    }
]

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=messages,
    temperature=0  # 追求精准回答时可设为0
)

方案2:统一放入用户消息并优化格式

如果要把所有内容放在用户消息里,需优化格式清晰度,同时明确要求回答长度:

user_content = f"""请根据以下上下文详细回答问题,如果无法基于上下文回答,请说"我不知道"。

上下文:{context}

---

问题:{question}
请给出完整详细的回答。"""

messages = [
    {"role": "user", "content": user_content}
]

response = openai.ChatCompletion.create(
    model="gpt-3.5-turbo",
    messages=messages,
    max_tokens=500  # 根据需求调整令牌上限,控制回答长度
)

关键注意事项

  • 角色分工:系统消息适合设定任务规则、提供背景信息;用户消息传递具体问题,这种拆分能提升模型的理解效率。
  • 回答长度控制:若返回内容过短,可调高max_tokens参数(需注意模型的总令牌限制),同时在指令里明确要求“详细回答”。
  • 格式清晰度:用---这类明确的分隔符区分上下文和问题,避免模型混淆内容边界。

内容的提问来源于stack exchange,提问作者Obromios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:22:22