0


AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(函数封装)

系列篇章💥

No.文章1AI大模型探索之路-实战篇:智能化IT领域搜索引擎的构建与初步实践2AI大模型探索之路-实战篇:智能化IT领域搜索引擎之GLM-4大模型技术的实践探索3AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(初步实践)4AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(函数封装)5AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(流程优化)6AI大模型探索之路-实战篇:智能化IT领域搜索引擎之github网站在线搜索7AI大模型探索之路-实战篇:智能化IT领域搜索引擎之HuggingFace网站在线搜索

目录


一、前言

在上一篇章中,我们成功实现了知乎网站数据获取的基本流程,包括各类网页数据的解析等关键步骤。本篇章将进一步实现智能搜索的代码落地,对相关搜索、大模型调用的函数进行统一化封装,以提升代码的可维护性和可复用性。

二、总体概览

本章将聚焦于智能搜索功能的完善与优化。我们将通过精心设计的封装技术,将相关的搜索功能和大模型调用函数进行模块化处理,从而实现代码的高效复用。这不仅有助于简化后续的开发工作,还能有效提升搜索引擎的性能和用户体验。

三、爬取知乎网站的代码逻辑封装

1、定义搜索服务

url ='https://www.zhihu.com/question/639787253/answer/3365580226'#%%if'answer'in url:print('a')

查询搜索网页数据,并进行解析

defget_search_text(q, url):

    cookie ="q_c1=3c10baf5bd084b3cbfe7eece648ba243|1704976541000|1704976541000; _zap=086350b3-1588-49c4-9d6d-de88f3faae03; d_c0=AGCYfYvO_RePTvjfB1kZwPLeke_N5AM6nwo=|1704949678; _xsrf=qR1FJHlZ9dvYhhoj4SUj43SAIBUwPOqm; __snaker__id=wNWnamiJKBI0kzkI; q_c1=d44e397edb6740859a7d2a0d4155bfab|1706509753000|1706509753000; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1706509695,1706589529,1706765465,1708650963; z_c0=2|1:0|10:1713167971|4:z_c0|80:MS4xOGRHQVNnQUFBQUFtQUFBQVlBSlZUYjZqOTJaLXVDSjdRSmJKMHgyVEhxTE13UGN1TUJBdHZnPT0=|15b2c2ece393ac4ea374d9b36cde5af7304f8ee7632e060fe6835bfadb5e4132; KLBRSID=9d75f80756f65c61b0a50d80b4ca9b13|1713170212|1713167958"
    user_agent ="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"  

    code_ =False
    headers ={'authority':'www.zhihu.com','accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7','accept-language':'zh-CN,zh;q=0.9,en;q=0.8','cache-control':'max-age=0','cookie': cookie,'upgrade-insecure-requests':'1','user-agent':user_agent,}# 普通问答地址if'zhihu.com/question'in url:
        res = requests.get(url, headers=headers).text
        res_xpath = etree.HTML(res)
        title = res_xpath.xpath('//div/div[1]/div/h1/text()')[0]
        text_d = res_xpath.xpath('//*[@id="root"]/div/main/div/div/div[3]/div[1]/div/div[2]/div/div/div/div[2]/span[1]/div/div/span/p/text()')# 专栏地址elif'zhuanlan'in url:
        headers['authority']='zhaunlan.zhihu.com'
        res = requests.get(url, headers=headers).text
        res_xpath = etree.HTML(res)
        title = res_xpath.xpath('//div[1]/div/main/div/article/header/h1/text()')[0]
        text_d = res_xpath.xpath('//div/main/div/article/div[1]/div/div/div/p/text()')
        code_ = res_xpath.xpath('//div/main/div/article/div[1]/div/div/div//pre/code/text()')# 特定回答的问答网址elif'answer'in url:
        res = requests.get(url, headers=headers).text
        res_xpath = etree.HTML(res)
        title = res_xpath.xpath('//div/div[1]/div/h1/text()')[0]
        text_d = res_xpath.xpath('//div[1]/div/div[3]/div/div/div/div[2]/span[1]/div/div/span/p/text()')# 创建问题答案正文
    text =''for t in text_d:
        txt =str(t).replace('\n',' ')
        text += txt
        
    # 如果有code,则将code追加到正文的追后面if code_:for c in code_:
            co =str(c).replace('\n',' ')    
            text += co
    
    encoding = tiktoken.encoding_for_model("gpt-3.5-turbo")     
    json_data =[{"link": url,"title": title,"content": text,"tokens":len(encoding.encode(text))}]withopen('./auto_search/%s/%s.json'%(q, title),'w')as f:
        json.dump(json_data, f)return title

2、搜索服务调用测试

url ='https://www.zhihu.com/question/639787253/answer/3365580226'#%%
title = get_search_text(q='介绍一下GLM4大模型的特性', url=url)
title

在这里插入图片描述

3、数据本地存储

withopen('./auto_search/介绍一下GLM4大模型的特性/%s.json'%'如何看待智谱AI发布GLM4?国产大模型与GPT-4更加接近了吗?','r')as f:
    jd = json.load(f)#%%
jd

输出

[{'link':'https://www.zhihu.com/question/639787253/answer/3365580226','title':'如何看待智谱AI发布GLM4?国产大模型与GPT-4更加接近了吗?','content':'没想到,2024年开年,国内大模型首个传来好消息的竟是智谱AI。就在昨日的首届技术开放日上,在大规模多任务语言理解评测中,GLM-4得分远超GPT-3.5,平均达到GPT-4的95%的水平,个别项目上已几乎持平;在GSM8K数学评测数据集上,GLM-4的评测结果与GPT-4有4.6%的差距;在MATH数据集上,GLM-4得分比GPT-3.5多15%,比GPT-4少9%。GLM-4可同时,其技术团队解决了上下文全局信息因失焦而导致的精度下降问题,在“大海捞针”测试中,GLM-4模型能做到几乎100%的精准召回。推出全新的在对齐、保真、安全、组合布局等各个评测维度上,CogView3都做到DALL·E 3 90%以上的水平,平均可以达到95%的相对性能。针对令许多开发者及普通用户犯难的“AI咒语”提示词问题,,可以说是“国内的GPTs”。它实现了根据用户意图自动理解、规划复杂指令,自由调用文生图、代码解释器、网页浏览、Function Call等多项工具来完成复杂任务。,不用再为提示词而担心。在GLM4发布的那段时间,在最新发布第三代基础大语言模型ChatGLM3系列。官方表示该模型的性能较前一代大幅提升,是10B以下最强基础大模型。具体来看,但是前面8个模型最小的也是140亿参数规模的Qwen-14B,如果按照GSM8K排序,ChatGLM3-6B-Base甚至排到第三,超过了GPT-3.5的57.1分。可能对于非AI从业者来说,2023年是大模型的元年,就拿智谱来说,早在大模型露出苗头时,它就已经做了技术上的预研或者成立新公司专注大模型,而不是在看到ChatGPT之后,才下定决心要做大模型。一直以来,国产大模型例如文心一言就对标ChatGPT,甚至是对标GPT-4,门槛极高。但国产大模型在追赶ChatGPT之路上,其实是没有终点的长跑。人工智能的市场很大,每个公司都可以在其中找到自己的位置。在这场AI竞赛中,前段时间爆火的AI扩图,给我们带来了观察图片画面的新角度。这个软件就是此外,它还提供了AI抠图等一系列智能修图功能。首页进入之后,就可以看到【】功能。操作玩法也非常简单,这就是AI扩图出来的效果,不仅是增加像素的数量,更重要的是增加图片分辨率。百度旗下的一款AI视频创作工具,它的目的为打造人人可用的全流程AI创作工具,降低创作门槛,提高创作效率。将AI能力融入在字幕处理、声音识别转化、素材挑选、花字包装等视频创作的全过程中,其中还包含有AI成片、AI数字人等工具,从文案、拍摄、剪辑到包装,都为你准备好了~阿里云目前推出了一款AI编程工具,与其他国内的AI编程相比,它的优势在于专门针对性的调优SDK/API的使用场景。而且它支持VS Code、JetBrains等主流IDE,兼容性非常出色;在功能方面,它支持行/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释等功能。而且它还基于一系列研发文档和SDK/OpenAPI文档等进行问答训练,在编程研发中有任何问题都可以让它帮我们解决。体制内的一个办公神器,它是新华社推出的自动撰写公文的AI写作工具。平台融合了自然语言处理、知识图谱、数据挖掘及AI深度学习四大前沿技术,并与中文创作难度较高的公文写作垂直场景进行深度集合,提供了一体化的AI公文写作。此外,它还集成了案例参考、材料查找、AI写作、AI润色等功能,全方位地辅助公职人员提高创作效率。以上就是话题的全部分享,每天一个摸鱼小技巧,跟  争做快乐打工人!','tokens':1447}]

四、自动搜索流程封装

1、封装搜索函数

defget_answer(q):"""
    当你无法回答某个问题时,调用该函数,能够获得答案
    :param q: 必选参数,询问的问题,字符串类型对象
    :return:某问题的答案,以字符串形式呈现
    """# 默认搜索返回10个答案(我这儿为了节省资源改成3)
    results = google_search(query=q, num_results=3, site_url='https://zhihu.com/')# 创建对应问题的子文件夹
    folder_path ='./auto_search/%s'% q
    ifnot os.path.exists(folder_path):
        os.makedirs(folder_path)# 单独提取links放在一个list中
    num_tokens =0
    content =''for item in results:
        url = item['link']
        title = get_search_text(q, url)withopen('./auto_search/%s/%s.json'%(q, title),'r')as f:
            jd = json.load(f)
        num_tokens += jd[0]['tokens']if num_tokens <=12000:
            content += jd[0]['content']else:breakreturn(content)
q ='介绍一下GPT-3.5的微调方法'#%%
qa = get_answer(q)
qa

在这里插入图片描述

2、大模型调用测试

response = client.chat.completions.create(
  model="glm-4",
  messages=[{"role":"system","content": qa},{"role":"user","content":'GPT-3.5的微调方法'}])
response.choices[0].message.content

输出

‘根据提供的信息,GPT-3.5的微调方法主要包括以下几点:\n\n1. GPT-3.5
Turbo的微调
:OpenAI最近宣布,所有开发者都可以对GPT-3.5
Turbo进行微调,以便更好地满足特定需求。通过微调,开发者可以增强模型在特定任务中的表现,提高其可控性和输出的一致格式。\n\n2.
微调益处:微调后的GPT-3.5 Turbo在特定任务中的表现与GPT-4相当,甚至有所超越。微调可以增加模型的个性化、效率和灵活性,让模型更好地适应特定需求。\n\n3.
微调方法:GPT-3.5的微调可以通过OpenAI提供的Web界面进行,无需编程知识,用户可以直接在网页上进行微调操作。同时,OpenAI也发布了GPT-3.5的微调API,为开发者提供了微调GPT-3.5的接口。\n\n4.
微调效果:初步结果表明,通过微调,模型在遵循指令、输出格式一致性等方面取得了显著提升。微调后,模型可以更精确地完成特定任务,提高效率。\n\n5. 应用前景:GPT-3.5的微调为开发者提供了根据需求定制化模型的能力,预计将催生大量新应用,标志着OpenAI在AI商业应用方面迈出了新的一步。\n\n总体来说,GPT-3.5的微调方法旨在让开发者能够根据特定需求对模型进行定制,从而提高其适用性,为用户创造更独特和差异化的体验。’

3、整合Funcation Calling流程

defget_answer(q):"""
    智能助手函数,当你无法回答某个问题时,调用该函数,能够获得答案
    :param q: 必选参数,询问的问题,字符串类型对象
    :return:某问题的答案,以字符串形式呈现
    """print("使用谷歌搜索")# 默认搜索返回3个答案
    results = google_search(query=q, num_results=3, site_url='https://zhihu.com/')# 创建对应问题的子文件夹
    folder_path ='./auto_search/%s'% q
    ifnot os.path.exists(folder_path):
        os.makedirs(folder_path)# 单独提取links放在一个list中
    num_tokens =0
    content =''for item in results:
        url = item['link']
        title = get_search_text(q, url)withopen('./auto_search/%s/%s.json'%(q, title),'r')as f:
            jd = json.load(f)
        num_tokens += jd[0]['tokens']if num_tokens <=12000:
            content += jd[0]['content']else:breakreturn json.dumps({"Question": q,"Answer": content})
q ='介绍一下GPT-3.5的微调方法'#%%
get_answer(q)

输出
在这里插入图片描述

大模型调用测试

run_conversation(messages=[{"role":"user","content":'介绍一下你自己?'}], 
                 functions_list=[get_answer], 
                 model="glm-4")

输出

‘我是一名虚拟助手,我被训练来回答各种问题,提供帮助和建议。我并不是真正的人,我只是一个计算机程序,但是我可以尽可能地模仿人类的语言和思维方式来与您交流。’

4、大模型调用测试

大模型调用测试(询问大模型自己知识库中知道的内容)

run_conversation(messages=[{"role":"system","content":"根据用户输入的问题进行回答,如果知道问题的答案,请回答问题答案,如果不知道问题答案,调用智能助手函数回答’"},{"role":"user","content":'介绍一下什么是机器学习?'}], 
    functions_list=[get_answer], 
    model="glm-4")

输出:

‘机器学习是一门人工智能(AI)的分支,它使计算机系统能够从数据中学习并做出决策或预测,而无需每一步都进行明确编程。通过训练算法解析数据,机器学习模型能够识别数据中的模式,从而对新的数据点做出预测或决策。机器学习在许多领域都有应用,包括图像和语音识别、自然语言处理、医疗诊断、金融预测等。’

大模型调用测试(询问大模型自己知识库中不知道的内容)

run_conversation(messages=[{"role":"system","content":"根据用户输入的问题进行回答,如果知道问题的答案,请回答问题答案,如果不知道问题答案,调用智能助手函数回答’"},{"role":"user","content":'今天的北京的天气是多少度'}], 
    functions_list=[get_answer], 
    model="glm-4")

输出

使用谷歌搜索
content='北京今天的天气是多云,气温大约在-11℃到-3℃之间。' role='assistant' tool_calls=None

结语

随着本章的圆满落幕,我们不仅成功实现了知乎网站数据的智能搜索相关功能函数的封装,还为搜索引擎的智能化之路奠定了坚实基础。下一篇章,我们将聚焦于这些功能函数的进一步优化与深度改造,力求在提升搜索引擎的整体效率和用户体验的同时,不断突破技术瓶颈,推动智能化IT领域搜索引擎向更高水平迈进。

在这里插入图片描述

🎯🔖更多专栏系列文章:AIGC-AI大模型探索之路

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:建立有技术交流群,可以扫码👇 加入社群,500本各类编程书籍、AI教程、AI工具等你领取!
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!


本文转载自: https://blog.csdn.net/xiaobing259/article/details/139693535
版权归原作者 寻道AI小兵 所有, 如有侵权,请联系我们删除。

“AI大模型探索之路-实战篇:智能化IT领域搜索引擎之知乎网站数据获取(函数封装)”的评论:

还没有评论