
如何快速实现REST API集成以优化业务流程
通常,大型语言模型(LLM)通常通过RAG(Retrieval-Augmented Generation)架构来增强其存储器能力。然而,LLM智能体(LLM Agents)不仅能增强存储器,还将推理、工具、答案和操作都集成到了其系统中。
LLM是一种人工智能技术,可以生成类似人类语言的文本,而LLM智能体则是一种扩展了LLM的系统,它可以执行更复杂的任务,例如搜索信息、使用工具和执行操作。
简单的“输入-输出”LLM使用方式与思维链、具有自洽性的思维链、思维树等技术之间的视觉差异。
LLM的性能得到不断的改进,有许多技术和方法用来提升。我们探讨以下技术:
这些技术的应用有助于改善大型语言模型在各种自然语言处理任务上的性能,使其更加强大和灵活。
本文大量使用了Langsmith平台,该平台用于生产化LLM应用程序。例如,在构建思维树提示时,将子提示保存在提示存储库中,然后进行加载:
from langchain import hub
from langchain.chains import SequentialChain
cot_step1 = hub.pull("rachnogstyle/nlw_jan24_cot_step1")
cot_step2 = hub.pull("rachnogstyle/nlw_jan24_cot_step2")
cot_step3 = hub.pull("rachnogstyle/nlw_jan24_cot_step3")
cot_step4 = hub.pull("rachnogstyle/nlw_jan24_cot_step4")
model = "gpt-3.5-turbo"
chain1 = LLMChain(
llm=ChatOpenAI(temperature=0, model=model),
prompt=cot_step1,
output_key="solutions"
)
chain2 = LLMChain(
llm=ChatOpenAI(temperature=0, model=model),
prompt=cot_step2,
output_key="review"
)
chain3 = LLMChain(
llm=ChatOpenAI(temperature=0, model=model),
prompt=cot_step3,
output_key="deepen_thought_process"
)
chain4 = LLMChain(
llm=ChatOpenAI(temperature=0, model=model),
prompt=cot_step4,
output_key="ranked_solutions"
)
overall_chain = SequentialChain(
chains=[chain1, chain2, chain3, chain4],
input_variables=["input", "perfect_factors"],
output_variables=["ranked_solutions"],
verbose=True
)
在这里想说明的是在像Langsmith这样的LLMOps系统中定义推理步骤和版本化它们的正确过程。此外,还可以在公共存储库查看其他流行推理技术的示例,如ReAct或带搜索功能的 Self-ask:
prompt = hub.pull("hwchase17/react")
prompt = hub.pull("hwchase17/self-ask-with-search")
其他值得注意的方法包括:
我们可以将大脑中不同类型的记忆映射到LLM架构的各个组成部分上
from langchain_community.chat_message_histories import ChatMessageHistory
from langchain_core.runnables.history import RunnableWithMessageHistory
from langchain.agents import AgentExecutor
from langchain.agents import create_openai_functions_agent
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
tools = [retriever_tool]
agent = create_openai_functions_agent(
llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
message_history = ChatMessageHistory()
agent_with_chat_history = RunnableWithMessageHistory(
agent_executor,
lambda session_id: message_history,
input_messages_key="input",
history_messages_key="chat_history",
)
长期记忆:长期记忆存储事实性知识和程序性指示。在人工智能模型中,这表现为用于训练和微调的数据。此外,长期记忆还支持RAG框架的操作,使Agents能够访问并将已学信息合并到其响应中。就像是Agents提供有关和相关输出的全面知识存储库一样。在代码中,通常将其添加为向量化数据库:
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.document_loaders import WebBaseLoader
from langchain_community.vectorstores import FAISS
from langchain_openai import OpenAIEmbeddings
loader = WebBaseLoader("https://neurons-lab.com/")
docs = loader.load()
documents = RecursiveCharacterTextSplitter(
chunk_size=1000, chunk_overlap=200
).split_documents(docs)
vector = FAISS.from_documents(documents, OpenAIEmbeddings())
retriever = vector.as_retriever()
在实际操作中,希望通过单独的推理链来增强Agents(可以是另一种 LLM,即特定领域或另一种用于图像分类的 ML 模型),或者使用基于规则或API的方法来增强Agents。
ChatGPT Plugins 和 OpenAI API 函数调用就是利用工具使用能力增强 LLM 在实践中发挥作用的良好范例。
from langchain.utilities.tavily_search import TavilySearchAPIWrapper
from langchain.tools.tavily_search import TavilySearchResults
search = TavilySearchAPIWrapper()
tavily_tool = TavilySearchResults(api_wrapper=search)
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.0)
agent_chain = initialize_agent(
[retriever_tool, tavily_tool],
llm,
agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
)
自定义工具:定义自己的工具也非常简单。以计算字符串长度的工具为例进行分析。需要使用@tooldecorator让Langchain知道这个工具。然后,不要忘记输入和输出的类型。但最重要的部分是函数注释之间的""" """
——这就是Agents如何知道这个工具是做什么的,并将此描述与其他工具的描述进行比较:
from langchain.pydantic_v1 import BaseModel, Field
from langchain.tools import BaseTool, StructuredTool, tool
@tool
def calculate_length_tool(a: str) -> int:
"""The function calculates the length of the input string."""
return len(a)
llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.0)
agent_chain = initialize_agent(
[retriever_tool, tavily_tool, calculate_length_tool],
llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True,
)
你可能会看到一个错误——它没有正确提取Neurons Lab公司的描述,尽管调用了正确的自定义长度计算函数,最终结果却是错误的。可以试着进行修复。
可以将所有架构部件组合在一起成为简洁版本。注意,可以很容易地分解并单独定义:
最终的Agents定义会像这样简单:
llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
agent_with_chat_history = RunnableWithMessageHistory(
agent_executor,
lambda session_id: message_history,
input_messages_key="input",
history_messages_key="chat_history",
)
我们定义了一个完整的架构,其中短期记忆起着至关重要的作用。Agents获得了消息历史记录和一个作为推理结构的素描板,使其能够拉取正确的网站描述并计算其长度。
本文章转载微信公众号@AI科技论谈