联网搜索功能,需要调用外网付费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)
浙公网安备 33010602011771号