{"id":1517,"date":"2024-05-18T23:34:50","date_gmt":"2024-05-18T23:34:50","guid":{"rendered":"https:\/\/www.nicekj.com\/?p=1517"},"modified":"2024-05-18T23:34:50","modified_gmt":"2024-05-18T23:34:50","slug":"langchainjs-shizhanxilieruhetongjidamoxingshiyongde-token-shiyonglianga","status":"publish","type":"post","link":"https:\/\/www.nicekj.com\/langchainjs-shizhanxilieruhetongjidamoxingshiyongde-token-shiyonglianga.html","title":{"rendered":"LangChain.js \u5b9e\u6218\u7cfb\u5217\uff1a\u5982\u4f55\u7edf\u8ba1\u5927\u6a21\u578b\u4f7f\u7528\u7684 token \u4f7f\u7528\u91cf\u548c\u82b1\u8d39"},"content":{"rendered":"<blockquote>\n<p>\ud83d\udcdd LangChain.js \u662f\u4e00\u4e2a\u5feb\u901f\u5f00\u53d1\u5927\u6a21\u578b\u5e94\u7528\u7684\u6846\u67b6\uff0c\u5b83\u63d0\u4f9b\u4e86\u4e00\u7cfb\u5217\u5f3a\u5927\u7684\u529f\u80fd\u548c\u5de5\u5177\uff0c\u4f7f\u5f97\u5f00\u53d1\u8005\u80fd\u591f\u66f4\u52a0\u9ad8\u6548\u5730\u6784\u5efa\u590d\u6742\u7684\u5e94\u7528\u7a0b\u5e8f\u3002LangChain.js \u5b9e\u6218\u7cfb\u5217\u6587\u7ae0\u5c06\u4ecb\u7ecd\u5728\u5b9e\u9645\u9879\u76ee\u4e2d\u4f7f\u7528 LangChain.js \u65f6\u7684\u4e00\u4e9b\u65b9\u6cd5\u548c\u6280\u5de7\u3002<\/p>\n<\/blockquote>\n<p>\u7edf\u8ba1\u8c03\u7528\u5927\u6a21\u578b\u7684 token \u4f7f\u7528\u91cf\uff0c\u8fdb\u800c\u7edf\u8ba1\u6574\u4f53\u7684\u8d26\u5355\u82b1\u8d39\uff0c\u662f\u4e00\u4e2a\u975e\u5e38\u57fa\u7840\u7684\u9700\u6c42\uff0c\u5728 LangChain.js \u4e2d\u7edf\u8ba1 token \u7684\u65b9\u5f0f\u6709\u4e24\u79cd\uff0c\u4e00\u79cd\u662f\u65b9\u6cd5\u7684\u8fd4\u56de\uff0c\u4e00\u79cd\u662f\u5229\u7528\u56de\u8c03\u51fd\u6570\uff1a<\/p>\n<p>1\ufe0f\u20e3 \u5728<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fjs.langchain.com%2Fdocs%2Fmodules%2Fmodel_io%2Fmodels%2Fchat%2F%23generate\" target=\"_blank\" title=\"https:\/\/js.langchain.com\/docs\/modules\/model_io\/models\/chat\/#generate\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">\u65b9\u6cd5<\/a>\u4e2d\u8fd4\u56de token \u7684\u4f7f\u7528\u60c5\u51b5\uff0c\u6bd4\u5982 <code>generate()<\/code>\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">js<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-js code-block-extension-codeShowNum\" lang=\"js\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> chat = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">ChatOpenAI<\/span>({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">  <span class=\"hljs-attr\">modelName<\/span>: <span class=\"hljs-string\">'gpt-4'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">  <span class=\"hljs-attr\">openAIApiKey<\/span>: <span class=\"hljs-string\">'YOUR_KEY'<\/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\"><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\"><span class=\"hljs-keyword\">const<\/span> response = <span class=\"hljs-keyword\">await<\/span> chat.<span class=\"hljs-title function_\">generate<\/span>([<\/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 class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">SystemMessage<\/span>(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">      <span class=\"hljs-string\">\"\u4f60\u662f\u4e00\u4e2a\u7ffb\u8bd1\u4e13\u5bb6\uff0c\u53ef\u4ee5\u5c06\u4e2d\u6587\u7ffb\u8bd1\u6210\u6cd5\u8bed\u3002\"<\/span><\/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\">new<\/span> <span class=\"hljs-title class_\">HumanMessage<\/span>(<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">      <span class=\"hljs-string\">\"\u628a\u8fd9\u4e2a\u53e5\u5b50\u7ffb\u8bd1\u4ece\u4e2d\u6587\u7ffb\u8bd1\u6210\u6cd5\u8bed\uff1a\u6211\u7279\u522b\u559c\u6b22\u4e0a\u73ed\"<\/span><\/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<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">]);<\/span>\n<\/code><\/pre>\n<p><code>generate()<\/code> \u65b9\u6cd5\u4f1a\u8fd4\u56de\u5982\u4e0b\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">json<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-json code-block-extension-codeShowNum\" lang=\"json\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-punctuation\">{<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">  <span class=\"hljs-attr\">\"generations\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-punctuation\">[<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">    <span class=\"hljs-punctuation\">[<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"4\">      <span class=\"hljs-punctuation\">{<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">        <span class=\"hljs-attr\">\"text\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-string\">\"J'aime beaucoup travailler.\"<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"6\">        <span class=\"hljs-comment\">\/\/...<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"7\">      <span class=\"hljs-punctuation\">}<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">    <span class=\"hljs-punctuation\">]<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"9\">  <span class=\"hljs-punctuation\">]<\/span><span class=\"hljs-punctuation\">,<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"10\">  <span class=\"hljs-attr\">\"llmOutput\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-punctuation\">{<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">    <span class=\"hljs-attr\">\"tokenUsage\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-punctuation\">{<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">      <span class=\"hljs-attr\">\"completionTokens\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-number\">16<\/span><span class=\"hljs-punctuation\">,<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"13\">      <span class=\"hljs-attr\">\"promptTokens\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-number\">17<\/span><span class=\"hljs-punctuation\">,<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"14\">      <span class=\"hljs-attr\">\"totalTokens\"<\/span><span class=\"hljs-punctuation\">:<\/span> <span class=\"hljs-number\">33<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">    <span class=\"hljs-punctuation\">}<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">  <span class=\"hljs-punctuation\">}<\/span><\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"17\"><span class=\"hljs-punctuation\">}<\/span><\/span>\n<\/code><\/pre>\n<p><code>llmOutput<\/code> \u5b57\u6bb5\u5305\u542b\u6211\u4eec\u6574\u4e2a\u7684 token \u4f7f\u7528\u91cf\uff0c\u5176\u4e2d <code>promptTokens<\/code> \u5bf9\u5e94\u7684\u662f<strong>\u8f93\u5165<\/strong>\u7684 token\uff0c<code>completionTokens<\/code> \u5bf9\u5e94\u7684\u662f<strong>\u8f93\u51fa<\/strong>\u7684 token\uff0c\u5bf9\u4e8e OpenAI \u6765\u8bf4\uff0c\u8f93\u5165\u8f93\u51fa\u7684<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fopenai.com%2Fpricing\" target=\"_blank\" title=\"https:\/\/openai.com\/pricing\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">\u4ef7\u683c<\/a>\u662f\u4e0d\u4e00\u7684\uff0c\u5982\u4e0b\u8868\uff1a<\/p>\n<table>\n<thead>\n<tr>\n<th>\u6a21\u578b\u540d<\/th>\n<th>\u8f93\u5165<\/th>\n<th>\u8f93\u51fa<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>gpt-4<\/td>\n<td>$0.03 \/ 1K tokens<\/td>\n<td>$0.06 \/ 1K tokens<\/td>\n<\/tr>\n<tr>\n<td>gpt-3.5-turbo-1106<\/td>\n<td>$0.0010 \/ 1K tokens<\/td>\n<td>$0.0020 \/ 1K tokens<\/td>\n<\/tr>\n<tr>\n<td>gpt-4-1106-preview<\/td>\n<td>$0.01 \/ 1K tokens<\/td>\n<td>$0.03 \/ 1K tokens<\/td>\n<\/tr>\n<tr>\n<td>gpt-4-1106-vision-preview<\/td>\n<td>$0.01 \/ 1K tokens<\/td>\n<td>$0.03 \/ 1K tokens<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>2\ufe0f\u20e3 \u4f7f\u7528<a href=\"https:\/\/link.juejin.cn?target=https%3A%2F%2Fjs.langchain.com%2Fdocs%2Fmodules%2Fcallbacks%2F\" target=\"_blank\" title=\"https:\/\/js.langchain.com\/docs\/modules\/callbacks\/\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">\u56de\u8c03\u51fd\u6570<\/a> <code>handleLLMEnd<\/code><\/p>\n<p>LangChain \u63d0\u4f9b\u4e86\u5927\u91cf\u65b9\u4fbf\u7684\u56de\u8c03\u51fd\u6570\uff0c\u6211\u4eec\u53ef\u4ee5\u5229\u7528\u5176\u63d0\u4f9b\u7684\u5185\u7f6e\u7684 <code>handleLLMEnd()<\/code> \u51fd\u6570\u6765\u7edf\u8ba1\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u521b\u5efa <code>ChatOpenAI<\/code> \u5b9e\u4f8b\u7684\u65f6\u5019\u6ce8\u5165\u56de\u8c03\u51fd\u6570\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">js<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-js code-block-extension-codeShowNum\" lang=\"js\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\"><span class=\"hljs-keyword\">const<\/span> chat = <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">ChatOpenAI<\/span>({<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">  <span class=\"hljs-attr\">modelName<\/span>: <span class=\"hljs-string\">'gpt-4'<\/span>,<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"3\">  <span class=\"hljs-attr\">openAIApiKey<\/span>: <span class=\"hljs-string\">'YOUR_KEY'<\/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\">  <span class=\"hljs-attr\">callbacks<\/span>: [<\/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-title function_\">handleLLMEnd<\/span>(<span class=\"hljs-params\">llmResult<\/span>) {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"8\">        <span class=\"hljs-variable language_\">console<\/span>.<span class=\"hljs-title function_\">log<\/span>(<span class=\"hljs-title class_\">JSON<\/span>.<span class=\"hljs-title function_\">stringify<\/span>(llmResult, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/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<span class=\"code-block-extension-codeLine\" data-line-num=\"12\">})<\/span>\n<\/code><\/pre>\n<blockquote>\n<p>\u56de\u8c03\u53c2\u6570 <code>llmResult<\/code> \u548c <code>generate()<\/code> \u65b9\u6cd5\u8fd4\u56de\u503c\u662f\u4e00\u6837\u7684\uff0c\u540c\u6837\u6709\u5305\u542b <code>tokenUsage<\/code><\/p>\n<\/blockquote>\n<p>\u53e6\u5916\u4e5f\u53ef\u4ee5\u5728\u8c03\u7528\u7684\u65f6\u5019\u518d\u6ce8\u5165\u56de\u8c03\u51fd\u6570\uff0c\u53ef\u4ee5\u66f4\u7cbe\u7ec6\u5730\u7edf\u8ba1\uff1a<\/p>\n<pre><\/div><div class=\"code-block-extension-headerRight\"><span class=\"code-block-extension-lang\">js<\/span><div class=\"code-block-extension-copyCodeBtn\">\u590d\u5236\u4ee3\u7801<\/div><\/div><\/div><code class=\"hljs language-js code-block-extension-codeShowNum\" lang=\"js\"><span class=\"code-block-extension-codeLine\" data-line-num=\"1\">model<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"2\">  .<span class=\"hljs-title function_\">invoke<\/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-keyword\">new<\/span> <span class=\"hljs-title class_\">SystemMessage<\/span>(<span class=\"hljs-string\">'Only return JSON'<\/span>),<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"5\">      <span class=\"hljs-keyword\">new<\/span> <span class=\"hljs-title class_\">HumanMessage<\/span>(<span class=\"hljs-string\">'Hi there!'<\/span>)<\/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 class=\"hljs-attr\">callbacks<\/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 class=\"hljs-title function_\">handleLLMEnd<\/span>(<span class=\"hljs-params\">llmResult<\/span>) {<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"11\">            <span class=\"hljs-variable language_\">console<\/span>.<span class=\"hljs-title function_\">log<\/span>(<span class=\"hljs-title class_\">JSON<\/span>.<span class=\"hljs-title function_\">stringify<\/span>(llmResult, <span class=\"hljs-literal\">null<\/span>, <span class=\"hljs-number\">2<\/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<span class=\"code-block-extension-codeLine\" data-line-num=\"15\">    }<\/span>\n<span class=\"code-block-extension-codeLine\" data-line-num=\"16\">  )<\/span>\n<\/code><\/pre>\n<p>\u597d\u4e86\uff0c\u5e0c\u671b\u4ee5\u4e0a\u4e24\u79cd\u65b9\u5f0f\u53ef\u4ee5\u5e2e\u52a9\u5927\u5bb6\u7edf\u8ba1\u5927\u6a21\u578b\u7684\u5f00\u9500\uff0c\u62a4\u597d\u94b1\u515c\u3002<\/p>\n<blockquote>\n<p>\u63a8\u8350\u4e00\u4e2a\u96c6\u804a\u5929\u3001\u5de5\u4f5c\u6d41\u548c\u77e5\u8bc6\u5e93\u7684AI \u5e73\u53f0 <a href=\"https:\/\/link.juejin.cn?target=http%3A%2F%2Fstarflow.tech\" target=\"_blank\" title=\"http:\/\/starflow.tech\" ref=\"nofollow noopener noreferrer\" rel=\"noopener\">StarFlow.tech \ud83d\ude80<\/a> \u3002\u5728\u8fd9\u91cc\uff0c\u4f60\u53ef\u4ee5\u514d\u8d39\u4f7f\u7528 ChatGPT3.5 \u548c 3.5 16K\uff0c\u8fd8\u6709 GPT-4 Vision\u3001DELL\u00b7E3\u3001Midjourney \u7b49\u591a\u79cd\u6a21\u578b\u53ef\u4f9b\u9009\u62e9\u3002\u8fd9\u4e2a\u5e73\u53f0\u5c31\u50cf\u4e00\u4e2a\u5c0f\u578b\u5de5\u4f5c\u5ba4\uff0c\u52a9\u529b\u4e2a\u4eba\u6548\u7387 Max\uff01\u3002<\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>\u7edf\u8ba1\u8c03\u7528\u5927\u6a21\u578b\u7684 token \u4f7f\u7528\u91cf\uff0c\u8fdb\u800c\u7edf\u8ba1\u6574\u4f53\u7684\u8d26\u5355\u82b1\u8d39\uff0c\u662f\u4e00\u4e2a\u975e\u5e38\u57fa\u7840\u7684\u9700\u6c42\uff0c\u5728 LangChain.js \u4e2d\u7edf\u8ba1 token \u7684\u65b9\u5f0f\u6709\u4e24\u79cd\uff0c\u4e00\u79cd\u662f\u65b9\u6cd5\u7684\u8fd4\u56de\uff0c\u4e00\u79cd\u662f\u5229\u7528\u56de\u8c03\u51fd\u6570<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"rank_math_title":"","rank_math_description":"","rank_math_focus_keyword":"","views":"9","footnotes":""},"categories":[3],"tags":[126,127,128,129,136],"collection":[],"class_list":["post-1517","post","type-post","status-publish","format-standard","hentry","category-fenlei2","tag-gpt","tag-ai","tag-128","tag-129","tag-136"],"acf":[],"_links":{"self":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1517","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=1517"}],"version-history":[{"count":0,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/posts\/1517\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/media?parent=1517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/categories?post=1517"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/tags?post=1517"},{"taxonomy":"collection","embeddable":true,"href":"https:\/\/www.nicekj.com\/nicekj2024\/wp\/v2\/collection?post=1517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}