新闻
模型
产品
keyboard_arrow_down
读取器
读取URL或搜索为大模型提供更好的依据。
向量模型
世界一流的多模态多语言向量模型。
重排器
世界一流的重排器,最大限度地提高搜索相关性。
深度搜索
搜索、读取并推理直到找到最佳答案。
更多的
keyboard_arrow_down
分类器
图片和文本的零样本和少样本分类。
切分器
将长文本切分成块或词元。

API 文档
为您的AI 编程助手 IDE 或大模型自动生成代码
open_in_new


公司
keyboard_arrow_down
关于我们
联系销售
实习生计划
加入我们
open_in_new
下载Logo
open_in_new
条款及条件


登录
login
实现
工具
状态
提示词
评估
技术文章
四月 01, 2025

在 DeepSearch 中使用 DeepSeek R1 推理模型

标准 LLM 还是推理模型,哪个更适合 DeepSearch?在这篇文章中,我们探索了在 DeepSearch 实现中使用 DeepSeek-R1 来选择下一步行动。
Andrei Ungureanu
Alex C-G
Andrei Ungureanu, Alex C-G • 17 分钟的读取量

在我们看来,DeepSearch 本质上是一个大型的 while 循环。在给定最大 token 限额的情况下,它在搜索、阅读和思考之间循环,直到找到最佳答案。LLM 的一个关键任务是根据当前的记忆状态来决定下一步采取什么行动。它应该继续搜索吗?阅读网页吗?还是直接回答问题?

在我们的 node-deepresearch 实现中,我们使用标准 LLM(gemini-2.0-flash)来选择行动。我们称之为"标准",是因为推理过程是通过提示工程明确设定的,然后作为序列输入-输出运行,选择的行动以 JSON 对象形式返回。因此,一个自然的问题出现了:用专门的推理模型替换这个决策步骤是否会提高 DeepSearch 的性能?

在我们的 DeepSearch 实现中,大型 while 循环的行动决策步骤根据当前上下文和记忆来确定下一步应该采取什么行动。

在本文中,我们探讨使用 DeepSeek R1 671b,一个推理 LLM 来替代这个决策步骤中的 gemini-2.0-flash。我们相信 R1 的推理能力将有助于解决在网络搜索和分析结果中的复杂问题。

为了测试这个概念,我们让它完成一个实际的例子:规划一个完整的三天假期行程,然后评估其表现。执行深度搜索任务的代理可能会遇到与人类相同的问题,所以在我们的假期任务中,模型可能会遇到以下问题:

  • 知识空白(信息依赖于其他信息):例如,你想参观埃菲尔铁塔,但不知道它在公共假期是否开放。你需要同时了解铁塔的假期安排和法国公共假期的日期。
  • 错误或过时的信息:2020 年的一篇旅游博客建议罗马的某家餐厅周日营业,但到达后发现它已经改变营业时间,现在周日休息。
  • 矛盾信息:一个旅游网站声称纽约的某家酒店提供免费早餐,而另一个网站则表示房费不包含早餐。
  • 模糊信息:旅游论坛的一篇帖子提到"巴塞罗那附近有一个很棒的海滩",但没有具体说明是哪个海滩或提供清晰的方向指引,这使得很难确定具体位置。

R1 可以将复杂任务分解为可执行的步骤,识别差距和不一致,并处理诸如被屏蔽的网站和订阅墙等障碍。它具备收集所需知识和综合答案的推理能力。然而,它不能单独为我们规划假期——这需要搜索网络并理解返回的结果。我们必须对其进行加强,提供框架并增强其能力,才能胜任这项工作。

tag实现

Google Colab

要运行这个 notebook,你需要免费的 Jina AI 和 OpenRouter API 密钥。

虽然 R1 是我们代理的引擎,但我们还添加了一些工具、状态对象,当然还有一个(相当大的)提示。以下是简化的表示:

  • 工具可以被模型调用来搜索和抓取网页,结果存储在状态中。
  • 状态跟踪工具结果、任务状态和知识。它存储在提示本身中。
  • 单一提示提供指令,指定任务和如何完成它,以及存储状态。

我们稍后会详细介绍每一个部分,特别是提示。但简而言之,系统的工作方式如下:

我们从带有未填充状态对象的提示开始。当任务正在进行(即试图产生答案)时,代理会循环执行以下步骤直到产生答案:

  1. 模型从提示中检查任务和其状态,并推理如何最好地使用其工具来获得答案。
  2. 模型输出一个 JSON 对象,指定其状态(IN PROGRESS 或 DONE),内存更新,工具调用,和答案(初始为 null)。
  3. 代理异步调用工具,结果被嵌入回提示中,以及第 3 步的 JSON 对象。
  4. 包含这些新信息的提示被重新输入模型以进行另一个循环。

一旦模型在其输出中提供答案,任务就结束并交付答案。

💡
为了更好地了解代理是如何工作的,我们建议你自己试用这个 notebook并检查每次迭代的输出。

现在我们有了一个高层次的概述,让我们依次看看工具、状态和提示:

tag工具

由于 R1 本身无法搜索或抓取网页,我们访问 Jina 的 Reader API 来扩展其功能。这包括两种模式:

  • 搜索模式:搜索网络上的相关术语并返回搜索引擎结果(包括每个结果的 URL、标题和描述)。
  • 读取模式:抓取搜索结果的页面并以 Markdown 格式返回。

由于 R1 的上下文窗口有限,我们不能简单地将整个页面倾倒到提示的 Tool Results 部分。我们需要额外的工具来在传递给模型之前选择最相关的信息:

  • LangChain 递归字符文本分割器:我们使用 RecursiveCharacterTextSplitter 将长输出分割成段落,在段落和句子上递归分割,直到得到所需的段落大小。这确保输出易于被 R1 的有限上下文窗口处理。
  • Jina Reranker:我们使用 jina-reranker-v2-base-multilingual 对段落重新排序,并将排名最高的段落组合成一个结果。

不幸的是,DeepSeek R1 不像 o3-mini 那样支持工具使用。例如,使用 o3-mini,我们可以这样做:

def scrape_page(url: str):
    """Scrape a web page with Jina Reader"""

tools = [
    {
        "type": "function",
        "function": {
            "name": "scrape_page",
            "description": "Scrape the content of a webpage",
            "parameters": {
                "url": {"type": "string", "description": "The URL to scrape"}
            }
        }
    }
]

client = OpenAI()
response = client.completions.create(
    model="o3-mini",
    prompt=f"Scrape www.skyscanner.net/routes/gr/de/germany-to-crete.html",
    tools=tools
)

支持工具使用的 o3-mini 代码示例

但这对 R1 来说并不容易:它没有可以传递给 API 的 tools 参数,也不会在其响应中返回结构化的 tool_calls。简单来说,它没有被训练来使用工具(而且短期内也不会支持它们)。至少,它不以传统意义上支持它们。但是,我们可以要求 R1 以 JSON 格式输出工具调用,并将工具调用结果反馈回模型进行分析:

你必须使用有效的 JSON 对象响应,包含:
```json
{
  "tool_calls": [
    {"tool": "search", "input": "2025 年 5 月从德国到克里特岛最便宜的航班"},
    {"tool": "scrape", "input": "<https://www.skyscanner.net/routes/gr/de/germany-to-crete.html>"}
  ]
}
```

作为 R1 提示词一部分的工具调用

在第 n 次迭代中模型输出工具调用后,这些工具会被执行,执行结果会被嵌入到提示词的 Tool Results 部分,供模型在第 n+1 次迭代中进行推理:

Tool Results:

Source 1️: search: Cheapest flights from Germany to Crete May 2025
Result:

```
Title: Affordable flights: Germany - Heraklion (Crete) (HER) | Eurowings URL Source: https://www.eurowings.com/en/booking/offers/flights-from/DE/to/GR/HER.html Description: Affordable flights from Germany to Heraklion (Crete) ✈ Eurowings brings you closer to your dream destination from as little as €89.99*. Book now and enjoy.
Title: Are you a person or a robot? URL Source: https://www.skyscanner.com/routes/fran/her/frankfurt-to-crete-heraklion.html Description: Book a one-way ticket from Frankfurt to Heraklion Airport from $78 or travel return from just $154. The prices shown are based on availability and could change ...
```

工具结果,显示德国-克里特岛航班搜索结果

tag状态

状态用于跟踪任务状态(Status)和模型需要分析和更新的知识(Memory)。简而言之,它是系统的工作记忆和记忆库。这些信息存储在提示词中名为 {{ workspace }} 的部分,最初是一个空白状态:

Status: IN_PROGRESS
Memory: 
... no memory blocks ..

空状态对象

当模型对任务进行推理、运行工具并收集输出时,状态会被填充上带有随机分配 ID 的记忆块(从工具输出中提取)。对于我们的度假计划示例,在运行一次代理迭代后,状态可能如下所示:

Status: IN_PROGRESS
Memory: 
<nuz-032>Potential warm May destinations: Malaga (Spain), Crete (Greece), Algarve (Portugal)</nuz-032>
<xwj-969>URL to scrape for Crete hotel details: <https://www.tripadvisor.com/HotelsList-Crete-Beachfront-Cheap-Hotels-zfp13280541.html></xwj-969>
<vsc-583>URL to scrape for flight details: <https://www.expedia.com/lp/flights/fra/her/frankfurt-to-heraklion></vsc-583>

DeepSeek R1 填充的状态

通过在模型的 JSON 响应中包含 memory_updates 列表来更新记忆块:

{
	"memory_updates": [
	  {"operation": "add", "content": "Round-trip flight from Berlin to Tenerife in May 2025 ranges from €59.99 to €200 round-trip as per the Skyscanner and Iberia sources."},
	  {"operation": "delete", "id": "nuz-032"},
	  ...
	]
}

作为 R1 的 JSON 输出一部分的记忆更新

  • add 操作添加一个记忆块,可用于存储重要信息,如线索、发现、信息缺口和已采取的行动。
  • delete 操作删除一个记忆块,允许模型删除旧的、不必要的或错误的信息并保持工作区整洁。
💡
我们还测试了 replace 操作,但我们发现模型生成了大量信息块(过度依赖 replace),因此决定移除这个选项。

与发出工具调用相比,R1 在管理自己的记忆方面不太熟练。虽然模型经过特定训练可以处理复杂的数学问题和编码任务——这种训练使其能够生成准确的 JSON 对象并执行工具调用——但它没有经过训练来管理记忆类状态(据我们所知,其他模型也没有)。

使用紧凑的记忆状态存储信息相比于每轮存储模型的全部输出有几个优势。这种方法在提示词中压缩信息,防止上下文溢出,同时增强模型对相关知识的关注。我们保持 JSON 格式是因为它便于更新,但 JSON 在提示词中以人类可读的格式呈现。

即便如此,记忆管理仍然超出了 R1 的核心领域;我们需要实现多个指令来指导模型正确处理记忆操作。以下是我们提示词中处理这方面的部分:

... other contents of the prompt ...

## Memory Block Usage
- Each memory block has a unique ID in format <abc-123>content</abc-123>
- Create separate blocks for distinct pieces of information:
  * Discovered URLs (both explored and pending)
  * Information gaps that need investigation
  * Actions already taken (to avoid repetition)
  * Promising leads for future exploration
  * Key facts and findings
  * Contradictions or inconsistencies found
- Keep each block focused on a single idea or piece of information
- Always cite sources when recording information from tool results
- Use IDs to track and manage your knowledge (e.g., deleting outdated information)
- Make sure to store sources (URLs) for the facts and findings you store

## Lead Management
- Since you can only make 3 tool calls per round, store promising leads for later
- Create dedicated memory blocks for URLs to scrape later
- Maintain blocks for potential search queries to explore in future rounds 
- Prioritize leads based on relevance to the task

... other contents of the prompt ...

提示词中的记忆处理说明

tag提示词

我们使用 Jinja 模板格式创建提示词。它包含几个部分:

  • 上下文(在本例中为当前日期)。
  • 说明,涵盖一切如何工作,并告诉模型有哪些可用工具。
  • 状态,如上所述。
  • 工具输出,来自 search 和 scrape 工具。
{% macro format_tool_results(tool_records) %}
{% for to in tool_records %}
Source {{ loop.index }}️: {{ to.tool }}: {{ to.input }}
Result:
```
{{ to.output }}
```
{% endfor %}
{% endmacro %}

The date: `{{ current_date }}`.
You are an information analysis and exploration agent that builds solutions through systematic investigation.

## Investigation Cycle
You operate in a continuous investigation cycle:

1. Review current workspace (your memory blocks)
2. Analyze new tool results (or initial task if first round)
3. Update memory with new insights and track investigation progress
4. Decide on next tools to call based on identified leads and information gaps
5. Repeat until task completion

## Memory Structure
Your memory persists between investigation cycles and consists of:
- **Status**: Always the first line, indicates if the task is IN_PROGRESS or DONE
- **Memory**: A collection of discrete information blocks, each with a unique ID

## Memory Block Usage
- Each memory block has a unique ID in format <abc-123>content</abc-123>
- Create separate blocks for distinct pieces of information:
  * Discovered URLs (both explored and pending)
  * Information gaps that need investigation
  * Actions already taken (to avoid repetition)
  * Promising leads for future exploration
  * Key facts and findings
  * Contradictions or inconsistencies found
- Keep each block focused on a single idea or piece of information
- Always cite sources when recording information from tool results
- Use IDs to track and manage your knowledge (e.g., deleting outdated information)
- Make sure to store sources (URLs) for the facts and findings you store

## Lead Management
- Since you can only make 3 tool calls per round, store promising leads for later
- Create dedicated memory blocks for URLs to scrape later
- Maintain blocks for potential search queries to explore in future rounds
- Prioritize leads based on relevance to the task

## Available Tools
- **search**: Use for broad information gathering on new topics or concepts
  * Example: {"tool": "search", "input": "renewable energy statistics 2023"}
- **scrape**: Use for extracting specific details from discovered URLs
  * Example: {"tool": "scrape", "input": "https://example.com/energy-report"}

## Tool Usage Guidelines
- **When to use search**: For new concepts, filling knowledge gaps, or exploring new directions
- **When to use scrape**: For URLs discovered that likely contain detailed information
- **Maximum 3 tool calls per round**
- **Never repeat the exact same tool call**
- **Always record valuable information from tool results in memory blocks**

## Response Format
You must respond with a valid JSON object containing:

```json
{
  "status_update": "IN_PROGRESS or DONE",
  "memory_updates": [
    {"operation": "add", "content": "New insight or lead to investigate"},
    {"operation": "delete", "id": "abc-123"}
  ],
  "tool_calls": [
    {"tool": "search", "input": "specific search query"},
    {"tool": "scrape", "input": "https://discovered-url.com"}
  ],
  "answer": "Your final, comprehensive answer when status is DONE"
}
```

## Important Rules
- The "add" operation creates a new memory block
	You do not need to specify an ID, it will be added automatically by the system.
- The "delete" operation requires the specific ID of the block to remove
- Never invent or fabricate information - only use facts from your memory or tool results
- Never make up URLs - only use URLs discovered through tool results
- CRITICAL: Any information not recorded in your memory blocks will be lost in the next round
  For example, if you find a potential webpage to scrap, you must store the URL and your intention
  Example: `{"operation": "add", "content": "Found relevant URL: https://... to scrape ..."}`
- Set status to "DONE" only when you have fully addressed the task
- Only include the "answer" field when status is "DONE"

Task:
```
{{ task }}
```

Current workspace:
```
{{ workspace }}
```

Tool Results:
{{ format_tool_results(tool_records) if tool_records else '... no previous tool results ...'}}

IMPORTANT: Generate a valid JSON response following the format above.

Think carefully about:
- what information do you need to preserve
- which tools to call next
- how to build your answer systematically with focused memory blocks

在我们深度搜索系统中使用的完整提示词

💡
提示顶部的 Jinja 宏函数只是以更整洁的格式渲染工具结果。

tag评估

我们用我们的假期计划示例对系统进行了测试。以下是嵌入到提示中的任务:

Help me plan a 3 day holiday in Europe in May for under 2000 EUR
1. I need specific flight and hotel recommendations.
2. I want the destination to be warm.
3. I want to have a beach nearby the hotel.
I live in Germany.

这是最终结果(经过五次循环迭代):

**3-Day Crete Holiday Plan (Total ≈ €600-800)**

✈️ *Flights (From Frankfurt):*  
- Skyscanner: €154 round trip (May 2025 dates)  
  Source: <https://www.skyscanner.com/routes/fran/her/frankfurt-to-crete-heraklion.html>  
- Backup: Eurowings €180 round trip  

🏨 *Beachfront Hotels:*  
1. **Georgioupolis Beach Hotel**  
   - Direct beach access, bike rentals €10  
   - Source: <https://www.tripadvisor.com/HotelsList-Crete-Beachfront-Cheap-Hotels-zfp13280541.html>  

2. **JT Apartments**  
   - €57/night, 9.5/10 rating, 5-min walk to beach  
   - Source: <https://www.booking.com/region/gr/crete.html>  

3. **FNK Apartments**  
   - Sea views, 9.6/10 rating  

💰 *Budget Breakdown:*  
- Flights: €154  
- Hotel (3 nights): €171-250  
- Remaining: €1,600+ for meals/activities  

*Note:* All hotels are <5 mins from beaches. Crete averages 25°C in May (Source: TravelSupermarket).

经过五次迭代后的假期搜索任务结果

这个回答看起来很合理。但它真的准确吗?毕竟,模型可能会产生幻觉,而且在一个有多个组件的系统中,很可能会出现问题。让我们验证一下 R1 输出中的一些细节:

tag目的地和总预算

每个项目的计算都加起来了(我们稍后会讨论每个项目是否准确)。毕竟,R1 是经过数学问题训练的。目的地也没问题;克里特岛是一个很受欢迎的地点。

tag航班

机票价格几乎是对的,但让我们看看哪里出了问题。首先,这是从法兰克福到赫拉克利翁 2025 年 5 月往返航班在 Skyscanner 上的实际价格:

2025 年 5 月法兰克福-赫拉克利翁航班的实际 Skyscanner 搜索结果

我们可以看到价格都在 200 欧元左右,而不是承诺的往返 154 欧元!但这个错误是从哪里来的呢?查看日志,我们发现在第三轮中添加了一个相关的记忆块:

{"operation": "add", "content": "Crete flight options: Eurowings €89.99* one-way ..."}

与德国-克里特岛航班相关的记忆块

这个块似乎是从附加的搜索结果中推断出来的:

Source 1️: search: Cheapest flights from Germany to Crete May 2025
Result:
```
... other results ...
Title: Are you a person or a robot?
URL Source: https://www.skyscanner.com/routes/fran/her/frankfurt-to-crete-heraklion.html
Description: Book a one-way ticket from Frankfurt to Heraklion Airport from $78 or travel 
return from just $154. The prices shown are based on availability and could change ...
```

德国-克里特岛航班的搜索结果

模型从未尝试抓取这个网页来确认结果,但这可能也不会有什么区别。不过,它至少应该注意到搜索结果中并没有包含"五月"这个时间段。

tag酒店

酒店信息是正确的,但我们发现可以做一些改进。首先,我们希望模型能够更努力地找到 Georgioupolis Beach Hotel 和 FNK Apartments 的价格 —— 虽然它提供了其他信息,但遗憾的是缺少价格。为了说明我们的意思,这里是用于生成酒店推荐的URL的原始抓取输出。它只显示了第一个和最后一个结果的价格,跳过了中间三个:

来源 3️: 抓取: https://www.booking.com/region/gr/crete.html
结果:
```
显示更多 显示更少

Moritz 德国

*   ### [JT Apartments](https://www.booking.com/hotel/gr/jt-apatments.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)

Kissamos

每晚 57 美元起

9.5 极好 313 条评论

我强烈推荐入住 JT Apartments。当我们进入公寓时,我们收到了一个惊喜。一切设施都很完善。周边环境安静,附近有超市。海滩就在步行距离内。如果你想参观克里特岛最美的海滩,这里是绝佳的位置。感谢你们让我们的住宿体验完全符合我们的期待 :)

显示更多 显示更少

Katarzyna 波兰
显示更多 显示更少

Aitor 德国

*   ### [FNK Apartments with Sea View](https://www.booking.com/hotel/gr/f-amp-k-apartments.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)

Agia Pelagia

9.6 极好 64 条评论

我们在克里特岛待了一周。期间,我们住在 FnK Apartments。Froso 和 Konstantinos 是非常友好和出色的房东。如果我们有任何问题或需求,他们总是随时准备帮助我们。公寓本身拥有 Agia Pelagia 和周围海湾的美丽景色(甚至能看到美丽的日出)。我们强烈推荐 FnK Apartments!!

显示更多 显示更少

Moritz 德国
显示更多 显示更少

mary 美国

*   ### [Artemis Hotel Apartments](https://www.booking.com/hotel/gr/artemis-hersonisos.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)

Limenas Hersonissou, Hersonissos

9.0 优秀 419 条评论

如果你想感受宾至如归,被当作朋友对待,知道你会在一切事情上得到帮助,我们强烈推荐你入住这家酒店。由衷感谢 Konstantine 的热情和非常个性化的服务!下次访问克里特岛时,我们很乐意再次入住 Artemis Hotel!

显示更多 显示更少

Irina 以色列
显示更多 显示更少

Ann Marie 爱尔兰

*   ### [Pinelopi Hotel](https://www.booking.com/hotel/gr/pinelopi.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)

Platanes

7.8 好 198 条评论

地理位置优越,靠近海滩和出色的小酒馆,也适合开车环岛游。安静的区域,非常适合度假。宽敞的房间配备了所需的一切。性价比很高。泳池区很棒,你可以在一天中的任何时候在那里放松。酒店附近的停车场很完美。下次再访问克里特岛时,我一定会再次入住 Pinelopi Hotel。

显示更多 显示更少

Rita 罗马尼亚
显示更多 显示更少

Katarzyna 波兰

*   ### [Elizabeth Suites](https://www.booking.com/hotel/gr/elizabeth-suites.html?label=gen173nr-1FCAYoXEIFY3JldGVIM1gEaJUCiAEBmAExuAEZyAEM2AEB6AEB-AECiAIBqAIDuALSvqC-BsACAdICJDc5ZWE5ZDJkLTI2ZWEtNGNiMS04MzNlLTJhNWIyMGI5Y2M3NdgCBeACAQ&sid=f21cdd5fe9eb08dcac7d3a0304f9ccc9)

Kato Daratso

每晚 74 美元起

9.1 优秀 86 条评论

我们住得很愉快,老板 Epas 总是面带微笑,非常乐于助人,工作人员也很可爱,特别是 Anna。我们吃了几天早餐,分量非常充足。公寓的位置非常完美,便于前往海滩和餐厅。我们强烈推荐 Elizabeth Suites,让我们在克里特岛的第一次度假很愉快 😊

显示更多 显示更少

Jean 英国
```

booking.com 上克里特岛酒店列表的原始抓取搜索结果

其次,我们在使用预设的 top_n 为 5 的 Reranker 时发现了另一个问题——抓取的页面实际上包含了超过五个相关结果——我们本可以通过实际检查每个结果的相关性分数来解决这个问题,而不是仅仅取前五个(或任意数量的)结果。然而,理想的重排序配置因任务而异。解决这个问题的更好方法是直接使用整个抓取的页面——可惜由于 R1 有限的上下文长度,这是不可能的。 ### 整体表现和潜在改进 模型最初表现不错,但我们注意到,除非特别提示,它很少尝试切换策略或制定复杂的计划。虽然 R1 在数学和编程问题(它专门训练的领域)中自然会采用这些方法,但它并没有将同样的推理应用到搜索任务中。虽然我们可以进一步优化提示(甚至使用多个提示)来解决这个限制,但这并不是我们的主要目标。 我们还观察到,R1 没有充分处理时效性信息。简而言之,如果搜索结果没有明确提到错误的日期,模型会在不进一步验证的情况下假定信息有效。例如,在规划 5 月 1 日的航班时: * 德国到克里特岛 5 月 1 日 80 美元:**正确** - 模型可以信任这个信息。 * 德国到克里特岛 1 月 1 日 80 美元:**错误** - 模型正确识别并丢弃这个信息。 * 德国到克里特岛 80 美元:**假阳性** - 当没有指定日期时,模型未能验证信息,错误地假定其有效。 如果我们要继续这个项目,我们可能会考虑实施以下几个潜在的改进: * 跟踪记忆块数量,并在状态变得过大时提示模型**总结条目**。 * 指示模型在完成探索和回应查询之前**穷尽所有线索**。 * 强调**验证时效性信息**。 * 确保模型通过抓取搜索工具返回的 URL 来**二次检查结果**。 * 使用**支持更大上下文窗口的未来推理模型**测试我们的系统,不过这需要大量重构和测试来调整提示以适应不同的模型。 ## 结论 即使是在 R1 刚发布不久之后,这个领域已经发生了显著的变化。一些项目已经能以极低的成本(有些只需 5 美元)训练推理模型。这种民主化意味着训练专业模型变得比以往更加容易。我们对 R1 的实验为我们继续探索如何增强推理型 LLM 以处理复杂搜索任务提供了有用的基准。 虽然我们的假期规划示例展示了很有前景的结果(特别是作为一个快速演示项目),但它也揭示了 R1 在处理搜索和记忆任务方面的局限性,与其在数学和编程方面的优势形成对比。虽然该系统成功地在预算范围内制定了旅行计划,但在验证时效性信息和彻底探索所有可用选项等方面表现不足,凸显了模型训练重点与其在不同领域应用之间的差距。
类别:
技术文章
rss_feed
办公室
location_on
加利福尼亚州桑尼维尔
710 Lakeway Dr, Ste 200, 桑尼维尔, CA 94085, 美国
location_on
德国柏林(总部)
Prinzessinnenstraße 19-20,10969 柏林,德国
location_on
中国北京
中国北京市海淀区西大街48号6号楼5层
location_on
中国深圳
中国深圳市赋安科技大厦4楼402
搜索底座
读取器
向量模型
重排器
深度搜索
分类器
切分器
API 文档
获取 Jina API 密钥
速率限制
API 状态
公司
关于我们
联系销售
新闻
实习生计划
加入我们
open_in_new
下载Logo
open_in_new
条款
安全
条款及条件
隐私
管理 Cookie
email
Jina AI © 2020-2025.