阿里云备案个人可以做网站吗,网站建设教育培训,游戏代理加盟平台,wordpress交易网站吗文章目录 前提回顾PromptTemplateprompt 模板定义以f-string渲染格式以mustache渲染格式以jinja2渲染格式直接实例化PromptTemplatePromptTemplate核心变量 prompt value生成invokeformat_prompt(不建议使用)format(不建议使用) batchstreamainvoke PromptTemplate核心方法part… 文章目录 前提回顾PromptTemplateprompt 模板定义以f-string渲染格式以mustache渲染格式以jinja2渲染格式直接实例化PromptTemplatePromptTemplate核心变量 prompt value生成invokeformat_prompt(不建议使用)format(不建议使用) batchstreamainvoke PromptTemplate核心方法partial变量partial方法直接实例化指定partical_variables save保存from_file加载dict__add__from_examples 属性 总结遗留问题 前提回顾
前面已经讲了什么是prompt模板以及什么是prompt和prompt value并且用langchain来实现了一个中英翻译助手,下面是部分代码如果要看完整代码请看上一小节 [prompt第二讲-langchain实现中英翻译助手]
# -*- coding: utf-8 -*-Time 2024/7/8 9:44
Auth leonfrom langchain_core.prompts import PromptTemplate
# 1. prompt模板定义
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)从上面可以看出定义prompt模板用到的是PromptTemplate所以下面就来讲讲PromptTemplate
PromptTemplate
首先来讲讲prompt模板的定义定义出了模板之后就可以根据不同的变量来产出不同的prompt valueprompt value 就可以随时的转为字符串和message字符串就是我们说的promptmessage最终底层也是转为字符串的也是prompt。 那在langchain中prompt模板定义方法有很多种而PromptTemplate是其中的一种
prompt 模板定义
通过PromptTemplate的from_template方法来定义出一个PromptTemplate
以f-string渲染格式
from langchain_core.prompts import PromptTemplate
# 1. prompt模板定义
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)
print(prompt_template.template)
print(prompt_template.input_variables)
print(prompt_template.template_format)
print(prompt_template.input_types)
print(prompt_template.partial_variables)代码原理
传入一个具有一定格式的字符串上面默认是python原生支持的f-string格式形式变量要以{}的形式。传入到PromptTemplate的from_template方法后会默认根据f-string的形式来解析这个字符串提取出中括号里的变量根据解析出的内容实例化一个PromptTemplate对象将传入的字符串放到template中提取的变量放到input_variables中
以mustache渲染格式
上面是默认以f-string的格式识别和处理传入的模板我们可以不显示的指定参数但是如果以mustache形式渲染则需要显示的指定 mustache则是以{{}}的形式来定义变量
from langchain_core.prompts import PromptTemplate
# 1. prompt模板定义
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{{user_input_words}}-answer
,
template_formatmustache)
print(prompt_template.template)
print(prompt_template.input_variables)
print(prompt_template.template_format)
print(prompt_template.input_types)
print(prompt_template.partial_variables)以jinja2渲染格式
jinja2定义变量的形式和mustache是一样的都是{{}}的形势
from langchain_core.prompts import PromptTemplate
# 1. prompt模板定义
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{{user_input_words}}-answer
,
template_formatjinja2)
print(prompt_template.template)
print(prompt_template.input_variables)
print(prompt_template.template_format)
print(prompt_template.input_types)
print(prompt_template.partial_variables)直接实例化PromptTemplate
在第一个以f-string那部分我进行了简单的代码讲解我们发现其实本质上就是先解析我丢进去的模板然后将解析的内容作为参数来实例化一个PromptTemplate 既然最终都要实例化PromptTemplate对象那为啥不直接就来实例化呢下面我们就直接来实例化PromptTemplate顺便也能看到langchain定义的这个模板内部 是什么结构。
from langchain_core.prompts import PromptTemplate
prompt_template PromptTemplate(template
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{{user_input_words}}-answer
,
input_variables[user_input_words])
print(prompt_template.template)
print(prompt_template.input_variables)
print(prompt_template.template_format)
print(prompt_template.input_types)
print(prompt_template.partial_variables)PromptTemplate核心变量
从最后直接实例化方法和我添加的print打印的信息来看我们先来看看PromptTemplate具有的几个最核心的字符串
template用于存储字符串模板input_variables用于存储变量这个变量可以是直接从字符串模板中解析出来也可以是自己指定只要是和模板中的变量一样就行template_format渲染的格式这个格式指导着如何解析templatepartial_variables这是一个前置变量可以被前置定义这个我后面用到的时候会自然的引出
前三种方法和最后一种的差别只是在于前三种帮我们自动提取了变量而最后一种则是我们直接告诉PromptTemplate变量是谁
prompt value生成
PromptTemplate因为继承了底层的runnable所以关于prompt valu的生成都是遵守runnable的接口的invoke ainvoke batch … 通过这些接口可以将用户传入的变量添加到prompt模板中生成1个或者多个prompt
invoke
invoke实现了单输入单输出的关系通常要求传入一个关于变量赋值的字典生成prompt value。传入的字典中 key为模板变量value为具体的变量值
from langchain_core.prompts import PromptTemplate
# 1. 以f-string格式渲染
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)
# 1.1. invoke传入字典
prompt prompt_template.invoke({user_input_words:你好})
print(prompt)但是如果模板中变量只有一个可以直接传入值而无需指定变量出于规范考虑不建议直接传入变量
from langchain_core.prompts import PromptTemplate
# 1. 以f-string格式渲染
prompt_template PromptTemplate.from_template(
你是一个中英文翻译助手你需要把我发给你的question翻译为英文下面的examples是一些具体翻译的案例翻译的时候请参考案例来翻译注意只输出最终翻译的结果,
examples
question美丽-beautiful;
question男孩-boy;
question男人-man
question456-four hundred and fifty-six;
question1-one;
question34-thirty-four
question{user_input_chinese}
)
prompt prompt_template.invoke(你好)
print(prompt)下面根据源码讲解一下invoke的原理 invoke原理
校验config校验输入变量 3. 输入变量如果不是一个字典并且模板中只有一个变量的话就会将input_variables中保存的变量名拿出来组成一个字典 4. 如果传入的是一个字典如果字典和保存在input_variables中有差异则报错。 5. 返回校验后的输入字典格式化模板交给子类生成prompt value 注意最后的结果中生成是一个prompt value而不是一个prompt前面也提到了这和prompt的差别就在于prompt value提供了字符串到message的互转
format_prompt(不建议使用)
from langchain_core.prompts import PromptTemplate
# 1. 以f-string格式渲染
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)
prompt prompt_template.format_prompt(user_input_words你好)
print(prompt)这个方法本质上就是直接完成invoke的第3步的工作invoke第3步就是调用了这个方法所以可以说这个方法和invoke的差别在于少了一些前置的校验。 同时呢考虑到和runnable的使用范式的统一这个方法我个人是不建议使用。
format(不建议使用)
from langchain_core.prompts import PromptTemplate
# 1. 以f-string格式渲染
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)
prompt prompt_template.format(user_input_words你好)
print(prompt)这个方法本质上就是是完成format_prompt的子任务等于说format是直接生成了一个字符串的promptformat_prompt进一步将其包装为prompt value 同样的考虑到和runnable的使用范式的统一这个方法我个人是不建议使用。
batch
batch实现了多输入多输出的关系传入多组变量字典生成多个prompt value
from langchain_core.prompts import PromptTemplate
# 1. 以f-string格式渲染
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)
prompt prompt_template.batch([{user_input_words:你好},{user_input_words:你是谁}])
print(prompt)batch的本质我已经在最开始就讲过如果没有特殊情况遵从的就是runnable的batch设计原理[runnable底层原理]
stream
batch实现了流式输出效果流式输出prompt value
from langchain_core.prompts import PromptTemplate
# 1. 以f-string格式渲染
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)
for i in prompt_template.stream({user_input_words:Jinja2 是一个功能更加强大的 Python 模板引擎常用于 Web 开发尤其是 Flask 和 Django 框架中。它支持复杂的控制结构如循环和条件语句}):print(i)这里其实是看不出流输出的感觉的是因为prompt value本身就不支持挨个yield单个字词出来关于它的原理参考我之前讲的[runnable底层原理]
ainvoke
异步实现单输入单输出关系
import asyncio
from langchain_core.prompts import PromptTemplate
# 1. 以f-string格式渲染
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将中文翻译为英文请将我发送给你的question的内容翻译为英文不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)
async def main():return await asyncio.gather(prompt_template.ainvoke({user_input_words:你好}),prompt_template.ainvoke({user_input_words:我不好}))res asyncio.run(main())
print(res)ainvoke的本质我已经在最开始就讲过如果没有特殊情况遵从的就是runnable的ainvoke设计原理[runnable底层原理]
其他的还有abatch、astream道理是差不多的。
PromptTemplate核心方法
前面总结了PromptTemplate的几个核心变量现在总结一下PromptTemplate核心方法
invoke单输入单输出关系传递一组变量字典得到一个prompt value 2. format_prompt:invoke的底层支持生成prompt value 3. format:format_prompt的底层支持生成字符串promptbatch多输入多输出关系传递多组变量字典得到多个prompt valuestream流式输出prompt valueainvoke异步invokeabatch异步batchastream异步stream
partial变量
上面我们举了一个中文到英文的翻译助手 现在我们可以做得更宽泛一些可以做一个翻译助手至于是翻译什么语言到什么语言则交给用户自己去定义 这里就用到了partital它本质就是在生成真正的prompt前先固定一些变量根据partital变量生成一个新的prompt模板 下面还是通过两种方法来讲解这个变量
partial方法
# -*- coding: utf-8 -*-Time 2024/7/8 9:44
Auth leonfrom langchain_core.prompts import PromptTemplate
# 4. 定义部分变量
prompt_template PromptTemplate.from_template(
你是一个翻译助手你擅长将{source_language}翻译为{dst_language}请将我发送给你的question的内容翻译为{dst_language}不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)
lag2lag input(你想我成为什么翻译助手(格式如中文-英文))
source_language,dst_language lag2lag.split(-)
new_prompt_template prompt_template.partial(source_languagesource_language,dst_languagedst_language)
print(助手初始化完毕您的翻译助手上线)
# 2. llm定义
from langchain_community.llms import Tongyi
from pydantic_settings import BaseSettings,SettingsConfigDict
2,1 获取千问的key
我这么写的原因是因为方便我上传项目到github的同时不暴露我的key所以我把可以key保存到了最外部的一个.env文件中
这样我每一次同步到github的时候就不会把key也推出去你们测试的时候可以直接写成
qwen_keysk-cc2209cec48c4bc966fb4acda169e,这样省事。class ModelConfig(BaseSettings):model_config SettingsConfigDict(env_file../../../.env,env_file_encodingutf-8)qwen_key:strdeepseek_key:strdeepseek_base_url:strmodel_config ModelConfig()
qwen_key model_config.qwen_key
# 1. 读取配置信息,获取模型key
llm Tongyi(dashscope_api_keyqwen_key)while(True):user_input_word input(f请输入需要翻译的{source_language})if user_input_word.lower() quit:breakelse:prompt new_prompt_template.invoke({user_input_words:user_input_word})print(llm.invoke(prompt))下面分析一下原理 partial方法原理
传入变量并赋值到初始的prompt模板中生成新的prompt模板传入的变量保存到partical_variables中从最开始模板中的input_variables中剔除partical_variables部分 也就是说最开始所有的变量都属于input_variables当你调用了partial方法之后input_variables中的部分变量会被移动到partical_variables中
直接实例化指定partical_variables
# -*- coding: utf-8 -*-Time 2024/7/8 9:44
Auth leonfrom langchain_core.prompts import PromptTemplate
# 4. 定义部分变量
lag2lag input(你想我成为什么翻译助手(格式如中文-英文))
source_language,dst_language lag2lag.split(-)prompt_template PromptTemplate(template
你是一个翻译助手你擅长将{source_language}翻译为{dst_language}请将我发送给你的question的内容翻译为{dst_language}不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer,input_variables[user_input_words]
,partial_variables{source_language:source_language,dst_language:dst_language})print(助手初始化完毕您的翻译助手上线)
# 2. llm定义
from langchain_community.llms import Tongyi
from pydantic_settings import BaseSettings,SettingsConfigDict
2,1 获取千问的key
我这么写的原因是因为方便我上传项目到github的同时不暴露我的key所以我把可以key保存到了最外部的一个.env文件中
这样我每一次同步到github的时候就不会把key也推出去你们测试的时候可以直接写成
qwen_keysk-cc2209cec48c4bc966fb4acda169e,这样省事。class ModelConfig(BaseSettings):model_config SettingsConfigDict(env_file../../../.env,env_file_encodingutf-8)qwen_key:strdeepseek_key:strdeepseek_base_url:strmodel_config ModelConfig()
qwen_key model_config.qwen_key
# 1. 读取配置信息,获取模型key
llm Tongyi(dashscope_api_keyqwen_key)while(True):user_input_word input(f请输入需要翻译的{source_language})if user_input_word.lower() quit:breakelse:prompt prompt_template.invoke({user_input_words:user_input_word})print(llm.invoke(prompt))save保存
ok了现在我们开发好了一个翻译助手了核心就是设计了一个prompt模板现在我想要发布到开源社区或者给别人 使用我们可以保存这个模板但是需要注意两点
如果你的模板里含有partial_variables是无法保存的只能保存为json格式或者是yml格式 所以综合这两种考虑我们不能保存调用过partial方法后的prompt模板也不能保存直接实例化时指定了partial_variables的模板我们只能保存最初的模板这也符合需求因为你保存了调用 partial后的模板的话这些前置变量的值都被填进去了用户也没法自定义也就失去了这个模板的意义所以下面演示一下如何保存最初的prompt模板
最重要你可以观察一下保存后的文件如果有中文则只会显示16进制但是现在的保存方法是不支持传入编码参数的如果你要让他正常显示中文和加载中文需要到源码下的修改save方法 在open的时候加入编码参数,这一点来看langchain还是不够国际化垃圾
from langchain_core.prompts import PromptTemplate
# 5. 保存prompt模板
from langchain_core.prompts import PromptTemplate
# 5. 保存prompt模板
prompt_template_1 PromptTemplate.from_template(
你是一个翻译助手你擅长将{source_language}翻译为{dst_language}请将我发送给你的question的内容翻译为{dst_language}不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)
prompt_template_1.save(./data/translate-lang2lang.yml)from_file加载
加载上一步保存的prompt模板文件加载之后又可以正常使用partical了。 同样的需要注意编码问题。
from langchain_core.prompts import PromptTemplate
prompt_template PromptTemplate.from_file(data/translate-lang2lang.yml)
lag2lag input(你想我成为什么翻译助手(格式如中文-英文))
source_language,dst_language lag2lag.split(-)
new_prompt_template prompt_template.partial(source_languagesource_language,dst_languagedst_language)
print(new_prompt_template)其他的还有一些方法和属性下面简单的列举一下
dict
将prompt模板转为字典
from langchain_core.prompts import PromptTemplate
# 5. 保存prompt模板
prompt_template_1 PromptTemplate.from_template(
你是一个翻译助手你擅长将{source_language}翻译为{dst_language}请将我发送给你的question的内容翻译为{dst_language}不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)
print(prompt_template_1.dict())add
实现了prompt模板之间的相加
from langchain_core.prompts import PromptTemplate
# 5. 保存prompt模板
prompt_template_1 PromptTemplate.from_template(
你是一个翻译助手你擅长将{source_language}翻译为{dst_language}请将我发送给你的question的内容翻译为{dst_language}不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)prompt_template_3 PromptTemplate.from_template(这是第二个prompt模板:{user_input_words_3})
new_prompt prompt_template_1这是新的模板{user_input_words_2}prompt_template_3
print(new_prompt)从上面可以看出相加的对象可以是多个PromptTemplate之间也可以是PromptTemplate和字符串直接 本质上就是将模板统一变量统一
from_examples
根据案例实例化一个PromptTemplate不够优雅不细讲了后面会有更优雅的方法
属性
from langchain_core.prompts import PromptTemplate
# 5. 保存prompt模板
prompt_template_1 PromptTemplate.from_template(
你是一个翻译助手你擅长将{source_language}翻译为{dst_language}请将我发送给你的question的内容翻译为{dst_language}不要返回无关的内容只需返回最终翻译结果下面的history examples中提供了一些具体的案例为你提供一些参考## history examples:
question:美丽-answer:beautiful;
question:男孩-answer:boy;
question:男人-answer:man;
question:456-answer:four hundred and fifty-six;
question:1-answer:one;
question:34-answer:thirty-four;## user true task:
question{user_input_words}-answer
)print(prompt_template_1.InputType)
print(prompt_template_1.OutputType)
print(prompt_template_1.input_schema)
print(prompt_template_1.output_schema)
print(prompt_template_1.config_schema)稍微总结一下
InputType:获取输入类型OutputType获取输出类型input_schema获取输入schemaoutput_schema获取输出schemaconfig_schema获取config的schema
总结
基本上PromptTemplate也已将讲完了下面做一个小总结
变量 2. template用于存储字符串模板 3. input_variables用于存储变量这个变量可以是直接从字符串模板中解析出来也可以是自己指定只要是和模板中的变量一样就行 4. template_format渲染的格式这个格式指导着如何解析template 5. partial_variables这是一个前置变量可以被前置定义方法 invoke单输入单输出关系传递一组变量字典得到一个prompt value 2. format_prompt:invoke的底层支持生成prompt value 3. format:format_prompt的底层支持生成字符串promptbatch多输入多输出关系传递多组变量字典得到多个prompt valuestream流式输出prompt valueainvoke异步invokeabatch异步batchastream异步streamdict将prompt模板转为字典 属性 InputType:获取输入类型OutputType获取输出类型input_schema获取输入schemaoutput_schema获取输出schemaconfig_schema获取config的schema
遗留问题
从案例来说还有一个问题就是当我们在做翻译助手的时候当我们是中英文翻译助手的时候案例是符合我们的标准的但是当我们是其他的翻译助手 时比如中德翻译时案例就对不上了这也是下一章我们要解决的问题。
附上筋斗云会有完整教程和代码https://github.com/traveler-leon/langchain-learning.git 文章转载自: http://www.morning.lbrrn.cn.gov.cn.lbrrn.cn http://www.morning.lcdtb.cn.gov.cn.lcdtb.cn http://www.morning.bqdgr.cn.gov.cn.bqdgr.cn http://www.morning.mjats.com.gov.cn.mjats.com http://www.morning.fjscr.cn.gov.cn.fjscr.cn http://www.morning.yfffg.cn.gov.cn.yfffg.cn http://www.morning.mxcgf.cn.gov.cn.mxcgf.cn http://www.morning.xfxqj.cn.gov.cn.xfxqj.cn http://www.morning.brmbm.cn.gov.cn.brmbm.cn http://www.morning.gthwz.cn.gov.cn.gthwz.cn http://www.morning.ljbpk.cn.gov.cn.ljbpk.cn http://www.morning.drwpn.cn.gov.cn.drwpn.cn http://www.morning.kkdbz.cn.gov.cn.kkdbz.cn http://www.morning.nyfyq.cn.gov.cn.nyfyq.cn http://www.morning.lgcqj.cn.gov.cn.lgcqj.cn http://www.morning.ndyrb.com.gov.cn.ndyrb.com http://www.morning.cokcb.cn.gov.cn.cokcb.cn http://www.morning.rhkmn.cn.gov.cn.rhkmn.cn http://www.morning.xrrbj.cn.gov.cn.xrrbj.cn http://www.morning.ghfmd.cn.gov.cn.ghfmd.cn http://www.morning.wyppp.cn.gov.cn.wyppp.cn http://www.morning.ckdgj.cn.gov.cn.ckdgj.cn http://www.morning.fxpyt.cn.gov.cn.fxpyt.cn http://www.morning.xqbgm.cn.gov.cn.xqbgm.cn http://www.morning.rjqtq.cn.gov.cn.rjqtq.cn http://www.morning.rwfp.cn.gov.cn.rwfp.cn http://www.morning.mwns.cn.gov.cn.mwns.cn http://www.morning.xqltq.cn.gov.cn.xqltq.cn http://www.morning.hmbxd.cn.gov.cn.hmbxd.cn http://www.morning.fcwxs.cn.gov.cn.fcwxs.cn http://www.morning.yqmmh.cn.gov.cn.yqmmh.cn http://www.morning.bpds.cn.gov.cn.bpds.cn http://www.morning.mdfxn.cn.gov.cn.mdfxn.cn http://www.morning.cyhlq.cn.gov.cn.cyhlq.cn http://www.morning.ndfwh.cn.gov.cn.ndfwh.cn http://www.morning.dblfl.cn.gov.cn.dblfl.cn http://www.morning.krtcjc.cn.gov.cn.krtcjc.cn http://www.morning.hbqhz.cn.gov.cn.hbqhz.cn http://www.morning.rfrxt.cn.gov.cn.rfrxt.cn http://www.morning.bgqr.cn.gov.cn.bgqr.cn http://www.morning.qwmpn.cn.gov.cn.qwmpn.cn http://www.morning.pgxjl.cn.gov.cn.pgxjl.cn http://www.morning.fywqr.cn.gov.cn.fywqr.cn http://www.morning.cniedu.com.gov.cn.cniedu.com http://www.morning.ntnml.cn.gov.cn.ntnml.cn http://www.morning.gkjyg.cn.gov.cn.gkjyg.cn http://www.morning.fmrwl.cn.gov.cn.fmrwl.cn http://www.morning.hcwlq.cn.gov.cn.hcwlq.cn http://www.morning.xhqr.cn.gov.cn.xhqr.cn http://www.morning.clpkp.cn.gov.cn.clpkp.cn http://www.morning.yfzld.cn.gov.cn.yfzld.cn http://www.morning.rjkfj.cn.gov.cn.rjkfj.cn http://www.morning.jfmyt.cn.gov.cn.jfmyt.cn http://www.morning.pzjfz.cn.gov.cn.pzjfz.cn http://www.morning.rttp.cn.gov.cn.rttp.cn http://www.morning.rhnn.cn.gov.cn.rhnn.cn http://www.morning.chkfp.cn.gov.cn.chkfp.cn http://www.morning.kuaijili.cn.gov.cn.kuaijili.cn http://www.morning.kfsfm.cn.gov.cn.kfsfm.cn http://www.morning.dgwrz.cn.gov.cn.dgwrz.cn http://www.morning.djpps.cn.gov.cn.djpps.cn http://www.morning.wwznd.cn.gov.cn.wwznd.cn http://www.morning.jhfkr.cn.gov.cn.jhfkr.cn http://www.morning.xhwty.cn.gov.cn.xhwty.cn http://www.morning.fbbmg.cn.gov.cn.fbbmg.cn http://www.morning.gcqkb.cn.gov.cn.gcqkb.cn http://www.morning.bpmnz.cn.gov.cn.bpmnz.cn http://www.morning.mkczm.cn.gov.cn.mkczm.cn http://www.morning.yxnfd.cn.gov.cn.yxnfd.cn http://www.morning.ngdkn.cn.gov.cn.ngdkn.cn http://www.morning.atoinfo.com.gov.cn.atoinfo.com http://www.morning.smszt.com.gov.cn.smszt.com http://www.morning.rbkdg.cn.gov.cn.rbkdg.cn http://www.morning.yswxq.cn.gov.cn.yswxq.cn http://www.morning.pypbz.cn.gov.cn.pypbz.cn http://www.morning.ytmx.cn.gov.cn.ytmx.cn http://www.morning.jrhmh.cn.gov.cn.jrhmh.cn http://www.morning.krkwp.cn.gov.cn.krkwp.cn http://www.morning.qyxnf.cn.gov.cn.qyxnf.cn http://www.morning.skpdg.cn.gov.cn.skpdg.cn