如何在Azure环境中使用Python调用GPT时集成联网搜索功能
如何在Azure环境中使用Python调用GPT时集成联网搜索功能
嘿,我来帮你搞定这个需求!其实要实现像ChatGPT那样的联网搜索,核心就是让GPT自主判断什么时候需要调用搜索工具,咱们帮它执行搜索后,再把结果喂回去生成最终回答。下面我一步步给你拆解,直接在你现有的代码基础上改造:
第一步:先实现一个联网搜索的函数
首先你得有个能获取网页搜索结果的工具函数,咱们用Python的requests库来实现(如果没装的话先跑pip install requests)。这个函数负责接收搜索关键词,返回整理好的搜索结果文本,方便GPT读取:
import requests def web_search(query): # 这里你可以替换成实际的搜索实现(比如调用合法的公开搜索接口) # 下面是示例逻辑,模拟返回结构化搜索结果(实际使用时请替换为真实搜索逻辑) search_results = [ {"title": "2024鸟类保护最新动态", "content": "今年国内新增3处鸟类自然保护区,重点保护极危物种勺嘴鹬"}, {"title": "鸟类趣味冷知识更新", "content": "科研人员发现部分蜂鸟会用树枝制作简易工具获取食物"} ] # 把结果格式化成GPT易读的文本样式 formatted_results = "以下是联网搜索到的相关信息:\n" for result in search_results: formatted_results += f"- {result['title']}:{result['content']}\n" return formatted_results
划重点:实际使用时,一定要把这个函数替换为合规的真实搜索实现,比如调用官方授权的搜索API,别用未授权的接口哦。
第二步:改造Azure OpenAI调用逻辑,加入智能工具调用
Azure OpenAI支持Function Calling功能,咱们可以用它让GPT自主决定是否需要调用搜索工具。接下来把你原来的代码改造一下,加入工具定义、函数调用的判断和执行逻辑:
import os from openai import AzureOpenAI # 初始化Azure OpenAI客户端(和你原来的代码一致,记得填真实的密钥) endpoint = "https://somewhere.openai.azure.com/" model_name = "gpt5" deployment = "gpt5" subscription_key = "" api_version = "2024-12-01-preview" client = AzureOpenAI( api_version=api_version, azure_endpoint=endpoint, api_key=subscription_key, ) # 定义搜索工具的规则,告诉GPT这个工具的作用和调用参数 search_tool = { "type": "function", "function": { "name": "web_search", "description": "当你需要获取实时信息、最新数据或者未知的外部知识时,调用这个工具进行联网搜索", "parameters": { "type": "object", "properties": { "query": { "type": "string", "description": "要搜索的关键词,比如'2024年最新鸟类保护政策'或者'关于鹦鹉的冷门知识'" } }, "required": ["query"] } } } # 示例用户问题(你可以换成自己的问题) user_query = "告诉我2024年最新的鸟类保护相关冷知识" # 第一轮调用:让GPT判断是否需要调用搜索工具 response = client.chat.completions.create( messages=[ {"role": "system", "content": "你是一个有趣的助手,当需要外部信息时请调用提供的搜索工具"}, {"role": "user", "content": user_query} ], tools=[search_tool], tool_choice="auto", # 让GPT自动决定是否调用工具 model=deployment, max_completion_tokens=16384 ) # 整理对话历史,方便后续调用 response_message = response.choices[0].message messages = [ {"role": "system", "content": "你是一个有趣的助手,当需要外部信息时请调用提供的搜索工具"}, {"role": "user", "content": user_query}, response_message ] # 如果GPT要求调用搜索工具,执行搜索并生成最终回答 if response_message.tool_calls: for tool_call in response_message.tool_calls: if tool_call.function.name == "web_search": # 解析GPT要求的搜索关键词 search_query = eval(tool_call.function.arguments)["query"] # 执行联网搜索 search_result = web_search(search_query) # 把搜索结果加入对话历史 messages.append({ "tool_call_id": tool_call.id, "role": "tool", "name": "web_search", "content": search_result }) # 第二轮调用:把搜索结果喂给GPT,生成结合实时信息的最终回答 final_response = client.chat.completions.create( messages=messages, model=deployment, max_completion_tokens=16384 ) print(final_response.choices[0].message.content) else: # 如果不需要搜索,直接返回GPT的原生回答 print(response_message.content)
一些实用小提示
- 先把依赖装全:
pip install openai requests,避免运行时报错 - 你可以给
web_search函数加个结果过滤逻辑,比如只保留最相关的前3条,避免内容太杂影响GPT的理解 - 如果你的Azure OpenAI部署的是老版本模型(不支持Function Calling),可以换个思路:先写简单规则判断用户问题是否需要搜索,或者先问GPT是否需要外部信息,再手动执行搜索把结果传给GPT,不过这种方式就没那么智能啦
这样改造后,你的Azure GPT就能像ChatGPT那样,自主判断什么时候需要联网搜信息,然后结合实时结果生成准确的回答啦!




