智谱BigModel研习社|搭建 AI 搜索引擎 - 使用免费的Web-Search-Pro+脑图Agent智能体

**作者:**Cartman

文章: 多智能体 AI 搜索引擎 点击链接,更多实践案例等你探索~

#智谱 BigModel 研习社 是专业的大模型开发者交流平台,欢迎在评论区与我们互动!

传统搜索引擎如今的问题在于输出很多不相关结果(大量垃圾信息 + SEO 操纵的标题党内容),大模型也面临着幻觉问题。

在网上找到有用的答案并非易事。往往需要多次搜索并沿着链接挖掘以找到高质量信息源和正确信息。

但如果用大模型的智力来尝试过滤网络中的无用信息,或许搜索引擎的体验就会变得焕然一新。

现在,聊天就能得到更好的答案:用更自然的对话式方式提问,大模型可以选择使用网络上的信息进行回复。如果更深入地追问,则大模型还能根据聊天的完整上下文来提供更好的答案。

下面我们来看看,如何用智谱 BigModel 开放平台提供的免费模型和产品,搭建自己的AI搜索引擎!

案例概述

当前热门的 AI 搜索,能够深度搜索并总结内容,并生成思维导图,对于各类调研分析工作非常实用。例如:

如果我们也希望在自己的系统中集成类似的能力,可以通过多智能体协作来实现(搜索和思维导图智能体)。

AI 搜索框架

实际场景中,比如用户需要深度调研开源技术方案,生成报告的同时制作成思维导图。AI 搜索方案可以这样设计:

以下是一个实际场景:用户需要 深度调研 开源技术方案,生成报告的同时制作成思维导图。

第一步,快速搜索补充参考信息

首先需要根据用户的任务<调研市场上主流的开源搜索引擎技术架构>,使用搜索工具补充更多的信息。这里我们使用工具 API Web-Search-Pro,具体参考文档

请求代码
复制代码
from zhipuai import ZhipuAI

api_key = "API Key"
url = "https://open.bigmodel.cn/api/paas/v4"
client = ZhipuAI(api_key=api_key, base_url=url)

###### Step 1 使用搜索工具来拓展信息

response = client.chat.completions.create(
    model="web-search-pro",  # 填写需要调用的模型名称
    messages=[
        {"role": "user", "content": "调研市场上主流的开源搜索引擎技术架构"}
    ],
    top_p=0.7,
    temperature=0.1,
    stream=False
)

results = response.choices[0].message.tool_calls[1].search_result
print(results)
搜索结果
复制代码
[{
        'content': 'OpenSearch 是一个由社区驱动的开源搜索和分析套件,源于 A9 公司的搜索结果分享格式,现已发展成为具有数据存储、搜索引擎、可视化和用户界面组件的平台。它的特性包括分布式架构、开源性质、强大的安全功能、高性能、可扩展性以及支持插件的系统。OpenSearch 适用于实时应用程序监控、日志分析、网站搜索和数据分析等多种应用场景。此外,OpenSearch 具有活跃的社区支持,并与其他开源工具兼容。它的商业版本,如阿里云的 OpenSearch 服务,提供了额外功能和支持。技术上,OpenSearch 的核心组件包括 OpenSearch Server 和 OpenSearch Dashboards,支持多种索引管理功能、查询语言以及分片和复制机制来提高性能和可靠性。安全性方面,它支持 HTTPS 传输加密和身份验证、授权机制。在日志分析、实时监控、网站搜索、业务分析和机器学习等方面,OpenSearch 都有广泛的应用。它还提供了官方文档、论坛、在线课程和认证计划来支持用户的学习和技能提升。',
        'icon': 'https://sfile.chatglm.cn/searchImage/blog_csdn_net_icon.jpg',
        'index': 0,
        'link': 'https://blog.csdn.net/weixin_41850878/article/details/140689738',
        'media': 'CSDN博客',
        'refer': 'ref_1',
        'title': 'OpenSearch开源搜索和分析套件(发布时间:2024-07-26 09:00:00)'
}, {
        'content': '全文搜索属于最常见的需求,开源的 Elasticsearch (以下简称 Elastic)是目前全文搜索引擎的首选,相信大家多多少少的都听说过它。它可以快速地储存、搜索和分析海量数据。就连维基百科、Stack Overflow、Github 都采用它选择作为自己的搜索引擎今天就让我们来了解了解 Elasticsearch 为什么这么快。
文章目录
引入
一、Elastic Search简介
二、Elastic Search的特点
支持分布式集群
支持将全文检索、数据分析以及分布式
开箱即用的,非常简单
三、Elastic Search的应用场景
四、Elastic Search的使用
4.1 安装
4.2修改配置文件
4.3 启动
4.51 安装图形化插件
结论
一、Elastic Search简介
Elastic Search(简称ES)是一个基于Lucene构建的开源搜索引擎。Lucene是一个强大的全文搜索库,但ES在Lucene的基础上增加了分布式、RESTful API和实时搜索等功能。这使得ES成为一个适用于各种应用场景的强大搜索引擎。
二、Elastic Search的特点
支持分布式集群
可以作为一个大型分布式集群(数百台服务器)技术,处理PB级数据,服务大公司;也可以运行在单机上,服务小公司
ES可以在多个服务器上运行,从而实现横向扩展。这意味着你可以根据需求增加更多',
        'icon': 'https://sfile.chatglm.cn/searchImage/blog_csdn_net_icon.jpg',
        'index': 0,
        'link': 'https://blog.csdn.net/qq_57761637/article/details/139916744',
        'media': 'CSDN博客',
        'refer': 'ref_3',
        'title': '探索Elastic Search:强大的开源搜索引擎,详解及使用(发布时间:2024-06-24 10:33:44)'
}, {
        'content': 'Perplexica 是一个开源的 AI 搜索引擎,旨在作为像 Perplexity AI 等专有搜索引擎的隐私保护替代品。这个项目运用大型语言模型(LLMs)和人工智能技术,提供精确的搜索结果和来源明确的回答。它的架构集成了基于 Web 的用户界面、预测下一步的代理和链、执行 Web 搜索的 SearXNG、理解内容并生成回答的 LLMs,以及通过嵌入模型重新排序搜索结果的系统。Perplexica 的工作流程是:用户的查询被发送到后端服务器,触发搜索链,确定是否需要进行 Web 搜索。如果需要,查询会被发送到 SearXNG 进行常规搜索,然后将搜索结果转换成嵌入形式,通过相似性搜索找到最相关的来源。这些来源会传递给响应生成器,生成准确答案,返回给用户界面。Perplexica 有两种模式:"Copilot 模式"(开发中)通过生成多个查询来寻找更相关的 Web 来源,而 "Normal 模式" 负责处理查询并进行 Web 搜索。此外,它还提供了六种专注模式,针对不同类型问题提供最佳答案,比如 "全模式"、"写作助手"、"学术搜索"、"YouTube 搜索"、"Wolfram Alpha 搜索" 和 "Reddit 搜索"。Perplexica 推荐使用 Docker 进行安装,但也可以在没有 Docker 的环境中部署。用户可以将 Perplexica 设置为浏览器的',
        'icon': 'https://sfile.chatglm.cn/searchImage/www_chinaz_com_icon.jpg',
        'index': 0,
        'link': 'https://www.chinaz.com/2024/0611/1622623.shtml',
        'media': '站长之家',
        'refer': 'ref_4',
        'title': 'Perplexica 是 Perplexity.ai 的开源 AI 搜索引擎替代品(发布时间:2024-06-11 14:02:55)'
},... {
        'content': '随着移动互联网、物联网、云计算等信息技术蓬勃发展,数据量呈爆炸式增长。如今我们可以轻易得从海量数据里找到想要的信息,离不开搜索引擎技术的帮助。
作为开源搜索引擎领域排名第一的 Elasticsearch,能够让我们无需深入了解背后复杂的信息检索原理,就可实现基本的全文检索功能,在数据量达到十亿,百亿规模仍然可以秒级返回检索结果。
对于系统容灾、数据安全性、可扩展性、可维护性等用户关注的实际问题,在Elasticsearch 上也能得到有效解决。
二、Elasticsearch 介绍
Elasticsearch(ES)是一个基于 Lucene 构建的开源分布式搜索分析引擎,可以近实时的索引、检索数据。具备高可靠、易使用、社区活跃等特点,在全文检索、日志分析、监控分析等场景具有广泛应用。
由于高可扩展性,集群可扩展至百节点规模,处理PB级数据。通过简单的 RESTful API 即可实现写入、查询、集群管理等操作。
除了检索,还提供丰富的统计分析功能。以及官方功能扩展包 XPack 满足其他需求,如数据加密、告警、机器学习等。
另外,可通过自定义插件,如 COS 备份、QQ 分词等满足特定功能需求。
1. Elasticsearch 架构与原理
基本概念 :
Cluster「集群」:由部署在多个机器的ES节点组成,以处理',
        'icon': 'https://sfile.chatglm.cn/searchImage/blog_csdn_net_icon.jpg',
        'index': 0,
        'link': 'https://blog.csdn.net/wypblog/article/details/108301796',
        'media': 'CSDN博客',
        'refer': 'ref_8',
        'title': '开源搜索引擎排名第一,Elasticearch是如何做到的?(发布时间:2020-08-29 20:58:00)'
}, {
        'content': '以下是对AI日报内容的中立总结:今日AI日报聚焦于多项人工智能领域的最新动态。以下是几个关键更新:1. 清华大学和生数科技发布了中国首个长时长、高一致性、高动态性视频大模型Vidu,采用U-ViT架构,能生成16秒长、1080P高清视频内容。2. 通义千问团队开源了首个千亿参数模型Qwen1.5-110B,表现优秀,采用Transformer解码器架构,支持多种语言。3. Kimi Chat移动端应用进行了重大更新,版本1.2.1带来了界面重构和新功能,提高用户体验。4. Domo AI新增了四种风格,并提供15个点数免费试用,增强用户创作视频的多样性。5. 苹果计划与OpenAI合作,加强iPhone的人工智能功能,可能会在全球开发者大会前推出新的生成式AI产品。6. 谷歌推出了AI语音对话练习功能,让用户可以通过手机与对话机器人进行英语会话练习。7. 元象公司开源了首个多模态大模型XVERSE-V,在多个权威评测中表现突出。8. Perplexica是一个开源的AI驱动搜索引擎,提供多种搜索模式,旨在提供更精准、智能的搜索体验。9. Meta推出LayerSkip技术,提升大型语言模型的推理速度,减少计算资源消耗。10. 一项调查显示,AI技术对创意产业产生了深远影响,导致一些',
        'icon': 'https://sfile.chatglm.cn/searchImage/blog_csdn_net_icon.jpg',
        'index': 0,
        'link': 'https://blog.csdn.net/AIbase2024/article/details/138280815',
        'media': 'CSDN博客',
        'refer': 'ref_9',
        'title': 'AI日报:当前最强国产Sora大模型Vidu发布;Kimi Chat移动端升级;通义千问开源首个千亿参数模型;苹果计划与 OpenAI 合作(发布时间:2024-07-31 10:13:19)'
}]

第二步,用模型规划和分解子任务

然后我们需要使用大模型来帮助我们规划,把用户问题拆分成若干子搜索任务,并转换为 JSON 格式。这里我们通过 GLM-4-0520 的模型来分析,参考API文档。JSON 格式处理,我们参考JSON 工具

请求代码
复制代码
import re
import json
from zhipuai import ZhipuAI

api_key = "API Key"
url = "https://open.bigmodel.cn/api/paas/v4"
client = ZhipuAI(api_key=api_key, base_url=url)

def parsejson(input):
    result = None
    try:
        # Try parse first
        result = json.loads(input)
    except json.JSONDecodeError:
        print(" decoding faulty json, attempting repair")

    if result:
        return input, result

    _pattern = r"{(.*)}"
    _match = re.search(_pattern, input)
    input = "{" + _match.group(1) + "}" if _match else input

    # Clean up json string.
    input = (
        input.replace("{{", "{")
        .replace("}}", "}")
        .replace('"[{', "[{")
        .replace('}]"', "}]")
        .replace("\", " ")
        .replace("

", " ")

.replace("

", " ")

.replace("

", "")

.strip()

)

复制代码
    # Remove JSON Markdown Frame
    if input.startswith("```json"):
        input = input[len("```json"):]
    if input.endswith("```"):
        input = input[: len(input) - len("```")]

    try:
        result = json.loads(input)
    except json.JSONDecodeError:
        print("error parse json,failed repairment")
    finally:
        return input, result



if __name__ == '__main__':

    ###### Step 2 拆分若干子问题

    sprompt = "# 以下是来自互联网的信息:
"+"..." #来自 Step 1 的搜索结果 
    usrprompt = """
    # 任务
    你的任务是参考已有信息来解决用户问题。
    通过将用户问题拆分成能够通过搜索回答的多个子问题,每个搜索的问题应该是一个单一问题。
    再根据每个子问题衍生1-3个提问,用于更好的补充子问题。
    输出为以下的JSON格式:
    {
        [
            "query":<子问题描述>,
            "reference1":<衍生提问1>,
            "reference2":<衍生提问2>,
            "reference3":<衍生提问3>
        ]
    }
    
    # 用户问题:
    <调研市场上主流的开源搜索引擎技术架构>
    
    # 输出JSON:
    """
    
    response = client.chat.completions.create(
        model="glm-4-0520",  # 填写需要调用的模型名称
        messages=[
            {"role": "system", "content": sprompt},
            {"role": "user", "content": usrprompt}
        ],
        top_p=0.7,
        temperature=0.1,
        stream=False
    )
    print(response)
    
    ##### 解析和修复json 格式
    text,jsonobj = parsejson(response.choices[0].message.content)
    print(jsonobj)
拆分问题(格式可解析成 JSON OBJECT)
复制代码
[
 {
            n "query": "Elasticsearch的技术架构特点是什么?", 
 "reference1": "Elasticsearch是如何支持分布式存储和搜索的?", 
 "reference2": "Elasticsearch的RESTful API是如何工作的?", 
 "reference3": "Elasticsearch如何处理PB级数据?"
            n
        }, 
 {
            n "query": "OpenSearch的技术架构有哪些核心组件?", 
 "reference1": "OpenSearch与Elasticsearch的技术架构有何异同?", 
 "reference2": "OpenSearch的分布式架构是如何实现的?", 
 "reference3": "OpenSearch的数据存储和索引管理功能是如何进行的?"
            n
        }, 
 {
            n "query": "Havenask作为阿里巴巴的开源搜索引擎,其架构有哪些特色?", 
 "reference1": "Havenask如何支持千亿级别数据的实时检索?", 
 "reference2": "Havenask的消息系统Swift是如何处理大规模数据流的?", 
 "reference3": "Havenask的索引系统是如何保证高时效性写入和毫秒级查询延迟的?"
            n
        }, 
 {
            n "query": "Perplexica的开源AI搜索引擎架构包含哪些主要部分?", 
 "reference1": "Perplexica如何利用大型语言模型提高搜索精度?", 
 "reference2": "Perplexica的搜索链和响应生成器是如何工作的?", 
 "reference3": "Perplexica与传统的搜索引擎相比,有哪些创新之处?"
            n
        }
    n
]

第三步,用搜索智能体完成子任务

AI搜索智能体不仅具备联网搜索的能力,还能够自主分析并进行多轮搜索任务。智能体API的调用方式,具体参考文档

智能体 id:659e54b1b8006379b4b2abd6

简介:连接全网内容,精准搜索,快速分析并总结的智能助手。

请求代码
复制代码
from zhipuai import ZhipuAI

api_key = "API Key"
url = "https://open.bigmodel.cn/api/paas/v4"
client = ZhipuAI(api_key=api_key, base_url=url)

##### Step 3 使用AI搜索智能体深度搜索

resp = client.assistant.conversation(
    assistant_id="659e54b1b8006379b4b2abd6", #AI搜索智能体
    conversation_id=None,
    model="glm-4-assistant",
    messages=[
        {
            "role": "user",
            "content": [{
                "type": "text",
                "text": """
                        搜索最新的联网信息,详细回答问题:Elasticsearch的技术架构特点是什么?
                        同时搜索并回答以下问题:Elasticsearch是如何支持分布式存储和搜索的?Elasticsearch的RESTful API是如何工作的?Elasticsearch如何处理PB级数据?
                        按照以下的markdown格式回答:
                                #问题
                                ##回答
                                ###分析点
                    """ ####来自 Step 2 的子问题
            }]
        }
    ],
    stream=True,
    attachments=None,
    metadata=None
)

##### 子问题的深度搜索结果
text = ""
for chunk in resp:
    print(chunk)
    try:
        if chunk.choices[0].delta.content is not None:
            text += chunk.choices[0].delta.content
    except:
        pass

print(text)
子问题搜索结果
复制代码
# Elasticsearch的技术架构特点是什么?

## 回答
Elasticsearch(以下简称为ES)是一款基于Lucene的分布式全文搜索引擎。它的技术架构具有以下特点:

### 分析点
1. **分布式实时文档存储引擎**:ES是一个分布式的实时文档存储引擎,每个字段都可以被索引与搜索【7?source】【8?source】。
2. **分布式实时分析搜索引擎**:ES支持各种查询和聚合操作,能够胜任上百个服务节点的扩展,并可以支持PB级别的结构化或者非结构化数据【7?source】【9?source】。
3. **使用倒排索引**:ES使用倒排索引来加速搜索过程,并支持实时索引和搜索、分布式搜索与聚合等功能【10?source】。

# Elasticsearch是如何支持分布式存储和搜索的?

## 回答
Elasticsearch通过以下方式支持分布式存储和搜索:

### 分析点
1. **数据分布式存储**:在Elasticsearch中,数据是分布式存储的,即数据会被分散到多个节点上。这种分布式存储的方式可以提高数据的可靠性和可扩展性【11?source】。
2. **分片存储**:Elasticsearch通过将数据分散到多个分片中实现分布式存储。每个分片都独立地存储在集群中的不同节点上,从而提高了数据存储的扩展性和容错性【12?source】。

# Elasticsearch的RESTful API是如何工作的?

## 回答
Elasticsearch的RESTful API基于HTTP协议,其工作原理如下:

### 分析点
- **基于HTTP协议**:通过各种端点(Endpoints)提供对索引、文档、集群等的操作。通过REST API,可以实现数据的增删改查、聚合分析等操作【13?source】。
...

第四步,总结子任务生成思维导图

智能体能调用各种插件,除了思维导图以外,还有流程图、PPT工具等,你可以根据工作需要选择。智能体API的调用方式,具体参考文档

智能体 id:664e0cade018d633146de0d2

简介:告别整理烦恼,任何复杂概念秒变脑图。

请求代码
复制代码
from zhipuai import ZhipuAI

api_key = "API Key"
url = "https://open.bigmodel.cn/api/paas/v4"
client = ZhipuAI(api_key=api_key, base_url=url)

####### Step 4 把全部子问题的结果整理成脑图

subtext1,subtext2,subtext3 = "..." ###来自 Step 3 的子问题结果
prompt = "把以下输入内容,整理成思维导图:
'''"+subtext1+"
''''"+"
'''"+subtext2+"
''''"+"
'''"+subtext3+"
''''"

resp = client.assistant.conversation(
    assistant_id="664e0cade018d633146de0d2",  # 思维导图智能体
    conversation_id=None,
    model="glm-4-assistant",
    messages=[
        {
            "role": "user",
            "content": [{
                "type": "text",
                "text": prompt
            }]
        }
    ],
    stream=True,
    attachments=None,
    metadata=None
)

# 总结并生成思维导图
text = ""
for chunk in resp:
    print(chunk)
    try:
        if chunk.choices[0].delta.content is not None:
            text += chunk.choices[0].delta.content
    except:
        pass

print(text)
总结并生成脑图
复制代码
根据您提供的内容,我将整理并创建一个思维导图,以更清晰地展示Elasticsearch、OpenSearch和Perplexica的技术架构和特点。

### Elasticsearch 技术架构特点
- 分布式实时文档存储
- 支持各种查询和聚合操作
- 高可扩展性
- 面向文档的存储和搜索
- 基于Apache Lucene
- 支持PB级别数据

### Elasticsearch 分布式存储和搜索
- 数据分布式存储
- 提高数据可靠性和可扩展性
- 文档分配到多个节点
- 集中存储数据
- 支持分布式部署和扩展

...

### Perplexica 创新之处
- 本地大型语言模型支持
- 多种搜索模式
- 使用SearxNG作为元搜索引擎
- 支持图像和视频搜索
- 强调搜索的灵活性和智能化
- 注重用户隐私保护

现在,我将使用这些信息来生成一个思维导图。这是根据您提供的信息生成的思维导图,展示了Elasticsearch、OpenSearch和Perplexica的技术架构和特点。您可以通过点击下面的图片链接查看和下载思维导图。
![查看思维导图](https://sfile.chatglm.cn/markmap/355ffa3a-f077-4f8c-9807-88100e93a9a9.png)

进一步优化框架

这个案例中,我们搭建了一个粗糙但能用的 AI 搜索引擎框架,实际业务使用还有进一步优化的空间:

  • 快速搜索前可以使用较小规模的模型,提取用户意图中的目标和类型,让背景的补充更完善;
  • 拆解搜索子任务时,也可以进一步采用知识图谱的框架,能够围绕问题展开更深层的搜索;
  • AI 搜索智能体比较耗时,实际业务使用需要调整成并发任务,否则一个问题可能要几分钟。

欢迎大家在评论区与我们交流,关于 AI 搜索引擎的更多思路!

#智谱 BigModel 研习社 是专业的大模型开发者交流平台,欢迎在评论区与我们互动!

多智能体 AI 搜索引擎点击链接,更多实践案例等你探索~

相关推荐
cxr82836 分钟前
基于变分推理与 Best‑of‑N 策略的元 Prompt 自动生成与优化框架
人工智能·提示词
练习两年半的工程师2 小时前
使用React和google gemini api 打造一个google gemini应用
javascript·人工智能·react.js
王的备忘录3 小时前
结合使用 OpenCV 和 TensorFlow进行图像识别处理
人工智能·opencv·tensorflow
赛卡4 小时前
自动驾驶背后的数学:特征提取中的线性变换与非线性激活
人工智能·python·机器学习·自动驾驶·numpy
姑苏洛言4 小时前
30天搭建消防安全培训小程序
前端
丶21364 小时前
【AI】深度学习与人工智能应用案例详解
人工智能·深度学习
正经教主4 小时前
【菜鸟飞】在vsCode中安装python的ollama包出错的问题
开发语言·人工智能·vscode·python·ai·编辑器
猎人everest4 小时前
机器学习之MNIST手写数据集
人工智能·机器学习
Conqueror7124 小时前
机器学习丨八股学习分享 EP2
人工智能·机器学习
左钦杨4 小时前
Nuxt2 vue 给特定的页面 body 设置 background 不影响其他页面
前端·javascript·vue.js