AI2.0时代如何快速落地AI智能应用开发,抓住时代机会

写在前面的话

当我们提到人工智能时也就是AI的时候呢,我们大多数人首先想到的可能就是像chatGPT这样的聊天机器人,这些聊天机器人通过理解,还有生成自然语言可以给我们提供一些信息,这个是AI最终的形态吗或者AI最终的形式吗?

比尔盖茨在他的个人博客中写道,现有的软件形式然而相当的笨拙软件的未来是智能代理,即AI agent。他认为5年之内,每个人都将拥有自己的智能助理,现在所有的软件都值得用智能方式重构一遍,他提到了人工智能代理agent,不仅会改变每个人与计算机交互的方式,它将颠覆软件行业,带来自我们从键入命令到点击图标以来最大的一个计算革命。

比如说你是一家商业咨询公司,每天有大量的数据表格要处理,那不仅要把数据库里面的原始数据

做清洗然后还要抽取成表格还要从这个表格里面去做统计分析,然后最后得到一些商业洞察,那么这个时候,通用的类chatGPT是无法满足的,最理想的方式呢就是使用AI的能力,构建属于自己的业务的一个chatbot或者代理机器人把数据库连接到agent输入你最终想要的洞察问题,不一会儿这个报告就出来了。甚至可以更进一步,比如连接上我们的电子邮箱,直接就发送出去了。包括在银行、电商平台等各个行业,都是可以广泛应用的。它可以有效提高客户互动的质量和效率。同时在类似数据可视化领域agent能够将原始数据转化为交互图表和图形,让数据分析变得更加有效和直观这对于类似市场分析、健康数据追踪等领域尤其重要。为理解大量复杂信息提供了一种新的方式。

我们大家都知道未来是AI的时代,但是呢很多人都会困惑说我如何去迎接AI时代,是学一堆AI工具怎么用吗,是练好提示词怎么写作吗,其实这些都是比较表面的一些东西,如果说打算投身到这个行业,我觉得agent是可以为大家提供一个选择的。个人来说,学习agent之后,可以结合自己的业务和长处去开发各种的agent来实现它业务的一个倍增,我们可以看到现在随着AI的发展,对这个专业人才需求也不断增加。

文章三大部分介绍

首先第一部分会深入了解AIGC行业,会从这个大模型的发展历程聊起介绍主流的大模型,讨论他们现在的不足,然后会引入微调和launching的解决方案,还会去拆解AIGC行业,从论文算法到应用去理解一些行业术语,最后我们会通过虚拟项目进行需求分析和技术选型,揭开后面的内容。

第二部分会深入这个launching的这个框架,通过学习launching的7大板块,系统的理解agent开发基础理论。比如说在本地环境如何运行launching,理解model IO的概念,掌握提示词模板的应用,还会构建大模型外脑这种知识库做增强检索、文本切分、下单数据库等等等等这样的一些内容。

最后第三部分通过一个完整的虚拟项目,把前面学到的知识付诸实践。从项目准备、产品分析、架构设计到开发实现过程。后面还有扩展的部分比如数字人、智能语音等等。

AI2.0时代应用开发者机会

大语言模型(LLM)基础与发展

LLM(Large Language Model)大语言模型是人工智能领域中一种强大的自然语言处理模型,其发展历史可以追溯到词向量、词嵌入技术的出现,逐步演进到对句子和文本的理解,最终实现了对复杂语境的全面理解和生成。

  1. 词向量与词嵌入:

    • 词向量是将单词映射到向量空间的技术,最早由Yoshua Bengio等人提出。这使得单词之间的语义关系能够以向量的形式被表示。
    • 词嵌入技术(Word Embeddings)通过训练将单词映射到连续的实值向量空间中,从而捕捉了单词之间的语义关系。Word2Vec、GloVe和FastText等算法为这一技术的发展做出了重要贡献。
  2. 句向量与全文向量:

    • 句向量技术是将整个句子映射到一个向量空间中,捕捉句子的语义信息。Doc2Vec和Skip-Thought Vectors是一些早期的方法,通过训练模型将句子映射到连续向量空间中。
    • 全文向量是将整个文档或文本片段表示为一个向量的技术,捕捉了文档的整体语义信息。这为模型理解文本上下文提供了基础。
  3. 理解上下文:

    • 随着深度学习技术的发展,神经网络模型开始在自然语言处理领域展现出强大的性能。特别是循环神经网络(RNN)和长短期记忆网络(LSTM)等模型,使得模型能够更好地理解文本的上下文信息。
    • Transformer模型的出现进一步提高了对文本上下文的理解能力,其自注意力机制允许模型在处理长文本时能够更好地捕捉到远距离的依赖关系,而不受长期依赖问题的困扰。
  4. 大模型介绍:

    • 随着硬件计算能力的提升和大规模数据集的可用性增加,研究人员开始尝试构建更大的语言模型。其中最著名的就是OpenAI的GPT系列(Generative Pre-trained Transformer),包括GPT、GPT-2、GPT-3等模型。这些模型利用了Transformer的架构,并通过大规模的预训练数据和参数数量的增加,实现了前所未有的语言理解和生成能力。
    • 这些大型语言模型可以通过预训练的方式学习语言的统计规律和语义信息,并在具体任务上进行微调,因此被广泛应用于文本生成、问答系统、机器翻译等领域,取得了令人瞩目的成果。

综上所述,LLM的发展史可以看作是从对单词到句子再到全文的理解能力逐步提升,最终通过大规模预训练的深度神经网络模型实现了对复杂语境的全面理解和生成。

国内外主要LLM及特点介绍

hugging face

提供简单易用的NLP模型和工具库,搞ai界的github。

Hugging Face -- The AI community building the future.

大模型的不足以及解决方案

不具备记忆能力,上下文窗口的限制,实时信息更新慢,新旧知识难以区分,无法灵活操控外部系统,无法为领域问题,提供专业靠谱的答案。

AIGC产业拆解以及常见名词

aigc产业拆解

aigc常用名词

应用级开发者应该如何拥抱AIGC

这张这张图上,越往上他的整个难度大,门槛高,然后越往下,机会就会越多。

机会最少的是基座大模型,就是类似chatGPT、国内的百川智能这样的,特点就是消耗算力特别巨大,需要大量的资本来支持。做一次全量的训练的话现在可能在几千万美金,所以只有巨头和大资本是玩得起的。相应的来说的话,他的职业机会是比较少的。

再往下就是我们的行业垂直大模型,就是在所谓的在基座模型基础上去灌入一些行业的数据,在基础大模型上做微调,职业机会稍微多了一点。但是对于我们应用级开发者呢还是机会不是那么多。

再往下看就是所谓的AI原生应用,不管是ToB还是ToC的这块都有大量的机会。我们这些传统做互联网、科技公司、应用开发公司、科技创业公司、应用开发者都有大量的机会存在。它是一个比较重要的一个位置,也是未来一个爆发的赛道。就像苹果一样有自己的APP store。

所以说在这个时候其实是有大量的职业机会或者大量的这种应用开发的机会存在的,我们传统的应用开发者去快速转型去跟上这个赛道的一个绝佳的机会。有点像当年这个苹果刚发布APP store时候那个状态。可以说所有的应用,都值得用AI啊重新做一遍。

比如说AI加文旅,你计划做一次旅行,你的旅游的这个机器人会帮你找到适合你预算的酒店,然后智能体呢还会知道你你在一年中什么时候去旅行,根据他对你总是尝试这个新的目的地的了解或者你喜欢故地重游的行为的了解,他会向你建议旅游目的地,当他被询问的时候他智能就会根据你的兴趣和冒险的倾向为你推荐做可以做的事情,还能帮你预定你喜欢的餐厅。如果没有这样的一个AI场景的话,你现在做这些事情可能需要旅行社帮你去定制。但是呢使用了智能体加这个场景之后我们就可以解决。不远的未来我们每个人都会有自己的私人智能体助理。

agent开发这一个层面上,需要做哪些准备工作呢?或者说我们转型需要掌握一些什么东西。

1、首先就是要学习机器学习和深度学习的一些基础知识,大模型层面和行业模型层面有一个基础的知识准备。

2、需要有Python语言基础,这个方向大量的项目都是用Python来开发的

3、学会使用AI,例如开发工具和框架

4、应用开发是离不开行业场景和业务流程的,所以需要对行业的场景有一个深入的了解,抓到里面最关键的部分,可能成功的几率就会比较高

一、LangChain框架初识

LangChain是什么以及发展过程

LangChain是一个2022年10月25日开源的框架,其主要作用是帮助开发者更加高效、便捷地在实际应用程序中整合和利用大型语言模型(LLMs),例如GPT-3等,并且扩展这些模型的能力使其能够与外部数据源、API和其他服务进行交互。通过LangChain,开发者可以构建上下文感知的应用程序,使得语言模型不仅能基于自身训练内容生成回复,还能结合实时信息和历史上下文进行推理和决策。其特点包括模块化组件设计、支持数据感知的链式调用结构以及增强的语言模型代理功能,从而简化了开发流程并促进了基于LLM的创新型应用的诞生,如聊天机器人、智能问答系统、搜索引擎等高级NLP应用场景。

LangChain是react论文论文的落地实现,那么这个react表示的是什么,react其实是reason加act的一个合并缩写,也就是推理加行动。那么这篇论文啊为什么是launching的基础,它有什么特别。

人类的这个AI的这个方面,我们终极的目标是希望实现AGI,就是所谓的通用AI,那么在通用AI之前我们现在已经走到了大模型这个阶段,大模型要实现像人脑一样的思考首先就是要反过来想人类是怎么解决问题的,人类之所以拥有独一无二的认知能力,重要原因是我们不会采取无意义的行动。人类行动的背后都是有原因的都是有一个逻辑链条。我们人类通过行动,去获取外部世界的信息,这些信息呢又可以让我们形成更加完善的逻辑链条,进而调整后续的行动。

但是一个AI的程序它天然不具备这样的能力,那比如说我们跟open AI交互的时候,很多时候其实是一个直接的输入输出的一个关系,他没有这样的一个思维链,也没有这样的一个逻辑链。模型会给一些推理过程但是答案也是错的,因为它只推理没有获得外部信息,他这种情况下做的最好的只能是把他预训练时候底膜里面的东西知识拿出来去关联,那关联不到他就会瞎编就会出现幻觉。

那么react也就是这个reason加act,这样的一个范式就是想驱动LLM大模型来用类似这样的方法去工作,可以让大模型像人脑一样去思考。

LangChain的github地址:langchain-ai/langchain: 🦜🔗 Build context-aware reasoning applications (github.com)

LangChain能做什么它有什么能力

LangChain的核心思想是将不同的功能组件连接起来形成一个链式结构,每个组件都可以独立运作或与其他组件协作,这些组件包括但不限于:提示模板(Prompt Templates)、大型语言模型(LLMs)、代理(Agents)、短期/长期记忆(Memory)等。

LLMs & Prompt

提供了目前市面上几乎所有 LLM 的通用接口,同时还提供了 提示词 的管理和优化能力,同时也提供了非常多的相关适用工具,以方便开发人员利用 LangChain与 LLMs 进行交互。

Chains

LangChain 把 提示词、大语言模型、结果解析封装成 Chain,并提供标准的接口,以便允许不同的Chain形成交互序列,为 AI原生应用提供了端到端的 Chain

Retrieval Augemented Generation

检索增强生成式 是一种解决预训练语料数据无法及时更新而带来的回答内容陈旧日的方式。LangChain提供了支持 检索增强生成式 的 Chain,在使用时,这些 Chain 会首先与外部数据源进行交互以获得对应数据,然后再利用获得的数据与 LLMs 进行交互。典型的应用场如:基于特定数据源的问答机器人。

Agent

对于一个任务,代理主要涉及让 LLMs 来对任务进行拆分、执行该行动、并观察执行结果,代理 会重复执行这个过程,直到该任务完成为止。LangChain 为 代理 提供了标准接口,可供选择的代理,以及一些端到端的代理的示例。

Memory

指的是 chain 或 agent 调用之间的状态持久化。LangChain 为 内存 提供了标准接口,并提供了一系列的 内存 实现。

Evaluation

LangChain 还提供了非常多的评估能力以允许我们可以更方便的对 LLMs 进行评估。

LangChain的优势和劣势

优势
1、大语言模型调用能力,支持多平台多模型调用,为用户提供灵活选择。

LangChain的核心优势之一是其对多个大型语言模型(LLMs)平台的兼容性,它允许开发人员无缝地集成和切换不同的模型,如OpenAI、Cohere或Hugging Face等。这意味着开发者可以根据项目需求选择最合适的模型,而不是被特定API所限制,极大地增强了应用的灵活性和可扩展性。

2、轻量级SDK(python、javascript)将LLMs与传统编程语言集成在一起。

通过提供Python和JavaScript等编程语言的轻量级软件开发工具包(SDK),LangChain简化了将LLMs整合到传统应用程序中的过程。这种集成方式降低了开发门槛,使得非AI专家也能相对容易地利用强大的语言模型功能,构建复杂的应用程序逻辑。

3、多模态支持,提供多模态数据支持,如图像、音频等。

LangChain不仅限于处理文本数据,还能够支持多模态输入输出,例如处理图像、音频和其他类型的数据。这一特性使得基于LangChain构建的应用可以理解并生成多媒体内容,从而实现更加丰富、智能的交互体验。

劣势
1、学习曲线相对较高。

尽管LangChain旨在简化LLM的应用开发,但由于其架构设计较为先进且具有高度模块化的特点,对于初次接触该框架的开发者来说,理解和掌握如何配置、串联各个组件以达到预期效果可能需要一定的时间投入和学习成本。

2、文档相对不完善,官方文档不是很完善。

刚开始的时候可能是因为赶进度的原因,他的文档质量非常低,基本上得去看他的原代码才能明白是做什么的,但是最新的版本发布以后文档的质量水平有很大的提升了。

3、缺乏大型工业化应用实践。

缺乏大型的工业化应用,也就说没有哪特别大的厂商在用它,但是有很多中小项目在用。

LangChain安装以及测试实例

pip安装LangChain
bash 复制代码
pip install --upgrade langchain -i https://pypi.org/simple 
conda安装LangChain
bash 复制代码
conda install langchain -c conda-forge
测试示例

我使用的是阿里云的通义千问大模型,使用openai、百度文心都可以,这里只是为了学习测试

调用官方sdk样例
python 复制代码
from http import HTTPStatus
import dashscope

#api_key需要自己申请,申请地址阿里云 https://bailian.console.aliyun.com/
dashscope.api_key=""
def sample_sync_call():
    prompt_text = '用萝卜、土豆、茄子做饭,给我个菜谱。'
    resp = dashscope.Generation.call(
        model='qwen-turbo',
        prompt=prompt_text
    )
    # The response status_code is HTTPStatus.OK indicate success,
    # otherwise indicate request is failed, you can get error code
    # and message from code and message.
    if resp.status_code == HTTPStatus.OK:
        print(resp.output)  # The output text
        print(resp.usage)  # The usage information
    else:
        print(resp.code)  # The error code.
        print(resp.message)  # The error message.


sample_sync_call()
使用langchain库调用
python 复制代码
#!pip install langchain langchainhub dashscope
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import LLMChain
from langchain_community.llms import Tongyi
from langchain import hub
import os

prompt1 = ChatPromptTemplate.from_template("""{input}""")
os.environ["DASHSCOPE_API_KEY"] = ""
llm = Tongyi()

chain_one = LLMChain(
    llm=llm,
    prompt=prompt1,
    verbose=False
)
print(chain_one.invoke("用萝卜、土豆、茄子做饭,给我个菜谱。"))

LangChain的核心模块与实操

模型IO大语言模型的交互接口

langchain中,"模型IO大语言模型的交互接口"是指一套标准化的方法和结构,用于与各种大型语言模型(Large Language Models, LLMs)进行交互。这些接口旨在提供一种通用的方式来封装不同LLM服务提供商(如OpenAI、Cohere、Hugging Face等)的具体API细节,使开发者能够以一致的方式调用不同模型的功能,而不必关心底层实现的差异。

prompts模板
概念

LangChain 提供了一套用于构建和操作提示(prompts)的模板系统,旨在帮助用户更高效、灵活地与各种大语言模型(LLMs)交互。Prompts 模板旨在标准化、模块化以及自动化提示的设计过程,以优化模型输出的质量和一致性。

PromptTemplate: 这是最基础的提示模板类,用于定义一个可复用的、结构化的文本模板,其中可能包含占位符或变量。模板可以包含静态文本和动态部分,动态部分通过指定的输入变量(如 foo 和 bar)进行填充。

StringPromptTemplate: 特定类型的提示模板,专用于处理字符串形式的模板。它可能提供了额外的方法或特性,便于直接操作文本模板。

PipelinePromptTemplate: 这种模板允许将多个独立的提示按照特定顺序组成一个"流水线",每个步骤可能使用不同的模型或处理逻辑,使得复杂任务能够通过一系列有序的子任务来完成。

关于提示词

好的提示词能够使语言模型更加有效准确的回答

PromptTemplate字符模板

简单的字符替换

python 复制代码
from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template("你是一个起名大师,帮我起1个具有{county}特色的男孩名字")
prompt.format(county="法国")
ChatPromptTemplate模板

生成ai对话上下文背景,也就是先做个铺垫,可以使ai更加优化准确的回答

python 复制代码
from langchain.prompts import ChatPromptTemplate

chat_template = ChatPromptTemplate.from_messages(
    [
        ("system","你是一个起名大师,你的名字叫{name}"),
        ("human","你好{name},你感觉如何?"),
        ("ai","你好!我状态非常好!"),
        ("human","{user_input}"),
    ]
)
chat_template.format_messages(name="陈大师",user_input="你叫什么名字呢?")
StoryPromptTemplate自定义模板
python 复制代码
from langchain.prompts import PromptTemplate, StringPromptTemplate
from pydantic import BaseModel
from typing import List
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import LLMChain
from langchain_community.llms import Tongyi
from langchain import hub
import os


# 定义一个用于故事创作的自定义输入模型,包括标题、角色、情节点等信息
class StoryInput(BaseModel):
    title: str
    characters: List[str]
    plot_points: List[str]
    
# 定义自定义提示模板
class StoryPromptTemplate():
    # 基础提示模板字符串
    base_prompt: str = "撰写一篇标题为《{title}》的短篇故事,故事中包含以下角色:{characters}。故事应包含以下情节点:{plot_points}。请以一句引人入胜的开场句开始故事。"

    def render(self, story_input: StoryInput) -> str:
        """使用提供的故事输入渲染自定义提示。"""
        formatted_characters = ", ".join(story_input.characters)
        formatted_plot_points = "\n".join(f"- {point}" for point in story_input.plot_points)

        return self.base_prompt.format(
            title=story_input.title,
            characters=formatted_characters,
            plot_points=formatted_plot_points,
        )


# 创建一个故事输入实例
story_input = StoryInput(
    title="神秘森林",
    characters=["艾芙琳", "加伦", "智者猫头鹰"],
    plot_points=[
        "艾芙琳发现一张通往隐藏林地的古老地图。",
        "加伦警告森林周围存在一股黑暗诅咒。",
        "智者猫头鹰揭示了解除诅咒的秘密。",
    ],
)

# 创建自定义提示模板实例
story_prompt = StoryPromptTemplate()

# 渲染并打印出最终的提示
final_prompt = story_prompt.render(story_input)

prompt1 = ChatPromptTemplate.from_template("""{input}""")
os.environ["DASHSCOPE_API_KEY"] = "sk-cf5d02e81ea44717a35e22c72e4c0dc1"
llm = Tongyi()

chain_one = LLMChain(
    llm=llm,
    prompt=prompt1,
    verbose=False
)
result = chain_one.invoke(final_prompt)
text_content = result['text']
print(text_content)

持续更新。。。

相关推荐
顾道长生'33 分钟前
(NIPS-2024)PISSA:大型语言模型的主奇异值和奇异向量适配
人工智能·语言模型·自然语言处理
语音之家38 分钟前
CultureLLM 与 CulturePark:增强大语言模型对多元文化的理解
人工智能·语言模型·自然语言处理
Tasfa38 分钟前
【AI系列】从零开始学习大模型GPT (1)- Build a Large Language Model (From Scratch)
人工智能·gpt·学习
一个处女座的程序猿41 分钟前
LLMs之o3:《Deliberative Alignment: Reasoning Enables Safer Language Models》翻译与解读
人工智能·深度学习·机器学习
静静AI学堂1 小时前
动态头部:利用注意力机制统一目标检测头部
人工智能·目标检测·计算机视觉
嵌入式小强工作室1 小时前
stm32能跑人工智能么
人工智能·stm32·嵌入式硬件
像污秽一样1 小时前
动手学深度学习-深度学习计算-1层和块
人工智能·深度学习
迪小莫学AI1 小时前
精准识别花生豆:基于EfficientNetB0的深度学习检测与分类项目
人工智能·深度学习·分类
编程迪2 小时前
自研PHP版本AI口播数字人系统源码适配支持公众号H5小程序
人工智能·数字人系统源码·口播数字人·数字人小程序·数字人开源
Anna_Tong2 小时前
人工智能的视觉天赋:一文读懂卷积神经网络
人工智能·神经网络·cnn