我正在参加「豆包MarsCode AI练中学体验活动」详情请看:掘金小册上线 AI练中学功能 | 你的 AI 编程助教喊你免费领小册啦!
引言
自OpenAI公司发布的ChatGPT爆火以后,人工智能(AI, Artifical Intelligence)如洪水般的涌入我们的日常生活。像常见的大语言模型(LLM, Large Langugue Model):文心一言、星火大模型、豆包、书生、通义千问。以及代码助手MarsCode AI(此次学习的主角)、Copolit、ChatGPT、通义灵码、CodeGeex等工具不断涌现,我们程序员的工作方式变得多种多样。作为一名程序员,我也想紧跟AI时代的热潮,来感受AI对我们程序员究竟有多大的影响。
正因如此,该文章诞生了。
ChatGPT是OpenAI基于GPT-3.5系列语音模型微调而成的对话式AI模型,于2022年11月30日正式发布 。
正文
首先,让我们来感受一下我们主角(MarsCode AI)的魅力吧。
下面是我对MarsCode AI的提问
MarsCode
我: 请详细告诉我LangChain是什么?
MarsCode AI: LangChain 是一个用于开发基于语言模型的应用程序的框架。它提供了一套工具和组件,帮助开发者构建与大型语言模型(如 GPT-3、GPT-4 等)交互的应用程序。LangChain 的目标是简化与语言模型的集成过程,使得开发者能够更轻松地利用这些模型的强大功能。
我们的主角对我的问题迅速做出了回答。他告诉我LangChain是一个框架 ,用于开发基于语言模型的应用程序。该回答和我在bing搜索引擎上搜索到的答案大致上相同。可见,我们的主角还是十分的强大的。
下面让我们正式开始学习LangChain实战课吧!!!
我们来到LangChain 实战课的开篇词_奇点时刻。
开篇词_奇点时刻
这是开篇词_奇点时刻的链接地址。
案例一
01_SimpleTextGeneration.py - 简单文本生成
Python
"""
本文件是【开篇词|带你亲证AI应用开发的"奇点"时刻】章节的配套代码,课程链接:https://juejin.cn/book/7387702347436130304/section/7388071021892337700
您可以点击最上方的"运行"按钮,直接运行该文件;更多操作指引请参考Readme.md文件。
"""
import os
# llm = OpenAI(model_name="gpt-3.5-turbo-instruct",max_tokens=200)
# 导入Azure OpenAI的LLM模型
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))
# text = llm.predict("请给我写一句情人节红玫瑰的中文宣传语")
# print(text)
text_one = llm.predict("请给我一句学习langchain的中文宣传语")
print(text_one)
下面我们对上述代码做一个解释。
-
from langchain_openai import ChatOpenAI
导入了langchain_openai
模块中的ChatOpenAI
类,这是一个用于与OpenAI的Chat模型进行交互的类. -
llm = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))
是初始化了一个Chat模型,这行代码尝试从环境变量中获取LLM_MODELEND
的值,并将其作为模型名称初始化ChatOpenAI
实例对象。如果环境变量中没有提供模型名称,则会使用默认值(如果ChatOpenAI类中有指定的值)。 -
text_one = llm.predict("请给我一句学习langchain的中文宣传语")
这行代码使用llm
实例的predict
方法生成文本。传入的字符串是一个提示,要求模型生成一句关于学习langchain的中文宣传语。 -
最后是打印
print(text_one)
。
下面是模型输出情况。
案例二
01_PictureDescription.py - 图片描述
python
"""
本文件是【开篇词|带你亲证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 请为这张图创作合适的中文推广文案")