LangChain实战课-1.开篇词|带你亲证AI应用开发的“奇点”时刻

我正在参加「豆包MarsCode AI练中学体验活动」

1.LangChain介绍

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

2.LangChain6大组件

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

3.入门案例

3.1环境搭建

1.注册账号:

账号登录-火山引擎 (volcengine.com)

2.创建APIKEY:

3.创建在线推理模型

API调用代码:

4.安装opanai>=1.0,配置/API_KEY到环境变量(非必要,也可以写入配置文件),注意获取示例代码中的endpoint,也就是上图中的ID

3.2案例1:情人节玫瑰宣传语

Q: 情人节到啦,你的花店需要推销红色玫瑰,那么咱们让大语言模型做的第一个应用,就是给咱们生成简短的宣传语。

  • 今天是2024.11.16,火山方舟中没有给出语言模型的sdk文档,因此进行尝试,参考了AI练中学的代码,然后替换成为自己的API_KEY最终实现,最终实现代码如下:

注意代码中的API_KEY以及model需要替换

python 复制代码
# pip install langchain_openai==0.1.23
import os
os.environ["OPENAI_API_KEY"]  ='YOUR_API_KEY'
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model='ep-20241104131149-csxf9',
                 base_url = "https://ark.cn-beijing.volces.com/api/v3",
                 )
text = llm.predict("请给我写一句情人节红玫瑰的中文宣传语")
print(text)

3.3海报文案生成器

你已经制作好了一批鲜花的推广海报,想为每一个海报的内容,写一两句话,然后post到社交平台上,以期图文并茂。

这个需求,特别适合让AI帮你批量完成,不过,ChatGPT网页可不能读图。下面,我们就用LangChain的"代理"调用"工具"来完成自己做不到的事情。

  • 在开始之前我们需要重复环境准备的过程去创建一个4kfunction的在线推理,我们同样需要获取到它的ID作为模型(略)
  • 注意需要安装的包有点多,如果对包的版本有问题请提出或者在AI练中学中找到相应版本,对应huggingface的安装需要漫长的时间
bash 复制代码
pip install langchain==0.2.16
pip install transformers
pip install pillow
pip install torch torchvision torchaudio

我们就用一段简单的代码实现上述功能。这段代码主要包含三个部分:

  1. 初始化图像字幕生成模型(HuggingFace中的image-caption模型)。
  2. 定义LangChain图像字幕生成工具。
  3. 初始化并运行LangChain Agent(代理),这个Agent是OpenAI的大语言模型,会自动进行分析,调用工具,完成任务。
python 复制代码
function_model = 'ep-20241106151550-zwgpt'
api_key = ''
img_url = "https://lf3-static.bytednsdoc.com/obj/eden-cn/lkpkbvsj/ljhwZthlaukjlkulzlp/eec79e20058499.563190744f903.jpg"

# ---- 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"

cache_dir = "./cache"\

# 确保缓存目录存在
os.makedirs(cache_dir, exist_ok=True)

print("正在初始化图像字幕生成模型...")

# 初始化处理器和工具模型
# 预处理器将准备图像供模型使用
processor = BlipProcessor.from_pretrained(hf_model, cache_dir=cache_dir)
# 然后我们初始化工具模型本身
model = BlipForConditionalGeneration.from_pretrained(hf_model, cache_dir=cache_dir)
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=function_model,
    temperature=0,
    api_key = api_key,
    base_url = "https://ark.cn-beijing.volces.com/api/v3",
)
print("初始化大语言模型成功")
# 使用工具初始化智能体并运行
tools = [ImageCapTool()]
agent = initialize_agent(
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    tools=tools,
    llm=llm,
    verbose=True,
    handle_parsing_errors=True,
)


# agent.run(input=f"{img_url}\n请创作合适的中文推广文案")
agent.invoke(input=f"图片链接如下:{img_url}\n 请为这张图创作合适的中文推广文案")

说明:因为temperature=0.2代表模型拥有一定的随机性

针对上面的鲜花图片,程序进入了AgentExecutor链,开始思考推理,并采取行动------调用Image Cationer工具,接收该工具给出的结果,并根据其返回的内容,再次进行思考推理,最后给出的文案是:"爱,让每一天充满美丽,让每一个心情都充满甜蜜。 " 多么浪漫而又富有创意,大模型懂我!

相关推荐
好家伙VCC8 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
前端玖耀里9 小时前
如何使用python的boto库和SES发送电子邮件?
python
serve the people9 小时前
python环境搭建 (十二) pydantic和pydantic-settings类型验证与解析
java·网络·python
小天源9 小时前
Error 1053 Error 1067 服务“启动后立即停止” Java / Python 程序无法后台运行 windows nssm注册器下载与报错处理
开发语言·windows·python·nssm·error 1053·error 1067
喵手10 小时前
Python爬虫实战:HTTP缓存系统深度实战 — ETag、Last-Modified与requests-cache完全指南(附SQLite持久化存储)!
爬虫·python·爬虫实战·http缓存·etag·零基础python爬虫教学·requests-cache
喵手10 小时前
Python爬虫实战:容器化与定时调度实战 - Docker + Cron + 日志轮转 + 失败重试完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·容器化·零基础python爬虫教学·csv导出·定时调度
2601_9491465310 小时前
Python语音通知接口接入教程:开发者快速集成AI语音API的脚本实现
人工智能·python·语音识别
寻梦csdn11 小时前
pycharm+miniconda兼容问题
ide·python·pycharm·conda
Java面试题总结11 小时前
基于 Java 的 PDF 文本水印实现方案(iText7 示例)
java·python·pdf
不懒不懒12 小时前
【决策树算法实战指南:从原理到Python实现】
python·决策树·id3·c4.5·catr