You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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那样,自主判断什么时候需要联网搜信息,然后结合实时结果生成准确的回答啦!

火山引擎 最新活动