如何向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
相关产品推荐
相关产品推荐

