all in AI (一)LangChain 框架

all in AI (一)LangChain 框架

现代AI模型的进度速度飞快,可以说从最开始的简单模型使用到AI嵌入到人们的日常之中,可以说是日新月异,沧海桑田地快速发展。

基本发展可以有以下的发展路径

SFT -> LoRA微调 -> Prompts engineering -> LangChain -> RAG -> AI Agent -> harness engineering -> loop engineering

今天主要讲述的是 LangChain 的基本概念,从中我们可以管中窥豹,学习到一些AI模型的思路。

LangChain 框架基本概念

一般来说,LangChain 有六个部分组成

模型(Model)

支持三种模型,大语言模型(LLM),聊天模型(Chat Model),文本嵌入模型(Embedding Model)

提示模板 (Prompts)

LangChain 提示词框架会自动添加 schema

LangChain 中提供 String(StringPromptTemplate)和 Chat(BaseChatPromptTemplate)两种基本类型的模板

Few-Shot(少样本)、One-Shot(单样本)和与之对应的 Zero-Shot(零样本)的概念都起源于机器学习。

from langchain.prompts.prompt 
import PromptTemplatefrom langchain.prompts 
import FewShotPromptTemplatefrom langchain.prompts.pipeline 
import PipelinePromptTemplatefrom langchain.prompts 
import ChatPromptTemplatefrom langchain.prompts 
import (    
    ChatMessagePromptTemplate,    
    SystemMessagePromptTemplate,    
    AIMessagePromptTemplate,    
    HumanMessagePromptTemplate,
)

可以使用思考链模式写提示词(Chain of Thought, CoT),进一步思维树(Tree of Thoughts,ToT),再进一步思考图(Graph of Thoughts , GoT)

解释器

from langchain.output_parsers import PydanticOutputParser
from langchain.output_parsers import RetryWithErrorOutputParser
链 (Chains)

使各部分链接起来

# 导入所需的库
from langchain import PromptTemplate, OpenAI, LLMChain
# 原始字符串模板
template = "{flower}的花语是?"
# 创建模型实例
llm = OpenAI(temperature=0)
# 创建LLMChain
llm_chain = LLMChain(
    llm=llm,
    prompt=PromptTemplate.from_template(template))
# 调用LLMChain,返回结果
result = llm_chain("玫瑰")
print(result)

链的分类

记忆 (Memory)

使用 ConversationChain ,记录摘要。

在 LangChain 中,通过 ConversationBufferMemory(缓冲记忆)可以实现最简单的记忆机制。

from langchain import OpenAI
from langchain.chains import ConversationChain
from langchain.chains.conversation.memory import ConversationBufferMemory

# 初始化大语言模型
llm = OpenAI(
    temperature=0.5,
    model_name="gpt-3.5-turbo-instruct")

# 初始化对话链
conversation = ConversationChain(
    llm=llm,
    memory=ConversationBufferMemory()
)

# 第一天的对话
# 回合1
conversation("我姐姐明天要过生日,我需要一束生日花束。")
print("第一次对话后的记忆:", conversation.memory.buffer)

记忆的分类

代理 (Agent)

先思考,作为推理过程(Reasoning),然后指导行动(Acting),就被称作智能代理,或者说是 ReAct框架。

关键组件

工具

# 设置OpenAI API的密钥
import os 
os.environ["OPENAI_API_KEY"] = 'Your Key' 

# 导入库
from langchain.chat_models import ChatOpenAI
from langchain.agents import load_tools, initialize_agent, AgentType

# 初始化模型和工具
llm = ChatOpenAI(temperature=0.0)
tools = load_tools(
    ["arxiv"],
)

# 初始化链
agent_chain = initialize_agent(
    tools,
    llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
    verbose=True,
)

# 运行链
agent_chain.run("介绍一下2005.14165这篇论文的创新点?")
数据检索 (Indexes)

已经被整合到 Retrieval(数据检索)这个单元中了,还有callback,这里就不展开了。

CAMEL - 多 AI 通过角色扮演进行交互的框架。Simulation Agents(模拟代理)和 Autonomous Agents(自治代理或自主代理)