{"id":1253,"date":"2024-04-29T09:36:31","date_gmt":"2024-04-29T09:36:31","guid":{"rendered":"https:\/\/www.nicekj.com\/?p=1253"},"modified":"2024-04-29T09:38:23","modified_gmt":"2024-04-29T09:38:23","slug":"langchaindazaozijidellmyingyongjingdongyunjishutuandui","status":"publish","type":"post","link":"https:\/\/www.nicekj.com\/langchaindazaozijidellmyingyongjingdongyunjishutuandui.html","title":{"rendered":"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f"},"content":{"rendered":"<h1 data-id=\"heading-0\">1\u3001LangChain\u662f\u4ec0\u4e48<\/h1>\n<p>LangChain\u662f\u4e00\u4e2a\u6846\u67b6\uff0c\u7528\u4e8e\u5f00\u53d1\u7531LLM\u9a71\u52a8\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u53ef\u4ee5\u7b80\u5355\u8ba4\u4e3a\u662fLLM\u9886\u57df\u7684Spring\uff0c\u4ee5\u53ca\u5f00\u6e90\u7248\u7684ChatGPT\u63d2\u4ef6\u7cfb\u7edf\u3002\u6838\u5fc3\u76842\u4e2a\u529f\u80fd\u4e3a\uff1a<\/p>\n<p>1\uff09\u53ef\u4ee5\u5c06 LLM \u6a21\u578b\u4e0e\u5916\u90e8\u6570\u636e\u6e90\u8fdb\u884c\u8fde\u63a5\u3002<\/p>\n<p>2\uff09\u5141\u8bb8\u4e0e LLM \u6a21\u578b\u4e0e\u73af\u5883\u8fdb\u884c\u4ea4\u4e92\uff0c\u901a\u8fc7Agent\u4f7f\u7528\u5de5\u5177\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/3b63a443c807869f81ae4b4074ca1880.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h1 data-id=\"heading-1\">2\u3001LangChain\u6838\u5fc3\u7ec4\u4ef6<\/h1>\n<p>LangChain\u63d0\u4f9b\u4e86\u5404\u79cd\u4e0d\u540c\u7684\u7ec4\u4ef6\u5e2e\u52a9\u4f7f\u7528LLM\uff0c\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u6838\u5fc3\u7ec4\u4ef6\u6709Models\u3001Indexes\u3001Chains\u3001Memory\u4ee5\u53caAgent\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/ef38d9ef4241bbb36615d0a421013e44.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h2 data-id=\"heading-2\">2.1 Models<\/h2>\n<p>LangChain\u672c\u8eab\u4e0d\u63d0\u4f9bLLM\uff0c\u63d0\u4f9b\u901a\u7528\u7684\u63a5\u53e3\u8bbf\u95eeLLM\uff0c\u53ef\u4ee5\u5f88\u65b9\u4fbf\u7684\u66f4\u6362\u5e95\u5c42\u7684LLM\u4ee5\u53ca\u81ea\u5b9a\u4e49\u81ea\u5df1\u7684LLM\u3002\u4e3b\u8981\u67092\u5927\u7c7b\u7684Models\uff1a<\/p>\n<p>1\uff09LLM\uff1a\u5c06\u6587\u672c\u5b57\u7b26\u4e32\u4f5c\u4e3a\u8f93\u5165\u5e76\u8fd4\u56de\u6587\u672c\u5b57\u7b26\u4e32\u7684\u6a21\u578b\uff0c\u7c7b\u4f3cOpenAI\u7684text-davinci-003<\/p>\n<p>2\uff09Chat Models\uff1a\u7531\u8bed\u8a00\u6a21\u578b\u652f\u6301\u4f46\u5c06\u804a\u5929\u6d88\u606f\u5217\u8868\u4f5c\u4e3a\u8f93\u5165\u5e76\u8fd4\u56de\u804a\u5929\u6d88\u606f\u7684\u6a21\u578b\u3002\u4e00\u822c\u4f7f\u7528\u7684ChatGPT\u4ee5\u53caClaude\u4e3aChat Models\u3002<\/p>\n<p>\u4e0e\u6a21\u578b\u4ea4\u4e92\u7684\uff0c\u57fa\u672c\u4e0a\u662f\u901a\u8fc7\u7ed9\u4e0ePrompt\u7684\u65b9\u5f0f\uff0cLangChain\u901a\u8fc7PromptTemplate\u7684\u65b9\u5f0f\u65b9\u4fbf\u6211\u4eec\u6784\u5efa\u4ee5\u53ca\u590d\u7528Prompt\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">from langchain import PromptTemplate<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-attr\">prompt_template<\/span> = <span class=\"hljs-string\">'''\u4f5c\u4e3a\u4e00\u4e2a\u8d44\u6df1\u7f16\u8f91\uff0c\u8bf7\u9488\u5bf9 &gt;&gt;&gt; \u548c &lt;&lt;&lt; \u4e2d\u95f4\u7684\u6587\u672c\u5199\u4e00\u6bb5\u6458\u8981\u3002 <\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">&gt;&gt;&gt; {text} &lt;&lt;&lt;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">'''<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-attr\">prompt<\/span> = PromptTemplate(template=prompt_template, input_variables=[<span class=\"hljs-string\">\"text\"<\/span>])<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">print(prompt.format_prompt(<span class=\"hljs-attr\">text<\/span>=<span class=\"hljs-string\">\"\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8\"<\/span>))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><\/span>\n<\/code><\/pre>\n<h2 data-id=\"heading-3\">2.2 Indexes<\/h2>\n<p>\u7d22\u5f15\u548c\u5916\u90e8\u6570\u636e\u8fdb\u884c\u96c6\u6210\uff0c\u7528\u4e8e\u4ece\u5916\u90e8\u6570\u636e\u83b7\u53d6\u7b54\u6848\u3002\u5982\u4e0b\u56fe\u6240\u793a\uff0c\u4e3b\u8981\u7684\u6b65\u9aa4\u6709<\/p>\n<p>1\uff09\u901a\u8fc7Document Loaders\u52a0\u8f7d\u5404\u79cd\u4e0d\u540c\u7c7b\u578b\u7684\u6570\u636e\u6e90,<\/p>\n<p>2\uff09\u901a\u8fc7Text Splitters\u8fdb\u884c\u6587\u672c\u8bed\u4e49\u5206\u5272<\/p>\n<p>3\uff09\u901a\u8fc7Vectorstore\u8fdb\u884c\u975e\u7ed3\u6784\u5316\u6570\u636e\u7684\u5411\u91cf\u5b58\u50a8<\/p>\n<p>4\uff09\u901a\u8fc7Retriever\u8fdb\u884c\u6587\u6863\u6570\u636e\u68c0\u7d22<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/fcb6aaa41a41a0337e3889a994a472dc.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h3 data-id=\"heading-4\">2.2.1 Document Loaders<\/h3>\n<p>LangChain\u901a\u8fc7Loader\u52a0\u8f7d\u5916\u90e8\u7684\u6587\u6863\uff0c\u8f6c\u5316\u4e3a\u6807\u51c6\u7684Document\u7c7b\u578b\u3002Document\u7c7b\u578b\u4e3b\u8981\u5305\u542b\u4e24\u4e2a\u5c5e\u6027\uff1apage_content \u5305\u542b\u8be5\u6587\u6863\u7684\u5185\u5bb9\u3002meta_data \u4e3a\u6587\u6863\u76f8\u5173\u7684\u63cf\u8ff0\u6027\u6570\u636e\uff0c\u7c7b\u4f3c\u6587\u6863\u6240\u5728\u7684\u8def\u5f84\u7b49\u3002<\/p>\n<p>\u5982\u4e0b\u56fe\u6240\u793a\uff1aLangChain\u76ee\u524d\u652f\u6301\u7ed3\u6784\u5316\u3001\u975e\u7ed3\u6784\u5316\u4ee5\u53ca\u516c\u5f00\u4ee5\u53ca\u79c1\u6709\u7684\u5404\u79cd\u6570\u636e<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/93e0555943008b814db96cd381dc869b.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h3 data-id=\"heading-5\">2.2.2 Text Splitters<\/h3>\n<p>LLM\u4e00\u822c\u90fd\u4f1a\u9650\u5236\u4e0a\u4e0b\u6587\u7a97\u53e3\u7684\u5927\u5c0f\uff0c\u67094k\u300116k\u300132k\u7b49\u3002\u9488\u5bf9\u5927\u6587\u672c\u5c31\u9700\u8981\u8fdb\u884c\u6587\u672c\u5206\u5272\uff0c\u5e38\u7528\u7684\u6587\u672c\u5206\u5272\u5668\u4e3aRecursiveCharacterTextSplitter\uff0c\u53ef\u4ee5\u901a\u8fc7separators\u6307\u5b9a\u5206\u9694\u7b26\u3002\u5176\u5148\u901a\u8fc7\u7b2c\u4e00\u4e2a\u5206\u9694\u7b26\u8fdb\u884c\u5206\u5272\uff0c\u4e0d\u6ee1\u8db3\u5927\u5c0f\u7684\u60c5\u51b5\u4e0b\u8fed\u4ee3\u5206\u5272\u3002<\/p>\n<p>\u6587\u672c\u5206\u5272\u4e3b\u8981\u67092\u4e2a\u8003\u8651\uff1a<\/p>\n<p>1\uff09\u5c06\u8bed\u4e49\u76f8\u5173\u7684\u53e5\u5b50\u653e\u5728\u4e00\u5757\u5f62\u6210\u4e00\u4e2achunk\u3002\u4e00\u822c\u6839\u636e\u4e0d\u540c\u7684\u6587\u6863\u7c7b\u578b\u5b9a\u4e49\u4e0d\u540c\u7684\u5206\u9694\u7b26\uff0c\u6216\u8005\u53ef\u4ee5\u9009\u62e9\u901a\u8fc7\u6a21\u578b\u8fdb\u884c\u5206\u5272\u3002<\/p>\n<p>2\uff09chunk\u63a7\u5236\u5728\u4e00\u5b9a\u7684\u5927\u5c0f\uff0c\u53ef\u4ee5\u901a\u8fc7\u51fd\u6570\u53bb\u8ba1\u7b97\u3002\u9ed8\u8ba4\u901a\u8fc7len\u51fd\u6570\u8ba1\u7b97\uff0c\u6a21\u578b\u5185\u90e8\u4e00\u822c\u90fd\u662f\u4f7f\u7528token\u8fdb\u884c\u8ba1\u7b97\u3002token\u901a\u5e38\u6307\u7684\u662f\u5c06\u6587\u672c\u6216\u5e8f\u5217\u6570\u636e\u5212\u5206\u6210\u7684\u5c0f\u7684\u5355\u5143\u6216\u7b26\u53f7\uff0c\u4fbf\u4e8e\u673a\u5668\u7406\u89e3\u548c\u5904\u7406\u3002\u4f7f\u7528OpenAI\u76f8\u5173\u7684\u5927\u6a21\u578b\uff0c\u53ef\u4ee5\u901a\u8fc7tiktoken\u5305\u53bb\u8ba1\u7b97\u5176token\u5927\u5c0f\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">css<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-css code-block-extension-codeShowNum\" lang=\"css\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-selector-tag\">from<\/span> langchain<span class=\"hljs-selector-class\">.text_splitter<\/span> import RecursiveCharacterTextSplitter<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">text_splitter = RecursiveCharacterTextSplitter<span class=\"hljs-selector-class\">.from_tiktoken_encoder<\/span>(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">    model_name=\"gpt-<span class=\"hljs-number\">3.5<\/span>-turb<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">    allowed_special=\"<span class=\"hljs-attribute\">all<\/span>\",<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">    separators=<span class=\"hljs-selector-attr\">[<span class=\"hljs-string\">\"nn\"<\/span>, <span class=\"hljs-string\">\"n\"<\/span>, <span class=\"hljs-string\">\"\u3002\"<\/span>, <span class=\"hljs-string\">\"\uff0c\"<\/span>]<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">    chunk_size=<span class=\"hljs-number\">7000<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    chunk_overlap=<span class=\"hljs-number\">0<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">docs = text_splitter<span class=\"hljs-selector-class\">.create_documents<\/span>(<span class=\"hljs-selector-attr\">[<span class=\"hljs-string\">\"\u6587\u672c\u5728\u8fd9\u91cc\"<\/span>]<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">print(docs)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\"><\/span>\n<\/code><\/pre>\n<h3 data-id=\"heading-6\">2.2.3 Vectorstore<\/h3>\n<p>\u901a\u8fc7Text Embedding models\uff0c\u5c06\u6587\u672c\u8f6c\u4e3a\u5411\u91cf\uff0c\u53ef\u4ee5\u8fdb\u884c\u8bed\u4e49\u641c\u7d22\uff0c\u5728\u5411\u91cf\u7a7a\u95f4\u4e2d\u627e\u5230\u6700\u76f8\u4f3c\u7684\u6587\u672c\u7247\u6bb5\u3002\u76ee\u524d\u652f\u6301\u5e38\u7528\u7684\u5411\u91cf\u5b58\u50a8\u6709Faiss\u3001Chroma\u7b49\u3002<\/p>\n<p>Embedding\u6a21\u578b\u652f\u6301OpenAIEmbeddings\u3001HuggingFaceEmbeddings\u7b49\u3002\u901a\u8fc7HuggingFaceEmbeddings\u52a0\u8f7d\u672c\u5730\u6a21\u578b\u53ef\u4ee5\u8282\u7701embedding\u7684\u8c03\u7528\u8d39\u7528\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-comment\">#\u901a\u8fc7cache_folder\u52a0\u8f7d\u672c\u5730\u6a21\u578b<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-attr\">embeddings<\/span> = HuggingFaceEmbeddings(model_name=<span class=\"hljs-string\">\"text2vec-base-chinese\"<\/span>, cache_folder=<span class=\"hljs-string\">\"\u672c\u5730\u6a21\u578b\u5730\u5740\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-attr\">embeddings<\/span> = embeddings_model.embed_documents(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">    <span class=\"hljs-section\">[<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">        \"\u6211\u7231\u5317\u4eac\u5929\u5b89\u95e8!\",<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">        \"Hello world!\"<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    ]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><\/span>\n<\/code><\/pre>\n<h3 data-id=\"heading-7\">2.2.4 Retriever<\/h3>\n<p>Retriever\u63a5\u53e3\u7528\u4e8e\u6839\u636e\u975e\u7ed3\u6784\u5316\u7684\u67e5\u8be2\u83b7\u53d6\u6587\u6863\uff0c\u4e00\u822c\u60c5\u51b5\u4e0b\u662f\u6587\u6863\u5b58\u50a8\u5728\u5411\u91cf\u6570\u636e\u5e93\u4e2d\u3002\u53ef\u4ee5\u8c03\u7528 get_relevant_documents \u65b9\u6cd5\u6765\u68c0\u7d22\u4e0e\u67e5\u8be2\u76f8\u5173\u7684\u6587\u6863\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">from langchain import FAISS<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">from langchain.document_loaders import WebBaseLoader<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">from langchain.embeddings import HuggingFaceEmbeddings<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">from langchain.text_splitter import RecursiveCharacterTextSplitter<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-attr\">loader<\/span> = WebBaseLoader(<span class=\"hljs-string\">\"https:\/\/in.m.jd.com\/help\/app\/register_info.html\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-attr\">data<\/span> = loader.load()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-attr\">text_splitter<\/span> = RecursiveCharacterTextSplitter.from_tiktoken_encoder(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">    <span class=\"hljs-attr\">model_name<\/span>=<span class=\"hljs-string\">\"gpt-3.5-turbo\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">    <span class=\"hljs-attr\">allowed_special<\/span>=<span class=\"hljs-string\">\"all\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">    <span class=\"hljs-attr\">separators<\/span>=[<span class=\"hljs-string\">\"nn\"<\/span>, <span class=\"hljs-string\">\"n\"<\/span>, <span class=\"hljs-string\">\"\u3002\"<\/span>, <span class=\"hljs-string\">\"\uff0c\"<\/span>],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">    <span class=\"hljs-attr\">chunk_size<\/span>=<span class=\"hljs-number\">800<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">    <span class=\"hljs-attr\">chunk_overlap<\/span>=<span class=\"hljs-number\">0<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\"><span class=\"hljs-attr\">docs<\/span> = text_splitter.split_documents(data)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\"><span class=\"hljs-comment\">#\u901a\u8fc7cache_folder\u8bbe\u7f6e\u81ea\u5df1\u7684\u672c\u5730\u6a21\u578b\u8def\u5f84<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\"><span class=\"hljs-attr\">embeddings<\/span> = HuggingFaceEmbeddings(model_name=<span class=\"hljs-string\">\"text2vec-base-chinese\"<\/span>, cache_folder=<span class=\"hljs-string\">\"models\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\"><span class=\"hljs-attr\">vectorstore<\/span> = FAISS.from_documents(docs, embeddings)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\"><span class=\"hljs-attr\">result<\/span> = vectorstore.as_retriever().get_relevant_documents(<span class=\"hljs-string\">\"\u7528\u6237\u6ce8\u518c\u8d44\u683c\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">print(result)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">print(len(result))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\"><\/span>\n<\/code><\/pre>\n<h2 data-id=\"heading-8\">2.3 Chains<\/h2>\n<p>Langchain\u901a\u8fc7chain\u5c06\u5404\u4e2a\u7ec4\u4ef6\u8fdb\u884c\u94fe\u63a5\uff0c\u4ee5\u53cachain\u4e4b\u95f4\u8fdb\u884c\u94fe\u63a5\uff0c\u7528\u4e8e\u7b80\u5316\u590d\u6742\u5e94\u7528\u7a0b\u5e8f\u7684\u5b9e\u73b0\u3002\u5176\u4e2d\u4e3b\u8981\u6709LLMChain\u3001Sequential Chain\u4ee5\u53caRoute Chain<\/p>\n<h3 data-id=\"heading-9\">2.3.1 LLMChain<\/h3>\n<p>\u6700\u57fa\u672c\u7684\u94fe\u4e3aLLMChain\uff0c\u7531PromptTemplate\u3001LLM\u548cOutputParser\u7ec4\u6210\u3002LLM\u7684\u8f93\u51fa\u4e00\u822c\u4e3a\u6587\u672c\uff0cOutputParser\u7528\u4e8e\u8ba9LLM\u7ed3\u6784\u5316\u8f93\u51fa\u5e76\u8fdb\u884c\u7ed3\u679c\u89e3\u6790\uff0c\u65b9\u4fbf\u540e\u7eed\u7684\u8c03\u7528\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/d25727fa690bef6134ddb4985be69579.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<p>\u7c7b\u4f3c\u4e0b\u9762\u7684\u793a\u4f8b\uff0c\u7ed9\u8bc4\u8bba\u8fdb\u884c\u5173\u952e\u8bcd\u63d0\u524d\u4ee5\u53ca\u60c5\u7eea\u5206\u6790\uff0c\u901a\u8fc7LLMChain\u7ec4\u5408PromptTemplate\u3001LLM\u4ee5\u53caOutputParser\uff0c\u53ef\u4ee5\u5f88\u7b80\u5355\u7684\u5b9e\u73b0\u4e00\u4e2a\u4e4b\u524d\u901a\u8fc7\u4f9d\u8d56\u5c0f\u6a21\u578b\u4e0d\u65ad\u9700\u8981\u8c03\u4f18\u7684\u4e8b\u60c5\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">from langchain.chains import LLMChain<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">from langchain.prompts import PromptTemplate<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">from langchain.output_parsers import ResponseSchema, StructuredOutputParser<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">from azure_chat_llm import llm<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-comment\">#output parser<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-attr\">keyword_schema<\/span> = ResponseSchema(name=<span class=\"hljs-string\">\"keyword\"<\/span>, description=<span class=\"hljs-string\">\"\u8bc4\u8bba\u7684\u5173\u952e\u8bcd\u5217\u8868\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-attr\">emotion_schema<\/span> = ResponseSchema(name=<span class=\"hljs-string\">\"emotion\"<\/span>, description=<span class=\"hljs-string\">\"\u8bc4\u8bba\u7684\u60c5\u7eea\uff0c\u6b63\u5411\u4e3a1\uff0c\u4e2d\u6027\u4e3a0\uff0c\u8d1f\u5411\u4e3a-1\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><span class=\"hljs-attr\">response_schemas<\/span> = [keyword_schema, emotion_schema]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-attr\">output_parser<\/span> = StructuredOutputParser.from_response_schemas(response_schemas)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-attr\">format_instructions<\/span> = output_parser.get_format_instructions()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><span class=\"hljs-comment\">#prompt template<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\"><span class=\"hljs-attr\">prompt_template_txt<\/span> = <span class=\"hljs-string\">'''<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">\u4f5c\u4e3a\u8d44\u6df1\u5ba2\u670d\uff0c\u8bf7\u9488\u5bf9 &gt;&gt;&gt; \u548c &lt;&lt;&lt; \u4e2d\u95f4\u7684\u6587\u672c\u8bc6\u522b\u5176\u4e2d\u7684\u5173\u952e\u8bcd\uff0c\u4ee5\u53ca\u5305\u542b\u7684\u60c5\u7eea\u662f\u6b63\u5411\u3001\u8d1f\u5411\u8fd8\u662f\u4e2d\u6027\u3002<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">&gt;&gt;&gt; {text} &lt;&lt;&lt;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">RESPONSE:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">{format_instructions}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">'''<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\"><span class=\"hljs-attr\">prompt<\/span> = PromptTemplate(template=prompt_template_txt, input_variables=[<span class=\"hljs-string\">\"text\"<\/span>],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">                        <span class=\"hljs-attr\">partial_variables<\/span>={<span class=\"hljs-string\">\"format_instructions\"<\/span>: format_instructions})<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\"><span class=\"hljs-comment\">#llmchain<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\"><span class=\"hljs-attr\">llm_chain<\/span> = LLMChain(prompt=prompt, llm=llm)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\"><span class=\"hljs-attr\">comment<\/span> = <span class=\"hljs-string\">\"\u4eac\u4e1c\u7269\u6d41\u6ca1\u7684\u8bf4\uff0c\u901f\u5ea6\u6001\u5ea6\u90fd\u662f\u6760\u6760\u6ef4\uff01\u8fd9\u6b3e\u8def\u7531\u5668\u989c\u503c\u8d3c\u9ad8\uff0c\u600e\u4e48\u8bf4\u5462\uff0c\u5c31\u662f\u6cf0\u88e4\u8fa3\uff01\u8fd9\u7ebf\u6761\uff0c\u8fd9\u8d28\u611f\uff0c\u8fd9\u901f\u5ea6\uff0c\u560e\u560e\u5feb\uff01\u4ee5\u540e\u5988\u5988\u518d\u4e5f\u4e0d\u7528\u62c5\u5fc3\u5bb6\u91cc\u7684\u7f51\u901f\u4e86\uff01\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\"><span class=\"hljs-attr\">result<\/span> = llm_chain.run(comment)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\"><span class=\"hljs-attr\">data<\/span> = output_parser.parse(result)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">print(f\"<span class=\"hljs-attr\">type<\/span>={type(data)}, keyword={data[<span class=\"hljs-string\">'keyword'<\/span>]}, emotion={data[<span class=\"hljs-string\">'emotion'<\/span>]}<span class=\"hljs-string\">\")<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\"><\/span>\n<\/code><\/pre>\n<p>\u8f93\u51fa\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/c22312507ac6306b35ad8ad0a66611b5.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h3 data-id=\"heading-10\">2.3.2 Sequential Chain<\/h3>\n<p>SequentialChains\u662f\u6309\u9884\u5b9a\u4e49\u987a\u5e8f\u6267\u884c\u7684\u94fe\u3002SimpleSequentialChain\u4e3a\u987a\u5e8f\u94fe\u7684\u6700\u7b80\u5355\u5f62\u5f0f\uff0c\u5176\u4e2d\u6bcf\u4e2a\u6b65\u9aa4\u90fd\u6709\u4e00\u4e2a\u5355\u4e00\u7684\u8f93\u5165\/\u8f93\u51fa\uff0c\u4e00\u4e2a\u6b65\u9aa4\u7684\u8f93\u51fa\u662f\u4e0b\u4e00\u4e2a\u6b65\u9aa4\u7684\u8f93\u5165\u3002SequentialChain \u4e3a\u987a\u5e8f\u94fe\u66f4\u901a\u7528\u7684\u5f62\u5f0f\uff0c\u5141\u8bb8\u591a\u4e2a\u8f93\u5165\/\u8f93\u51fa\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">scala<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-scala code-block-extension-codeShowNum\" lang=\"scala\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">from langchain.chains <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-type\">LLMChain<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">from langchain.prompts <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-type\">PromptTemplate<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">from langchain.chains <span class=\"hljs-keyword\">import<\/span> <span class=\"hljs-type\">SimpleSequentialChain<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">first_prompt = <span class=\"hljs-type\">PromptTemplate<\/span>.from_template(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">    <span class=\"hljs-string\">\"\u7ffb\u8bd1\u4e0b\u9762\u7684\u5185\u5bb9\u5230\u4e2d\u6587:\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">    <span class=\"hljs-string\">\"nn{content}\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"># chain <span class=\"hljs-number\">1<\/span>: \u8f93\u5165\uff1a<span class=\"hljs-type\">Review<\/span> \u8f93\u51fa\uff1a \u82f1\u6587\u7684 <span class=\"hljs-type\">Review<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">chain_trans = <span class=\"hljs-type\">LLMChain<\/span>(llm=llm, prompt=first_prompt, output_key=<span class=\"hljs-string\">\"content_zh\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">second_prompt = <span class=\"hljs-type\">PromptTemplate<\/span>.from_template(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">    <span class=\"hljs-string\">\"\u4e00\u53e5\u8bdd\u603b\u7ed3\u4e0b\u9762\u7684\u5185\u5bb9:\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">    <span class=\"hljs-string\">\"nn{content_zh}\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">chain_summary = <span class=\"hljs-type\">LLMChain<\/span>(llm=llm, prompt=second_prompt)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">overall_simple_chain = <span class=\"hljs-type\">SimpleSequentialChain<\/span>(chains=[chain_trans, chain_summary],verbose=<span class=\"hljs-type\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">content = '''<span class=\"hljs-type\">In<\/span> a blog post authored back in <span class=\"hljs-number\">2011<\/span>, <span class=\"hljs-type\">Marc<\/span> <span class=\"hljs-type\">Andreessen<\/span> warned that, \u201c<span class=\"hljs-type\">Software<\/span> is eating the world.\u201d <span class=\"hljs-type\">Over<\/span> a decade later, we are witnessing the emergence of a <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">type<\/span> <span class=\"hljs-title\">of<\/span> <span class=\"hljs-title\">technology<\/span> <span class=\"hljs-title\">that\u2019s<\/span> <span class=\"hljs-title\">consuming<\/span> <span class=\"hljs-title\">the<\/span> <span class=\"hljs-title\">world<\/span> <span class=\"hljs-keyword\">with<\/span> <span class=\"hljs-title\">even<\/span> <span class=\"hljs-title\">greater<\/span> <span class=\"hljs-title\">voracity<\/span><\/span>: generative artificial intelligence (<span class=\"hljs-type\">AI<\/span>). <span class=\"hljs-type\">This<\/span> innovative <span class=\"hljs-type\">AI<\/span> includes a unique <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">of<\/span> <span class=\"hljs-title\">large<\/span> <span class=\"hljs-title\">language<\/span> <span class=\"hljs-title\">models<\/span> (<span class=\"hljs-params\"><span class=\"hljs-type\">LLM<\/span><\/span>), <span class=\"hljs-title\">derived<\/span> <span class=\"hljs-title\">from<\/span> <span class=\"hljs-title\">a<\/span> <span class=\"hljs-title\">decade<\/span> <span class=\"hljs-title\">of<\/span> <span class=\"hljs-title\">groundbreaking<\/span> <span class=\"hljs-title\">research<\/span>, <span class=\"hljs-title\">that<\/span> <span class=\"hljs-title\">are<\/span> <span class=\"hljs-title\">capable<\/span> <span class=\"hljs-title\">of<\/span> <span class=\"hljs-title\">out-performing<\/span> <span class=\"hljs-title\">humans<\/span> <span class=\"hljs-title\">at<\/span> <span class=\"hljs-title\">certain<\/span> <span class=\"hljs-title\">tasks<\/span>. <span class=\"hljs-title\">And<\/span> <span class=\"hljs-title\">you<\/span> <span class=\"hljs-title\">don\u2019t<\/span> <span class=\"hljs-title\">have<\/span> <span class=\"hljs-title\">to<\/span> <span class=\"hljs-title\">have<\/span> <span class=\"hljs-title\">a<\/span> <span class=\"hljs-title\">PhD<\/span> <span class=\"hljs-title\">in<\/span> <span class=\"hljs-title\">machine<\/span> <span class=\"hljs-title\">learning<\/span> <span class=\"hljs-title\">to<\/span> <span class=\"hljs-title\">build<\/span> <span class=\"hljs-keyword\">with<\/span> <span class=\"hljs-title\">LLMs\u2014developers<\/span> <span class=\"hljs-title\">are<\/span> <span class=\"hljs-title\">already<\/span> <span class=\"hljs-title\">building<\/span> <span class=\"hljs-title\">software<\/span> <span class=\"hljs-keyword\">with<\/span> <span class=\"hljs-title\">LLMs<\/span> <span class=\"hljs-keyword\">with<\/span> <span class=\"hljs-title\">basic<\/span> <span class=\"hljs-title\">HTTP<\/span> <span class=\"hljs-title\">requests<\/span> <span class=\"hljs-title\">and<\/span> <span class=\"hljs-title\">natural<\/span> <span class=\"hljs-title\">language<\/span> <span class=\"hljs-title\">prompts<\/span>.<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><span class=\"hljs-type\">In<\/span> <span class=\"hljs-keyword\">this<\/span> article, we\u2019ll tell the story of <span class=\"hljs-type\">GitHub<\/span>\u2019s work <span class=\"hljs-keyword\">with<\/span> <span class=\"hljs-type\">LLMs<\/span> to help other developers learn how to best make use of <span class=\"hljs-keyword\">this<\/span> technology. <span class=\"hljs-type\">This<\/span> post consists of two main sections: the first will describe at a high level how <span class=\"hljs-type\">LLMs<\/span> function and how to build <span class=\"hljs-type\">LLM<\/span>-based applications. <span class=\"hljs-type\">The<\/span> second will dig into an important example of an <span class=\"hljs-type\">LLM<\/span>-based application: <span class=\"hljs-type\">GitHub<\/span> <span class=\"hljs-type\">Copilot<\/span> code completions.<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\"><span class=\"hljs-type\">Others<\/span> have done an impressive job of cataloging our work from the outside. <span class=\"hljs-type\">Now<\/span>, we\u2019re excited to share some of the thought processes that have led to the ongoing success of <span class=\"hljs-type\">GitHub<\/span> <span class=\"hljs-type\">Copilot<\/span>.<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\">'''<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">result = overall_simple_chain.run(content)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">print(f'result={result}')<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\"><\/span>\n<\/code><\/pre>\n<p>\u8f93\u51fa\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/8e87b5ef5120eafcecc6253ad63a2619.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h3 data-id=\"heading-11\">2.3.3 Router Chain<\/h3>\n<p>RouterChain\u662f\u6839\u636e\u8f93\u5165\u52a8\u6001\u7684\u9009\u62e9\u4e0b\u4e00\u4e2a\u94fe\uff0c\u6bcf\u6761\u94fe\u5904\u7406\u7279\u5b9a\u7c7b\u578b\u7684\u8f93\u5165\u3002<\/p>\n<p>RouterChain\u7531\u4e24\u4e2a\u7ec4\u4ef6\u7ec4\u6210\uff1a<\/p>\n<p>1\uff09\u8def\u7531\u5668\u94fe\u672c\u8eab\uff0c\u8d1f\u8d23\u9009\u62e9\u8981\u8c03\u7528\u7684\u4e0b\u4e00\u4e2a\u94fe\uff0c\u4e3b\u8981\u67092\u79cdRouterChain\uff0c\u5176\u4e2dLLMRouterChain\u901a\u8fc7LLM\u8fdb\u884c\u8def\u7531\u51b3\u7b56\uff0cEmbeddingRouterChain \u901a\u8fc7\u5411\u91cf\u641c\u7d22\u7684\u65b9\u5f0f\u8fdb\u884c\u8def\u7531\u51b3\u7b56\u3002<\/p>\n<p>2\uff09\u76ee\u6807\u94fe\u5217\u8868\uff0c\u8def\u7531\u5668\u94fe\u53ef\u4ee5\u8def\u7531\u5230\u7684\u5b50\u94fe\u3002<\/p>\n<p>\u521d\u59cb\u5316RouterChain\u4ee5\u53cadestination_chains\u5b8c\u6210\u540e\uff0c\u901a\u8fc7MultiPromptChain\u5c06\u4e24\u8005\u7ed3\u5408\u8d77\u6765\u4f7f\u7528\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/f741ceb5d73e26bea75a6e004741596c.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h3 data-id=\"heading-12\">2.3.4 Documents Chain<\/h3>\n<p>\u4e0b\u9762\u76844\u79cdChain\u4e3b\u8981\u7528\u4e8eDocument\u7684\u5904\u7406\uff0c\u5728\u57fa\u4e8e\u6587\u6863\u751f\u6210\u6458\u8981\u3001\u57fa\u4e8e\u6587\u6863\u7684\u95ee\u7b54\u7b49\u573a\u666f\u4e2d\u7ecf\u5e38\u4f1a\u7528\u5230\uff0c\u5728\u540e\u7eed\u7684\u843d\u5730\u5b9e\u8df5\u91cc\u4e5f\u4f1a\u6709\u6240\u4f53\u73b0\u3002<\/p>\n<h4 data-id=\"heading-13\">2.3.4.1 Stuff<\/h4>\n<p>StuffDocumentsChain\u8fd9\u79cd\u94fe\u6700\u7b80\u5355\u76f4\u63a5\uff0c\u662f\u5c06\u6240\u6709\u83b7\u53d6\u5230\u7684\u6587\u6863\u4f5c\u4e3acontext\u653e\u5165\u5230Prompt\u4e2d\uff0c\u4f20\u9012\u5230LLM\u83b7\u53d6\u7b54\u6848\u3002<\/p>\n<p>\u8fd9\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5b8c\u6574\u7684\u4fdd\u7559\u4e0a\u4e0b\u6587\uff0c\u8c03\u7528LLM\u7684\u6b21\u6570\u4e5f\u6bd4\u8f83\u5c11\uff0c\u5efa\u8bae\u80fd\u4f7f\u7528stuff\u7684\u5c31\u4f7f\u7528\u8fd9\u79cd\u65b9\u5f0f\u3002\u5176\u9002\u5408\u6587\u6863\u62c6\u5206\u7684\u6bd4\u8f83\u5c0f\uff0c\u4e00\u6b21\u83b7\u53d6\u6587\u6863\u6bd4\u8f83\u5c11\u7684\u573a\u666f\uff0c\u4e0d\u7136\u5bb9\u6613\u8d85\u8fc7token\u7684\u9650\u5236\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/3446417c55e63035b88b6775573eb24d.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h4 data-id=\"heading-14\">2.3.4.2 Refine<\/h4>\n<p>RefineDocumentsChain\u662f\u901a\u8fc7\u8fed\u4ee3\u66f4\u65b0\u7684\u65b9\u5f0f\u83b7\u53d6\u7b54\u6848\u3002\u5148\u5904\u7406\u7b2c\u4e00\u4e2a\u6587\u6863\uff0c\u4f5c\u4e3acontext\u4f20\u9012\u7ed9llm\uff0c\u83b7\u53d6\u4e2d\u95f4\u7ed3\u679cintermediate answer\u3002\u7136\u540e\u5c06\u7b2c\u4e00\u4e2a\u6587\u6863\u7684\u4e2d\u95f4\u7ed3\u679c\u4ee5\u53ca\u7b2c\u4e8c\u4e2a\u6587\u6863\u53d1\u7ed9llm\u8fdb\u884c\u5904\u7406\uff0c\u540e\u7eed\u7684\u6587\u6863\u7c7b\u4f3c\u5904\u7406\u3002<\/p>\n<p>Refine\u8fd9\u79cd\u65b9\u5f0f\u80fd\u90e8\u5206\u4fdd\u7559\u4e0a\u4e0b\u6587\uff0c\u4ee5\u53catoken\u7684\u4f7f\u7528\u80fd\u63a7\u5236\u5728\u4e00\u5b9a\u8303\u56f4\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/9a9f2a2ef4496cf514eab14eee4de23c.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h4 data-id=\"heading-15\">2.3.4.3 MapReduce<\/h4>\n<p>MapReduceDocumentsChain\u5148\u901a\u8fc7LLM\u5bf9\u6bcf\u4e2adocument\u8fdb\u884c\u5904\u7406\uff0c\u7136\u540e\u5c06\u6240\u6709\u6587\u6863\u7684\u7b54\u6848\u5728\u901a\u8fc7LLM\u8fdb\u884c\u5408\u5e76\u5904\u7406\uff0c\u5f97\u5230\u6700\u7ec8\u7684\u7ed3\u679c\u3002<\/p>\n<p>MapReduce\u7684\u65b9\u5f0f\u5c06\u6bcf\u4e2adocument\u5355\u72ec\u5904\u7406\uff0c\u53ef\u4ee5\u5e76\u53d1\u8fdb\u884c\u8c03\u7528\u3002\u4f46\u662f\u6bcf\u4e2a\u6587\u6863\u4e4b\u95f4\u7f3a\u5c11\u4e0a\u4e0b\u6587\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/1d37ea6e8dbc37f4a4015952182066e7.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h4 data-id=\"heading-16\">2.3.4.4 MapRerank<\/h4>\n<p>MapRerankDocumentsChain\u548cMapReduceDocumentsChain\u7c7b\u4f3c\uff0c\u5148\u901a\u8fc7LLM\u5bf9\u6bcf\u4e2adocument\u8fdb\u884c\u5904\u7406\uff0c\u6bcf\u4e2a\u7b54\u6848\u90fd\u4f1a\u8fd4\u56de\u4e00\u4e2ascore\uff0c\u6700\u540e\u9009\u62e9score\u6700\u9ad8\u7684\u7b54\u6848\u3002<\/p>\n<p>MapRerank\u548cMapReduce\u7c7b\u4f3c\uff0c\u4f1a\u5927\u6279\u91cf\u7684\u8c03\u7528LLM\uff0c\u6bcf\u4e2adocument\u4e4b\u95f4\u662f\u72ec\u7acb\u5904\u7406\u3002<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/6e24d9da76b45d6aa809d382a900ba0d.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h2 data-id=\"heading-17\">2.4 Memory<\/h2>\n<p>\u6b63\u5e38\u60c5\u51b5\u4e0bChain\u65e0\u72b6\u6001\u7684\uff0c\u6bcf\u6b21\u4ea4\u4e92\u90fd\u662f\u72ec\u7acb\u7684\uff0c\u65e0\u6cd5\u77e5\u9053\u4e4b\u524d\u5386\u53f2\u4ea4\u4e92\u7684\u4fe1\u606f\u3002LangChain\u4f7f\u7528Memory\u7ec4\u4ef6\u4fdd\u5b58\u548c\u7ba1\u7406\u5386\u53f2\u6d88\u606f\uff0c\u8fd9\u6837\u53ef\u4ee5\u8de8\u591a\u8f6e\u8fdb\u884c\u5bf9\u8bdd\uff0c\u5728\u5f53\u524d\u4f1a\u8bdd\u4e2d\u4fdd\u7559\u5386\u53f2\u4f1a\u8bdd\u7684\u4e0a\u4e0b\u6587\u3002Memory\u7ec4\u4ef6\u652f\u6301\u591a\u79cd\u5b58\u50a8\u4ecb\u8d28\uff0c\u53ef\u4ee5\u4e0eMonogo\u3001Redis\u3001SQLite\u7b49\u8fdb\u884c\u96c6\u6210\uff0c\u4ee5\u53ca\u7b80\u5355\u76f4\u63a5\u5f62\u5f0f\u5c31\u662fBuffer Memory\u3002\u5e38\u7528\u7684Buffer Memory\u6709<\/p>\n<p>1\uff09ConversationSummaryMemory \uff1a\u4ee5\u6458\u8981\u7684\u4fe1\u606f\u4fdd\u5b58\u8bb0\u5f55<\/p>\n<p>2\uff09ConversationBufferWindowMemory\uff1a\u4ee5\u539f\u59cb\u5f62\u5f0f\u4fdd\u5b58\u6700\u65b0\u7684n\u6761\u8bb0\u5f55<\/p>\n<p>3\uff09ConversationBufferMemory\uff1a\u4ee5\u539f\u59cb\u5f62\u5f0f\u4fdd\u5b58\u6240\u6709\u8bb0\u5f55<\/p>\n<p>\u901a\u8fc7\u67e5\u770bchain\u7684prompt\uff0c\u53ef\u4ee5\u53d1\u73b0{history}\u53d8\u91cf\u4f20\u9012\u4e86\u4ecememory\u83b7\u53d6\u7684\u4f1a\u8bdd\u4e0a\u4e0b\u6587\u3002\u4e0b\u9762\u7684\u793a\u4f8b\u6f14\u793a\u4e86Memory\u7684\u4f7f\u7528\u65b9\u5f0f\uff0c\u53ef\u4ee5\u5f88\u660e\u7ec6\u770b\u5230\uff0c\u7b54\u6848\u662f\u4ece\u4e4b\u524d\u7684\u95ee\u9898\u91cc\u83b7\u53d6\u7684\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">python<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-python code-block-extension-codeShowNum\" lang=\"python\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">from<\/span> langchain.chains <span class=\"hljs-keyword\">import<\/span> ConversationChain<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">from<\/span> langchain.memory <span class=\"hljs-keyword\">import<\/span> ConversationBufferMemory<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-keyword\">from<\/span> azure_chat_llm <span class=\"hljs-keyword\">import<\/span> llm<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">memory = ConversationBufferMemory()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">conversation = ConversationChain(llm=llm, memory=memory, verbose=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-built_in\">print<\/span>(conversation.prompt)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><span class=\"hljs-built_in\">print<\/span>(conversation.predict(<span class=\"hljs-built_in\">input<\/span>=<span class=\"hljs-string\">\"\u6211\u7684\u59d3\u540d\u662ftiger\"<\/span>))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-built_in\">print<\/span>(conversation.predict(<span class=\"hljs-built_in\">input<\/span>=<span class=\"hljs-string\">\"1+1=?\"<\/span>))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-built_in\">print<\/span>(conversation.predict(<span class=\"hljs-built_in\">input<\/span>=<span class=\"hljs-string\">\"\u6211\u7684\u59d3\u540d\u662f\u4ec0\u4e48\"<\/span>))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\"><\/span>\n<\/code><\/pre>\n<p>\u8f93\u51fa\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/02adfcffbc602f8c7ae794613b1be4ed.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h2 data-id=\"heading-18\">2.5 Agent<\/h2>\n<p>Agent\u5b57\u9762\u542b\u4e49\u5c31\u662f\u4ee3\u7406\uff0c\u5982\u679c\u8bf4LLM\u662f\u5927\u8111\uff0cAgent\u5c31\u662f\u4ee3\u7406\u5927\u8111\u4f7f\u7528\u5de5\u5177Tools\u3002\u76ee\u524d\u7684\u5927\u6a21\u578b\u4e00\u822c\u90fd\u5b58\u5728\u77e5\u8bc6\u8fc7\u65f6\u3001\u903b\u8f91\u8ba1\u7b97\u80fd\u529b\u4f4e\u7b49\u95ee\u9898\uff0c\u901a\u8fc7Agent\u8bbf\u95ee\u5de5\u5177\uff0c\u53ef\u4ee5\u53bb\u89e3\u51b3\u8fd9\u4e9b\u95ee\u9898\u3002\u76ee\u524d\u8fd9\u4e2a\u9886\u57df\u7279\u522b\u6d3b\u8dc3\uff0c\u8bde\u751f\u4e86\u7c7b\u4f3cAutoGPT\u3001BabyAGI\u3001AgentGPT\u7b49\u4e00\u5806\u4f18\u79c0\u7684\u9879\u76ee\u3002\u4f20\u7edf\u4f7f\u7528LLM\uff0c\u9700\u8981\u7ed9\u5b9aPrompt\u4e00\u6b65\u4e00\u6b65\u7684\u8fbe\u6210\u76ee\u6807\uff0c\u901a\u8fc7Agent\u662f\u7ed9\u5b9a\u76ee\u6807\uff0c\u5176\u4f1a\u81ea\u52a8\u89c4\u5212\u5e76\u8fbe\u5230\u76ee\u6807\u3002<\/p>\n<h3 data-id=\"heading-19\">2.5.1 Agent\u6838\u5fc3\u7ec4\u4ef6<\/h3>\n<p>Agent\uff1a\u4ee3\u7406\uff0c\u8d1f\u8d23\u8c03\u7528LLM\u4ee5\u53ca\u51b3\u5b9a\u4e0b\u4e00\u6b65\u7684Action\u3002\u5176\u4e2dLLM\u7684prompt\u5fc5\u987b\u5305\u542bagent_scratchpad\u53d8\u91cf\uff0c\u8bb0\u5f55\u6267\u884c\u7684\u4e2d\u95f4\u8fc7\u7a0b<\/p>\n<p>Tools\uff1a\u5de5\u5177\uff0cAgent\u53ef\u4ee5\u8c03\u7528\u7684\u65b9\u6cd5\u3002LangChain\u5df2\u6709\u5f88\u591a\u5185\u7f6e\u7684\u5de5\u5177\uff0c\u4e5f\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5de5\u5177\u3002\u6ce8\u610fTools\u7684description\u5c5e\u6027\uff0cLLM\u4f1a\u901a\u8fc7\u63cf\u8ff0\u51b3\u5b9a\u662f\u5426\u4f7f\u7528\u8be5\u5de5\u5177\u3002<\/p>\n<p>ToolKits\uff1a\u5de5\u5177\u96c6\uff0c\u4e3a\u7279\u5b9a\u76ee\u7684\u7684\u5de5\u5177\u96c6\u5408\u3002\u7c7b\u4f3cOffice365\u3001Gmail\u5de5\u5177\u96c6\u7b49<\/p>\n<p>Agent Executor\uff1aAgent\u6267\u884c\u5668\uff0c\u8d1f\u8d23\u8fdb\u884c\u5b9e\u9645\u7684\u6267\u884c\u3002<\/p>\n<h3 data-id=\"heading-20\">2.5.2 Agent\u7684\u7c7b\u578b<\/h3>\n<p>\u4e00\u822c\u901a\u8fc7initialize_agent\u51fd\u6570\u8fdb\u884cAgent\u7684\u521d\u59cb\u5316\uff0c\u9664\u4e86llm\u3001tools\u7b49\u53c2\u6570\uff0c\u8fd8\u9700\u8981\u6307\u5b9aAgentType\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-attr\">agent<\/span> = initialize_agent(agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">                <span class=\"hljs-attr\">tools<\/span>=tools,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">                <span class=\"hljs-attr\">llm<\/span>=llm,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">                <span class=\"hljs-attr\">verbose<\/span>=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">print(agent.agent.llm_chain.prompt.template)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><\/span>\n<\/code><\/pre>\n<p>\u8be5Agent\u4e3a\u4e00\u4e2azero-shot-react-description\u7c7b\u578b\u7684Agent\uff0c\u5176\u4e2dzero-shot\u8868\u660e\u53ea\u8003\u8651\u5f53\u524d\u7684\u64cd\u4f5c\uff0c\u4e0d\u4f1a\u8bb0\u5f55\u4ee5\u53ca\u53c2\u8003\u4e4b\u524d\u7684\u64cd\u4f5c\u3002react\u8868\u660e\u901a\u8fc7ReAct\u6846\u67b6\u8fdb\u884c\u63a8\u7406\uff0cdescription\u8868\u660e\u901a\u8fc7\u5de5\u5177\u7684description\u8fdb\u884c\u662f\u5426\u4f7f\u7528\u7684\u51b3\u7b56\u3002<\/p>\n<p>\u5176\u4ed6\u7684\u7c7b\u578b\u8fd8\u6709chat-conversational-react-description\u3001conversational-react-description\u3001react-docstore\u3001self-ask-with-search\u7b49\uff0c\u7c7b\u4f3cchat-conversational-react-description\u901a\u8fc7memory\u8bb0\u5f55\u4e4b\u524d\u7684\u5bf9\u8bdd\uff0c\u5e94\u7b54\u4f1a\u53c2\u8003\u4e4b\u524d\u7684\u64cd\u4f5c\u3002<\/p>\n<p>\u53ef\u4ee5\u901a\u8fc7agent.agent.llm_chain.prompt.template\u65b9\u6cd5\uff0c\u83b7\u53d6\u5176\u63a8\u7406\u51b3\u7b56\u6240\u4f7f\u7528\u7684\u6a21\u677f\u3002<\/p>\n<h3 data-id=\"heading-21\">2.5.3 \u81ea\u5b9a\u4e49Tool<\/h3>\n<p>\u6709\u591a\u79cd\u65b9\u5f0f\u53ef\u4ee5\u81ea\u5b9a\u4e49Tool\uff0c\u6700\u7b80\u5355\u7684\u65b9\u5f0f\u662f\u901a\u8fc7@tool\u88c5\u9970\u5668\uff0c\u5c06\u4e00\u4e2a\u51fd\u6570\u8f6c\u4e3aTool\u3002\u6ce8\u610f\u51fd\u6570\u5fc5\u987b\u5f97\u6709docString\uff0c\u5176\u4e3aTool\u7684\u63cf\u8ff0\u3002<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">python<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-python code-block-extension-codeShowNum\" lang=\"python\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">from<\/span> azure_chat_llm <span class=\"hljs-keyword\">import<\/span> llm<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\"><span class=\"hljs-keyword\">from<\/span> langchain.agents <span class=\"hljs-keyword\">import<\/span> load_tools, initialize_agent, tool<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\"><span class=\"hljs-keyword\">from<\/span> langchain.agents.agent_types <span class=\"hljs-keyword\">import<\/span> AgentType<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\"><span class=\"hljs-keyword\">from<\/span> datetime <span class=\"hljs-keyword\">import<\/span> date<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-meta\">@tool<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-keyword\">def<\/span> <span class=\"hljs-title function_\">time<\/span>(<span class=\"hljs-params\">text: <span class=\"hljs-built_in\">str<\/span><\/span>) -&gt; <span class=\"hljs-built_in\">str<\/span>:<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    <span class=\"hljs-string\">\"\"\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">    \u8fd4\u56de\u4eca\u5929\u7684\u65e5\u671f\u3002<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">    \"\"\"<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">    <span class=\"hljs-keyword\">return<\/span> <span class=\"hljs-built_in\">str<\/span>(date.today())<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">tools = load_tools([<span class=\"hljs-string\">'llm-math'<\/span>], llm=llm)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">tools.append(time)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">agent_math = initialize_agent(agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">                                   tools=tools,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">                                   llm=llm,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">                                   verbose=<span class=\"hljs-literal\">True<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><span class=\"hljs-built_in\">print<\/span>(agent_math(<span class=\"hljs-string\">\"\u8ba1\u7b9745 * 54\"<\/span>))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\"><span class=\"hljs-built_in\">print<\/span>(agent_math(<span class=\"hljs-string\">\"\u4eca\u5929\u662f\u54ea\u5929\uff1f\"<\/span>))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\"><\/span>\n<\/code><\/pre>\n<p>\u8f93\u51fa\u4e3a\uff1a<\/p>\n<p>\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/www.nicekj.com\/wp-content\/uploads\/replace\/6846fe0df02da2490f347be566acb539.png\" alt=\"LangChain\uff1a\u6253\u9020\u81ea\u5df1\u7684LLM\u5e94\u7528 | \u4eac\u4e1c\u4e91\u6280\u672f\u56e2\u961f\" \/><\/figure>\n<\/p>\n<h1 data-id=\"heading-22\">3\u3001LangChain\u843d\u5730\u5b9e\u8df5<\/h1>\n<h2 data-id=\"heading-23\">3.1 \u6587\u6863\u751f\u6210\u603b\u7ed3<\/h2>\n<p>1\uff09\u901a\u8fc7Loader\u52a0\u8f7d\u8fdc\u7a0b\u6587\u6863<\/p>\n<p>2\uff09\u901a\u8fc7Splitter\u57fa\u4e8eToken\u8fdb\u884c\u6587\u6863\u62c6\u5206<\/p>\n<p>3\uff09\u52a0\u8f7dsummarize\u94fe\uff0c\u94fe\u7c7b\u578b\u4e3arefine\uff0c\u8fed\u4ee3\u8fdb\u884c\u603b\u7ed3<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">from langchain.prompts import PromptTemplate<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">from langchain.document_loaders import PlaywrightURLLoader<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">from langchain.chains.summarize import load_summarize_chain<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">from langchain.text_splitter import RecursiveCharacterTextSplitter<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">from azure_chat_llm import llm<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><span class=\"hljs-attr\">loader<\/span> = PlaywrightURLLoader(urls=[<span class=\"hljs-string\">\"https:\/\/content.jr.jd.com\/article\/index.html?pageId=708258989\"<\/span>])<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\"><span class=\"hljs-attr\">data<\/span> = loader.load()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-attr\">text_splitter<\/span> = RecursiveCharacterTextSplitter.from_tiktoken_encoder(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">    <span class=\"hljs-attr\">model_name<\/span>=<span class=\"hljs-string\">\"gpt-3.5-turbo\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">    <span class=\"hljs-attr\">allowed_special<\/span>=<span class=\"hljs-string\">\"all\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">    <span class=\"hljs-attr\">separators<\/span>=[<span class=\"hljs-string\">\"nn\"<\/span>, <span class=\"hljs-string\">\"n\"<\/span>, <span class=\"hljs-string\">\"\u3002\"<\/span>, <span class=\"hljs-string\">\"\uff0c\"<\/span>],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">    <span class=\"hljs-attr\">chunk_size<\/span>=<span class=\"hljs-number\">7000<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">    <span class=\"hljs-attr\">chunk_overlap<\/span>=<span class=\"hljs-number\">0<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\"><span class=\"hljs-attr\">prompt_template<\/span> = <span class=\"hljs-string\">'''<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\">\u4f5c\u4e3a\u4e00\u4e2a\u8d44\u6df1\u7f16\u8f91\uff0c\u8bf7\u9488\u5bf9 &gt;&gt;&gt; \u548c &lt;&lt;&lt; \u4e2d\u95f4\u7684\u6587\u672c\u5199\u4e00\u6bb5\u6458\u8981\u3002 <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\">&gt;&gt;&gt; {text} &lt;&lt;&lt;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\">'''<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\"><span class=\"hljs-attr\">refine_template<\/span> = <span class=\"hljs-string\">'''<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\">\u4f5c\u4e3a\u4e00\u4e2a\u8d44\u6df1\u7f16\u8f91\uff0c\u57fa\u4e8e\u5df2\u6709\u7684\u4e00\u6bb5\u6458\u8981\uff1a{existing_answer}\uff0c\u9488\u5bf9 &gt;&gt;&gt; \u548c &lt;&lt;&lt; \u4e2d\u95f4\u7684\u6587\u672c\u5b8c\u5584\u73b0\u6709\u7684\u6458\u8981\u3002 <\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\">&gt;&gt;&gt; {text} &lt;&lt;&lt;<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">'''<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\"><span class=\"hljs-attr\">PROMPT<\/span> = PromptTemplate(template=prompt_template, input_variables=[<span class=\"hljs-string\">\"text\"<\/span>])<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\"><span class=\"hljs-attr\">REFINE_PROMPT<\/span> = PromptTemplate(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\">    <span class=\"hljs-attr\">template<\/span>=refine_template, input_variables=[<span class=\"hljs-string\">\"existing_answer\"<\/span>, <span class=\"hljs-string\">\"text\"<\/span>]<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\"><span class=\"hljs-attr\">chain<\/span> = load_summarize_chain(llm, chain_type=<span class=\"hljs-string\">\"refine\"<\/span>, question_prompt=PROMPT, refine_prompt=REFINE_PROMPT, verbose=<span class=\"hljs-literal\">False<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\"><span class=\"hljs-attr\">docs<\/span> = text_splitter.split_documents(data)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\"><span class=\"hljs-attr\">result<\/span> = chain.run(docs)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">print(result)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\"><\/span>\n<\/code><\/pre>\n<h3 data-id=\"heading-24\">3.2 \u57fa\u4e8e\u5916\u90e8\u6587\u6863\u7684\u95ee\u7b54<\/h3>\n<p>1\uff09\u901a\u8fc7Loader\u52a0\u8f7d\u8fdc\u7a0b\u6587\u6863<\/p>\n<p>2\uff09\u901a\u8fc7Splitter\u57fa\u4e8eToken\u8fdb\u884c\u6587\u6863\u62c6\u5206<\/p>\n<p>3\uff09\u901a\u8fc7FAISS\u5411\u91cf\u5b58\u50a8\u6587\u6863\uff0cembedding\u52a0\u8f7dHuggingFace\u7684text2vec-base-chinese\u6a21\u578b<\/p>\n<p>4\uff09\u81ea\u5b9a\u4e49QA\u7684prompt\uff0c\u901a\u8fc7RetrievalQA\u56de\u7b54\u76f8\u5173\u7684\u95ee\u9898<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">ini<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-ini code-block-extension-codeShowNum\" lang=\"ini\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">from langchain.chains import RetrievalQA<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">from langchain.document_loaders import WebBaseLoader<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">from langchain.embeddings.huggingface import HuggingFaceEmbeddings<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">from langchain.prompts import PromptTemplate<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">from langchain.text_splitter import RecursiveCharacterTextSplitter<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">from langchain.vectorstores import FAISS<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">from azure_chat_llm import llm<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\"><span class=\"hljs-attr\">loader<\/span> = WebBaseLoader(<span class=\"hljs-string\">\"https:\/\/in.m.jd.com\/help\/app\/register_info.html\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\"><span class=\"hljs-attr\">data<\/span> = loader.load()<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\"><span class=\"hljs-attr\">text_splitter<\/span> = RecursiveCharacterTextSplitter.from_tiktoken_encoder(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">    <span class=\"hljs-attr\">model_name<\/span>=<span class=\"hljs-string\">\"gpt-3.5-turbo\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">    <span class=\"hljs-attr\">allowed_special<\/span>=<span class=\"hljs-string\">\"all\"<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">    <span class=\"hljs-attr\">separators<\/span>=[<span class=\"hljs-string\">\"nn\"<\/span>, <span class=\"hljs-string\">\"n\"<\/span>, <span class=\"hljs-string\">\"\u3002\"<\/span>, <span class=\"hljs-string\">\"\uff0c\"<\/span>],<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">    <span class=\"hljs-attr\">chunk_size<\/span>=<span class=\"hljs-number\">800<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\">    <span class=\"hljs-attr\">chunk_overlap<\/span>=<span class=\"hljs-number\">0<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"18\">)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"19\"><span class=\"hljs-attr\">docs<\/span> = text_splitter.split_documents(data)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"20\"><span class=\"hljs-comment\">#\u8bbe\u7f6e\u81ea\u5df1\u7684\u6a21\u578b\u8def\u5f84<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"21\"><span class=\"hljs-attr\">embeddings<\/span> = HuggingFaceEmbeddings(model_name=<span class=\"hljs-string\">\"text2vec-base-chinese\"<\/span>, cache_folder=<span class=\"hljs-string\">\"model\"<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"22\"><span class=\"hljs-attr\">vectorstore<\/span> = FAISS.from_documents(docs, embeddings)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"23\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"24\"><span class=\"hljs-attr\">template<\/span> = <span class=\"hljs-string\">\"\"\"\u8bf7\u4f7f\u7528\u4e0b\u9762\u63d0\u4f9b\u7684\u80cc\u666f\u4fe1\u606f\u6765\u56de\u7b54\u6700\u540e\u7684\u95ee\u9898\u3002 \u5982\u679c\u4f60\u4e0d\u77e5\u9053\u7b54\u6848\uff0c\u8bf7\u76f4\u63a5\u8bf4\u4e0d\u77e5\u9053\uff0c\u4e0d\u8981\u8bd5\u56fe\u51ed\u7a7a\u7f16\u9020\u7b54\u6848\u3002<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"25\">\u56de\u7b54\u65f6\u6700\u591a\u4f7f\u7528\u4e09\u4e2a\u53e5\u5b50\uff0c\u4fdd\u6301\u56de\u7b54\u5c3d\u53ef\u80fd\u7b80\u6d01\u3002 \u56de\u7b54\u7ed3\u675f\u65f6\uff0c\u8bf7\u4e00\u5b9a\u8981\u8bf4\"\u8c22\u8c22\u4f60\u7684\u63d0\u95ee\uff01\"<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"26\">{context}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"27\">\u95ee\u9898: {question}<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"28\">\u6709\u7528\u7684\u56de\u7b54:\"\"\"<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"29\"><span class=\"hljs-attr\">QA_CHAIN_PROMPT<\/span> = PromptTemplate(input_variables=[<span class=\"hljs-string\">\"context\"<\/span>, <span class=\"hljs-string\">\"question\"<\/span>], template=template)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"30\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"31\"><span class=\"hljs-attr\">qa_chain<\/span> = RetrievalQA.from_chain_type(llm, retriever=vectorstore.as_retriever(),<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"32\">                                       <span class=\"hljs-attr\">return_source_documents<\/span>=<span class=\"hljs-literal\">True<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"33\">                                       <span class=\"hljs-attr\">chain_type_kwargs<\/span>={<span class=\"hljs-string\">\"prompt\"<\/span>: QA_CHAIN_PROMPT})<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"34\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"35\"><span class=\"hljs-attr\">result<\/span> = qa_chain({<span class=\"hljs-string\">\"query\"<\/span>: <span class=\"hljs-string\">\"\u7528\u6237\u6ce8\u518c\u8d44\u683c\"<\/span>})<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"36\">print(result<span class=\"hljs-section\">[\"result\"]<\/span>)<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"37\">print(len(result<span class=\"hljs-section\">['source_documents']<\/span>))<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"38\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"39\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"40\"><\/span>\n<\/code><\/pre>\n<h1 data-id=\"heading-25\">4\u3001\u672a\u6765\u53d1\u5c55\u65b9\u5411<\/h1>\n<p>\u968f\u7740\u5927\u6a21\u578b\u7684\u53d1\u5c55\uff0cLangChain\u5e94\u8be5\u662f\u76ee\u524d\u6700\u706b\u7684LLM\u5f00\u53d1\u6846\u67b6\uff0c\u80fd\u548c\u5916\u90e8\u6570\u636e\u6e90\u4ea4\u4e92\u3001\u80fd\u96c6\u6210\u5404\u79cd\u5e38\u7528\u7684\u7ec4\u4ef6\u7b49\u7b49\uff0c\u5927\u5927\u964d\u4f4e\u4e86LLM\u5e94\u7528\u5f00\u53d1\u7684\u95e8\u69db\u3002\u5176\u521b\u59cb\u4ebaHarrison Chase\u4e5f\u548cAndrew Ng\u8054\u5408\u5f00\u53d1\u4e862\u95e8\u77ed\u8bfe\u7a0b\uff0c\u5e2e\u5fd9\u5927\u5bb6\u5feb\u901f\u638c\u63e1LangChain\u7684\u4f7f\u7528\u3002<\/p>\n<p>\u76ee\u524d\u5927\u6a21\u578b\u7684\u8fed\u4ee3\u5347\u7ea7\u7279\u522b\u5feb\uff0c\u4f5c\u4e3a\u4e00\u4e2a\u6846\u67b6\uff0cLangChain\u4e5f\u5f97\u4fdd\u6301\u7279\u522b\u5feb\u7684\u8fed\u4ee3\u901f\u5ea6\u3002\u5176\u5f00\u53d1\u7279\u522b\u62fc\uff0c\u6bcf\u5929\u90fd\u4f1a\u63d0\u4ea4\u5927\u91cf\u7684commit\uff0c\u57fa\u672c\u9694\u51e0\u5929\u5c31\u4f1a\u53d1\u5e03\u4e00\u4e2a\u65b0\u7248\u672c\uff0c\u5176Contributor\u4e5f\u8fbe\u5230\u4e861200\u591a\u4eba\uff0c\u7279\u522b\u6d3b\u8dc3\u3002<\/p>\n<p>\u4e2a\u4eba\u8ba4\u4e3a\uff0c\u9664\u4e86\u548c\u4e1a\u52a1\u7ed3\u5408\u843d\u5730LLM\u5e94\u7528\u5916\uff0c\u8fd8\u67092\u4e2a\u5927\u7684\u65b9\u5411\u53ef\u4ee5\u8fdb\u4e00\u6b65\u53bb\u63a2\u7d22\uff1a<\/p>\n<p>1\uff09\u901a\u8fc7\u4f4e\u4ee3\u7801\u7684\u5f62\u5f0f\u8fdb\u4e00\u6b65\u964d\u4f4eLLM\u5e94\u7528\u7684\u5f00\u53d1\u95e8\u69db\u3002\u7c7b\u4f3clangflow\u8fd9\u6837\u7684\u53ef\u89c6\u5316\u7f16\u6392\u5de5\u5177\u53d1\u5c55\u4e5f\u5f88\u5feb<\/p>\n<p>2\uff09\u6253\u9020\u66f4\u52a0\u5f3a\u5927\u7684Agent\u3002Agent\u4e4b\u4e8e\u5927\u6a21\u578b\uff0c\u4e2a\u4eba\u89c9\u5f97\u7c7b\u4f3cSQL\u4e4b\u4e8eDB\uff0c\u80fd\u5927\u5e45\u5ea6\u63d0\u5347LLM\u7684\u5e94\u7528\u573a\u666f<\/p>\n<h1 data-id=\"heading-26\">5\u3001\u53c2\u8003\u8d44\u6599<\/h1>\n<p>1\u3001<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fpython.langchain.com%2Fdocs%2Fget_started%2Fintroduction.html\" target=\"_blank\" title=\"https:\/\/python.langchain.com\/docs\/get_started\/introduction.html\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">python.langchain.com\/docs\/get_st\u2026<\/a><\/p>\n<p>2\u3001<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2FliaokongVFX%2FLangChain-Chinese-Getting-Started-Guide\" target=\"_blank\" title=\"https:\/\/github.com\/liaokongVFX\/LangChain-Chinese-Getting-Started-Guide\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">github.com\/liaokongVFX\u2026<\/a><\/p>\n<p>3\u3001<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fwww.deeplearning.ai%2Fshort-courses%2Flangchain-for-llm-application-development%2F\" target=\"_blank\" title=\"https:\/\/www.deeplearning.ai\/short-courses\/langchain-for-llm-application-development\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">www.deeplearning.ai\/short-cours\u2026<\/a><\/p>\n<p>4\u3001<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Flilianweng.github.io%2Fposts%2F2023-06-23-agent%2F\" target=\"_blank\" title=\"https:\/\/lilianweng.github.io\/posts\/2023-06-23-agent\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">lilianweng.github.io\/posts\/2023-\u2026<\/a><\/p>\n<p>5\u3001<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fmp.weixin.qq.com%2Fs%2F3coFhAdzr40tozn8f9Dc-w\" target=\"_blank\" title=\"https:\/\/mp.weixin.qq.com\/s\/3coFhAdzr40tozn8f9Dc-w\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">mp.weixin.qq.com\/s\/3coFhAdzr\u2026<\/a><\/p>\n<p>6\u3001<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Flangchain-ai%2Flangchain\" target=\"_blank\" title=\"https:\/\/github.com\/langchain-ai\/langchain\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">github.com\/langchain-a\u2026<\/a><\/p>\n<blockquote>\n<p>\u4f5c\u8005\uff1a\u4eac\u4e1c\u79d1\u6280 \u6768\u864e<\/p>\n<p>\u6765\u6e90\uff1a\u4eac\u4e1c\u4e91\u5f00\u53d1\u8005\u793e\u533a<\/p>\n<\/blockquote>","protected":false},"excerpt":{"rendered":"<p>LangChain\u662f\u4e00\u4e2a\u6846\u67b6\uff0c\u7528\u4e8e\u5f00\u53d1\u7531LLM\u9a71\u52a8\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u53ef\u4ee5\u7b80\u5355\u8ba4\u4e3a\u662fLLM\u9886\u57df\u7684Spring\uff0c\u4ee5\u53ca\u5f00\u6e90\u7248\u7684ChatGPT\u63d2\u4ef6\u7cfb\u7edf\u3002<\/p>\n","protected":false},"author":1,"featured_media":2923,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"LangChain\uff1aLLM\u5e94\u7528\u5f00\u53d1\u5229\u5668 - \u5948\u65af\u79d1\u6280\u793e\u533a","rank_math_description":"LangChain\u4f5c\u4e3aLLM\u5e94\u7528\u5f00\u53d1\u7684\u70ed\u95e8\u6846\u67b6\uff0c\u63d0\u4f9b\u4e86\u8fde\u63a5\u5916\u90e8\u6570\u636e\u3001\u4e0e\u73af\u5883\u4ea4\u4e92\u3001\u4f7f\u7528\u5de5\u5177\u7b49\u5f3a\u5927\u529f\u80fd\u3002\u672c\u6587\u6df1\u5165\u89e3\u6790LangChain\u6838\u5fc3\u7ec4\u4ef6\u3001\u5e94\u7528\u573a\u666f\u4ee5\u53ca\u672a\u6765\u53d1\u5c55\u65b9\u5411\uff0c\u52a9\u60a8\u8f7b\u677e\u6784\u5efa\u57fa\u4e8eLLM\u7684\u5e94\u7528\u7a0b\u5e8f\u3002","rank_math_focus_keyword":"LangChain, LLM\u5e94\u7528\u5f00\u53d1, \u5927\u8bed\u8a00\u6a21\u578b, Agent, AI\u6846\u67b6","views":"38","footnotes":""},"categories":[3],"tags":[136,126,127,128,129],"collection":[],"class_list":["post-1253","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fenlei2","tag-136","tag-gpt","tag-ai","tag-128","tag-129"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/comments?post=1253"}],"version-history":[{"count":0,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1253\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media\/2923"}],"wp:attachment":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media?parent=1253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/categories?post=1253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/tags?post=1253"},{"taxonomy":"collection","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/collection?post=1253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}