ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

LangChain组件介绍

LangChain组件介绍 一、Modelslangchain目前支持三种类型的模型LLMS 输入文本字符输出文本中字符Chat Models 聊天模型输入特定格式的聊天消息数据输出聊天消息Embeing Models(嵌入模型)输入文本输出浮点数字向量1.LLMS 模型调用有2种方式通过ChatOpenAi进行调用通过OllamaLLM进行调用2.Chat Models:聊天模型聊天消息半酣几种类型:AIMessage:AI输出的消息HumanMessage用户消息SystemMessage系统的角色ChatMessage可以接受任意角色from langchain_core.messages import HumanMessage, SystemMessage, AIMessage # from langchain_community.chat_models import ChatOllama # Langchain 0.x版本使用 from langchain_ollama import ChatOllama # 实例化模型 model ChatOllama(modelqwen2.5:7b) # 定义提示词 messages [ SystemMessage(content现在你是一个著名的诗人), HumanMessage(content给我写一首唐诗)] # 获取问答结果 result model.invoke(messages) # print(result) print(result.content)3 .Embeddings ModelsOllamaEmbeddings的api来进行调用二、Prompts1.通用 promptzero-shot提示方式:零样本:PromptTemplatefew-shot 少量样本提示方法FewShotPromptTemplate2.chat prompt直接提问零样本提示方式少量样本提示方式三、Chains是将个个组件连接在一起的完成一个程序的过程LCEL是使用 | 符号 的管道将不同的组件连接起来形成一个链式结构from langchain_core.prompts import PromptTemplate from langchain_ollama import OllamaLLM # 创建第一条链 template 我的邻居姓{lastname}他生了个儿子给他儿子起个名字 first_prompt PromptTemplate( input_variables[lastname], templatetemplate,) # 实例化模型 llm OllamaLLM(modelqwen2.5:7b) first_chain first_prompt | llm # 创建第二条链 second_prompt PromptTemplate( input_variables[child_name], template邻居的儿子名字叫{child_name}给他起一个小名) second_chain second_prompt | llm # 链接两条链 overall_chain first_chain | second_chain print(overall_chain) print(**80) # 执行链只需要传入第一个参数 catchphrase overall_chain.invoke(王) print(catchphrase)四、output_parsersLangChain输出解析器负责获取LLm的输出并转换为更合适的格式主要有StrOutputParser 主要是为字符串 ,CommaSeparatedListParser主要为列表, JsonOutputParser 主要为字典格式 PydanticOutputParser主要为 Pydantic强类型格式# 添加字符串解析器 parser StrOutputParser() chain2 prompt | model | parser# 创建列表解析器 parser CommaSeparatedListOutputParser()# 创建JSON解析器 json_parser JsonOutputParser()# 创建Pydantic解析器 pydantic_parser PydanticOutputParser(pydantic_objectMovie)五、Memory有两种类型短时记忆和长时记忆短时记忆一个是保存json中一个是保存在内存中但是易丢失长时记忆一般存储在数据库中六、Indexes类型1、本地文档加载主要是有Unstructured包进行数据加载2、文档分割器1.最基本的文本分割器是CharacterTextSplitter# 创建分词器 separator参数指的是分割的分隔符chunk_size指的是分割出来的每个块的大小chunk_overlap指的是每个块之间重叠的大小text_splitter CharacterTextSplitter(separator , chunk_size5, chunk_overlap1)2. 递归字符文本分割器RecursiveCharacterTextSplitter3、向量存储是一种特殊类型的数据库它的作用是存储由嵌入创建的向量提供相似查询等功能。4、索引器查询嵌入将用户的查询通过嵌入模型转化为向量表示相似性搜索在向量存储中查询向量最相似的的文档文档返回返回匹配的文档后处理对检索文件进行排序过滤或者重新排名七、Agents关键组成部分任务规划任务拆解长短期记忆聊天上下文长期保留和回忆信息工具执行调用提供好的专业API解决专业问题
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进