自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(174)
  • 收藏
  • 关注

原创 Llama 3 基于知识库应用实践(一)

Llama 3 是Meta最新推出的开源大语言模型,其8B和13B参数的模型的性能与之前的Llama 2相比实现了质的飞跃。Llama 3 采用了一个相对标准的decoder-only的transformer架构,相较于Llama 2,Llama 3做了以下几个方面的改进:Llama 3 使用了基于128K tokens词库的tokenizer,能更有效地对语言进行编码采用分组查询注意力机制(GQA)来改进模型推理效率Ollama是一个免费开源的应用,通过它可以方便地在本地以相对较低的硬件需求来运行各

2024-04-29 08:00:00 1464

原创 ChatGLM基于LangChain应用开发实践(三)

虽然通过构建知识库可以帮助LLM减少推理时的“幻觉”现象,但是如果知识库存储的信息不足,导致用户与LLM交互时提问所需信息在知识库里检索不到,那么如上面的示例所示,要么可能LLM会给出错误的结果,要么就是无法回答用户的问题,为了解决这个问题,需要对现有知识库进行更新。显然这里给出的12个月的试用期信息也是与notion数据描述的事实不符的,在设计prompt时,如何减少LLM的“幻觉”现象是一个值得思考的问题,另外使用知识库进行检索增强生成也是一个减少LLM出现“幻觉”的重要手段。欢迎来到Blendle。

2024-02-05 08:00:00 1135

原创 ChatGLM基于LangChain应用开发实践(二)

也可以通过第1次下载模型时指定保存到本地cache,这样后面就可以直接从cache加载模型从而节约下载时间。三、LLM基于LangChain访问知识库与用户交互演示。,打开这个文档,可以看到红色框部分明确提到试用期是。这次LLM给出了正确的回答,试用期是1个月。一、使用notion样例数据构建知识库。二、加载ChatGLM-3模型。

2024-01-12 08:30:00 1503

原创 ChatGLM基于LangChain应用开发实践(一)

在使用大模型(LLM)做应用开发时,LangChain是一个主流的开发框架,通过它来构建Agent,根据用户查询访问企业私有数据,调用自定义或者第三方工具库,然后再调用LLM,利用其推理能力以自然语言的方式返回查询结果给用户。接下来会根据以上提到的notion样例数据,通过使用LangChain构建Agent来访问这些数据,从而让LLM的回答更有针对性,更符合用户期望的查询结果。5. 避免刺激性活动:晚上避免喝咖啡、茶、可乐等含咖啡因的饮料,避免过于油腻的食物,这些都可能导致失眠。

2023-12-18 08:00:00 502

原创 ChatGPT Prompting开发实战(十三)

使用额外的prompt来询问用户是否正在尝试进行prompt的内容注入,在如何防止内容注入方面,GPT4会处理得更好。用户在与ChatGPT交互时提供的prompts可能会包括有害内容,这时可以通过调用OpenAI提供的API来进行判断,接下来给出示例,通过调用模型“gpt-3.5-turbo”来演示这个过程。接下来修改”system”的message的内容,让模型判断是否用户正在尝试进行恶意的prompt的内容注入,输出结果“Y”或者“N”。二. 结合案例演示解析如何避免prompt的内容注入。

2023-10-09 07:00:00 610

原创 ChatGPT Prompting开发实战(十二)

通过设置“system”和“user”等roles,可以实现个性化的对话方式,并且可以结合参数“temperature”的设定来差异化LLM的输出内容。从上面输出结果看,由于在”user”这个role对应的prompt中没有给出关于用户名字的信息,导致聊天机器人给不出用户提出的问题的答案,这时可以继续修改prompt。首先在messages中设定各个role的内容,即prompts,然后通过API调用模型输出内容。接下来修改prompts的内容,在调用API时增加参数temperature的设定。

2023-09-28 01:18:28 1556

原创 ChatGPT Prompting开发实战(十一)

一般来说,这个参数值设为0表明只让模型输出一种预测结果即可,或者说想让模型输出稳定的预测结果(多次预测),但是有时候如果想看到更多的差异化的输出结果,即让模型生成内容时具有更多的随机性,那么可以把参数值设置为大于0,值越高,表示随机性越大,模型生成的内容可能会更有“创意性”。设想客户服务部门会收集很多用户针对购买的产品的使用评论,那么可以利用LLM来分析每个评论的内容所表达的是正面的反馈还是负面的反馈,然后自动生成相应的定制化的致客户的服务邮件。一、根据用户评论编写prompt生成定制化的客户服务邮件。

2023-09-25 08:00:00 256

原创 ChatGPT Prompting开发实战(十)

接下来会给出具体示例,通过调用模型“gpt-3.5-turbo”来演示并解析如何针对上述需求来编写相应的prompts。接下来设计一个通用的语言翻译工具,可以把各种语言都翻译为英语。通过编写prompt指导模型对输入的文本进行拼写及语法错误检查,并输出结果。一、关于文本内容翻译/语法检查/格式转换等相关任务的prompt开发。接下来修改prompt,要求模型分析所给的文本使用什么语言。-识别文本内容使用的语言,并且根据需要翻译为另外的语言。下面的prompt用来把一段俚语转换为商务语气的文本。

2023-09-21 08:00:00 160

原创 ChatGPT Prompting开发实战(九)

有时候需要针对一些产品的评论文本进行分析,常见的做法如对每段评论所表达的情感倾向进行推理判断,识别用户对这个产品的使用体验是否满意,那么可以编写相关的prompt来做这样的推理分析。另外,针对不同的文本内容,也可以根据给出的主题来让模型判断一段内容属于什么样的主题。接下来修改prompt,给出设定的情感倾向分类如“positive”,“negative”,要求模型按照这个分类来对评论内容进行判断。需求是针对这段评论分析用户的情感倾向是什么,譬如说是正面的还是负面的评论。一、什么是推理式的prompt开发。

2023-09-18 08:00:00 463

原创 ChatGPT Prompting开发实战(八)

接下来会给出具体示例,通过调用模型“gpt-3.5-turbo”来演示并解析如何针对以上谈到的这些文本归纳总结的需求,编写相应的prompts。除了上面列出的几种方式之外,还可能有额外的一些需求,譬如给出多段文本,要求模型同时对这些文本进行归纳总结。接下来额外给出另外3段文本,要求模型对这4段文本同时进行总结,条件就是输出内容不能超过指定的字数限制。下面通过修改prompt达到只抽取相关的文本信息的目的,而不需要对整段文本进行概括总结。-只根据需求抽取相关的文本信息,不需要整段文本内容。

2023-09-14 01:12:40 476

原创 ChatGPT Prompting开发实战(七)

对于一些复杂的任务来说,如果只编写一次prompt来调用模型,不一定能够得到理想的效果,那么可以采用迭代开发的方式,基于每一次使用当前版本的prompt调用模型的效果来不断调整优化prompt,使得prompt的最终版本能够产生满足预期的效果。接下来的需求是制作一张维度表格,这就要求模型抽取相关的信息并且放入到一张表格中,此外,在prompt中还提到需要按照HTML的格式输出内容,这样做的目的是方便用户能够以网站网页的方式来进行访问。一、什么是迭代式的prompt开发。

2023-09-11 01:19:29 461

原创 ChatGPT Prompting开发实战(六)

输出第一句话表明模型认为student的计算结果是正确的,但是仔细检查上述student的计算过程,会发现计算结果是错误的,为了指导模型如何做出正确的推理,修改prompt的内容如下,具体做法是让模型先找出自己的计算方法,得到自己的计算结果,然后再去对照student的计算结果,从而判断student的计算是否正确。指导模型在匆忙做出回答之前,需要先设法找出自己的解决办法,在下面的示例中,问题涉及到如何来计算总成本,其中给出了一个student的计算样例,让模型来判断这样的计算方法是否正确。

2023-09-07 08:00:00 227

原创 ChatGPT Prompting开发实战(五)

对于大语言模型来说,编写出有效的prompt能够帮助模型更好地理解用户的意图(intents),生成针对用户提问来说是有效的答案,避免用户与模型之间来来回回对话多次但是用户不能从LLM那里得到有意义的反馈。本文通过具体案例演示解析两个能够帮助写出有效的prompts的基本原则。使用分割符来清楚标明模型输入的不同部分,可以使用的分割符包括:```, """, < >, , :等等。如何请求LLM给出一个结构化的输出,常见的结构化输出格式有JSON,HTML等。

2023-09-06 08:00:00 953 1

原创 ChatGPT Prompting开发实战(四)

一、chaining prompts应用解析及输出文本的设定。三、如何使用prompt检查LLM输出是否符合系统设定。-给出综合评定:"flagged": false。二、检查LLM输出的内容是否可能包含有害的内容。-首先针对有害分类进行识别,结果都为false。-对每个有害分类给出打分结果。

2023-09-01 08:00:00 1398

原创 ChatGPT Prompting开发实战(三)

前面谈到的CoT的推理过程,可以比作是一次性就烹调好一顿大餐,那么接下来要说的“chaining prompts”,其背后的理念是分多次来完成这样一项复杂任务,每次只完成其中一步或者一个子任务。核心之处在于,你需要在自己的代码中来维护状态(而不是LLM)。另外可能需要使用到外部的第三方工具,譬如网页搜索或者数据库等等,LLM起到的是驱动引擎的作用。基于chaining prompts案例剖析prompt的分步应用。

2023-08-31 08:00:00 1833 1

原创 ChatGPT Prompting开发实战(二)

这个例子看上去不复杂,但是它的意义重大,因为上面所列的系统信息都是私有数据,如果已经告诉模型只能从私有数据中去查询,那么模型就不会从其它地方去获取数据,譬如针对上面step 2所列的信息,可以修改为从数据库或者vector store中进行查询(也就是使用具体的工具),如果使用LangChain,那么它可以帮我们封装这个过程,如果不使用LangChain,那么可以自己来封装。基于上面的搜索结果进行推理,最后获得了我们想要的数据:1,800 to 7,000 ft。

2023-08-29 08:00:00 430

原创 ChatGPT Prompting开发实战(一)

这样的一个prompt示例可以看做是一个工业级的写法。当我们使用ChatGPT或者调用OpenAI的API时,就是在使用prompt进行交互,用户在对话过程中输入的一切信息都是prompt(提示词),当然工业级的prompt与人们通常理解的prompt可能不太一样。在前面谈plugin开发时,谈到在开发的应用中,不仅仅是执行tasks,而且需要执行actions,这时就需要agent的参与。LangChain框架一个核心的聚焦点就是agent,其中包括两个重要的模块“react”和“mrkl”。

2023-08-28 08:00:00 1675

原创 Prompt本质解密及Evaluation实战(二)

我们来看下LangChain中关于prompt的使用,下面是取自LangChain源码中的一个经典的示例,描述了AI模型被授予访问几种工具来帮助回答用户的问题,其中“tool_descriptions”是至关重要的,在前面文章谈plugin开发时提到这是可配置的,决定了模型要不要使用以及什么时候来使用第三方的工具。接下来按照5点准则对模型的回答进行评估,概括来说模型能够根据关键信息进行推理,但是给出的答案有误,工具描述部分有Calculator,但是模型没有使用,模型没有正确使用工具来回答问题。

2023-08-25 08:00:00 235

原创 Prompt本质解密及Evaluation实战(一)

我们需要思考在一个prompt中,有哪些因素能够影响到一个prompt的功能,另外也要考虑如何使一个prompt最小化,因为这涉及到tokens的使用数量,另外如果信息太多也会干扰到模型对信息的“理解”(这里的“理解”指的是一种形式上的理解,本质上来说模型是无法像人类一样真正理解我们提供的信息的)。-对于模型来说,中间的步骤(intermediate steps)会作为灯塔信号,让模型参照用户输入中的符号(symbols)构成的patterns来产出结果,模型表现出的仅仅是一种形式上的推理论证。

2023-08-23 08:00:00 1638 1

原创 大模型框架LangChain开发实战(二)

本项目是以对话的方式来获取notion上面的数据,这是一件有价值的事情,这是因为随着时间的推移,notion上面的数据会越来越多,那么这时直接去notion上查询或者定位信息是一个很费时费力的过程,如果我们使用一个简单的接口,以自然语言的方式通过LangChain以模型驱动为基础来与企业私有数据进行交互,这对提升团队协作效率等很有帮助。-refine(把文件切成多个片段时,分析第二个片段时会结合第一个片段的内容)-map reduce(数据切分,适用于大数据文件)一、关于数据的准备及项目背景。

2023-08-22 08:00:00 885

原创 大模型框架LangChain开发实战(一)

你可以认为LangChain是大模型开发时代的operating system,因为它驱动了所有模块和数据的相互交互。在这样的一个框架中,有这样一个东西称作agent,目前来看agent还是一个很开放的领域,其本身的作用是基于模型驱动的做事情的具体过程,来在适当的时候使用工具或者本地数据,或者第三方数据来完成模型设定的步骤,这样的一个agent具有动态调整的过程,可以把它看成一个loop,它既能与模型,数据,工具进行交互,又能处理异常,以及评估整个系统的行为。

2023-08-21 08:00:00 818

原创 LLMs大模型plugin开发实战

ChatGPT是通用语言大模型,如果用户想要在与大模型进行交互时能够使用到企业私有的数据,那么可以通过开发plugin(插件)的方式来实现,另外GPT3.5模型的训练数据是截止到2021年9月,如果想让模型能够访问之后的数据,也可以借助plugin。在下面的流程图中,黄色背景框表示定制开发的plugin运行在FastAPI server上,Datastore用于存储用户文档信息,文档通过/upsert操作存储到datastore,通常表示为vector space。四、使用datastore查询数据。

2023-08-15 20:52:32 1752

原创 Transformer应用之构建聊天机器人(二)

使用基于Transformer的模型训练对话机器人,模型预测(推理)过程解析,聊天机器人对话效果解析,并与PyTorch提供的“Chatbot Tutorial”进行对比解析。

2023-05-26 22:00:59 1831

原创 Transformer应用之构建聊天机器人(一)

目前流行的聊天机器人都是基于Transformer的架构来做的,在这之前也有使用RNN网络来构建聊天机器人的例子,譬如PyTorch框架提供给我们的“Chatbot Tutorial”(本文使用前面用于语言翻译的Transformer模型来构建一个简单的聊天机器人,并与“Chatbot Tutorial”示例提供的基于RNN的GRU模型构建的聊天机器人进行对比测试,基于Transformer构建的聊天机器人同样使用“Chatbot Tutorial”示例中提到的语料进行训练。

2023-04-16 23:30:05 2097

原创 Python generator构建数据pipelines解析

总而言之,首先创建一个generator “lines”通过yield机制来逐行读取文件中的内容,其次在另外一个generator “list_line”的内部来迭代访问generator “lines”中的值,从而把文件中的每一行的内容写入一个值的list中。这里创建了一个generator “list_line”,它用于从第1个generator “lines”中循环取值,这是一种使用generator构建pipeline的通常做法。

2023-03-15 23:13:25 324

原创 图像识别技术解析:手写数字识别(二)

在这篇论文中提到了LeNet-5的卷积神经网络的架构,在下面的架构图中,最左边是输入(这里举的例子是一个尺寸为32x32的英文字母A,依次通过卷积层,池化层,卷积层,池化层,最后通过全连接层输出预测结果)。从这个手写数字的小程序的测试可以看出机器学习算法的局限性,而基于深度学习的卷积网络算法更能适应复杂多变的环境,当然这里只是在小数据集上使用经典的LeNet进行的一个简单的对比测试而已。为了能直观比较两个模型的预测效果,可以在后端的predict方法中同时调用卷积模型和随机森林模型。四、调用模型进行预测。

2023-03-13 13:29:48 1362

原创 Transformer应用之语言翻译解析

本文通过构建一个基于Transformer的模型来实现语言翻译的功能并演示其效果。包括数据准备,模型构建,预测推理等主要环节。

2023-03-03 13:42:18 1473 2

原创 图像识别技术解析:手写数字识别(一)

在规范用户输入的情况下,使用机器学习的随机森林算法构建模型后,如果使用现成的数据集进行训练,得到的模型用于手写数字识别时,发现总体上识别准确率只有百分之三十左右,而新建数据集用于训练之后,识别准确率得到了很大改善,但是机器学习算法有其局限性,后面会使用深度学习中的CNN来做对比分析。当用户拖动鼠标写入数字后,点击“识别”按钮,从而通过HTTP的方式把数据发送到后端并保存起来,在实际实践中,用户的输入应该被存储起来,一是可以作为后续训练数据集的补充,另外也可用于后续算法及模型改善的用途等等。

2023-02-20 23:37:23 2564

原创 Python generator高级方法应用解析

这段代码只会在一旦找到一个符合palindrome结构(譬如数字10101)的数字时才会使用yield产生一个值,然后使用len()方法取得这个值的位数,通过方法send()发送10 ** digits给generator对象,并给变量i赋值为10 ** digit,这时方法infinite_palindrome()就会更新num并启动新的循环来检查符合palindrome结构的数字。基于这样一种循环结构,你可以在程序中添加一个数字,基于此来启动下一个数字的搜索。.throw():可以抛出异常。

2022-08-20 18:01:08 575

原创 Rasa对话机器人之HelpDesk (五)

一、HelpDesk智能对话机器人业务流程中的验证功能解析在HelpDesk智能对话机器人运行业务流程时,需要对用户输入的信息进行验证,验证通过后才能继续调用后台微服务,如果验证不通过,对话机器人可以继续让用户提供正确的信息,直到所有需要收集的信息都通过验证后才提交form。下面通过Rasa提供的interactive模式演示对话机器人如何验证用户输入信息。当用户查询已经创建的incident的状态时,输入以下信息:NLU模型正确识别用户意图,继续执行:继续按照提示运行这个form:这时对话机器人要求用户提

2022-06-26 23:59:51 436 2

原创 Rasa对话机器人之HelpDesk (四)

一、HelpDesk智能对话机器人查询incident状态的完整业务流程解析首先运行命令rasa visualize可以获取可视化流程图:下面是命令执行完成后自动弹出的web页面,在这个流程图中,重点看一下关于检查incident状态的流程是如何工作的,从图中可以看到这样一条路径:START -> utter_greet -> utter_help -> incident_status_form -> action_check_incident_status当然也可以直接输入信息要求对话机器人查询状态信息。

2022-06-19 16:42:18 595

原创 Rasa对话机器人之HelpDesk (三)

一、HelpDesk智能对话机器人创建incident完整业务流程解析下面是关于domain文件中关于slot “problem_description”的定义,在这里可以使用key “not_intent”指定哪些值不会触发slot的填充,也可以使用intent指定触发slot填充的intent:重新训练模型:模型训练完成后通过持久化操作进行保存:使用交互式对话模式来深入了解对话机器人创建incident的业务流程。首先确认使用docker命令来启动duckling服务:docker run -p 800

2022-06-12 21:31:26 602

原创 Rasa对话机器人之HelpDesk (二)

一、HelpDesk智能对话机器人创建incident业务流程解析在这里使用交互式对话模式来深入了解创建incident的业务流程。首先确认使用docker命令来启动duckling服务:docker run -p 8000:8000 rasa/duckling启动后显示:使用debug模式启动Rasa action server:从日志中可以看到,运行的微服务包括创建incident,检查incident 状态,以及进行验证的服务等。运行命令”rasa interactive”进入交互式模式:对话机器人所

2022-06-05 22:02:59 470

原创 Python Yield 内部工作机制及应用解析

一、Python yield内部工作机制解析Python yield 是generator实现各种功能的核心。我们看一下yield是如何工作的,当调用generator的特定方法,譬如next(),其内部代码会执行到yield,通过下面这个具体代码示例来进行说明:在while循环体中,使用关键字yield定义了一条语句:yield num,表示会返回一个值给调用者,而不是像return语句那样,返回值之后就会退出整个方法的执行。使用yield时,这个方法的状态(state)是被记忆的,也就是说,当调用一个g

2022-06-04 12:32:44 554

原创 Rasa对话机器人之HelpDesk (一)

一、HelpDesk智能对话机器人概述在前面文章介绍金融领域对话机器人项目时,谈到用户在与对话机器人进行交互时,可能因为当前对话机器人提供的业务流程无法满足用户需求,从而使对话机器人根据预先设定的配置进行转人工服务,或者由于用户在使用中遇到问题后需要能够向系统提交问题,针对这些场景,通过会通过设置HelpDesk来进行处理。在这里,首先看一下基于Rasa框架开发的一个HelpDesk对话机器人是如何工作的。在上面的对话示例中,首先用户要求创建一个问题单(incident),然后对话机器人向用户收

2022-05-29 13:00:26 571

原创 Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(九十四)

一、Rasa项目实战之银行金融Financial Bot智能业务对话机器人转人工流程解析与演示 用户在与对话机器人进行交互时,有时因为当前对话机器人提供的业务流程无法满足用户需求,这时用户可能会要求转人工服务,另外一种情况是对话机器人根据预先设定的配置,譬如在进行fallback处理时达到了触发转人工服务的条件,也会提示用户是否需要转人工服务,用户可以选择接受或者拒绝转人工处理。在进行转人工服务时,通常服务提供商会使用helpdesk来提供人工服务给用户。在本项目中,我们先运行可视化流程图来看...

2022-05-15 23:32:02 470

原创 Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(九十三)

一、Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务流程解析与演示在设计和开发智能业务对话机器人时,需要考虑用户在与对话机器人进行多轮对话的过程中,会穿插进行多个业务流程的处理,对话机器人需要根据用户意图进行相应的操作。先来看下这段对话:刚开始用户想查询账户进账情况,这时对话机器人提供3个vendor让用户选择,用户选择其中一个vendor查询指定时间段的进账情况,之后用户想查一下关于另一个vendor的交易情况,查询结果如下:下面通过debug模式解析对话机器

2022-05-09 08:47:50 635

原创 Python Generator 数据状态和代码执行指令状态解析

一、Python generator 如何记忆数据状态和代码指令执行状态Generators方法使用Python关键字yield而不是return来返回数据给调用者。下面是前面提到的一个方法,用于产生一个无限的数据序列:如果使用return则意味着返回所有的数据(加载到内存中),之后这个方法执行就结束了。在上面的方法中,使用了yield来每次返回一个值给这个方法的调用者,与return不同之处在于,在返回值之后并不会退出方法的执行,相反,这个方法的状态会被记忆。通过这样的方式,当对一个gener

2022-04-29 08:40:05 369

原创 Rasa项目实战之银行金融Financial Bot智能业务对话机器人业务功能微服务解析与调试(九十二)

一、Rasa项目实战之银行金融Financial Bot智能业务对话机器人支付业务流程解析与演示支付业务是银行金融业务中的核心功能,对于本项目来说,先来看一下这个业务流程是如何工作的。首先运行Rasa命令rasa visualize来自动生成一个可视化流程图:在下面这个流程图中,一种是支付给个人,另一种是支付信用卡欠款,在流程中需要使用相关的form来收集信息,然后才能调用微服务进行处理。对话示例如下:从这段对话中可以看到,这个支付业务流程使用了form来向用户收集三个方面的信息

2022-04-24 22:46:07 655

原创 Python Generator 工作机制及应用解析

一、Python generator概述及大数据文件读取内存溢出分析Generators是一类特殊的方法,这类方法返回一个lazy iterator而无需在内存中存储所有的数据内容。Generators是Python的核心内容,对于处理大数据量文件或者数据流(对于流式架构来说,通常有生产者和消费者,数据是一批一批或者一条一条进行处理的,在这种情况下,数据量可以是无限的,你无法预测会有多少数据)并同时需要进行更加精细的控制时是很有用的,在Rasa框架中可以看到基于generators架构的很多应用。首

2022-04-22 23:03:55 2604

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除