深八明星独角兽PaLantir:硅谷信用游戏的混乱
06-17
温馨提示:本文虽然对浪链进行了比较全面的介绍,但也只是给你一个粗浅的了解。适合新手玩家。
所以,如果你是浪链新手,读完本文还是一头雾水,那么请你无情无情..............................给我喜欢( ???)??!有您的鼓励,我会继续努力! (??_?)?什么? Daniel:丹哥,我刚刚听到有人在谈论浪链。你知道它是什么吗? Egg先生:噢,LangChain,一个开发框架。
Daniel:你们正在开发什么样的框架? Egg先生:开发语言模型驱动的应用程序的框架 Daniel:噢,开发这种应用程序不就是写提示和调整语言模型API吗?蛋先生:是的。但LangChain使得提示的编写和API调用更加标准化。
丹尼尔:是这样吗?蛋先生:当然不仅如此,它还有很多很酷的功能。丹尼尔:例如? Dan:它可以连接外部数据源,并根据输入作为语言模型的上下文检索相关数据,从而使语言模型能够回答训练数据之外的问题。
这是浪链的检索大牛实现的:太酷了。我想到了一个场景,比如用它来连接客服的答案词汇库,这样语言模型就可以转化为专业的客服 Dan 先生:是的,这是一个很好的场景。
丹尼尔:还有其他更酷的功能吗? Mr. Egg:它允许语言模型决定采取哪些行动。丹尼尔:这个还不是很清楚。
Egg 先生:继续您的客户服务示例。如果用户问的问题是关于公司产品的,我们希望语言模型使用客服的词汇库来回答;如果是其他问题,我们希望语言模型用自己的知识直接回答。
如果是你,你会怎样实现呢? Daniel:我想我会先用语言模型来判断用户的问题是否是关于公司的产品。如果是,则使用连接词汇库的逻辑;如果没有,就用让语言模型直接回答的逻辑。
蛋先生:嗯,你的方法是硬编码逻辑。还有一种更神奇的方式,就是让语言模型决定采取哪种行为。
这是由LangChain的Agent来实现的。丹尼尔:听起来很酷。
你如何使用它? Dan先生:别急,让我慢慢解释为什么。 Daniel:丹哥,您刚才提到浪链让提示的编写和API调用更加规范。
标准化固然好,但好处大吗?用语言模型SDK不是很好吗? Dan先生:那么请举一个使用SDK与语言模型交互的例子。 Daniel:这个不简单,所以我就用这个:fireworks.ai (注:这个平台提供免费资源,访问方便) 代码语言: python 代码运行次数:0 Copy Cloud Studio code run from fireworks.client import Fireworksclient = Fireworks(api_key="
我的目的是提供有用和尊重的回应,始终保持安全和社会公正。我在这里以积极和道德的方式为您提供帮助,并且我很乐意帮助您解决您可能遇到的任何问题或任务。
您有什么具体想要的吗我来帮你吗? Dan先生:很好,我再给你举一个语言模型的例子。丹尼尔:嗯,同样的操作。
你在开玩笑吧?好吧,那我再举个百度文心艺言的例子代码语言:python代码运行次数:0 Copy Cloud Studio代码运行 import osimport qianfanos.environ["QIANFAN_AK"] = "
我可以与人交谈和互动。 、解答问题、辅助创作,帮助人们高效、便捷地获取信息、知识和灵感。
蛋先生:好的,现在假设我首先使用Fireworks来开发一个应用程序,但是在过程中我发现效果不是很理想。如果我想换成温馨一言怎么办?大牛:哦~,各个语言模型的SDK的接口定义都不一样,更换起来确实很麻烦。
来吧,开始你的表演了蛋先生:我们直接看一下通过浪链使用烟花和文心一言的代码示例。毕竟,没有代码就没有 BB。
Fireworks LangChain 示例代码语言:python 代码运行次数:0 复制 Cloud Studio 代码运行 import osfrom langchain_community.chat_models.fireworks import ChatFireworksos.environ["FIREWORKS_API_KEY"] = '
丹先生:是的,这只是一个最简单的例子。 LangChain还有很多优雅的方式在不同模型之间进行切换。
从现在开始我们可以专注于Prompt的开发。至于语言模型,哪一种适合替换呢? Daniel:好吧,我决定进浪链了,我们再聊聊吧?蛋先生:当然!我们从简单到复杂,结合代码和流程图来展示LangChain的一些用法。
我们先从最简单的替换SDK的方法开始。代码语言上面已经提到了: python code run times: 0 复制 Cloud Studio code run res = model.invoke("tell me a short puzzle about a cat")print(res .content)image Daniel:嗯,是这样的简单的。
你一看就明白了。蛋先生:好的,那我们就用PromptTemplate来通过变量来控制模板中的部分内容。
代码语言:python 代码运行次数:0 复制 Cloud Studio 代码运行 from langchain_core.prompts import ChatPromptTemplate...prompt = ChatPromptTemplate.from_template("告诉我一个关于 {topic} 的小笑话")chain = Prompt | modelres = chain.invoke({"topic": "a cat" })print(res.content)image 大牛:使用PromptTemplate来写提示确实比字符串拼接优雅多了。 Dan 先生:让我们添加一个简单的输出转换。
代码语言:python 代码运行次数:0 copy Cloud Studio 代码运行 from langchain_core.prompts import ChatPromptTemplatefrom langchain_core.output_parsers import StrOutputParser...prompt = ChatPromptTemplate.from_template("告诉我一个关于 {topic} 的小笑话")output_parser = StrOutputParser( ) 链 = 提示 |型号| output_parserres = chain .invoke({"topic": "a cat"})print(res)imageDaniel: 终于知道为什么叫链了。蛋先生:继续吗? Daniel:继续... Egg先生:下面的代码可能有点长。
代码语言:python 代码运行次数:0 复制 Cloud Studio 代码运行 from langchain_community.embeddings import QifanEmbeddingsEndpoint from langchain_community.document_loaders import WebBaseLoaderfrom langchain_community.vectorstores import faissfrom langchain_community。 chat_models 导入QianfanChatEndpointfrom langchain.text_splitter 导入RecursiveCharacterTextSplitterfrom langchain.chains.combine_documents 导入create_stuff_documents_chainfrom langchain_core.prompts 导入ChatPromptTemplatefrom langchain_core.runnables 导入RunnableParallel,RunnablePassthroughfrom langchain_core.output_parsers 导入StrOutputParser # 1docs = WebBaseLoader("=QianfanEmbeddingsEndpoint()documents = RecursiveCharacterTextSplitter(chunk_size=). split_documents(docs)向量 = faiss.FAISS.from_documents(文档, 嵌入)retriever = vector.as_retriever(search_kwargs={'k': 4})# 2setup_and_retrieval = RunnableParallel({"context":检索器, "input": RunnablePassthrough()})prompt = ChatPromptTemplate.from_template("""仅根据提供的上下文回答以下问题:
主要分为三个部分 1)加载网页文档,通过 Embeddings 将文档内容转换为向量,并存储在向量数据库 FAISS 中,retrieve 是一个检索工具,可以基于向量数据库获取相关文档在输入上。 2) 声明链的每个步骤。
3)按顺序链接步骤。丹尼尔:等等,看起来有点痛吗?嵌入?向量?矢量数据库?蛋先生:今天是我们的“第一次探索”,所以只能简单聊聊,不然很多同学会睡着的。
丹尼尔:没问题,有一个大概的印象很好。蛋先生:首先我们为什么要把文本转换成向量呢?因为通过计算两个向量之间的距离,我们可以定量评估它们的相关性。
距离越小通常意味着文本之间的相关性越高。这里我们需要的是检索与输入相关的文档内容并将其作为对话上下文提供给语言模型。
如果整个文件都传输的话会不会太大?丹尼尔:哦,原来向量还有这么高级的功能。蛋先生:是的。
那么要将文本转换成向量,就需要用到Embeddings(词嵌入)技术。 Embeddings历史上有很多方法,比如基于统计的计数方法、基于神经网络的推理方法等。
QifanEmbeddingsEndpoint是通过深度学习训练得到的Embeddings模型服务。输入是文本,输出是向量。
丹尼尔:我大概明白了一点。蛋先生:那我们看一下流程图。
Image Daniel:你能给我解释一下上面的过程吗?图片前半部分 蛋先生:当然!第一个输入是“langsmith 如何帮助测试?”;然后是并行逻辑,一是通过Retriever根据输入作为上下文值检索相关文档内容,二是直接将输入作为输入值传递;然后将数据传递给Prompt模板即可,最后就可以得到传递给语言模型的PromptValue了。丹尼尔:曾我先生:注意,结局即将到来。
现在让我们请来著名的经纪人。代码语言:python 代码运行次数:0 复制 Cloud Studio 代码并运行 from langchain import hubfrom langchain.agents import AgentExecutor, create_json_chat_agentfrom langchain.tools import toolfrom langchain_community.chat_models.fireworks import ChatFireworks@tooldef leng(word: str) -> str : """如果你想求单词的长度,请使用这个工具。
""" return len(word)@tooldef lower(word: str) -> str: """如果你需要的话,请使用这个工具将单词更改为小写。""" return f'dx_{word.lower()}'tools = [leng, lower]model = ChatFireworks(model="accounts/fireworks/models/llama-v2-70b-chat")prompt = hub.pull("hwchase17/react-chat-json")agent = create_json_chat_agent(模型、工具、提示、stop_sequence=False) agent_executor = AgentExecutor(agent=agent,tools=tools, verbose=True,handle_parsing_errors=True,max_iterations=5) res = agent_executor.invoke({"input": "将这个单词小写:'Daniel'"})print(res ) 代码语言: sh copy {'input': "将这个单词小写:'Daniel'", 'output': "'Daniel' 的小写版本是 'dx_daniel'"} Daniel:好的,请快速解释一下。
Dan先生:首先我们声明了两个工具:一个是leng(用于求字符串的长度),另一个是lower(用于将字符串改为小写)。为了证明结果是通过我们的工具得到的,所以我特意在下层实现中添加了一个 dx_ 前缀。
Daniel:等等,hub.pull("hwchase17/react-chat-json") 中的神秘代码是什么? Egg先生:这是LangChain hub社区分享的众多用于实现Agent的提示之一。您可以在这里找到许多有用的提示。
毕竟语言工程也是一门艺术,需要实践和积累。Daniel:明白了,请继续。
Egg 先生:有了 Agent,语言模型就可以根据输入来决定使用哪个工具。 Daniel:哇,这太神奇了!我对它如何做出自己的判断很感兴趣。
Dan先生:简单来说,语言模型可以根据输入和每个工具的描述来判断哪个工具更适合,然后将结果输出为LangChain可以理解的执行指令(比如JSON)大牛: 惊人的!现在我对浪链有了一个大概的了解,希望以后能继续和大家进行深入的探讨。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-18
06-18
06-18
06-18
06-17
06-21
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用