联网搜索功能,需要调用外网付费API。本示例,使用 

https://api.bochaai.com/v1/web-search
 
 
示例:
 
import requests
import os
from openai import OpenAI
from dotenv import load_dotenv
import sys
sys.path.append('PT.Common')
from LLM import LLM

# 加载.env文件中的环境变量
load_dotenv()

# 从环境变量获取API密钥
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY", "YOUR-OPENAI-API-KEY")
BOCHA_API_KEY = os.getenv("BOCHA_API_KEY", "YOUR-BOCHA-API-KEY")

def bocha_websearch(query: str, count: int = 10) -> str:
    """
    使用Bocha Web Search API 进行网页搜索。

    参数:
    - query: 搜索关键词
    - count: 返回的搜索结果数量

    返回:
    - 搜索结果的详细信息
    """
    
    url = 'https://api.bochaai.com/v1/web-search'
    headers = {
        'Authorization': f'Bearer {BOCHA_API_KEY}',
        'Content-Type': 'application/json'
    }
    data = {
        "query": query,
        "freshness": "noLimit",  # 搜索的时间范围
        "summary": True,  # 是否返回长文本摘要
        "count": count
    }

    response = requests.post(url, headers=headers, json=data)

    if response.status_code == 200:
        json_response = response.json()
        try:
            if json_response["code"] != 200 or not json_response["data"]:
                return f"搜索API请求失败,原因是: {json_response.get('msg', '未知错误')}"
            
            webpages = json_response["data"]["webPages"]["value"]
            if not webpages:
                return "未找到相关结果。"
            formatted_results = ""
            for idx, page in enumerate(webpages, start=1):
                formatted_results += (
                    f"引用: {idx}\n"
                    f"标题: {page['name']}\n"
                    f"URL: {page['url']}\n"
                    f"摘要: {page['summary']}\n"
                    f"网站名称: {page['siteName']}\n"
                    f"网站图标: {page['siteIcon']}\n"
                    f"发布时间: {page['dateLastCrawled']}\n\n"
                )
            return formatted_results.strip()
        except Exception as e:
            return f"搜索API请求失败,原因是:搜索结果解析失败 {str(e)}"
    else:
        return f"搜索API请求失败,状态码: {response.status_code}, 错误信息: {response.text}"

# 初始化自定义LLM客户端
try:
    client = LLM()
except ValueError as e:
    print(f"初始化LLM客户端失败: {e}")
    print("请确保在.env文件中设置了LLM_MODEL_ID、LLM_API_KEY和LLM_BASE_URL")
    exit(1)

# 用户问题
user_question = "九阳电热毯 在市场竞争中的优劣势"

# 调用Bocha搜索工具获取相关信息
print("正在搜索相关信息...")
search_results = bocha_websearch(user_question)

print("搜索结果:")
print(search_results)

if "搜索API请求失败" in search_results or "未找到相关结果" in search_results:
    print(search_results)
else:
    # 构造提示词,结合搜索结果
    prompt = f"""
    基于以下搜索结果,请总结产品亮点:

    搜索结果:
    {search_results}

    请以清晰、简洁的方式总结产品的主要亮点。
    """

    print("正在生成回答...")
    # 使用自定义LLM客户端生成回答
    messages = [
        {"role": "system", "content": "你是一个专业的分析师,能够从搜索结果中提取关键信息并总结。"},
        {"role": "user", "content": prompt}
    ]
    completion = client.think(messages)

    print("回答:")
    print(completion)

 

 

 

posted on 2025-12-09 17:09  yi-sheng  阅读(7)  评论(0)    收藏  举报