体验Gemini 2.0 Search as a tool(搜索作为一种工具)

360影视 2025-01-22 08:34 2

摘要:搜索引擎与大语言模型(LLM)的结合具有巨大的意义,这种结合可以显著提升信息检索、内容理解和用户体验,并催生出新的应用场景。以下是这种结合的一些关键意义:

由于大语言模型是预训练的模型,它知道的信息取决于训练时候的信息。因此将搜索引擎与大语言模型结合很有用。

搜索引擎与大语言模型(LLM)的结合具有巨大的意义,这种结合可以显著提升信息检索、内容理解和用户体验,并催生出新的应用场景。以下是这种结合的一些关键意义:

1. 增强信息检索能力:

更语义化的搜索:LLM 能够理解用户查询的深层含义和上下文,而不仅仅是关键词匹配。这使得搜索引擎可以返回更相关、更准确的结果,即使查询使用了模糊的语言或表达了复杂的概念。

理解长尾查询:LLM 擅长处理复杂的、不常见的长尾查询,这些查询往往难以通过传统的关键词搜索找到结果。它们可以根据用户的意图和上下文,从庞大的信息库中找到相关信息。

多模态搜索:LLM 可以理解文本、图像、音频等多种类型的信息。这意味着未来的搜索不仅限于文字,用户可以通过图片、语音等方式进行搜索,并得到更丰富的结果。

2. 提升用户体验:

对话式搜索:LLM 支持自然语言对话,允许用户以更自然的方式与搜索引擎互动。用户可以通过连续提问、澄清意图来逐步缩小搜索范围,最终找到所需的信息。

摘要和解释:LLM 可以对搜索结果进行总结、解释和概括,帮助用户快速了解信息内容,无需浏览大量网页。这大大节省了用户的阅读时间和精力。

即时回答:LLM 可以直接回答一些简单的问题,而无需用户点击进入网页。这对于获取一些事实性信息、定义或简短解释非常方便。

在之前的文章SimpleAISearch:C# + DuckDuckGo 实现简单的AI搜索中介绍了使用C#实现简单的AI搜索,让大语言模型与搜索引擎结合了起来,其实就是使用函数调用功能,接入搜索引擎的API而已。谷歌的搜索本来就很强大,在Gemini 2.0中使用搜索工具还特别简单。

先来试试不用网络搜索功能的效果:

importos
fromgoogleimportgenai

os.environ['GOOGLE_API_KEY'] = "xxx"

client = genai.Client(http_options={'api_version': 'v1alpha'})

MODEL = 'gemini-2.0-flash-exp'

chat = client.chats.create(model=MODEL)

r = chat.send_message("黄仁勋最近去哪了?")

print(r.text)
image-20250121092339207

可以发现介绍的是24年6月的信息,但是现在已经是2025年1月了,如果我们想要知道最新的信息,就可以加入搜索功能,在Gemini中加入搜索功能非常简单。

使用网络搜索功能的效果:

importos
fromgoogleimportgenai

os.environ['GOOGLE_API_KEY'] = "xxx"

client = genai.Client(http_options={'api_version': 'v1alpha'})

MODEL = 'gemini-2.0-flash-exp'

search_tool = {'google_search': {}}
soccer_chat = client.chats.create(model=MODEL, config={'tools': [search_tool]})

r = soccer_chat.send_message('黄仁勋最近去哪了,使用中文回答')
print(r.text)
image-20250121092915018

可以发现获取到了最新的信息。

那么这个网络搜索功能还有什么用呢?

再举个例子,比如你想要查找张艺谋导演最近5部电影的时长,并绘制一张图表。

要实现这个,如果自己去搜索再写代码画图的话,需要找一会的,但是使用Gemini非常简单。

importos
fromgoogleimportgenai

os.environ['GOOGLE_API_KEY'] = "xxx"

client = genai.Client(http_options={'api_version': 'v1alpha'})

MODEL = 'gemini-2.0-flash-exp'

search_tool = {'google_search': {}}

movie_chat = client.chats.create(model=MODEL, config={'tools': [search_tool]})

# r = movie_chat.send_message('Generate some Python code to plot the runtimes of the last 10 Denis Villeneuve movies.')

r = movie_chat.send_message("生成一些Python代码来绘制张艺谋导演最近5部电影的时长")

print(r.text)
好的,以下是绘制张艺谋导演最近5部电影时长的 Python 代码:

```python
importmatplotlib.pyplotasplt

# 张艺谋最近5部电影及其时长(分钟)
movies = {
"满江红":159
"狙击手":119
"悬崖之上":120
"一秒钟":104
"影":116
}

# 从字典中提取电影名称和时长
movie_names = list(movies.keys)
movie_durations = list(movies.values)

# 创建条形图
plt.figure(figsize=(106)) # 设置图形大小
plt.bar(movie_names, movie_durations, color='skyblue')

# 添加标题和标签
plt.title("张艺谋最近5部电影时长", fontsize=16)
plt.xlabel("电影名称", fontsize=12)
plt.ylabel("时长(分钟)", fontsize=12)
plt.xticks(rotation=45, ha="right") # 将x轴标签旋转45度
plt.tight_layout # 调整布局,使标签不重叠

# 在条形上添加时长数值
fori, durationinenumerate(movie_durations):
12)
plt.xticks(rotation=45

# 在条形上添加时长数值
fori, durationin
plt.xticks(rotation=45

# 在条形上添加时长数值
fori, durationin

# 在条形上添加时长数值
fori, durationin
plt.text(i, duration, str(duration), ha='center', va='bottom')

# 在条形上添加时长数值
fori, durationin

fori, durationin

# 显示图形

# 显示图形

# 显示图形
# 显示图形
plt.show
```
```

这段代码会生成一个条形图,其中:
这段代码会生成一个条形图,其中:

* X轴表示电影名称
* Y轴表示电影时长(以分钟为单位)
* 每个条形的高度表示该电影的时长
* 图表标题为"张艺谋最近5部电影时长"
* 每个条形上方都显示了时长数值

**说明:**

1.**导入库**: 导入 `matplotlib.pyplot` 库,用于绘制图表。
2.**电影数据**: 创建一个字典 `movies`,其中键是电影名称,值是对应的时长(以分钟为单位)。这里我列出了张艺谋导演最近的5部电影,你可以根据你的需要修改或添加电影。
3.**准备数据**: 从字典中提取电影名称和时长,分别存储在 `movie_names` 和 `movie_durations` 列表中。
4.**创建条形图**: 使用 `plt.bar` 函数创建条形图。
5.**添加标题和标签**: 使用 `plt.title`, `plt.xlabel` 和 `plt.ylabel` 函数添加标题和标签。
6.**旋转x轴标签**: 使用 `plt.xticks(rotation=45, ha="right")`将x轴标签旋转45度,防止标签重叠。
7.**添加时长数值**: 使用 `plt.text` 在每个条形上方显示时长数值。
8.**显示图形**: 使用 `plt.show` 函数显示生成的图表。

**运行此代码**

1.确保你的Python环境已经安装了 `matplotlib` 库。如果没有安装,可以使用命令 `pip install matplotlib` 进行安装。
2.将代码复制到你的Python环境中并运行。
3.你会看到一个窗口弹出,显示生成的条形图。

希望这个回答能帮助到你!

使用代码:

importmatplotlib.pyplotasplt

# 张艺谋最近5部电影及其时长(分钟)
movies = {
"满江红":159
"狙击手":119
"悬崖之上":120
"一秒钟":104
"影":116
}

# 从字典中提取电影名称和时长
movie_names = list(movies.keys)
movie_durations = list(movies.values)

# 创建条形图
plt.figure(figsize=(106)) # 设置图形大小
plt.bar(movie_names, movie_durations, color='skyblue')

# 添加标题和标签
plt.title("张艺谋最近5部电影时长", fontsize=16)
plt.xlabel("电影名称", fontsize=12)
plt.ylabel("时长(分钟)", fontsize=12)
plt.xticks(rotation=45, ha="right") # 将x轴标签旋转45度
plt.tight_layout # 调整布局,使标签不重叠

# 在条形上添加时长数值
fori, durationinenumerate(movie_durations):
12)
plt.xticks(rotation=45

# 在条形上添加时长数值
fori, durationin
plt.xticks(rotation=45

# 在条形上添加时长数值
fori, durationin

# 在条形上添加时长数值
fori, durationin
plt.text(i, duration, str(duration), ha='center', va='bottom')

# 在条形上添加时长数值
fori, durationin

fori, durationin

# 显示图形

# 显示图形
plt.show
image-20250121094649177

但是中文没显示,加上这个即可:

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
image-20250121094839154

使用Gemini的网络搜索功能还是很不错的,当我们做一些需要实时信息的事的时候,使用搜索作为工具这个功能,真的方便了很多。

学习了一点点知识,看个短剧放松放松。

来源:opendotnet

相关推荐