大模型应用开发 langchain 之 langchain 入门

大模型应用开发 langchain 之 langchain 入门

什么 langchain ?

LangChain是一个用于开发由大型语言模型( LLMs )支持的应用程序的框架。

从下面开始我们认知常用的 langchain 常用的生态库以及知识点。

资源库

langchain 有自己的生态,下面是 langchain 生态的一些常用的资源:

  • /
  • /

langchain 不仅支持 Python 生态,也支持 TypeScript/JavaScript 生态,意味着开发者可以使用 JS 生态开发 AI 应用。

目前的 langchain 的版本是: v0.3+。langchain 集成众多的 llm 和组件,使得 AI 开发变得容易。

langchain 经典架构图

www.zeeklog.com  - 大模型应用开发 langchain 之 langchain 入门

LCEL

LCEL 全称 LangChain Expression Language,是一种创建任意自定义链的方法。

核心模块和安装

langchain 目前是 v0.3+ 版本,如果使用了旧版本,可能有内容发生了变化。这里还是以 Python 为例:

如果你是使用 pip 作为安装工具:

sh
 代码解读
pip install langchain-core
pip install langchain
pip install langsmith
pip install -U langgraph
pip install "langserve[all]"
pip install -U langchain-cli

# 社区
pip install langchain_community

# 大模型
pip install langchain-openai
pip install -qU langchain-anthropic

langchain 组件

langchain 提供了很多的组件帮助开发方便的开发 LLM 应用:

术语说明
Prompt Template提示词模板,用于定义输入给模型的格式和内容。
Example selectors示例选择器,用于从一组示例中选择适当的示例以供参考或生成响应。
Chat models聊天模型,专门设计用于与用户进行对话和互动的语言模型。
Messages消息,指用户与模型之间的交流内容。
LLM大模型(旧语言模型),指大型预训练语言模型,通常用于生成和理解文本。
Output parsers输出解释器,用于处理和格式化模型生成的输出,使其更易于使用。
Document loaders文档加载器,用于将文档内容加载到系统中以便处理和分析。
Text splitters文本分割器,用于将长文本分割成较小的部分,以便更好地处理和分析。
Embedding models嵌入模型,将文本转换为向量表示,以便进行相似度计算和检索。
Vector stores向量存储,保存向量数据的数据库或系统,以支持高效的检索和查询。
Retrievers检索器,负责从存储中获取相关数据或信息的组件。
Indexing索引,建立数据结构以支持快速搜索和检索。
Tools工具,辅助完成特定任务的软件组件或功能。
Multimodal多模型,涉及处理和分析多种数据类型(如文本、图像等)的能力。
Agents代理(智能体),自动化执行特定任务的智能系统或程序。
Callbacks回调,允许在特定事件发生时执行自定义代码的机制。
自定义组件用户自定义的模块或功能,以扩展系统的功能或适应特定需求。
py
 代码解读
# PromptTemplate, ChatPromptTemplate
from langchain_core.prompts import PromptTemplate, ChatPromptTemplate 
prompt_template = PromptTemplate.from_template("Tell me a joke about {topic}") 
prompt_template = ChatPromptTemplate([  
    ("system", "You are a helpful assistant"),  
    ("user", "Tell me a joke about {topic}")  
])

prompt_template.invoke({"topic": "cats"})

# example_selector
class BaseExampleSelector(ABC):
    """Interface for selecting examples to include in prompts."""

    @abstractmethod
    def select_examples(self, input_variables: Dict[str, str]) -> List[dict]:
        """Select which examples to use based on the inputs."""
        
    @abstractmethod
    def add_example(self, example: Dict[str, str]) -> Any:
        """Add new example to store."""

prompt = FewShotPromptTemplate(
    example_selector=example_selector,
    # ...
)

# chat model
from langchain_openai import ChatOpenAI
llm = ChatOpenAI(model="gpt-4o-mini")

# message
from langchain_core.messages import HumanMessage
model.invoke([HumanMessage(content="Hello, how are you?")])

# llm 
from langchain_openai import OpenAI  
llm = OpenAI(model="gpt-3.5-turbo-instruct", n=2, best_of=2)

# outparser str
from langchain_core.output_parsers import StrOutputParser
parser = StrOutputParser()

# loader
from langchain_community.document_loaders.csv_loader import CSVLoader
from langchain_community.document_loaders import PyPDFLoader

# langchain_text_splitters
from langchain_text_splitters import CharacterTextSplitter
text_splitter = CharacterTextSplitter.from_tiktoken_encoder(
    encoding_name="cl100k_base", chunk_size=100, chunk_overlap=0
)
texts = text_splitter.split_text(document)

# embedding_models: OpenAIEmbeddings 和 HuggingFaceEmbeddings and ZhipuAIEmbeddings
from langchain_openai import OpenAIEmbeddings
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_community.embeddings import ZhipuAIEmbeddings

# vectorstores
from langchain_core.vectorstores import InMemoryVectorStore
from langchain_community.vectorstores import FAISS
from langchain_chroma import Chroma

vectorstore = InMemoryVectorStore.from_texts(
    [txt_content],
    embedding=embeddings,
)
vectorstore = FAISS.from_documents(texts, embeddings)
vector_store = Chroma(  
    collection_name="example_collection",  
    embedding_function=embeddings,  
    persist_directory="./chroma_langchain_db", # Where to save data locally, remove if not necessary  
)

# retriever invoke
retriever = vectorstore.as_retriever()
docs = retriever.invoke("what did the president say about ketanji brown jackson?")

# index
from langchain.indexes import SQLRecordManager, index

# tools
from langchain_core.tools import tool  
  
@tool  
def multiply(a: int, b: int) -> int:  
    """Multiply two numbers."""  
    return a * b
    
# agent

from langchain.agents import AgentExecutor  
agent = (
    {
        "input": lambda x: x["input"],
        "agent_scratchpad": lambda x: format_to_openai_tool_messages(
            x["intermediate_steps"]
        ),
        "chat_history": lambda x: x["chat_history"],
    }
    | prompt
    | llm_with_tools
    | OpenAIToolsAgentOutputParser()
)

agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)

## langgraph create_tool_calling_agent
from langchain.agents import create_tool_calling_agent  
  
agent = create_tool_calling_agent(model, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools)

## langgraphcreate_react_agent
from langgraph.prebuilt import create_react_agent  
  
langgraph_agent_executor = create_react_agent(model, tools)

# callbacks
from langchain_core.callbacks import BaseCallbackHandler
callbacks = [LoggingHandler()]
chain = prompt | llm  
  
chain.invoke({"number": "2"}, config={"callbacks": callbacks})

大模型

在大模型应用中开发中,大模型直接用的是:

  • chat 大模型
  • embedding 大模型

常用的大模型和运行器

  • OpenAI/AzureOpenAI/OpenAIEmbeddings
  • Anthropic
  • vertexai
  • huggingface
  • aws
  • ollama
  • ZhipuAI
  • MistralAI
  • Baidu Qianfan

向量数据库

运行环境

运行大模型,其实可以用不同的 python 运行环境

  1. 硬编码:使用编辑器硬编码
  2. jupyter notebook: python 代码能够分段,缓存数据,结构清晰, jupyter 推荐配合 vscode 使用,可以使用通用的编辑器。
  3. google 的 Colab notebooks, Colab 赠送不少的内存,对于小的应用基本够用了。如果没有使用过大概是这样的
www.zeeklog.com  - 大模型应用开发 langchain 之 langchain 入门

一个简单的聊天

我们使用 zhipuAI,为什么?因为 zhipu AI 的 glm-4-flash 目前是免费调用。

如果还没有注册的新进入大模型应用开发的,可以考虑使用zhipu AI,质谱的支持自己的 sdk, 和 openAI 的方式以及 langchain 的 openAI 的方式调用大模型。

同时质朴也有 embeddings 模型速度可以,在初期学习已经够用了。

首先需要创建一个 .env 文件将质谱 AI 的 key 保存起来,方便访问。

.env
 代码解读
OPENAI_API_KEY = your_zhupu_ai_key

langchain_openai 使用 ChatOpenAI 调用质谱 AI 的 glm-4-flash 大模型。同时我们需要传入 openai_api_base 地址。

py
 代码解读
import dotenv

from langchain_openai import ChatOpenAI
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate

key = dotenv.get_variable(".env", "OPENAI_API_KEY") # 不同的版本不一样

model = ChatOpenAI(
    temperature=0.95,
    model="glm-4-flash",
    openai_api_key=key,
    openai_api_base="https://open.bigmodel.cn/api/paas/v4/"
)

# 消息
messages = [
    SystemMessage(content="Translate the following from English into Italian"),
    HumanMessage(content="hi!"),
]

# invoke 调用模型
model.invoke(messages)


# 格式化输出
parser = StrOutputParser()
result = model.invoke(messages)
parser.invoke(result)

# 使用 chain 链
chain = model | parser
chain.invoke(messages)、

# 使用提示词
system_template = "Translate the following into {language}:"
prompt_template =  ChatPromptTemplate.from_messages(
  [("system", system_template), ("user", "{text}")]
)
chain = prompt_template | model | parser
chain.invoke({"language": "italian", "text": "hi"})

小结

本文主要介绍 Langchian 的基本基本概念,组件、生态内容。以及常用的大模型,向量数据库 embedding 以及使用 zhipu ai 配合 ChatOpenAI 实现一个简单的 chatmodel 的例子。

如何系统的去学习大模型LLM ?

大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?”“谁的饭碗又将不保了?”等问题热议不断。

事实上,抢你饭碗的不是AI,而是会利用AI的人。

科大讯飞、阿里、华为等巨头公司发布AI产品后,很多中小企业也陆续进场!超高年薪,挖掘AI大模型人才! 如今大厂老板们,也更倾向于会AI的人,普通程序员,还有应对的机会吗?

与其焦虑……

不如成为「掌握AI工具的技术人」,毕竟AI时代,谁先尝试,谁就能占得先机!

但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高。

针对所有自学遇到困难的同学们,我帮大家系统梳理大模型学习脉络,将这份 LLM大模型资料 分享出来:包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉👈

www.zeeklog.com  - 大模型应用开发 langchain 之 langchain 入门

一、LLM大模型经典书籍

AI大模型已经成为了当今科技领域的一大热点,那以下这些大模型书籍就是非常不错的学习资源。

www.zeeklog.com  - 大模型应用开发 langchain 之 langchain 入门

二、640套LLM大模型报告合集

这套包含640份报告的合集,涵盖了大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。(几乎涵盖所有行业)

www.zeeklog.com  - 大模型应用开发 langchain 之 langchain 入门

三、LLM大模型系列视频教程

www.zeeklog.com  - 大模型应用开发 langchain 之 langchain 入门

四、LLM大模型开源教程(LLaLA/Meta/chatglm/chatgpt)

www.zeeklog.com  - 大模型应用开发 langchain 之 langchain 入门

LLM大模型学习路线

阶段1:AI大模型时代的基础理解

目标:了解AI大模型的基本概念、发展历程和核心原理。

内容

  • L1.1 人工智能简述与大模型起源
  • L1.2 大模型与通用人工智能
  • L1.3 GPT模型的发展历程
  • L1.4 模型工程
  • L1.4.1 知识大模型
  • L1.4.2 生产大模型
  • L1.4.3 模型工程方法论
  • L1.4.4 模型工程实践
  • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

目标:掌握AI大模型API的使用和开发,以及相关的编程技能。

内容

  • L2.1 API接口
  • L2.1.1 OpenAI API接口
  • L2.1.2 Python接口接入
  • L2.1.3 BOT工具类框架
  • L2.1.4 代码示例
  • L2.2 Prompt框架
  • L2.3 流水线工程
  • L2.4 总结与展望

阶段3:AI大模型应用架构实践

目标:深入理解AI大模型的应用架构,并能够进行私有化部署。

内容

  • L3.1 Agent模型框架
  • L3.2 MetaGPT
  • L3.3 ChatGLM
  • L3.4 LLAMA
  • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。

内容

  • L4.1 模型私有化部署概述
  • L4.2 模型私有化部署的关键技术
  • L4.3 模型私有化部署的实施步骤
  • L4.4 模型私有化部署的应用场景

这份 LLM大模型资料 包括LLM大模型书籍、640套大模型行业报告、LLM大模型学习视频、LLM大模型学习路线、开源大模型学习教程等, 😝有需要的小伙伴,可以 扫描下方二维码领取🆓↓↓↓

👉👈

www.zeeklog.com  - 大模型应用开发 langchain 之 langchain 入门

Read more

前端防范 XSS(跨站脚本攻击)

目录 一、防范措施 1.layui util  核心转义的特殊字符 示例 2.js-xss.js库 安装 1. Node.js 环境(npm/yarn) 2. 浏览器环境 核心 API 基础使用 1. 基础过滤(默认规则) 2. 自定义过滤规则 (1)允许特定标签 (2)允许特定属性 (3)自定义标签处理 (4)自定义属性处理 (5)转义特定字符 常见场景示例 1. 过滤用户输入的评论内容 2. 允许特定富文本标签(如富文本编辑器内容) 注意事项 更多配置 XSS(跨站脚本攻击)是一种常见的网络攻击手段,它允许攻击者将恶意脚本注入到其他用户的浏览器中。

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

目录 1. 打开浏览器开发者工具 2. 使用 Network 面板 3. 查看具体的API请求 a. Headers b. Payload c. Response d. Preview e. Timing 4. 实际操作步骤 5. 常见问题及解决方法 a. 无法看到API请求 b. 请求失败 c. 跨域问题(CORS) 作为一名后端工程师,理解前端如何调用接口、传递参数以及接收返回值是非常重要的。下面将详细介绍如何通过浏览器开发者工具(F12)查看和分析这些信息,并附带图片案例帮助你更好地理解。 1. 打开浏览器开发者工具 按下 F12 或右键点击页面选择“检查”可以打开浏览器的开发者工具。常用的浏览器如Chrome、Firefox等都内置了开发者工具。下面是我选择我的一篇文章,打开开发者工具进行演示。 2. 使用

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例)

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例) 前端开发中最令人头疼的莫过于那些难以定位的UI问题——元素错位、样式冲突、响应式失效...传统调试方式往往需要反复修改代码、刷新页面、检查元素。现在,通过Cursor编辑器集成的Codex功能,你可以直接用截图交互快速定位和修复这些问题。本文将带你从零开始,掌握这套革命性的调试工作流。 1. 环境准备与基础配置 在开始之前,确保你已经具备以下环境: * Cursor编辑器最新版(v2.5+) * Node.js 18.x及以上版本 * React 18项目(本文以Chakra UI 2.x为例) 首先在Cursor中安装Codex插件: 1. 点击左侧扩展图标 2. 搜索"Codex"并安装 3. 登录你的OpenAI账户(需要ChatGPT Plus订阅) 关键配置项: // 在项目根目录创建.