当前位置:   article > 正文

AI Agent智能应用从0到1定制开发【hao讠果】_ai agent 开发

ai agent 开发

AI Agent智能应用从0到1定制开发

扌并讠果:Ukoou·ㄷㅁΜ

AIGC产业拆解以及常见名词解释

AIGC(AI-Generated Content)产业是指利用人工智能技术自动生成内容的新型内容生产方式。这一产业的快速发展,得益于生成式AI技术的进步,尤其是大模型的应用,如GPT-4、Stable Diffusion等。AIGC产业的发展不仅推动了内容创作的革新,也为各行各业带来了颠覆性的变革。

  1. 大模型(Large Models):指的是具有大量参数和能力的人工智能模型,如GPT-4、Transformer等。这些模型通过大规模数据训练,能够理解和生成复杂的文本、图像等内容。

  2. 生成对抗网络(GANs):一种由生成器和判别器组成的深度学习模型,用于生成逼真的图像、视频等视觉内容。

  3. 扩散模型(Diffusion Models):一种生成模型,通过逐步去除噪声并添加结构信息来生成图像,如Stable Diffusion。

  4. Transformer预训练大模型:基于Transformer架构的预训练模型,适用于处理文本、代码等连续性生成任务。

  5. 多模态(Multimodal):指的是能够处理和生成多种类型数据(如文本、图像、音频)的AI模型。

  6. MaaS(Model-as-a-Service):模型即服务,指将AI模型作为服务提供给用户,用户可以通过云平台使用这些模型进行数据处理、特征工程、模型训练等。

  7. 算力(Computing Power):AI模型训练和推理所需的计算资源,通常依赖于高性能的GPU或专用AI芯片。

  8. 开源与闭源:开源指的是公开模型的源代码和数据,允许社区和开发者自由使用和修改;闭源则是指模型的源代码和数据不公开,通常由公司或研究机构控制。

  9. 垂直行业应用:指AIGC技术在特定行业中的应用,如医疗、教育、金融、制造等,这些应用往往需要针对特定场景进行定制化开发。

  10. AIGC产业全景图谱:描述AIGC产业各个环节和参与者之间关系的图谱,包括数据提供商、模型开发商、应用开发商、终端用户等。

AI Agent智能应用从0到1定制开发 - LLMsvschatmodels

大型语言模型(LLMs)和聊天模型(Chat Models)都是人工智能领域中的重要概念,它们在自然语言处理(NLP)和对话系统中的应用日益广泛。以下是对两者的比较:

大型语言模型(LLMs)

  1. 定义:LLMs是具有大量参数的深度学习模型,它们通过在大规模文本数据上进行训练,学习语言的复杂模式和结构。
  2. 能力:LLMs能够执行多种语言任务,包括文本生成、翻译、摘要、问答等。
  3. 应用范围:LLMs的应用非常广泛,不仅限于聊天机器人,还包括内容创作、教育、研究等多个领域。
  4. 例子:GPT-3、BERT、T5等都是知名的LLMs。

聊天模型(Chat Models)

  1. 定义:聊天模型是专门设计用于对话交互的模型,它们通常基于LLMs,但针对生成对话回复进行了优化。
  2. 能力:聊天模型专注于生成连贯、相关且自然的对话回复,能够处理多轮对话。
  3. 应用范围:聊天模型主要应用于构建聊天机器人和对话系统,如客户服务、虚拟助手等。
  4. 例子:ChatGPT、Llama 2-Chat等。

比较

  • 目标和优化:LLMs旨在理解和生成语言,而聊天模型则专门针对对话场景进行优化,以提供更自然的对话体验。
  • 交互方式:LLMs通常提供“输入文本,输出文本”的API,而聊天模型则提供了以“聊天消息”为输入和输出的接口,更适合对话应用。
  • 灵活性:LLMs由于其多功能性,可以被应用于多种不同的任务和场景,而聊天模型则更专注于提供高质量的对话交互。
  • 开发和集成:聊天模型通常提供了更容易集成到对话系统中的接口,使得开发者可以快速构建聊天应用。

总的来说,LLMs和聊天模型在技术上有很多相似之处,但它们在设计目标和应用场景上有所区别。LLMs提供了更广泛的语言处理能力,而聊天模型则在对话交互方面进行了专门的优化。

AI Agent智能应用从0到1定制开发 - 文档转换实战:文档切割

块大小和重叠

在处理文本数据时,正确设置参数非常重要。在我们的示例中,用于块大小和重叠的数字是任意选择的,但在实际情况下我们需要对它们做出决策。

首先,我们必须以一种不超过嵌入模型的标记限制的方式对文本进行分割。"嵌入"听起来可能是一个复杂的术语,但实际上,它是一种将单词、句子或整个文档转化为数值向量或'嵌入'的方法。这些向量以一种计算机可以理解的方式捕捉单词和句子的意义和关系。

我们将使用的嵌入模型是OpenAI的 text-embedding-ada-002,它非常适用于许多类型的应用程序。该模型可以处理最多8191个标记,因此我们必须确保我们的文本块的标记数少于这个限制。

你可能想知道什么是 'token'。它与字符不同。粗略地说,一个 token 大约等于四个字符的长度。这意味着我们的模型可以处理很多字符,但我们需要小心,不要使我们的块太大,否则可能会丢失一些上下文信息。

根据我的经验,保持每个块在500到1000个字符之间是最好的。这个大小似乎在不丢失重要信息的情况下工作得很好。

至于重叠参数,它指的是我们希望在块之间重复多少文本。通常建议将其设置为块大小的10-20%。这样,我们可以确保块之间有一定的联系,而不会造成过多的重复。如果重叠太大,会导致处理过程变慢并增加成本。

因此,基于这些考虑,这是我在处理相对较长的文本时使用的配置。

 

text_splitter = RecursiveCharacterTextSplitter( chunk_size = 500, chunk_overlap = 50, length_function = len, add_start_index = True, ) # or text_splitter = RecursiveCharacterTextSplitter( chunk_size = 1000, chunk_overlap = 100, length_function = len, add_start_index = True, )

复制

[18]自定义长度函数

在这个例子中,我们使用了默认的长度计算函数 len,它计算字符的数量,但我们也可以创建和传递更复杂的函数。例如,我们可以根据标记(token)而不是字符来计算长度。为了实现这一点,我们可以使用 HuggingFace 的 Transformers 库。让我们安装一些额外的包:

 

pip install transformers torch tensorflow

以下是对每个库的详细解释:

1.transformers:这是由Hugging Face开发的库,提供了通用的自然语言理解(NLU)和自然语言生成(NLG)的架构(如BERT、GPT-2、RoBERTa、XLM、DistilBert等)。它包含了约100多种语言和深度学习框架(PyTorch、TensorFlow)的数千个预训练模型。该库设计得既适合研究,又易于使用和高效。2.torch(PyTorch) :PyTorch是由Facebook的AI Research实验室开发的开源机器学习库。它基于Torch库,用于计算机视觉和自然语言处理应用。PyTorch因其相对于其他库更直观易用、调试更容易和强大的GPU加速支持而闻名。3.tensorflow:TensorFlow是由Google Brain团队开发的另一个开源机器学习库。它旨在为机器学习提供灵活、高效和可扩展的平台,并支持广泛的神经网络架构。TensorFlow还提供了强大的分布式计算支持,使您能够在多个GPU甚至多台机器上训练大型模型。

接下来,让我们添加我们的自定义函数(就像我们在网站地图加载器中提取自定义数据时所做的那样),并将其作为文本分割器构造函数的参数使用:

 

from langchain.document_loaders import PyPDFLoader from langchain.text_splitter import RecursiveCharacterTextSplitter from transformers import AutoTokenizer # Use the PyPDFLoader to load and parse the PDF loader = PyPDFLoader("./pdf_files/SpaceX_NASA_CRS-5_PressKit.pdf") pages = loader.load_and_split() print(f'Loaded {len(pages)} pages from the PDF') tokenizer = AutoTokenizer.from_pretrained('gpt2') def tokens(text: str) -> int: return len(tokenizer.encode(text)) # Note that we reduce to 250 the chunk size since we are working with tokens now text_splitter = RecursiveCharacterTextSplitter( chunk_size = 250, chunk_overlap = 20, length_function = tokens, add_start_index = True, ) texts = text_splitter.split_documents(pages) print(f'Split the pages in {len(texts)} chunks') print(texts[0]) print(texts[1])

请注意,现在我们正在使用标记(tokens)进行操作,因此我将块大小从1000更改为250,并将重叠量从100更改为20。

运行两者,你会发现使用标记的分割器创建了更均匀的块,这可能有助于模型获取上下文。

尽管如此,常规的分割器效果非常好,对于处理简单文本来说可能是最佳选择,因为它更易于管理。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/377670
推荐阅读
相关标签
  

闽ICP备14008679号