开篇总结 | 豆包MarsCode AI刷题

119 阅读7分钟

AI应用开发的“奇点”时刻——学习记录

1. 认识AI技术的变革

在ChatGPT和GPT-4的发布之后,关于“通用人工智能”的讨论层出不穷,我们也见证了AI技术与实际应用之间的距离正在迅速缩短。ChatGPT的强大能力已经能够广泛应用于各行各业,例如客户服务优化、数据管理、产品设计等方面。

从历史的角度看,AI技术的发展经历了几次“寒冬期”,每一次的低谷都是由于技术受限和缺乏实际应用场景。然而,ChatGPT和GPT-4的出现标志着一个新的时代的到来,大型语言模型具备了前所未有的自然语言理解和生成能力,使得它们能够真正解决现实中的复杂问题。这种“通用性”的特性是AI历史上前所未有的,正如主讲人提到的,这次突破是深刻且持久的。

2. 什么是LangChain?

黄佳老师将LangChain描述为一个专为构建基于大型语言模型的应用而设计的框架,能够将语言模型与数据源相结合,从而更高效地使用数据,帮助开发人员创建具有实际价值的应用。

LangChain的主要特性包括:

  • 数据感知:能够将语言模型与不同的数据源连接,提升对数据的理解和利用。
  • 代理特性:能够通过“代理”与外部环境进行交互,使模型具备与用户沟通并做出响应的能力,从而提高系统的智能化水平。

这些特性意味着LangChain不仅仅是一个API调用工具,而是一个真正意义上的应用开发框架。通过数据感知和代理特性,开发者可以将模型与外部工具结合,构建具备自主决策和交互能力的复杂系统。这对于企业和个人开发者来说,打开了AI应用开发的新可能性,使得构建复杂的AI应用成为可行。

3. LangChain的核心组件

LangChain包含多个核心组件,包括模型(Models)、提示模板(Prompts)、数据检索(Indexes)、记忆(Memory)、链(Chains)和代理(Agents)。

  • 模型(Models):支持各种大型语言模型的调用,例如GPT-4、Llama等,通过接口简化模型的集成过程。
  • 提示模板(Prompts):用于规范化提示工程,使开发者能够更有效地与模型互动,最大化语言模型的潜能。
  • 数据检索(Indexes):构建和操作文档的方式,用于接受用户查询并返回最相关的文档,能够轻松搭建本地知识库。
  • 记忆(Memory):在对话过程中存储和检索数据,模拟人类短时记忆和长时记忆的功能,让ChatBot“记住”用户的历史交互。
  • 链(Chains):是LangChain中的核心机制,通过封装不同功能并将其串联起来,自动而灵活地完成常见用例。
  • 代理(Agents):通过代理机制让模型自主调用外部工具和内部工具,使得应用程序具备更高的智能性和自驱动性。

这些组件共同构成了LangChain的基础,也是开发智能应用的重要组成部分。通过合理组合这些组件,开发者可以构建出功能强大、灵活多样的智能应用程序。例如,通过结合“记忆”和“代理”,可以开发出具备持续上下文理解能力的聊天机器人,能够模拟真实的人机对话体验。

image.png

4. LangChain的实际应用与开发

LangChain的开源框架不仅具有很高的趣味性,而且能够在很多实际场景中得到应用。例如,生成情人节玫瑰花的宣传语,或为社交平台的推广海报生成合适的文案。通过这些实际案例,我见证了AI如何通过LangChain这样的框架,在现实世界中发挥巨大作用,这让我在学习过程中深受启发。

更加深入地看,LangChain的实际应用不仅限于简单的文本生成任务。通过其“代理”功能,我们可以让模型主动调用其他工具,实现复杂的自动化任务。例如,可以通过LangChain实现一个具备图像识别能力的聊天机器人,首先利用图像处理模型生成描述,然后再根据描述进行智能回应。这样的功能组合让模型不仅能理解语言,还能从视觉等多模态数据中获取信息,进一步扩展了AI应用的边界。

5. 实战篇:LangChain有趣用例抢先看

在这一部分,我们学习了LangChain在实际应用中的两个有趣案例,分别是“情人节玫瑰宣传语生成”和“海报文案生成器”。以下是具体的实践过程和代码实现。

应用 1:情人节玫瑰宣传语生成

这个应用的目标是利用LangChain和GPT模型生成情人节玫瑰花的宣传文案。实现过程包括以下步骤:

  1. 环境配置

    • 安装LangChain:
      pip install langchain
      
    • 安装OpenAI库:
      pip install openai
      
    • 注册并获取OpenAI API密钥(在OpenAI官网注册并获取API Key)。
  2. 代码实现 代码使用LangChain和OpenAI的GPT模型来生成情人节宣传语:

    import os
    from langchain_openai import OpenAI
    
    # 设置OpenAI的API密钥
    os.environ["OPENAI_API_KEY"] = '你的OpenAI Key'
    
    # 初始化LangChain的GPT模型
    llm = OpenAI(model_name="gpt-3.5-turbo-instruct", max_tokens=200)
    
    # 提示语言模型生成情人节玫瑰的宣传语
    text = llm.invoke("请给我写一句情人节红玫瑰的中文宣传语")
    
    print(text)
    

    运行代码后,你会得到一些精美的宣传语,这些文案每次都会有所不同,体现了大语言模型的创造力。

1.1.png

应用 2:海报文案生成器

在这个应用中,我们利用LangChain开发了一个海报文案生成器,为鲜花推广海报生成社交媒体的发布文案。该过程涉及使用HuggingFace的图像处理模型和LangChain的代理功能。

  1. 环境配置

    • 更新LangChain到最新版本:
      pip install --upgrade langchain
      
    • 安装Transformers库(HuggingFace工具):
      pip install transformers
      
    • 安装Pillow和PyTorch:
      pip install pillow
      pip install torch torchvision torchaudio
      
  2. 代码实现 该代码通过LangChain的代理功能调用HuggingFace的图像字幕生成工具,为每张海报生成文案:

    import os
    import requests
    from PIL import Image
    from transformers import BlipProcessor, BlipForConditionalGeneration
    from langchain.tools import BaseTool
    from langchain import OpenAI
    from langchain.agents import initialize_agent, AgentType
    
    # 设置HuggingFace模型
    hf_model = "Salesforce/blip-image-captioning-large"
    processor = BlipProcessor.from_pretrained(hf_model)
    model = BlipForConditionalGeneration.from_pretrained(hf_model)
    
    # 定义图像字幕生成工具类
    class ImageCapTool(BaseTool):
        name = "Image captioner"
        description = "为图片创作说明文案."
        def _run(self, url: str):
            image = Image.open(requests.get(url, stream=True).raw).convert('RGB')
            inputs = processor(image, return_tensors="pt")
            out = model.generate(**inputs, max_new_tokens=20)
            caption = processor.decode(out[0], skip_special_tokens=True)
            return caption
    
        def _arun(self, query: str):
            raise NotImplementedError("This tool does not support async")
    
    # 设置OpenAI的API密钥
    os.environ["OPENAI_API_KEY"] = '你的OpenAI API Key'
    
    # 初始化大语言模型
    llm = OpenAI(temperature=0.2)
    
    # 使用工具初始化智能代理并运行它
    tools = [ImageCapTool()]
    agent = initialize_agent(
        agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
        tools=tools,
        llm=llm,
        verbose=True,
    )
    
    img_url = 'https://example.com/sample-flower-image.jpg'  # 可以替换为你的图片链接
    
    result = agent.invoke(input=f"{img_url}\n请创作合适的中文推广文案")
    print(result)
    

    该代码首先初始化图像字幕生成模型,然后定义一个工具类ImageCapTool用于图像处理,接着通过LangChain代理调用工具和大语言模型生成针对海报的宣传文案。这种多模态交互显著增强了应用的功能性。 第一次运行可能需要较长时间,最后生成鲜花海报的宣传文案如下:

image.png

总结

LangChain作为一个开源的AI开发框架,能够将语言模型与数据紧密结合,为未来的技术发展提供了更多可能性。

LangChain的优势不仅在于提供了一套标准化的开发工具,更在于其灵活的组件组合方式,使得开发者可以根据具体需求构建不同类型的AI应用。从简单的文本生成到复杂的多模态交互,从被动响应到主动决策,LangChain展示了AI应用的无限可能。