主页 > 创业  > 

【LangChain实践开发】如何对大模型I/O封装?

【LangChain实践开发】如何对大模型I/O封装?
LangChain 的核心组件 模型 I/O 封装 LLMs:大语言模型Chat Models:一般基于 LLMs,但按对话结构重新封装PromptTemple:提示词模板OutputParser:解析输出 数据连接封装 Document Loaders:各种格式文件的加载器Document Transformers:对文档的常用操作,如:split, filter, translate, extract metadata, etcText Embedding Models:文本向量化表示,用于检索等操作(啥意思?别急,后面详细讲)Verctorstores: (面向检索的)向量的存储Retrievers: 向量的检索 对话历史管理 对话历史的存储、加载与剪裁 架构封装 Chain:实现一个功能或者一系列顺序功能组合Agent:根据用户输入,自动规划执行步骤,自动选择每步需要的工具,最终完成用户指定的功能 Tools:调用外部功能的函数,例如:调 google 搜索、文件 I/O、Linux Shell 等等Toolkits:操作某软件的一组工具集,例如:操作 DB、操作 Gmail 等等 Callbacks 文档(以 Python 版为例) 功能模块: python.langchain /docs/get_started/introductionAPI 文档: api.python.langchain /en/latest/langchain_api_reference.html三方组件集成: python.langchain /docs/integrations/platforms/官方应用案例: python.langchain /docs/use_cases调试部署等指导: python.langchain /docs/guides/debugging 一、模型 I/O 封装

把不同的模型,统一封装成一个接口,方便更换模型而不用重构代码。

1.1 模型 API:LLM vs. ChatModel # !pip install --upgrade langchain # !pip install --upgrade langchain-openai # !pip install --upgrade langchain-community 1.1.1 OpenAI 模型封装 from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o-mini") # 默认是gpt-3.5-turbo response = llm.invoke("你是谁") print(response.content) # 我是一个人工智能助手,旨在回答问题和提供信息。有什么我可以帮助你的吗? 1.1.2 多轮对话 Session 封装 rom langchain.schema import ( AIMessage, # 等价于OpenAI接口中的assistant role HumanMessage, # 等价于OpenAI接口中的user role SystemMessage # 等价于OpenAI接口中的system role ) messages = [ SystemMessage(content="你是CSDN的课程助理。"), HumanMessage(content="我是学员,我叫靓仔。"), AIMessage(content="欢迎!"), HumanMessage(content="我是谁") ] ret = llm.invoke(messages) print(ret.content) # 你是靓仔,一位学员。如果你有任何问题或需要帮助的地方,请随时告诉我!

划重点:通过模型封装,实现不同模型的统一接口调用

1.1.3 换个国产模型 # !pip install qianfan # 其它模型分装在 langchain_community 底包中 from langchain_community.chat_models import QianfanChatEndpoint from langchain_core.messages import HumanMessage import os llm = QianfanChatEndpoint( qianfan_ak=os.getenv('ERNIE_CLIENT_ID'), qianfan_sk=os.getenv('ERNIE_CLIENT_SECRET') ) messages = [ HumanMessage(content="介绍一下你自己") ] ret = llm.invoke(messages) print(ret.content) # 您好,我是文心一言,英文名是ERNIE Bot。我能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。 1.2 模型的输入与输出 1.2.1 Prompt 模板封装 PromptTemplate 可以在模板中自定义变量 from langchain.prompts import PromptTemplate template = PromptTemplate.from_template("给我讲个关于{subject}的笑话") print("===Template===") print(template) print("===Prompt===") print(template.format(subject='小明')) print(template.format(subject='小明')) #%% from langchain_openai import ChatOpenAI # 定义 LLM llm = ChatOpenAI() # 通过 Prompt 调用 LLM ret = llm.invoke(template.format(subject='小明')) # 打印输出 print(ret.content) ChatPromptTemplate 用模板表示的对话上下文 from langchain.prompts import ( ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate, ) from langchain_openai import ChatOpenAI template = ChatPromptTemplate.from_messages( [ SystemMessagePromptTemplate.from_template( "你是{product}的客服助手。你的名字叫{name}"), HumanMessagePromptTemplate.from_template("{query}"), ] ) llm = ChatOpenAI() prompt = template.format_messages( product="AGI课堂", name="瓜瓜", query="你是谁" ) print(prompt) ret = llm.invoke(prompt) print(ret.content) MessagesPlaceholder 把多轮对话变成模板 #%% from langchain.prompts import ( ChatPromptTemplate, HumanMessagePromptTemplate, MessagesPlaceholder, ) human_prompt = "Translate your answer to {language}." human_message_template = HumanMessagePromptTemplate.from_template(human_prompt) chat_prompt = ChatPromptTemplate.from_messages( # variable_name 是 message placeholder 在模板中的变量名 # 用于在赋值时使用 [MessagesPlaceholder("history"), human_message_template] ) from langchain_core.messages import AIMessage, HumanMessage human_message = HumanMessage(content="Who is Elon Musk?") ai_message = AIMessage( content="Elon Musk is a billionaire entrepreneur, inventor, and industrial designer" ) messages = chat_prompt.format_prompt( # 对 "history" 和 "language" 赋值 history=[human_message, ai_message], language="中文" ) print(messages.to_messages()) result = llm.invoke(messages) print(result.content)

划重点:把Prompt模板看作带有参数的函数

标签:

【LangChain实践开发】如何对大模型I/O封装?由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【LangChain实践开发】如何对大模型I/O封装?