11 lines
53 KiB
Plaintext
11 lines
53 KiB
Plaintext
|
{"url": "https://www.langchain.asia/", "host_url": "https://www.langchain.asia", "title": "LangChain中文网: 500页超详细中文文档教程,助力LLM/chatGPT应用开发 – LangChain中文网", "all_text": "开始\nLangChain中文网: 500页超详细中文文档教程,助力LLM/chatGPT应用开发\n\nLangChain 是一个开发由语言模型驱动的应用程序的框架。我们相信最强大和不同的应用程序不仅会通过 API 调用语言模型,\n还会:\n\n数据感知\n: 将语言模型连接到其他数据源\n具有代理性质\n: 允许语言模型与其环境交互\n\nLangChain 框架是基于以上原则设计的。\n这是文档的 Python stable 稳定版本。\n关于 Python最新版本 v0.0.206 的文档,请参见\n这里 (opens in a new tab)\n。\n关于 LangChain 的纯概念指南请见\n这里 (opens in a new tab)\n。\n关于 JavaScript 的文档,请参见\n这里 (opens in a new tab)\n。\n关于 COOKBOOK 的文档,请参见\n这里 (opens in a new tab)\n。\n入门指南\n查看以下指南,了解如何使用 LangChain 创建语言模型应用程序的详细说明。\n\n入门文档\n\n模块\nLangChain 提供了对几个主要模块的支持。\n针对每个模块,我们提供一些入门示例、指南、参考文档和概念指南。\n这些模块按照逐渐增加的复杂性排列如下:\n\n模型(models)\n: LangChain 支持的各种模型类型和模型集成。\n\n提示(prompts)\n: 包括提示管理、提示优化和提示序列化。\n\n内存(memory)\n: 内存是在链/代理调用之间保持状态的概念。LangChain 提供了一个标准的内存接口、一组内存实现及使用内存的链/代理示例。\n\n索引(indexes)\n: 与您自己的文本数据结合使用时,语言模型往往更加强大——此模块涵盖了执行此操作的最佳实践。\n\n链(chains)\n: 链不仅仅是单个 LLM 调用,还包括一系列调用(无论是调用 LLM 还是不同的实用工具)。LangChain 提供了一种标准的链接口、许多与其他工具的集成。LangChain 提供了用于常见应用程序的端到端的链调用。\n\n代理(agents)\n: 代理涉及 LLM 做出行动决策、执行该行动、查看一个观察结果,并重复该过程直到完成。LangChain 提供了一个标准的代理接口,一系列可供选择的代理,以及端到端代理的示例。\n\n用例\n上述模块可以以多种方式使用。LangChain 还提供指导和帮助。以下是 LangChain 支持的一些常见用例。\n\n自治代理(autonomous agents)\n: 长时间运行的代理会采取多步操作以尝试完成目标。 AutoGPT 和 BabyAGI就是典型代表。\n\n代理模拟(agent simulations)\n: 将代理置于封闭环境中观察它们如何相互作用,如何对事件作出反应,是观察它们长期记忆能力的有趣方法。\n\n个人助理(personal assistants)\n: 主要的 LangChain 使用用例。个人助理需要采取行动、记住交互并具有您的有关数据的知识。\n\n问答(question answering)\n: 第二个重大的 LangChain 使用用例。仅利用这些文档中的信息来构建答案,回答特定文档中的问题。\n\n聊天机器人(chatbots)\n: 由于语言模型擅长生成文本,因此它们非常适合创建聊天机器人。\n\n查询表格数据(tabular)\n: 如果您想了解如何使用 LLM 查询存储在表格格式中的数据(csv、SQL、数据框等),请阅读此页面。\n\n代码理解(code)\n: 如果您想了解如何使用 LLM 查询来自 GitHub 的源代码,请阅读此页面。\n\n与 API 交互(apis)\n: 使LLM 能够与 API 交互非常强大,以便为它们提供更实时的信息并允许它们采取行动。\n\n提取(extraction)\n: 从文本中提取结构化信息。\n\n摘要(summarization)\n: 将较长的文档汇总为更短、更简洁的信息块。一种数据增强生成的类型。\n\n评估(evaluation)\n: 生成模型是极难用传统度量方法评估的。\n一种新的评估方式是<E5BC8F><E698AF>
|
|||
|
{"url": "https://www.langchain.asia/getting_started/getting_started", "host_url": "https://www.langchain.asia", "title": "\n快速入门指南 – LangChain中文网", "all_text": "快速入门指南开始\n\n快速入门指南\n本教程将简要介绍如何使用 LangChain 构建端到端语言模型应用程序。\n安装\n首先,使用以下命令安装 LangChain:\n\n```code\npip install langchain\n# or\nconda install langchain -c conda-forge\n```\n\n环境设定\n使用 LangChain 通常需要与一个或多个模型提供程序、数据存储、 API 等集成。\n对于这个例子,我们将使用 OpenAI 的 API,所以我们首先需要安装他们的 SDK:\n\n```code\npip install openai\n```\n\n然后我们需要在终端设置环境变量。\n\n```code\nexport OPENAI_API_KEY=\"...\"\n```\n\n或者,你可以在 Jupiter 教程(或 Python 脚本)内部完成:\n\n```code\nimport os\nos.environ[\"OPENAI_API_KEY\"] = \"...\"\n```\n\n构建语言模型应用程序: LLM\n现在我们已经安装了 LangChain 并设置了我们的环境,我们可以开始构建我们的语言模型应用程序了。\nLangChain 提供了许多可用于构建语言模型应用程序的模块。\n模块可以组合起来创建更复杂的应用程序,或者单独用于简单的应用程序。\nLLM: 从语言模型中获取预测\nLangChain 最基本的构建块是对某些输入调用 LLM。\n让我们来看一个简单的例子。\n我们假设我们正在构建一个基于公司产品生成公司名称的服务。\n为此,我们首先需要导入 LLM 包装器。\n\n```code\nfrom langchain.llms import OpenAI\n```\n\nLLM初始化和调用\n然后我们可以用任何参数初始化包装器。\n在这个例子中,我们可能希望输出更加随机,所以我们将以温度(temperature)初始化它。\n\n```code\nllm = OpenAI(temperature=0.9)\n```\n\n我们现在可以根据一些输入调用它!\n\n```code\ntext = \"What would be a good company name for a company that makes colorful socks?\"\nprint(llm(text))\nFeetful of Fun\n```\n\n有关如何在 LangChain 中使用 LLM 的详细信息,请参阅 LLM 入门指南。\n提示模板(PromptTemplate): 管理 LLM 的提示\n调用 LLM 是很好的第一步,但这仅仅是个开始。\n通常在应用程序中使用 LLM 时,不会将用户输入直接发送到 LLM。\n相反,您可能接受用户输入并构造一个提示符,然后将其发送给 LLM。\n例如,在前一个示例中,我们传入的文本被硬编码为询问一家生产彩色袜子的公司的名称。在这个虚构的服务中,我们希望只获取描述公司业务的用户输入,然后用这些信息格式化提示符。\n使用LangChain,这个事情变得很简单!\n首先让我们定义提示模板:\n\n```code\nfrom langchain.prompts import PromptTemplate\n\nprompt = PromptTemplate(\ninput_variables=[\"product\"],\ntemplate=\"What is a good name for a company that makes {product}?\",\n)\n```\n\n现在让我们看看它是如何工作的!\n我们可以调用\n```code\n. format\n```\n方法来格式化它。\n\n```code\nprint(prompt.format(product=\"colorful socks\"))\nWhat is a good name for a company that makes colorful socks?\n```\n\n有关详细信息,请参阅入门指南中的提示。\n链: 在多步骤的工作流中组合 LLM 和提示\n到目前为止,我们已经自己处理了单独的\n```code\nPromptTemplate\n```\n和\n```code\nLLM\n```\n。\n但是,真正的应用程序不仅仅是一个,而是它们的组合。\n在 LangChain,链是由链组成的,可以是 LLM 这样的原始链,也可以是其他链。\n最核心的链类型是\n```code\nLLMChain\n```\n,它由\n```code\nPromptTemplate\n```\n和\n```code\nLLM\n```\n组成。\n扩展前面的示例,我们可以构造一个\n```code\nLLMChain\n```\n.\n它接受用户输入,使用 PromptTemplate 对其进行格式化,然后将格式化后的响应传递给\n```code\nLLM\n```\n。\n\n```code\nfrom langchain.prompts import PromptTemplate\nfrom langchain.llms import OpenAI\n\nllm = OpenAI(temp
|
|||
|
{"url": "https://www.langchain.asia/modules/agents", "host_url": "https://www.langchain.asia", "title": "代理人(Agents) – LangChain中文网", "all_text": "6大核心模块(Modules)代理(Agents)\n\n代理人(Agents)\n概念指南 (opens in a new tab)\n有些应用程序不仅需要预先确定的LLM/其他工具调用链,而且可能需要根据用户输入的不同而产生不同的链条。\n在这些类型的链条中,有一个“代理人”可以访问一套工具。\n根据用户输入,代理人可以决定是否调用其中任何一个工具。\n在本文档的本节中,我们首先从“快速入门”开始,介绍如何以端到端的方式使用与代理人相关的所有内容。\n然后,我们将文档分成以下几个部分:\n工具(tools)\n介绍LangChain支持的各种工具的概述。\n代理人 (agents)\n介绍不同代理人类型的概述。\n工具包 (toolkits)\n介绍工具包的概述,以及LangChain支持的不同工具包的示例。开始入门(Getting Started)"}
|
|||
|
{"url": "https://www.langchain.asia/modules/agents/getting_started", "host_url": "https://www.langchain.asia", "title": "快速入门# – LangChain中文网", "all_text": "6大核心模块(Modules)代理(Agents)入门(Getting Started)\n\n快速入门#\n代理使用LLM来确定采取哪些行动以及顺序。\n一个动作可以是使用工具并观察其输出,或返回给用户。\n当代理被正确使用时,它们可以非常强大。本教程的目的是向您展示如何通过最简单、最高级别的API轻松使用代理。\n为了加载代理,您应该了解以下概念:\n\n工具:执行特定职责的函数。这可以是诸如:Google搜索、数据库查找、Python REPL、其他链等。工具的接口目前是期望有一个字符串作为输入,一个字符串作为输出的函数。\n\nLLM:为代理提供动力的语言模型。\n\n代理:要使用的代理。这应该是一个引用支持代理类的字符串。因为本教程专注于最简单、最高级别的API,所以只涵盖使用标准支持的代理。如果您想实现自定义代理,请参阅自定义代理的文档(即将推出)。\n\n代理人:支持的代理人清单及其规格,请参见此处。\n工具:预定义工具及其规格的清单,请参见此处。\n\n```code\nfrom langchain.agents import load_tools\nfrom langchain.agents import initialize_agent\nfrom langchain.agents import AgentType\nfrom langchain.llms import OpenAI\n\n```\n\n首先,让我们加载我们要使用的语言模型来控制代理人。\n\n```code\nllm = OpenAI(temperature=0)\n\n```\n\n接下来,让我们加载一些要使用的工具。请注意,\n```code\nllm-math\n```\n工具使用LLM,因此我们需要传递它。\n\n```code\ntools = load_tools([\"serpapi\", \"llm-math\"], llm=llm)\n\n```\n\n最后,让我们使用工具、语言模型和我们想要使用的代理人类型初始化一个代理人。\n\n```code\nagent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)\n\n```\n\n现在让我们来测试一下吧!\n\n```code\nagent.run(\"Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?\")\n\n```\n\n```code\n> Entering new AgentExecutor chain...\nI need to find out who Leo DiCaprio's girlfriend is and then calculate her age raised to the 0.43 power.\nAction: Search\nAction Input: \"Leo DiCaprio girlfriend\"\nObservation: Camila Morrone\nThought: I need to find out Camila Morrone's age\nAction: Search\nAction Input: \"Camila Morrone age\"\nObservation: 25 years\nThought: I need to calculate 25 raised to the 0.43 power\nAction: Calculator\nAction Input: 25^0.43\nObservation: Answer: 3.991298452658078\n\nThought: I now know the final answer\nFinal Answer: Camila Morrone is Leo DiCaprio's girlfriend and her current age raised to the 0.43 power is 3.991298452658078.\n\n> Finished chain.\n\n```\n\n```code\n\"Camila Morrone is Leo DiCaprio's girlfriend and her current age raised to the 0.43 power is 3.991298452658078.\"\n\n```\n代理(Agents)代理(Agents)"}
|
|||
|
{"url": "https://www.langchain.asia/modules/agents/agents", "host_url": "https://www.langchain.asia", "title": "代理人 – LangChain中文网", "all_text": "6大核心模块(Modules)代理(Agents)代理(Agents)\n\n代理人\n\n注意 概念指南 (opens in a new tab)\n\n在本文档的这一部分中,我们涵盖了不同类型的代理人,不考虑它们使用哪些特定工具。\n有关不同类型代理人的高级概述,请参阅以下文档。\n\n代理人类型\n\n有关如何创建自定义代理人的文档,请参见以下内容。\n\n自定义代理人\n自定义LLM代理人\n自定义LLM代理人(带有ChatModel)\n自定义MRKL代理人\n自定义MultiAction代理人\n具有工具检索的自定义代理人\n\n我们还有深入研究每种代理人类型的文档。\n\n对话代理人(用于聊天)\nLLM代理人\nMRKL代理人\nMultiAction代理人\n工具检索代理人\n入门(Getting Started)代理类型(Agent Types)"}
|
|||
|
{"url": "https://www.langchain.asia/modules/agents/agents/agent_types", "host_url": "https://www.langchain.asia", "title": "代理类型# – LangChain中文网", "all_text": "6大核心模块(Modules)代理(Agents)代理(Agents)代理类型(Agent Types)\n\n代理类型#\n代理使用LLM(语言模型)来确定应采取哪些操作以及以何顺序执行这些操作。\n动作可能是使用工具并观察其输出,或向用户返回响应。\n以下是LangChain中可用的代理:\n\n```code\nzero-shot-react-description\n```\n#\n此代理使用ReAct框架,仅基于工具的描述来确定要使用的工具。\n可以提供任意数量的工具。\n此代理需要为每个工具提供描述。\n\n```code\nreact-docstore\n```\n#\n这个代理使用ReAct框架与文档存储进行交互。\n必须提供两个工具:一个\n```code\nSearch\n```\n工具和一个\n```code\nLookup\n```\n工具(它们必须被命名为这样)。\n\n```code\nSearch\n```\n工具应该搜索文档,而\n```code\nLookup\n```\n工具应该查找最近找到的文档中的一个术语。\n这个代理相当于最初的ReAct论文 (opens in a new tab),特别是维基百科的例子。\n\n```code\nself-ask-with-search\n```\n#\n这个代理使用一个被命名为\n```code\nIntermediate Answer\n```\n的工具。\n这个工具应该能够查找问题的事实性答案。\n这个代理相当于最初的self ask with search paper (opens in a new tab),其中提供了Google搜索API作为工具。\n\n```code\nconversational-react-description\n```\n#\n这个代理程序旨在用于对话环境中。提示设计旨在使代理程序有助于对话。\n它使用ReAct框架来决定使用哪个工具,并使用内存来记忆先前的对话交互。代理(Agents)自定义代理(Custom Agent)"}
|
|||
|
{"url": "https://www.langchain.asia/modules/agents/agents/custom_agent", "host_url": "https://www.langchain.asia", "title": "自定义代理 (Custom Agents) – LangChain中文网", "all_text": "6大核心模块(Modules)代理(Agents)代理(Agents)自定义代理(Custom Agent)\n\n自定义代理 (Custom Agents)\n本教程将介绍如何创建自己的自定义代理 (Custom Agents)。\n一个代理 (Agent) 由二个部分组成:\n\n工具 tool:代理可以使用的工具。\n代理执行器 :这决定了采取哪些行动。\n\n在本教程里,我们将介绍如何创建自定义代理。\n\n```code\nfrom langchain.agents import Tool, AgentExecutor, BaseSingleActionAgent\nfrom langchain import OpenAI, SerpAPIWrapper\n\n```\n\n```code\nsearch = SerpAPIWrapper()\ntools = [\nTool(\nname = \"Search\",\nfunc=search.run,\ndescription=\"useful for when you need to answer questions about current events\",\nreturn_direct=True\n)\n]\n\n```\n\n```code\nfrom typing import List, Tuple, Any, Union\nfrom langchain.schema import AgentAction, AgentFinish\n\nclass FakeAgent(BaseSingleActionAgent):\n\"\"\"Fake Custom Agent.\"\"\"\n\n@property\ndef input_keys(self):\nreturn [\"input\"]\n\ndef plan(\nself, intermediate_steps: List[Tuple[AgentAction, str]], **kwargs: Any\n) -> Union[AgentAction, AgentFinish]:\n\"\"\"Given input, decided what to do.\n\nArgs:\nintermediate_steps: Steps the LLM has taken to date,\nalong with observations\n**kwargs: User inputs.\n\nReturns:\nAction specifying what tool to use.\n\"\"\"\nreturn AgentAction(tool=\"Search\", tool_input=kwargs[\"input\"], log=\"\")\n\nasync def aplan(\nself, intermediate_steps: List[Tuple[AgentAction, str]], **kwargs: Any\n) -> Union[AgentAction, AgentFinish]:\n\"\"\"Given input, decided what to do.\n\nArgs:\nintermediate_steps: Steps the LLM has taken to date,\nalong with observations\n**kwargs: User inputs.\n\nReturns:\nAction specifying what tool to use.\n\"\"\"\nreturn AgentAction(tool=\"Search\", tool_input=kwargs[\"input\"], log=\"\")\n```\n\n```code\nagent = FakeAgent()\n```\n\n```code\nagent_executor = AgentExecutor.from_agent_and_tools(agent=agent, tools=tools, verbose=True)\n```\n\n```code\nagent_executor.run(\"How many people live in canada as of 2023?\")\n```\n\n```code\n> Entering new AgentExecutor chain...\nThe current population of Canada is 38,669,152 as of Monday, April 24, 2023, based on Worldometer elaboration of the latest United Nations data.\n\n> Finished chain.\n```\n\n```code\n'The current population of Canada is 38,669,152 as of Monday, April 24, 2023, based on Worldometer elaboration of the latest United Nations data.'\n```\n代理类型(Agent Types)带工具检索的自定义代理(Custom Agent with Tool Retrieval)"}
|
|||
|
{"url": "https://www.langchain.asia/modules/agents/agents/custom_agent_with_tool_retrieval", "host_url": "https://www.langchain.asia", "title": "带工具检索的自定义代理# – LangChain中文网", "all_text": "6大核心模块(Modules)代理(Agents)代理(Agents)带工具检索的自定义代理(Custom Agent with Tool Retrieval)\n\n带工具检索的自定义代理#\n\n带工具检索的自定义代理 custom-agent-with-tool-retrieval\n\n本教程,假定你已经熟悉代理工作原理。\n\n本教程介绍的新想法是使用检索来选择要用于回答代理查询的工具集。\n当你有很多工具可供选择时,这非常有用。你不能在提示中放置所有工具的描述(由于上下文长度问题),因此你动态选择你想要在运行时考虑使用的N个工具。\n我们将创建一个有点伪需求的例子。\n我们将有一个合适的工具(搜索),然后99个假工具,这只是废话。\n然后,我们将在提示模板中添加一个步骤,该步骤接受用户输入并检索与查询相关的工具。\n设置环境#\n进行必要的导入等设置。\n\n```code\nfrom langchain.agents import Tool, AgentExecutor, LLMSingleActionAgent, AgentOutputParser\nfrom langchain.prompts import StringPromptTemplate\nfrom langchain import OpenAI, SerpAPIWrapper, LLMChain\nfrom typing import List, Union\nfrom langchain.schema import AgentAction, AgentFinish\nimport re\n\n```\n\n设置工具#\n我们将创建一个合适的工具(搜索)和99个不相关的工具。\n\n```code\n# Define which tools the agent can use to answer user queries\nsearch = SerpAPIWrapper()\nsearch_tool = Tool(\nname = \"Search\",\nfunc=search.run,\ndescription=\"useful for when you need to answer questions about current events\"\n)\ndef fake_func(inp: str) -> str:\nreturn \"foo\"\nfake_tools = [\nTool(\nname=f\"foo-{i}\",\nfunc=fake_func,\ndescription=f\"a silly function that you can use to get more information about the number {i}\"\n)\nfor i in range(99)\n]\nALL_TOOLS = [search_tool] + fake_tools\n\n```\n\n工具检索器(tool-retriever)#\n我们将使用向量存储来为每个工具描述创建嵌入。\n然后,对于传入的查询,我们可以为该查询创建嵌入,并进行相关工具的相似性搜索。\n\n```code\nfrom langchain.vectorstores import FAISS\nfrom langchain.embeddings import OpenAIEmbeddings\nfrom langchain.schema import Document\n\n```\n\n```code\ndocs = [Document(page_content=t.description, metadata={\"index\": i}) for i, t in enumerate(ALL_TOOLS)]\n\n```\n\n```code\nvector_store = FAISS.from_documents(docs, OpenAIEmbeddings())\n\n```\n\n```code\nretriever = vector_store.as_retriever()\n\ndef get_tools(query):\ndocs = retriever.get_relevant_documents(query)\nreturn [ALL_TOOLS[d.metadata[\"index\"]] for d in docs]\n\n```\n\n现在我们可以测试这个检索器,看看它是否有效。\n\n```code\nget_tools(\"whats the weather?\")\n\n```\n\n```code\n[Tool(name='Search', description='useful for when you need to answer questions about current events', return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x114b28a90>, func=<bound method SerpAPIWrapper.run of SerpAPIWrapper(search_engine=<class 'serpapi.google_search.GoogleSearch'>, params={'engine': 'google', 'google_domain': 'google.com', 'gl': 'us', 'hl': 'en'}, serpapi_api_key='c657176b327b17e79b55306ab968d164ee2369a7c7fa5b3f8a5f7889903de882', aiosession=None)>, coroutine=None),\nTool(name='foo-95', description='a silly function that you can use to get more information about the number 95', return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x114b28a90>, func=<function fake_func at 0x15e5bd1f0>, coroutine=None),\nTool(name='foo-12', description='a silly function that you can use to get more information about the number 12', return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x114b28a90>, func=<function fake_func at 0x15e5b
|
|||
|
{"url": "https://www.langchain.asia/modules/agents/agents/custom_llm_chat_agent", "host_url": "https://www.langchain.asia", "title": "自定义LLM代理(带有ChatModel) – LangChain中文网", "all_text": "6大核心模块(Modules)代理(Agents)代理(Agents)LLM 聊天自定义代理(Custom LLM Chat Agent)\n\n自定义LLM代理(带有ChatModel)\n本笔记将介绍如何基于聊天模型创建自己的自定义代理。\nLLM聊天代理由三个部分组成:\n\nPromptTemplate:这是用于指示语言模型该做什么的提示模板\nChatModel:这是驱动代理的语言模型\n\n```code\nstop\n```\n序列:指示LLM在找到此字符串时停止生成\nOutputParser:确定如何将LLM输出解析为AgentAction或AgentFinish对象。\n\nLLMAgent用于代理执行器。这个代理执行器在很大程度上可以看作是一个循环:\n\n将用户输入和任何先前的步骤传递给代理(在这种情况下是LLMAgent)\n如果代理返回\n```code\nAgentFinish\n```\n,则将其直接返回给用户。\n带工具检索的自定义代理(Custom Agent with Tool Retrieval)MRKL 自定义代理(Custom MRKL Agent)"}
|
|||
|
{"url": "https://www.langchain.asia/modules/agents/agents/custom_mrkl_agent", "host_url": "https://www.langchain.asia", "title": "自定义MRKL代理 – LangChain中文网", "all_text": "6大核心模块(Modules)代理(Agents)代理(Agents)MRKL 自定义代理(Custom MRKL Agent)\n\n自定义MRKL代理\n本文档介绍如何创建自己的自定义MRKL Agent。\nMRKL Agent由三个部分组成:\n\n工具:代理可用的工具。\nLLMChain:生成以一定方式解析的文本,以确定要采取哪个动作。\n代理类本身:解析LLMChain的输出,以确定要采取哪个动作。\n\n本文档介绍如何通过创建自定义LLMChain来创建自定义MRKL代理。\n自定义LLMChain(Custom LLMChain)#\n创建自定义代理的第一种方法是使用现有的代理类,但使用自定义LLMCain。\n这是创建自定义代理的最简单方法。\n强烈建议您使用\n```code\nZeroShotAgent\n```\n,因为目前这是最通用的一个。\n创建自定义LLMCain的大部分工作都归结为提示符。因为我们使用的是一个现有的代理类来解析输出,所以提示符中要生成该格式的文本是非常重要的。此外,我们目前需要一个 agent_scratchpad 输入变量来记录以前的操作和观察结果。\n这几乎总是提示符的最后一部分。\n但是,除了这些说明之外,您还可以根据需要自定义提示。\n为了确保提示符包含适当的指令,我们将在该类上使用\n```code\nhelper\n```\n方法。\n\n```code\nZeroShotAgent\n```\n的\n```code\nhelper\n```\n方法接受以下参数:\n\ntools:座席将有权访问的工具列表,用于设置提示的格式。\nprefix:要放在工具列表前面的字符串。\nsuffix: 放在工具列表后面的字符串。\ninput_variables:最后提示所期望的输入变量列表。\n\n在这个练习中,我们将给予我们的代理访问Google搜索,我们将定制它,我们将让它回答为盗版。\n\n```code\nfrom langchain.agents import ZeroShotAgent, Tool, AgentExecutor\nfrom langchain import OpenAI, SerpAPIWrapper, LLMChain\n```\n\n```code\nsearch = SerpAPIWrapper()\ntools = [\nTool(\nname = \"Search\",\nfunc=search.run,\ndescription=\"useful for when you need to answer questions about current events\"\n)\n]\n```\n\n```code\nprefix = \"\"\"Answer the following questions as best you can, but speaking as a pirate might speak. You have access to the following tools:\"\"\"\nsuffix = \"\"\"Begin! Remember to speak as a pirate when giving your final answer. Use lots of \"Args\"\n\nQuestion: {input}\n{agent_scratchpad}\"\"\"\n\nprompt = ZeroShotAgent.create_prompt(\ntools,\nprefix=prefix,\nsuffix=suffix,\ninput_variables=[\"input\", \"agent_scratchpad\"]\n)\n```\n\n如果我们感到好奇,我们现在可以看看最终的提示模板,看看它看起来像当它的所有放在一起。\n\n```code\nprint(prompt.template)\n```\n\n```code\nAnswer the following questions as best you can, but speaking as a pirate might speak. You have access to the following tools:\n\nSearch: useful for when you need to answer questions about current events\n\nUse the following format:\n\nQuestion: the input question you must answer\nThought: you should always think about what to do\nAction: the action to take, should be one of [Search]\nAction Input: the input to the action\nObservation: the result of the action\n... (this Thought/Action/Action Input/Observation can repeat N times)\nThought: I now know the final answer\nFinal Answer: the final answer to the original input question\n\nBegin! Remember to speak as a pirate when giving your final answer. Use lots of \"Args\"\n\nQuestion: {input}\n{agent_scratchpad}\n\n```\n\n请注意,我们能够为代理提供自定义的提示模板,即不限于由\n```code\ncreate_prompt\n```\n函数生成的提示,假设它满足代理的要求。\n例如,对于 ZeroShotAgent ,我们需要确保它满足以下要求。\n应该有一个以“Action:”开头的字符串和一个以“Action Input:”开头的字符串,并且两者都应该
|