2025年2月3日,OpenAI 在一场临时召开的发布会上推出了一项名为 Deep Research 的新功能。该功能旨在将推理大模型的思考能力应用于联网搜索,使其能够在数十分钟内完成通常需要人类专家数小时才能完成的复杂研究任务。
然而,对于预算有限的开发者和研究者来说,是否有免费的解决方案呢?答案是肯定的!接下来,我将为大家介绍一个基于开源组件的替代方案,并详细讲解如何通过免费或低成本的方式实现类似的功能。
开源项目:OpenDeepResearcher
GitHub 上有一个开源项目 OpenDeepResearcher(GitHub -
mshumer/OpenDeepResearcher),它提供了一个替代方案,主要依赖以下服务:
- OpenRouter
- SerpAPI
- Jina AI
不过,这些服务都需要付费。如果你没有这些 API Key,你需要到各自的官方网站注册账号并获取:
- OpenRouter: https://openrouter.ai/
- SerpAPI: https://serpapi.com/
- Jina AI: https://jina.ai/
既然我们要寻找免费替代方案,那么可以考虑用以下方式替换这些付费服务:
- OpenRouter → 使用自己搭建的大模型(如 DeepSeek)或其 API(少量付费,成本低得多)
- SerpAPI → 使用 SearXNG(自建搜索引擎)实现网页搜索
- Jina AI → 使用 Trafilatura 组件提取网页内容
如何运行 .ipynb 文件?
在开始之前,我们需要确保能够顺利运行该项目的 .ipynb 文件。以下是具体步骤:
1. 安装 Anaconda(推荐)
- 下载并安装 Anaconda。
- 安装完成后,打开终端或命令提示符。
2. 启动 Jupyter Notebook 服务器
- 打开终端,运行以下命令:
- jupyter notebook
- 按下回车后,Jupyter Notebook 会启动,并在浏览器中自动打开默认地址(通常是 http://localhost:8888)。
3. 打开 .ipynb 文件
- 在 Jupyter Notebook 界面中,导航到包含你的 .ipynb 文件的目录。
- 找到文件后,双击即可打开。
4. 运行代码
- 打开文件后,你会看到一系列代码块和可能存在的文本说明。
- 选择一个代码块,按下 Ctrl + Enter 或点击右上角的“运行”按钮来执行代码。
5. 查看输出
- 在代码块下方会出现输出结果,包括打印的信息、图表或错误提示等。
替换方案详解
1. 替换OpenRouter
我们可以使用 DeepSeek 大模型或其 API 来替代 OpenRouter。以下是相关代码改动:
async def call_openrouter_async(session, messages, model=DEFAULT_MODEL):
"""
Asynchronously call the DeepSeek chat completion API with the provided messages.
Returns the content of the assistant’s reply.
"""
headers = {
"Authorization": f"Bearer {DEEPSEEK_API_KEY}",
"X-Title": "OpenDeepResearcher, by Matt Shumer",
"Content-Type": "application/json"
}
payload = {
"model": model,
"messages": messages
}
try:
async with session.post(DEEPSEEK_URL, headers=headers, json=payload) as resp:
if resp.status == 200:
result = await resp.json()
try:
return result['choices'][0]['message']['content']
except (KeyError, IndexError) as e:
print("Unexpected DeepSeek response structure:", result)
return None
else:
text = await resp.text()
print(f"DeepSeek API error: {resp.status} - {text}")
return None
except Exception as e:
print("Error calling DeepSeek:", e)
return None
2. 替换SerpAPI
我们可以使用 SearXNG 自建搜索引擎来替代 SerpAPI。以下是相关代码:
import aiohttp
SEARXNG_INSTANCE = "https://searx.tiekoetter.com" # 选择一个可用的 SearXNG 实例
async def perform_search_async(session, query):
params = {"q": query, "format": "json"}
try:
async with session.get(SEARXNG_INSTANCE + "/search", params=params) as resp:
if resp.status == 200:
data = await resp.json()
links = [result["url"] for result in data.get("results", [])]
return links
else:
print(f"SearXNG error: {resp.status}")
return []
except Exception as e:
print("Error performing SearXNG search:", e)
return []
自建 SearXNG 实例
公共 SearXNG 实例可能不稳定,因此建议自己部署。以下是使用 Docker 部署 SearXNG 的步骤:
docker run -d --name searxng -p 8888:8080 searxng/searxng
然后访问 http://localhost:8888,API 地址为:
http://localhost:8888/search?q=Python&format=json
如果遇到 403 错误,请修改配置文件 settings.yml,启用 JSON 输出格式:
docker exec -it searxng vi /etc/searxng/settings.yml
在 formats 中添加 json:
formats:
- html
- json
保存后重启容器:
docker restart searxng
3. 替换Jina AI
我们可以使用 Trafilatura 组件来提取网页内容。以下是相关代码改动:
import trafilatura
import asyncio
async def fetch_webpage_text_async(link):
"""
使用 trafilatura 异步提取网页主要内容。
"""
loop = asyncio.get_event_loop()
downloaded = await loop.run_in_executor(None, trafilatura.fetch_url, link)
if downloaded:
text = await loop.run_in_executor(None, trafilatura.extract, downloaded)
return text
return None
async def process_link(session, link, user_query, search_query):
"""
处理单个链接:获取内容,判断是否有用,并提取相关上下文。
"""
print(f"Fetching content from: {link}")
page_text = await fetch_webpage_text_async(link)
if not page_text:
print(f"Failed to extract content from: {link}")
return None
usefulness = await is_page_useful_async(session, user_query, page_text)
print(f"Page usefulness for {link}: {usefulness}")
if usefulness == "Yes":
context = await extract_relevant_context_async(session, user_query, search_query, page_text)
if context:
print(f"Extracted context from {link} (first 200 chars): {context[:200]}")
return context
return None
补充内容:黄金、美元、人民币最近10年(2015年到2025年)的变化趋势和原因分析
在运行 OpenDeepResearcher 或其免费替代方案时,我尝试输入了以下研究主题:“黄金、美元、人民币最近10年(2015年到2025年)来的变化趋势和原因分析”。以下是部分分析结果的总结:
最终报告
一、黄金价格变化趋势及原因分析
(一)2024年黄金价格表现
2024年,黄金市场迎来了历史性的牛市。根据世界黄金协会的数据,以美元计价的伦敦金银市场协会(LBMA)午盘金价涨幅超过28%,年平均交易价格较2023年高出22%。其他货币如中国市场上海金午盘基准金价也上涨超28%。年内,黄金期货和现货价格屡创新高,分别于10月30日和10月31日达到历史最高点。
(二)主要上涨阶段及其驱动因素
3月至4月:再通胀交易推动。
6月至7月:美国宏观经济数据边际下滑影响。
9月至11月初:市场针对美国总统大选结果预测存在的“特朗普交易”预期。 贯穿全年的影响因素包括全球央行购金行为、市场对未来全球经济不确定性的预期等。
(三)供需关系
上游金矿开采端受益于金价上涨,紫金矿业、山东黄金等企业净利润双位数增长;下游实物黄金消费端则面临挑战,尤其是黄金首饰消费量大幅下降,而金条及金币投资需求显著上升。
(四)2025年展望
专家认为,2025年黄金价格仍存在新高可能,中短期来看,避险需求将是影响金价运行的主要逻辑;中长期而言,还需关注美联储货币政策周期、全球经济基本面以及“去美元化”的底层逻辑。预计2025年黄金价格走势积极但更为温和,推动因素包括各国央行需求强于预期或金融环境迅速恶化导致避险资金流入。
二、美元汇率变动情况与影响因素 (一)2024年美元指数变化
2024年,美元指数经历了先上、后下、再上的行情,整体呈现高位宽幅震荡。尽管美联储开启降息周期,但美元并未因此走弱,反而逆势走强,反映了美国经济的韧性和国际市场的避险情绪。
(二)影响因素
美联储政策:美联储的货币政策预期波动是主要影响因素。
中美关系:潜在的美国对华加征关税等外部扰动也是重要因素。
市场预期:全球重要央行议息会议结束、国内政策进入空窗期,影响市场预期。
三、人民币汇率变动情况与影响因素 (一)2024年人民币汇率变化
2024年1月3日下午,在岸、离岸人民币兑美元短线走低,其中在岸人民币兑美元一度跌破7.3关口,离岸人民币兑美元跌破7.35。然而,从全年来看,人民币对一篮子货币汇率实现稳中有升,CFETS人民币指数年内由97.4上升至101.5,升幅为4.16%。
(二)影响因素
内部政策:国内降准、降息等操作或与其他增量政策共同助力基本面修复回升。
外部风险:美元指数维持高中枢、潜在的美国对华加征关税等外部扰动是最大风险因素。
经济基础:我国经济基础稳、优势多、韧性强、潜能大,长期向好的支撑条件和基本趋势没有变。
(三)2025年展望
2025年,人民币汇率将在合理均衡区间内保持稳定态势。最大的不确定因素是特朗普关税政策的实施力度和节奏。预计若美元指数运行在107—110区间,美元兑人民币汇率将在7.3—7.5之间波动。
四、综合结论
综上所述,2015年至2025年间,黄金、美元和人民币的变化趋势受到多种因素的影响,包括但不限于宏观经济形势、货币政策、通货膨胀、地缘政治因素以及供需关系。展望未来,黄金价格有望继续受益于避险需求和央行购金行为;美元汇率虽然可能因美联储政策调整而有所波动,但在短期内仍将保持相对强势;人民币汇率则在内外部因素共同作用下,预计将在合理均衡水平上保持基本稳定。
注意事项:模型限流的影响
在运行上述分析时,如果使用大模型 API 服务(如 DeepSeek 或 OpenRouter),可能会遇到以下问题:
- 模型限流:
- 大模型服务通常会对免费用户或低等级用户设置调用频率限制(Rate Limit)。如果调用过于频繁,可能会导致请求失败或延迟增加。
- 解决方法: 调整调用频率,避免短时间内发送过多请求。 升级服务等级以获得更高的调用配额。 使用异步调用(如 asyncio)优化代码性能,减少等待时间。
- 数据来源的可靠性:
- 网页搜索结果的质量可能会影响分析的准确性。建议优先选择权威数据来源(如政府机构、国际组织发布的报告)。
- 如果使用自建搜索引擎(如 SearXNG),确保配置正确并定期更新索引。
- 模型输出的可信度:
- 大模型生成的内容可能存在偏差或不准确之处。建议结合人工验证和多源数据交叉对比,确保分析结果的可靠性。
总结
通过开源组件和免费工具,我们成功实现了对“黄金、美元、人民币最近10年变化趋势”的深入分析。尽管免费方案在性能和稳定性上可能略逊于商业服务,但它们为预算有限的研究者和开发者提供了一个极具价值的选择。
如果你在运行过程中遇到任何问题,或者希望进一步优化代码,请随时留言讨论!
Tags:重启容器