【人工智能】AI应用开发框架LangChain与大模型
在当今AI技术飞速发展的背景下,LangChain作为一个应用开发框架,与ChatGPT几乎同步出现在人们的视野中。LangChain最初以一个接口工具的身份出现,主要目的是解决大型语言模型与数据库、API、文件系统等外部数据源之间的接口问题,使开发者能够更便捷地调用GPT模型,并将模型的输出与外部信息相结合。
LangChain的发展历程
- 初期定位:LangChain最初是一个简单的接口工具,专注于解决大型语言模型与外部数据源的对接问题。这使得开发者可以更加轻松地集成GPT模型,提高开发效率。
- 功能扩展:随着时间的推移,LangChain的功能逐渐丰富,开始支持与多种外部数据源的交互,如数据库、API等。这不仅提升了数据处理的灵活性,也为构建复杂的AI应用奠定了基础。
- 多模型处理:LangChain进一步发展,支持多模型处理不同任务,并通过链条(Chains)的方式将这些任务连接起来。这种架构使得开发者可以构建更加复杂和高效的AI应用。
LangChain的六大组件
LangChain的六大组件是其核心组成部分,包括但不限于:
- 模型:支持多种语言模型,如GPT系列。
- 数据源:支持与多种数据源的对接,如数据库、API等。
- 工具:提供丰富的工具集,用于处理各种任务。
- 链条:通过链条将多个任务连接起来,形成复杂的流程。
- 代理:代理(Agents)可以根据任务需求自动选择合适的工具和模型。
- 执行器:执行器(Executors)负责调度和执行任务。
LangChain安装与快速入门
简单示例
我使用的是通义千问
如何获取通义的key大家先百度哈~后面我会补
import os
from openai import OpenAI
# 初始化OpenAI客户端
client = OpenAI(
api_key=os.getenv("DASHSCOPE_API_KEY"), # 如何获取API Key:https://help.aliyun.com/zh/model-studio/developer-reference/get-api-key
base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)
# 创建对话完成请求
completion = client.chat.completions.create(
model="qwen-plus", # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
messages=[{"role": "user", "content": "你是谁?"}]
)
# 打印模型的回复
print(completion.choices[0].message.content)
这里是加了chains,大多写法都是这样
class QwenTurboTongyi(Tongyi):
model_name = "qwen-turbo"
class QwenMaxTongyi(Tongyi):
model_name = "qwen-max"
def xiao_hei_zi(question):
llm = QwenTurboTongyi(temperature=1)
template = '''
你的名字是小黑子,当有人问问题的时候,你都会在回答的开头加上'唱,跳,rap,篮球!\n\n',然后再回答{question}, 内容尽量详细
'''
prompt = PromptTemplate(
template=template,
input_variables=["question"]
)
chain = RunnableSequence(prompt | llm)
question = question.strip()
res = chain.invoke({"question": question})
print(res)
使用LangChain的代理调用工具
前面代码需要特殊手段,主要是huggingface不好链接上
# ---- 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):
"""
ImageCapTool 类用于根据图像的 URL 生成图像的文字描述。
"""
name = "Image captioner"
description = "使用该工具可以生成图片的文字描述,需要传入图片的URL."
def _run(self, url: str):
"""
根据传入的图像 URL 生成图像的文字描述。
参数:
url (str): 图像的 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):
"""
ImageCapTool 类的异步运行方法,当前未实现。
参数:
query (str): 查询字符串。
异常:
NotImplementedError: 如果调用此方法,将抛出 NotImplementedError 异常。
"""
raise NotImplementedError("This tool does not support async")
# ---- Part III 初始化并运行LangChain智能体
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 请为这张图创作合适的中文推广文案")
LangChain的工作机制
- 大模型的思考过程:大模型通过理解和推理来决定执行什么操作以及执行的顺序。它会根据输入的提示文本生成相应的输出。
- LangChain调用大模型时的提示文本:LangChain在调用大模型时,会将具体的任务描述和上下文信息作为提示文本传递给模型。模型根据这些信息生成相应的输出。
- 代理(Agent) :代理是一种智能体,可以根据任务需求自动选择合适的工具和模型。代理通过推理和决策来确定如何执行任务。
- AgentExecutor Chain:AgentExecutor Chain 是一种特殊的链条,用于调度和执行代理的任务。它可以根据任务的复杂度和需求,动态地选择和组合不同的工具和模型。
- 工具调度:LangChain通过AgentExecutor Chain来调度工具。代理会根据任务的需求,选择合适的工具并调用它们,从而完成复杂的任务。
总结
LangChain作为一个强大的AI应用开发框架,不仅简化了大型语言模型与外部数据源的对接,还提供了丰富的工具和组件,使得开发者可以更高效地构建复杂的AI应用。通过理解和利用LangChain的核心机制,开发者可以更好地发挥AI技术的潜力,创造更多有价值的应用。