RAG开发
LangChain通用提示词模板from langchain_core.prompts import PromptTemplate from langchain_community.llms import Tongyi prompt_template PromptTemplate.from_template( 我的邻居姓{lastname},刚生了{gender} ) prompt_template.format(lastname 张,gender 男) model Tongyi(model qwen-max) res model.invoke(input prompt_template) print(res)链式写法from langchain_core.prompts import PromptTemplate from langchain_community.llms import Tongyi prompt_template PromptTemplate.from_template( 我的邻居姓{lastname},刚生了{gender} ) model Tongyi(models qwen-max) chain prompt_template | model reschain.invoke(input{lastname:张,gender:男}) print(res)FewShot提示词模板from langchain_core.prompts import PromptTemplate,FewShotPromptTemplate from langchain_community.llms.tongyi import Tongyi example_template PromptTemplate.from_template( 单词:{word},反义词:{antonym} ) example_data [ {word:大,antonym:小}, {word:上,antonym:下} ] few_shot_template FewShotPromptTemplate( example_promptexample_template, #示例数据模板 examples example_data, #示例的数据 prefix 告知我单词的反义词,我提供如下的示例, #示例之前的提示词 suffix 基于前面的示例告诉我,{input_word}的反义词是, #示例之后的提示词 input_variables [input_word] #声明在前缀或后缀中所需注入的变量名 ) prompt_text few_shot_template.invoke(input{input_word:左}).to_string() print(prompt_text)在PromptTemplate(通用提示词模板)和FewShotPromptTemplate(FewShot提示词模板)的使用我们使用了如下模板对象的format方法模板对象的invoke方法PromptTemplateFewShotPromptTemplate,ChatPromptTemplate(后续学习)都拥有format和invoke这2类方法format和invoke的区别在于ChatPromptTemplate:通过from_messages方法从列表中获取多轮次会话作为聊天的基础模板前面PromptTemplate类用的from_template仅能接入一条消息,而from_messages可以接入一个list消息from langchain_core.prompts import ChatPromptTemplate,MessagesPlaceholder from langchain_community.chat_models.tongyi import ChatTongyi chat_prompt_template ChatPromptTemplate.from_messages( [ (system,你是一个边塞诗人), MessagesPlaceholder(history), (human,请再来一首) ] ) history_data [ (human,你来写一个唐诗), (ai,川黔) ] prompt_text chat_prompt_template.invoke({history:history_data}).to_string()链LangChain中链是一种将各个组件串联在一起按顺序执行前一个组件的输出作为下一组件的输入可以通过“|”符号来让各个组件形成链成链的各个组件需是Runnable接口的子类形成的链式RunnableSerializable对象(Runnabl接口子类)可通过链调用invoke或stream触发整个链条的执行错误的主要原因是chain prompt | model | model错误的主要原因是prompt的结果是PromptValue类型输入给了modelmodel 的输出结果是 AIMessage模型(ChatTongyi)源码中关于invoke方法明确指定了input的类型StrOutputParser也是Runnable接口的子类StrOutputParser字符串输出解析器是LangChain内置的简单字符串解析器parser StrOutputParser()chain prompt | model |parser | modelparser将上一个模型AIMessage结果解析为简单字符串然后就能继续下去了提示词模板要求的是字典类型所以我们需要完成将模型输出的AIMessage - 转为词典-注入第二个提示词模板中形成新的提示词StrOutputParser不满足(AIMessage-Str)更换JsonOutputParser(AIMseaage-Dict)1. 模型输入 PromptValue或字符串或序列(BaseMessage,list,tuple,str,dict)2. 模型输出 AIMessage3. 提示词模板输入 要求是字典4. 提示词模板输出 PromptValue对象5. StrOutputParser: AIMsaage输入str输出6. JsonOutputParser: AIMessage输入dict输出自定义类型转换器除了JsonOutputParser这类固定功能的解析器外我们也可以自己编写Lambda匿名函数来完成自定义逻辑的数据转换想怎么换就怎吗换可以基于RunnableLambda类实现另外|符号是支持函数直接加入链的支持Callable接口实例(函数就是Callable接口实例)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2453307.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!