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

CSDN 2024-06-17 09:31:10 阅读 79

系列篇章💥

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

目录

系列篇章💥一、前言二、总体概览三、爬取知乎网站的代码逻辑封装1、定义搜索服务2、搜索服务调用测试3、数据本地存储 四、自动搜索流程封装1、封装搜索函数2、大模型调用测试3、整合Funcation Calling流程4、大模型调用测试 结语


一、前言

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

二、总体概览

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

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

1、定义搜索服务

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

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

def get_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)) } ] with open('./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、数据本地存储

with open('./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、封装搜索函数

def get_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 if not 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) with open('./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: break return(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流程

def get_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 if not 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) with open('./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: break return 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的探索之旅,一起开启智能时代的大门!



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。