基于OpenAI Cookbook代码,从AI-Search获取完整上下文字段的方法
问题描述
参考OpenAI Cookbook中Azure环境下基于私有数据对话的代码示例,代码可正常运行,但返回结果仅包含content和score字段,id、title、filepath、url等字段均为null,返回示例如下:
{"content":"
", "id":null,"title":null,"filepath":null,"url":null,"metadata":{"chunking":"orignal document size=2000. Scores=3.6962261Org Highlight count=31."},"chunk_id":"0"}
在Azure OpenAI Chat Playground中可直接选择AI搜索索引的字段,对应示例聊天应用能正确显示这些字段,但不清楚在代码中何处指定这些额外字段,也未找到相关示例。
解决步骤
1. 确认AI搜索索引字段状态
首先确保你的Azure AI搜索索引中确实存在id、title、filepath、url这些字段,且数据导入时已正确填充对应值。
2. 修改检索配置中的返回字段
在调用Azure OpenAI的对话补全接口时,需要在数据源配置中明确指定要返回的字段列表,具体修改位置如下:
Python SDK示例修改
找到代码中构建Azure搜索扩展配置的部分,添加fieldsToReturn参数,填入需要返回的字段名:
from openai import AzureOpenAI client = AzureOpenAI( azure_endpoint="你的Azure OpenAI端点", api_key="你的API密钥", api_version="2024-02-15-preview" ) response = client.chat.completions.create( model="你的部署名称", messages=[{"role": "user", "content": "你的查询内容"}], extra_body={ "dataSources": [ { "type": "AzureCognitiveSearch", "parameters": { "endpoint": "你的AI搜索端点", "key": "你的AI搜索密钥", "indexName": "你的搜索索引名称", "fieldsToReturn": ["id", "title", "filepath", "url"], # 指定需返回的字段 "queryType": "semantic", "semanticConfiguration": "你的语义配置名称", "topNDocuments": 3 } } ] } )
如果直接调用REST API,同样需要在请求体的dataSources[0].parameters中添加fieldsToReturn数组,包含目标字段名。
3. 验证结果
修改后重新运行代码,返回的检索结果中指定字段将不再为null,会填充索引中对应的实际值。
注意事项
- 字段名必须与Azure AI搜索索引中的字段名完全一致,区分大小写。
- 若使用语义检索,确保语义配置未限制这些字段的返回权限。
内容的提问来源于stack exchange,提问作者Daniel

