青训营X豆包MarsCode 技术训练营第一课 | 豆包MarsCode AI 刷题

86 阅读5分钟

前言:作为一位机械自动化专业的大二学生来说,很高兴有机会学习AI的知识,遇到志同道合的朋友们,以下是个人的笔记。

首先:何谓 LangChain?

LangChain是一个基于大语言模型(LLMs)用于构建端到端语言模型应用的框架,它可以让开发者使用语言模型来实现各种复杂的任务。

具备以下两个特性:

  1. 数据感知: 能够将语言模型与其他数据源连接起来,从而实现对更丰富、更多样化数据的理解和利用。

  2. 具有代理性: 能够让语言模型与其环境进行交互,使得模型能够对其环境有更深入的理解,并能够进行有效的响应。 ![[76619cf2f73ef200dd57cd16c0d55ec4.webp]]

  3. **LangChain中的具体组件包括:

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

其次:LangChain 的示例展示

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

    第一步是安装三个包,通过 pip install langchain 来安装LangChain,通过 pip install openai 来安装OpenAI,还需要通过 pip install langchain-openai 以便在 LangChain 中使用 OpenAI 模型。

    第二步,你还需要在OpenAI网站注册属于自己的OpenAI Key。(当然,LangChain也支持其他的开源大语言模型,但是推理效果没有GPT那么好,所以我们这个课程里面的大多数示例都是用OpenAI的GPT系列模型来完成。)

`import os os.environ["OPENAI_API_KEY"] = '你的OpenAI Key' from langchain_openai import OpenAI llm = OpenAI(model_name="gpt-3.5-turbo-instruct",max_tokens=200) text = llm.invoke("请给我写一句情人节红玫瑰的中文宣传语") print(text)`

这里,我们先导入了OpenAI的API Key,然后从LangChain中导入OpenAI的Text模型接口,并初始化这个大语言模型,把我们的需求作为提示信息,传递给大语言模型。

![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/62e9c3e9d20d4288b12fc5da430646e7~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg6LiP6Zuq5peg55eVNzUy:q75.awebp?rk3s=f64ab15b&x-expires=1774166045&x-signature=DHF77GRLhtaFYlT%2BULLwFfGWlmQ%3D)
  1. 应用2:海报文案生成器

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

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

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

    1. 初始化图像字幕生成模型(HuggingFace中的image-caption模型)。
    2. 定义LangChain图像字幕生成工具。
    3. 初始化并运行LangChain Agent(代理),这个Agent是OpenAI的大语言模型,会自动进行分析,调用工具,完成任务。

    不过,这段代码需要的包比较多。在运行这段代码之前,你需要先更新LangChain到最新版本,安装HuggingFace的Transformers库(开源大模型工具),并安装 Pillow(Python图像处理工具包)和 PyTorch(深度学习框架)。

`pip install --upgrade langchain pip install transformers pip install pillow pip install torch torchvision torchaudio`

`#---- Part 0 导入所需要的类 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 #---- Part I 初始化图像字幕生成模型 # 指定要使用的工具模型(HuggingFace中的image-caption模型) hf_model = "Salesforce/blip-image-captioning-large" # 初始化处理器和工具模型 # 预处理器将准备图像供模型使用 processor = BlipProcessor.from_pretrained(hf_model) # 然后我们初始化工具模型本身 model = BlipForConditionalGeneration.from_pretrained(hf_model) #---- Part II 定义图像字幕生成工具类 class ImageCapTool(BaseTool):         name = "Image captioner"     description = "为图片创作说明文案."     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智能代理 # 设置OpenAI的API密钥并初始化大语言模型(OpenAI的Text模型) 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://mir-s3-cdn-cf.behance.net/project_modules/hd/eec79e20058499.563190744f903.jpg' agent.invoke(input=f"{img_url}\n请创作合适的中文推广文案")`
根据输入的图片URL,由OpenAI大语言模型驱动的LangChain Agent,首先利用图像字幕生成工具将图片转化为字幕,然后对字幕做进一步处理,生成中文推广文案。

运行结果1:

 ![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/fed3ab7bb0c346838c02300cdafc8a77~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg6LiP6Zuq5peg55eVNzUy:q75.awebp?rk3s=f64ab15b&x-expires=1774166045&x-signature=Frbm5GFjxchO8t2diwp62iT6HFU%3D)

运行结果2:

![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e316e77a3f18422abbac308d529e1efb~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg6LiP6Zuq5peg55eVNzUy:q75.awebp?rk3s=f64ab15b&x-expires=1774166045&x-signature=4VrDZCT887NrDCuLYTGWzETADNE%3D)

运行结果3:

![](https://p3-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/758fa11bcb0c493697faf0ceea1f220e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg6LiP6Zuq5peg55eVNzUy:q75.awebp?rk3s=f64ab15b&x-expires=1774166045&x-signature=vDiEEzpdjAfg4G040OLgsRPQmLo%3D)
  • 说明:因为temperature=0.2代表模型拥有一定的随机性,所以大模型每次的推理过程生成的文案都不尽相同。

  • 针对上面的鲜花图片,程序进入了AgentExecutor链,开始思考推理,并采取行动——调用Image Cationer工具,接收该工具给出的结果,并根据其返回的内容,再次进行思考推理,最后给出的文案是:“爱,让每一天充满美丽,让每一个心情都充满甜蜜。” 多么浪漫而又富有创意,大模型懂我!** 总结:AI的魅力不止于此,仅仅一段代码即可完成这么有趣的事情,越研究,越发觉得AI是一个无尽的宝藏,只有明白了AI的逻辑才能更好的帮助我们学习使用AI。