前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自己动手实现一个AI搜索引擎!

自己动手实现一个AI搜索引擎!

原创
作者头像
用户6923478
修改2024-04-12 11:33:52
2350
修改2024-04-12 11:33:52
举报
文章被收录于专栏:AI AgentAI Agent

---------------------如果这篇文章对你有帮助,请点赞收藏或者评论,非常感谢?---------------------

在这个时代,智能代理(Intelligent Agents)正变得越来越受欢迎,它们能够帮助人们自动化处理各种复杂的任务,从而节省时间和精力。本教程旨在引导你如何使用 Python 创建一个简单的智能代理,它能利用 OpenAI 和 Google Search API 执行信息搜索任务。简单来说就是,你将运行该程序,告诉模型你想要获得的信息,之后模型将自动生成搜索词进行搜索,获取Google搜索的返回结果后,大语言模型进行总结后输出。下面是程序运行结果的一次展示:

准备开发环境

在开始之前,请确保你的电脑上已经安装了 Python 3。你还需要安装几个必要的库,包括 requests 用于网络请求,以及 openai 库来调用 OpenAI 的 API。可以通过下面的命令来安装这些库:

代码语言:bash
复制
pip install requests openai

接下来,你需要从 OpenAI(某宝购买或者其他提供大模型api的大厂比如文心一言) 和 Google 获取 API 密钥。

Google Search开发者平台,有Google账号就可以登录获得一个api key(我打码的地方就是)
Google Search开发者平台,有Google账号就可以登录获得一个api key(我打码的地方就是)

智能代理的实现

在本教程中,我们将创建一个 Agent 类,它能够处理用户输入,并利用 OpenAI 生成搜索查询。然后,通过 Google Search API 获取搜索结果,并将这些信息以摘要形式呈现给用户。

Tools 类

首先,我们定义一个 Tools 类,该类负责通过 Google Search API 执行搜索操作。此外,我们在其中定义了一个 _tools 方法,用于初始化工具及其参数。

当调用tool类的google_search函数的时候,谷歌的搜索结果将以文本(str)的方式返回。

代码语言:python
复制
import requests
import json

class Tools:
    def __init__(self, google_search_api_key) -> None:
        self.toolConfig = self._tools()
        self.google_search_api_key = google_search_api_key

    # 定义工具配置
    def _tools(self):
        tools = [
            {
                'name_for_human': '谷歌搜索',
                'name_for_model': 'google_search',
                'description_for_model': '执行谷歌搜索并返回结果。',
                'parameters': [
                    {
                        'name': 'search_query',
                        'description': '搜索关键词或短语',
                        'required': True,
                        'schema': {'type': 'string'},
                    }
                ],
            }
        ]
        return tools
    
    # 进行谷歌搜索
    def google_search(self, search_query: str):
        url = "https://google.serper.dev/search"
        payload = json.dumps({
          "q": search_query,
          "hl": "zh-cn",
          "num": 5
        })
        headers = {
          'X-API-KEY': self.google_search_api_key,
          'Content-Type': 'application/json'
        }

        response = requests.request("POST", url, headers=headers, data=payload)
        return response.text

Agent 类

Agent 类是智能代理的核心,它负责整合 OpenAI 和 Tools 类的功能。首先,它使用 OpenAI 生成基于用户输入的搜索查询。然后,调用 Tools 类执行搜索并获取结果。最后,再次利用 OpenAI 来摘要化搜索结果。

代码语言:python
复制
import openai
from openai import OpenAI

class Agent:
    def __init__(self, openai_api_key: str, google_search_api_key: str) -> None:
        self.openai_api_key = openai_api_key
        self.google_search_api_key = google_search_api_key
        self.client = OpenAI(api_key=self.openai_api_key)
        self.tools = Tools(google_search_api_key=self.google_search_api_key)
    
    def generate_search_queries(self, input_text: str) -> list:
        messages = [{"role": "user", "content": input_text},
                    {"role": "system", "content": "First, Generate 3 search queries from this text. 不用编号,并用英文逗号分隔."}]
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",
            messages=messages,
            max_tokens=50,
            n=1,
            temperature=0.7,
        )
        queries = response.choices[0].message.content.split(',')
        return queries
   
    def summarize_search_results(self, search_results: list) -> str:
        print(f'Summaring search results...')
        messages = [
            {"role": "system", "content": "Summarize these search results in Chinese. 并从中提取有价值的资讯信息。"},
            {"role": "user", "content": search_results}
        ]
        response = self.client.chat.completions.create(
            model="gpt-3.5-turbo",  # 或其他可用模型
            messages=messages,
            n=1,
            stop=None,
            temperature=0.7,
        )
        summary = response.choices[0].message.content
        return summary

    
    def process_input(self, text: str):
        queries = self.generate_search_queries(text)	# 模型会自动根据要求生成几个搜索词
        search_results = ''
        for query in queries:
            result = self.tools.google_search(query.strip())	# Google Search返回搜索结果
            search_results += result
        
        # 摘要化搜索结果
        summary = self.summarize_search_results(search_results)   # 摘要搜索结果
        return summary
    ```

使用示例

下面是如何使用这个智能代理的例子:

代码语言:python
复制
openai_api_key = "你的OpenAI API密钥"
google_search_api_key = "你的Google Search API密钥"
agent = Agent(openai_api_key=openai_api_key, google_search_api_key=google_search_api_key)

# 不断循环对话
while True:
    input_ = input("请输入您的问题:")
    response = agent.process_input(input_)
    print(response)

请替换代码中的 "你的OpenAI API密钥" 和 "你的Google Search API密钥" 为你自己的 API 密钥。

写在最后

在使用 API 密钥时,请确保不要公开你的密钥,避免不必要的安全风险。

虽然这个智能代理相对简单,但它展示了如何结合多个 API 来创建有用的自动化工具。你可以在此基础上扩展更多功能,例如支持更多语言的搜索、处理更复杂的查询等。

通过实践这个项目,你不仅能够学习如何使用 Python 和各种 API,还能够深入理解智能代理的工作原理及其在现实世界中的应用。希望这个教程能够为你的编程旅程提供帮助,激发你进一步探索和创新的兴趣。

这篇文章参考了公众号文章“动手做一个最小Agent——TinyAgent!”,感谢他的无私贡献。另外推荐您查看由Lilian Weng发布的文章“LLM Powered Autonomous Agents”,文章(几乎)第一次总结了基于LLM开发的自动Agent的重要组件及其应用场景。

如果这篇文章对你有帮助,也请点赞收藏或者评论,非常感谢?

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备开发环境
  • 智能代理的实现
    • Tools 类
      • Agent 类
        • 使用示例
        • 写在最后
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
        http://www.vxiaotou.com