LangChain实战课-01-开篇词 | 豆包MarsCode AI刷题

87 阅读6分钟

前边一些课内的原因,ai课程内耽搁了很久,接下来我将开始突击🤣,冲啊🏍🏍🏍!!

1. AI应用开发--新的历史起点

之前一直关注的是前后端项目的开发,也就是传统的数据库的增删改查服务,现在又来了AI应用开发,到底是什么呢?也许学完这门课会有一些感触。在这里做个标记,等学完后回答一下

1. 最前沿的AI技术与最实用的落地应用之间的距离,竟然如此之近!

2. 可以利用大模型的潜能以及LangChain的便捷,开发出令人惊叹的智能应用

引用黄佳老师的两句话,第一句话感触颇深,以前的科研技术的突破与我们普通人之间感觉总有些距离,而chatgpt的出现一下子拉近了我们的距离,带给我们前所未有的震撼。在应用的同时,真的很想探究其中的原理,非常激发科研兴趣。第二句话带来了小册的主题,我想,整个课程过程就是围绕大模型的潜能有多大,以及如何利用大模型的潜能来开发出令人惊叹的智能应用(LangChain为我们提供了桥梁)。

2. LangChain介绍

真正有潜力且具有创新性的应用满足(接地气)

  1. 数据感知:  能够将语言模型与其他数据源连接起来,从而实现对更丰富、更多样化数据的理解和利用。
  2. 具有代理性:  能够让语言模型与其环境进行交互,使得模型能够对其环境有更深入的理解,并能够进行有效的响应。

我感觉这块就是指(general -> specfic),代理性有点类似机器人,能够感知到周围是什么样子,并与周围的人或者物进行交互。个人理解,可能不太到位

端到端语言模型是一种直接从输入到输出完成任务的语言模型,它不需要中间步骤或明确的特征工程。简言之,端到端就是个黑盒,给定输入就能直接获得输出。

LangChain是一个基于大语言模型(LLMs)用于构建端到端语言模型应用的框架,它可以让开发者使用语言模型来实现各种复杂的任务,例如文本到图像的生成、文档问答、聊天机器人等。LangChain提供了一系列工具、套件和接口,可以简化创建由LLMs和聊天模型提供支持的应用程序的过程。

总结: LangChain是一个框架,这个框架可以将开发者与大模型连接起来,开发一个非常接地气的应用。

3. 整体的学习计划

image.png LangChain六大组件: image.png
  • 模型(Models) ,包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。
  • 提示模板(Prompts) ,使提示工程流线化,进一步激发大语言模型的潜力。
  • 数据检索(Indexes) ,构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。
  • 记忆(Memory) ,通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你是谁。
  • 链(Chains) ,是LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成常见用例。
  • 代理(Agents) ,是另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使强大的“智能化”自主Agent成为可能!你的 App 将产生自驱力!

应用篇会展示如何将LangChain组件应用到实际场景中。你将学会如何使用LangChain的工具和接口,进行嵌入式存储,连接数据库,引入异步通信机制,通过智能代理进行各种角色扮演、头脑风暴,并进行自主搜索,制定自动策略,尝试不同方案完成任务。

实战篇你将学习如何部署一个鲜花网络电商的人脉工具,并开发一个易速鲜花聊天客服机器人。从模型的调用细节,到数据连接的策略,再到记忆的存储与检索,每一个环节都是为了打造出一个更加智能、更加人性化的系统。

注意: 这里提到的是总的部分,学完各个模块后记得返回来看一下这部分内容,看看是否做到上述要求了。

4. 小试牛刀--LangChain热身

  1. 情人节玫瑰宣传语
import os
from langchain_openai import ChatOpenAI

# llm = OpenAI(model_name="gpt-3.5-turbo-instruct",max_tokens=200)
llm = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))

text = llm.predict("请给我写一句情人节红玫瑰的中文宣传语")
print(text)

image.png

  1. 海报文案生成
"""
本文件是【开篇词|带你亲证AI应用开发的“奇点”时刻】章节的配套代码,课程链接:https://juejin.cn/book/7387702347436130304/section/7388071021892337700
您可以点击最上方的“运行“按钮,直接运行该文件;更多操作指引请参考Readme.md文件。
"""
# ---- Part 0 导入所需要的类
import os
import requests
from PIL import Image
from transformers import BlipProcessor, BlipForConditionalGeneration
from langchain.tools import BaseTool
from langchain_openai import ChatOpenAI
from langchain.agents import initialize_agent, AgentType

# ---- Part I 初始化图像字幕生成模型
# 指定要使用的工具模型(HuggingFace中的image-caption模型)
hf_model = "Salesforce/blip-image-captioning-large"
print("正在初始化图像字幕生成模型...")

# 初始化处理器和工具模型
# 预处理器将准备图像供模型使用
processor = BlipProcessor.from_pretrained(hf_model)
# 然后我们初始化工具模型本身
model = BlipForConditionalGeneration.from_pretrained(hf_model)
print("初始化图像字幕生成模型成功")


# ---- Part II 定义图像字幕生成工具类
class ImageCapTool(BaseTool):
    name = "Image captioner"
    description = "使用该工具可以生成图片的文字描述,需要传入图片的URL."

    def _run(self, url: str):
        # 下载图像并将其转换为PIL对象
        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")


# ---- PartIII 初始化并运行LangChain智能体
# llm = OpenAI(temperature=0.2)
llm = ChatOpenAI(
    model=os.environ.get("LLM_MODEL_4K_FUNCTION_CALL"),
    temperature=0,
)
print("初始化大语言模型成功")
# 使用工具初始化智能体并运行
tools = [ImageCapTool()]
agent = initialize_agent(
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    tools=tools,
    llm=llm,
    verbose=True,
    handle_parsing_errors=True,
)

img_url = "https://lf3-static.bytednsdoc.com/obj/eden-cn/lkpkbvsj/ljhwZthlaukjlkulzlp/eec79e20058499.563190744f903.jpg"
# agent.run(input=f"{img_url}\n请创作合适的中文推广文案")
agent.invoke(input=f"图片链接如下:{img_url}\n 请为这张图创作合适的中文推广文案")

image.png

image.png

上面放了一些代码的执行结果,可以看到确实通过图片得到了一些海报宣传语,至于为什么能得到,以及这过程中和LangChain又有什么关系,希望在学完后续知识能搞明白

最后以黄佳老师的话结束:“我们并不是生硬的去设计什么固定的逻辑,而是由语言模型通过理解和推理来决定执行什么操作以及执行的顺序” 希望回过头头来能真正理解这段话

  • 复习并完全理解文中画删除线内容。