怎么做网站的内部链接,免费网站软件app,建站时长是什么原因造成的,建立一个网站需要多久大语言模型#xff08;LLM#xff09; 被描述的神乎其神#xff0c;无所不能#xff0c;其实#xff0c;大语言模型只是一个模型#xff0c;它能够理解和生成自然语言#xff0c;唯有依靠应用程序才能够发挥作用。例如#xff0c;基于大模型可以构建一个最简单的会话机… 大语言模型LLM 被描述的神乎其神无所不能其实大语言模型只是一个模型它能够理解和生成自然语言唯有依靠应用程序才能够发挥作用。例如基于大模型可以构建一个最简单的会话机器人需要有IO 模型将用户的提问发送给大模型大模型得到回应后通过输出模块将问答反馈给用户。为了使大模型能够准确地理解用户的提问LLM 应用程序要给它合适的提示Prompt所有的函数都有合适的描述Description。 可以将大语言模型应用是看作一个基于自然语言描述的的程序。传统的条件循环状态判断也都是由LLM 完成的。所以同样结构的LLM 应用使用不同的LLM或者不同的提示和描述其效果的是不同的。这一点与传统的程序是不同的。 从关注程序的语法转向语义的表达是AI时代的最大转变。 各种大语言模型应用架构
AI应用的五层基石理论 AI应用的的架构 初创公司Seednapse AI创始人提出构建AI应用的五层基石理论受到业界关注。
Models也就是我们熟悉的调用大模型API。Prompt Templates在提示词中引入变量以适应用户输入的提示模版。Chains对模型的链式调用以上一个输出为下一个输入的一部分。Agent能自主执行链式调用以及访问外部工具。Multi-Agent多个Agent共享一部分记忆自主分工相互协作。 提示工程 提示工程也称为上下文提示是指如何与 LLM 通信以在不更新模型权重的情况下引导其行为以获得所需结果的方法。这是一门实证科学提示工程方法的效果在模型之间可能会有很大差异因此需要大量的实验和启发式方法。
langchain 链 如同计算机程序一样当AI 完成复杂的任务时需要若干的步骤或者称为组件这些组件通过一定的顺序链接起来执行这便是langchain 的核心思想。 链 Chains 是一个非常通用的概念它指的是将一系列模块化组件或其他链以特定方式组合起来以实现共同的用例。
链Chain是对多个独立组件进行端到端封装的一种方式。 简单的说就是把自然语言输入、关联知识检索、Prompt组装、可用Tools信息、大模型调用、输出格式化等这些LLM 应用中的常见动作组装成一个可以运行的“链”式过程。链可以直接调用。 最常用的链类型是LLMChainLLM链它结合了PromptTemplate提示模板、Model模型和Guardrails守卫来接收用户输入进行相应的格式化将其传递给模型并获取响应然后验证和修正如果需要模型的输出。
LCEL表达式语言
LCEL 的全称是LangChain Expression Language,langchain 表达语言。是一种声明式方法可以轻松地将链组合在一起。 最基本和常见的用例是将提示模板和模型链接在一起。为了了解这是如何工作的 创建一个链条它接受一个主题并生成一个笑话
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAIprompt ChatPromptTemplate.from_template(tell me a short joke about {topic})
model ChatOpenAI(modelgpt-4)
output_parser StrOutputParser()chain prompt | model | output_parserchain.invoke({topic: ice cream})
输出
为什么冰淇淋从不被邀请参加派对\n\n因为当事情变热时它们总是滴下来 使用LCEL将不同的组件组合成一个单一的链条
chain prompt | model | output_parser
例子
from langchain_community.vectorstores import DocArrayInMemorySearch
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableParallel, RunnablePassthrough
from langchain_openai.chat_models import ChatOpenAI
from langchain_openai.embeddings import OpenAIEmbeddingsvectorstore DocArrayInMemorySearch.from_texts([harrison worked at kensho, bears like to eat honey],embeddingOpenAIEmbeddings(),
)
retriever vectorstore.as_retriever()template Answer the question based only on the following context:
{context}Question: {question}prompt ChatPromptTemplate.from_template(template)
model ChatOpenAI()
output_parser StrOutputParser()setup_and_retrieval RunnableParallel({context: retriever, question: RunnablePassthrough()}
)
chain setup_and_retrieval | prompt | model | output_parserchain.invoke(where did harrison work?) 在这种情况下组合的链条是
chain setup_and_retrieval | prompt | model | output_parser 智能体Agent
在大模型语境下可以理解成能自主理解、规划、执行复杂任务的系统。
Agent 包含了一组工具由大模型不断地思考选择合适的工具获得最后的结果。 上面的循环也能够使用下面的流程图来表达。 从这个意义上讲Agent 是一个循环体。在Agent 中LLM 起到了推理的作用它可以讲用户的需求分解成若干的任务选择合适的工具去执行。 Agent 就像一个“小工”比如一个瓦匠告诉他要完成的工作以及一些工具。并且简单的教他一些注意事项小工就开干了。他会选择不同的工具直到工作完成。 Agent 的效果很大程度上取决于大模型的理解能力同样的Agent 使用不同的大语言模型其效果变化很大。另外一个重要的因素是提示和描述在大语言模型应用中每个工具函数 都有一段描述大语言模型依靠阅读并理解工具的描述来决定使用哪一个工具。 agent 内部有一个类似运行时runtime 的程序AgentExecutor 。
next_action agent.get_action(...)
while next_action ! AgentFinish:observation run(next_action)next_action agent.get_action(..., next_action, observation)
return next_action multi-AgentlangGraph langGraph 是langchain的库用于构建多Agent 工作流multi-Agent workFlow) LangGraph 的核心概念之一是状态。每个图形执行都会创建一个状态该状态在执行时在图形中的节点之间传递并且每个节点在执行后使用其返回值更新此内部状态。图形更新其内部状态的方式由所选图形类型或自定义函数定义。 LangGraph本质上是一个状态机。这里的图就是状态图。与传统的状态图类似它也具有节点Node和边edges。它被称为认知架构的一类。
LangGraph 将黑盒的 AgentExecutor 透明化允许开发者定义内部的细节结构用图的方式从而实现更强大的功能。那么就可以用LangGraph 来重新实现原来的 AgentExecutor即实现一个最基础的 ReAct范式的 Agent 应用。 每个代理都可以有自己的提示符、LLM、工具和其他自定义代码以便与其他代理进行最佳协作。 下面是一个基于langGraph 的例子
from langchain_openai import ChatOpenAI
from langchain_core.messages import BaseMessage, HumanMessage
from langgraph.graph import END, MessageGraph
from langchain_core.tools import tool
from langgraph.prebuilt import ToolNode
from typing import Literal
import os
os.environ[OPENAI_API_KEY] sk-xxxxxxxxxxxxxxxxx
os.environ[OPENAI_BASE_URL] https://api.chatanywhere.tech/v1
model ChatOpenAI(temperature0)tool
def multiply(first_number: int, second_number: int):Multiplies two numbers together.return first_number * second_number
model ChatOpenAI(temperature0)
model_with_tools model.bind_tools(tools[multiply])graph MessageGraph()graph.add_node(oracle, model_with_tools)tool_node ToolNode([multiply])
graph.add_node(multiply, tool_node)
graph.add_edge(multiply, END)
graph.set_entry_point(oracle)
def router(state: list[BaseMessage]) - Literal[multiply, __end__]:tool_calls state[-1].additional_kwargs.get(tool_calls, [])if len(tool_calls):return multiplyelse:return ENDgraph.add_conditional_edges(oracle, router)
runnable graph.compile()
resultrunnable.invoke(HumanMessage(What is 123 * 456??))
print(result)
构建的图结构 大模型应用的关键是大模型本身 尽管大模型应用程序看上去与传统的程序架构相似的。但是它们是截然不同的传统程序的循环和跳转是根据条件判断的是确定的。而大语言模型的跳转循环是依靠大模型的判断和推理使用不同的大语言模型应用执行的效果是不同的。LLM 应用的另一个重要的地方就是各种提示和描述。比较确切的描述能够提升大语言模型应用的效果。说句不太贴切的话“大语言模型的应用程序的执行全靠大模型”猜“。调试LLM 应用的感觉就像训练一个小狗。很多程度靠”狗脑子十分灵光“。