wordpress多城市子站千峰培训出来好就业吗
2026/1/28 16:25:44 网站建设 项目流程
wordpress多城市子站,千峰培训出来好就业吗,google优化推广,美食app界面设计模板Chain翻译成中文就是“链”#xff0c;我们将大模型、相关工具等作为组件#xff0c;链就是负责将这些组件按照某一种逻辑#xff0c;顺序组合成一个流水线的方式。比如我们要构建一个简单的问答链#xff0c;就需要把大模型组件和标准输出组件用链串联起来。 1.简单链 fro…Chain翻译成中文就是“链”我们将大模型、相关工具等作为组件链就是负责将这些组件按照某一种逻辑顺序组合成一个流水线的方式。比如我们要构建一个简单的问答链就需要把大模型组件和标准输出组件用链串联起来。1.简单链fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.output_parsersimportStrOutputParserif__name____main__:# 模型modelinit_chat_model(modelollama:deepseek-v3.1:671b-cloud,base_urlhttp://127.0.0.1:11434)output_paserStrOutputParser()# 将它们组装成一个链,_chainmodel|output_paser question写一首唐诗result_chain.invoke(question)print(result)执行后的结果《秋夜泊舟》 江阔星垂野风清月近人。 孤灯寒照水夜鹊暗栖云。 客路霜钟远家山晓梦频。 归舟何日稳一叶落秋津。 注诗中通过“星垂野”、“月近人”等意象勾勒出秋夜泊舟的静谧画面后以“孤灯”、“夜鹊”暗合游子孤寂心境。尾联以落叶问归舟将思乡之情融于秋景余韵悠长。全诗借鉴唐代山水田园诗风注重意境的营造与情感的含蓄表达。可以看到此时的result不再是包含模型各种调用信息的AIMessage对象而是纯粹的模型响应的字符串结果。这里用到的StrOutputParser()实际上就是用于构成LangChain中一个链条的一个对象其核心功能是用于处理模型输出结果。同时我们也发现LangChain中搭建链的方法十分简单只需将不同组件通过|符号串联即可。2.加入提示词模板在 LangChain 1.x 版本中提示词模板Prompt Templates是用于构建大语言模型LLM输入提示prompts的核心组件之一。它们提供了一种结构化、可复用的方式来动态生成提示内容避免硬编码字符串并支持变量插值、格式控制fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_core.output_parsersimportStrOutputParserfromlangchain_core.promptsimportChatPromptTemplateif__name____main__:# 模型modelinit_chat_model(modelollama:deepseek-v3.1:671b-cloud,base_urlhttp://127.0.0.1:11434)# 提示词模板prompt_templateChatPromptTemplate([(system,你是一个乐意助人的助手请根据用户的问题给出回答),(user,这是用户的问题 {topic} 请用 yes 或 no 来回答)])# 结果解析器output_paserStrOutputParser()# 将它们组装成一个链_chainprompt_template|model|output_paser# topic 将会被填充到模板中question{topic,你是一个真实的人类吗}result_chain.invoke(question)print(result)借助ChatPromptTemplate非常便捷的将一个提示词模板打造为组件同样以链的形式加入当前流程中.查看这个类的源码有关这个类的说明fromlangchain_core.promptsimportChatPromptTemplate templateChatPromptTemplate([(system,You are a helpful AI bot. Your name is {name}.),(human,Hello, how are you doing?),(ai,Im doing well, thanks!),(human,{user_input}),])system: 表示系统角色对应SystemMessagehuman 表示用户角色 ,对应HumanMessageai : 表示它是AI回复的。对应AIMessage3.结构化解析器LangChain中一个基础的链一般由如下三部分构成发人员通过提示词让大模型输出结构化的字符串然后通过结构化解析器将字符串解析为指定对象上面示例中使用了最简单的结构化解释器StrOutputParserLangChain中常用的核心结构化解析器功能如下:解析器名称功能类型BooleanOutputParser将LLM输出解析为布尔值基础类型解析DatetimeOutputParser将LLM输出解析为日期时间基础类型解析EnumOutputParser解析输出为预定义枚举值之一基础类型解析RegexParser使用正则表达式解析模式匹配解析RegexDictParser使用正则表达式将输出解析为字典模式匹配解析StructuredOutputParser将LLM输出解析为结构化格式结构化解析YamlOutputParser使用Pydantic模型解析YAML输出结构化解析PandasDataFrameOutputParser使用Pandas DataFrame格式解析输出数据处理解析CombiningOutputParser将多个输出解析器组合为一个组合解析器OutputFixingParser包装解析器并尝试修复解析错误错误处理解析RetryOutputParser包装解析器并尝试修复解析错误错误处理解析RetryWithErrorOutputParser包装解析器并尝试修复解析错误错误处理解析ResponseSchema结构化输出解析器的响应模式辅助类结构化解析器使用示例:fromlangchain.chat_modelsimportinit_chat_modelfromlangchain_classic.output_parsersimportResponseSchema,StructuredOutputParserfromlangchain_core.promptsimportPromptTemplateif__name____main__:# 模型modelinit_chat_model(modelollama:deepseek-v3.1:671b-cloud,base_urlhttp://192.168.6.133:11434)# 提示词模板prompt_templatePromptTemplate.from_template( 请根据以下内容提取用户信息并返回 JSON 格式: 信息: {input} 格式: {format_instructions} )format_instructions[# 构建结构化数据模板ResponseSchema(namename,description用户的姓名),ResponseSchema(nameage,description用户的年龄),ResponseSchema(namejob,description用户的职业),]# 根据模板生成解析器output_paserStructuredOutputParser.from_response_schemas(format_instructions)# 将它们组装成一个链_chain(prompt_template.partial(format_instructionsoutput_paser.get_format_instructions())|model|output_paser)# topic 将会被填充到模板中question{input,用户张三今年20岁是一个工程师}result_chain.invoke(question)# 输出: {name: 张三, age: 20, job: 工程师}print(result)4.链组合链不但可以将不同的组件组织起来。不同的链又可以作为组件被其它的链串联起来。if__name____main__:# 模型deepseek_modelinit_chat_model(modelollama:deepseek-v3.1:671b-cloud,base_urlhttp://192.168.6.133:11434)qwen_modelinit_chat_model(modelollama:qwen3-next:80b-cloud,base_urlhttp://192.168.6.133:11434)# 1. chain1提示词模板chain1_prompt_tplPromptTemplate.from_template( 请根据以下新闻标题撰写一段简短的新闻内容100字以内 标题:{title} )# 2. chain1chain1chain1_prompt_tpl|deepseek_model# 3. chain2提示词模板chain2_prompt_tplPromptTemplate.from_template( 请从下面这段新闻内容中提取关键信息并返回结构化JSON格式 {news} 格式{format_instructions} )# 4. chain2format_instructions[# 构建结构化数据模板ResponseSchema(nametime,description事件发生的时间),ResponseSchema(namelocation,description事件发生的地点),ResponseSchema(nameevent,description发生的具体事件),ResponseSchema(namenews,description完整新闻内容)]# 根据模板生成解析器output_paserStructuredOutputParser.from_response_schemas(format_instructions)chain2chain2_prompt_tpl.partial(format_instructionsoutput_paser.get_format_instructions())|qwen_model|output_paser# 将它们组装成一个链_chainchain1|chain2# topic 将会被填充到模板中question{title,OpenAI 在旧金山发布AI笔}result_chain.invoke(question)print(result)代码运行后输出{time: 近期, location: 旧金山, event: 正式推出AI智能笔, news: OpenAI在旧金山新品发布会上正式推出AI智能笔。这款设备集成先进AI技术可实时转录并智能分析书写内容旨在提升办公与创作效率。产品预计将于下季度上市。}两个提示词模板是什么时候被填充的模板的填充即占位符被实际值替换发生在chain.invoke()调用的过程中。chain1_prompt_tpl的填充当整个_chain被调用时_chain.invoke(question)首先会将question({title: ...}) 传递给chain1.chain1的定义是chain1_prompt_tpl | deepseek_model。此时chain1_prompt_tpl接收到question这个字典。因为question中包含键title所以模板中的{title}占位符会被question中对应的值填充生成一个完整的提示字符串然后传递给deepseek_model进行处理。chain2_prompt_tpl的填充deepseek_model生成新闻内容后这个内容会作为输出返回给chain1。接着chain1的输出即生成的新闻内容被传递给chain2(chain2的输入)。chain2的定义是chain2_prompt_tpl.partial(...) | qwen_model | output_paser。chain2_prompt_tpl.partial(...)创建了一个新的提示模板其中format_instructions部分已经被具体的格式说明填充好了。当chain1的输出新闻内容传递给这个部分填充好的模板时模板会自动查找与输入数据结构匹配的占位符。关键在于chain1的输出是一个字符串这个字符串会被自动用来填充chain2_prompt_tpl中名为news的占位符。chain1的最终输出是一个字符串由deepseek_model生成的新闻内容。当这个输出传递给chain2时LangChain 会检查chain2即chain2_prompt_tpl.partial(...)需要什么输入。它发现模板中有一个{news}占位符。LangChain 会尝试将这个单个字符串值映射到模板中**唯一缺少的、未被 **partial填充的占位符上。因为format_instructions已经通过partial填充了所以剩下的唯一需要填充的就是{news}。因此LangChain 框架会自动将chain1的输出字符串填充到{news}位置。5.自定义组件上面的 prompt, model, 解析器之所以能够用 管道符|连接起来是因为 它们都实现了Runnable这个接口chain的一切基础单元都是Runnable对象它是一种统一的可调用接口支持如下形式.invoke(input)同步调用.stream(input)流式生成.batch(inputs)批量执行下面修改上面的代码# ........前面代码省略output_paserStructuredOutputParser.from_response_schemas(format_instructions)chain2chain2_prompt_tpl.partial(format_instructionsoutput_paser.get_format_instructions())|qwen_model|output_paser# 输出中间结果defmy_debug(x):print(f中间结果{x})# 一定要返回x, 否则结果不会在chain中继续传递returnx debug_contentRunnableLambda(my_debug)# 将它们组装成一个链_chainchain1|debug_content|chain2# topic 将会被填充到模板中question{title,OpenAI 在旧金山发布AI笔}result_chain.invoke(question)print(result)RunnableLambda将python函数转换为可运行节点。转化后的节点可以像任何其它Runnable一样组合并与LangChain链无缝集成。特别注意:RunnableLambda适合非流式输出如果要流式输出请使用RunnableGenerator6.总结 LCELLCEL全称为LangChain Expression Language是一种专为 LangChain 框架设计的表达语言。它通过一种链式组合的方式允许开发者使用清晰、声明式的语法来构建语言模型驱动的应用流程。 简单来说LCEL 是一种“函数式管道风格”的组件组合机制用于连接各种可执行单元Runnable。这些单元包括提示模板、语言模型、输出解析器、工具函数等。LCEL 中的一切都是Runnable。Runnable是一个接口或抽象基类代表任何可以被调用.invoke()的东西。常见Runnable类型- ChatModel (如 ChatOpenAI, ChatOllama) - PromptTemplate - Parser (如 StrOutputParser, StructuredOutputParser) - Tool - Retriever - RunnableLambda (包装自定义函数) - RunnablePassthrough (传递输入) - RunnableParallel (并行执行) - RunnableSequence (序列执行由 | 创建)组合操作符|(管道):|是 LCEL 中连接组件的主要操作符代表顺序执行Sequence。component1 | component2 | component3创建一个RunnableSequence。数据按顺序流经组件input - component1 - output1 - component2 - output2 - component3 - final_output。简单来说LCEL 就是用|把各种Runnable模型、提示词、解析器等串起来形成一个数据处理管道这个管道本身也是一个Runnable可以接收输入并产生输出。 它强调的是组件的独立性和组合的灵活性。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询