Skip to main content

Setup

Youโ€™ll first need to install the @langchain/baidu-qianfan package:
npm
npm install @langchain/baidu-qianfan @langchain/core
Available models: ERNIE-Bot,ERNIE-Lite-8K,ERNIE-Bot-4,ERNIE-Speed-8K,ERNIE-Speed-128K,ERNIE-4.0-8K, ERNIE-4.0-8K-Preview,ERNIE-3.5-8K,ERNIE-3.5-8K-Preview,ERNIE-Lite-8K,ERNIE-Tiny-8K,ERNIE-Character-8K, ERNIE Speed-AppBuilder Abandoned models: ERNIE-Bot-turbo

Usage

import { ChatBaiduQianfan } from "@langchain/baidu-qianfan";
import { HumanMessage } from "@langchain/core/messages";

const chat = new ChatBaiduQianfan({
  qianfanAccessKey: process.env.QIANFAN_ACCESS_KEY,
  qianfanSecretKey: process.env.QIANFAN_SECRET_KEY,
  model: "ERNIE-Lite-8K",
});

const message = new HumanMessage("ๅŒ—ไบฌๅคฉๆฐ”");
const res = await chat.invoke([message]);
console.log({ res });
/**
    {
      res: AIMessage {
        lc_serializable: true,
        lc_kwargs: {
          content: 'ๅŒ—ไบฌๅคฉๆฐ”**ๅคšไบ‘๏ผŒๆฐ”ๆธฉ13~24ยฐC**๏ผŒๅพฎ้ฃŽ๏ผŒ็ฉบๆฐ”่ดจ้‡่‰ฏ๏ผŒ้ข„ๆŠฅๆ— ๆŒ็ปญ้™ๆฐด^[2]^ใ€‚\n' +
            '\n' +
            '่ฟ‘ๆœŸๅคฉๆฐ”ๆƒ…ๅ†ตๆฅ่ฏด๏ผŒ็™ฝๅคฉๆœ€้ซ˜ๆฐ”ๆธฉๅคšๅœจ30ๅบฆๅทฆๅณ๏ผŒ่€Œๅคœๆ™šๆœ€ไฝŽๆฐ”ๆธฉไป…ๆœ‰ๅ‡ ๅบฆ๏ผŒๆ—ฉๆ™š่พƒๅ‡‰๏ผŒ้œ€่ฆๅšๅฅฝไฟๆš–๏ผŒๆ˜ผๅคœๆธฉๅทฎ่พƒๅคงใ€‚็”ฑไบŽ็Žฐๅœจๆญฃๅค„ไบŽ้›จๆฐด่Š‚ๆฐ”๏ผŒๆญคๆ—ถๅคฉๆฐ”้˜ดๆฒ‰ใ€ๅคšๅ˜๏ผŒๆ—ถ่€Œไธ‹่ตทๅ†ฐ้›น๏ผŒๆ—ถ่€Œไธ‹่ตทๅคง้›จ๏ผŒๅคฉ่‰ฒๆ˜ๆš—ใ€‚ๅ†ฐ้›นๆ—ถ้—ดไธไผšๆŒ็ปญๅคช้•ฟ๏ผŒ้€šๅธธ้ƒฝๆ˜ฏไธ‹ๅ†ฐ้›นไธ€ๅฐๆฎตๆ—ถ้—ดๅŽๅฐฑไผšๅœๆญข๏ผŒๅคฉๆฐ”ๅฐฑไผš้€ๆธๆขๅคๆ™ดๅฅฝ^[1]^ใ€‚',
          tool_calls: [],
          invalid_tool_calls: [],
          additional_kwargs: {},
          response_metadata: {}
        },
        lc_namespace: [ 'langchain_core', 'messages' ],
        content: 'ๅŒ—ไบฌๅคฉๆฐ”**ๅคšไบ‘๏ผŒๆฐ”ๆธฉ13~24ยฐC**๏ผŒๅพฎ้ฃŽ๏ผŒ็ฉบๆฐ”่ดจ้‡่‰ฏ๏ผŒ้ข„ๆŠฅๆ— ๆŒ็ปญ้™ๆฐด^[2]^ใ€‚\n' +
          '\n' +
          '่ฟ‘ๆœŸๅคฉๆฐ”ๆƒ…ๅ†ตๆฅ่ฏด๏ผŒ็™ฝๅคฉๆœ€้ซ˜ๆฐ”ๆธฉๅคšๅœจ30ๅบฆๅทฆๅณ๏ผŒ่€Œๅคœๆ™šๆœ€ไฝŽๆฐ”ๆธฉไป…ๆœ‰ๅ‡ ๅบฆ๏ผŒๆ—ฉๆ™š่พƒๅ‡‰๏ผŒ้œ€่ฆๅšๅฅฝไฟๆš–๏ผŒๆ˜ผๅคœๆธฉๅทฎ่พƒๅคงใ€‚็”ฑไบŽ็Žฐๅœจๆญฃๅค„ไบŽ้›จๆฐด่Š‚ๆฐ”๏ผŒๆญคๆ—ถๅคฉๆฐ”้˜ดๆฒ‰ใ€ๅคšๅ˜๏ผŒๆ—ถ่€Œไธ‹่ตทๅ†ฐ้›น๏ผŒๆ—ถ่€Œไธ‹่ตทๅคง้›จ๏ผŒๅคฉ่‰ฒๆ˜ๆš—ใ€‚ๅ†ฐ้›นๆ—ถ้—ดไธไผšๆŒ็ปญๅคช้•ฟ๏ผŒ้€šๅธธ้ƒฝๆ˜ฏไธ‹ๅ†ฐ้›นไธ€ๅฐๆฎตๆ—ถ้—ดๅŽๅฐฑไผšๅœๆญข๏ผŒๅคฉๆฐ”ๅฐฑไผš้€ๆธๆขๅคๆ™ดๅฅฝ^[1]^ใ€‚',
        name: undefined,
        additional_kwargs: {},
        response_metadata: { tokenUsage: [Object] },
        tool_calls: [],
        invalid_tool_calls: []
      }
    }
 */

Streaming

Qianfanโ€™s API also supports streaming token responses. The example below demonstrates how to use this feature.
import { ChatBaiduQianfan } from "@langchain/baidu-qianfan";
import { HumanMessage } from "@langchain/core/messages";

const chat = new ChatBaiduQianfan({
  qianfanAccessKey: process.env.QIANFAN_ACCESS_KEY,
  qianfanSecretKey: process.env.QIANFAN_SECRET_KEY,
  model: "ERNIE-Lite-8K",
  streaming: true,
});

const message = new HumanMessage("็ญ‰้ขๆœฌ้‡‘ๅ’Œ็ญ‰้ขๆœฌๆฏๆœ‰ไป€ไนˆๅŒบๅˆซ๏ผŸ");
const res = await chat.invoke([message]);
console.log({ res });

/**
 {
      res: AIMessage {
        lc_serializable: true,
        lc_kwargs: {
          content: 'undefined็ญ‰้ขๆœฌ้‡‘ๅ’Œ็ญ‰้ขๆœฌๆฏๆ˜ฏไธค็งๅธธ่ง็š„่ดทๆฌพ่ฟ˜ๆฌพๆ–นๅผ๏ผŒๅฎƒไปฌไน‹้—ด็š„ไธป่ฆๅŒบๅˆซๅœจไบŽ่ฎกๆฏๆ–นๅผใ€ๆฏๆœˆ่ฟ˜ๆฌพ้ขๅ’Œๅˆฉๆฏๆ”ฏๅ‡บ็ญ‰ๆ–น้ขใ€‚\n' +
            '\n' +
            '1. ่ฎกๆฏๆ–นๅผ๏ผš็ญ‰้ขๆœฌ้‡‘ๆ˜ฏไธ€็งๆŒ‰ๆœˆ้€’ๅ‡็š„่ฎกๆฏๆ–นๅผ๏ผŒๆฏๆœˆๅฟ่ฟ˜็›ธๅŒๆ•ฐ้ข็š„ๆœฌ้‡‘ๅ’Œๅ‰ฉไฝ™่ดทๆฌพๅœจ่ฏฅๆœˆไบง็”Ÿ็š„ๅˆฉๆฏใ€‚่€Œ็ญ‰้ขๆœฌๆฏๅˆ™ๆ˜ฏๆฏๆœˆๅฟ่ฟ˜็›ธๅŒ้‡‘้ข็š„ๅˆฉๆฏ๏ผŒๆ นๆฎ่ดทๆฌพ้‡‘้ขๅ’Œ่ดทๆฌพๆœŸ้™่ฎก็ฎ—ๆœˆไพ›๏ผŒๆœฌ้‡‘ๅ’Œๅˆฉๆฏๅœจๆฏๆœˆ่ฟ˜ๆฌพไธญๅ ็š„ๆฏ”ไพ‹้€ๆœˆๅ˜ๅŒ–ใ€‚\n' +
            '2. ๆฏๆœˆ่ฟ˜ๆฌพ้ข๏ผš็”ฑไบŽ็ญ‰้ขๆœฌๆฏๆฏๆœˆๅฟ่ฟ˜็š„ๅˆฉๆฏๅ ๆฏๆœˆ่ฟ˜ๆฌพๆ€ป้ข็š„ๆฏ”ไพ‹้€ๆธๅ‡ๅฐ‘๏ผŒๅฏผ่‡ดๆฏๆœˆ่ฟ˜ๆฌพ้ข้€ๆธๅขžๅŠ ๏ผŒ่€Œ็ญ‰้ขๆœฌ้‡‘ๆฏๆœˆๅฟ่ฟ˜็š„ๆœฌ้‡‘็›ธๅŒ๏ผŒๅ› ๆญคๆฏๆœˆ่ฟ˜ๆฌพ้ข้€ๆธๅ‡ๅฐ‘ใ€‚\n' +
            '3. ๅˆฉๆฏๆ”ฏๅ‡บ๏ผšๅœจ่ดทๆฌพๆœŸ้™็›ธๅŒ็š„ๆƒ…ๅ†ตไธ‹๏ผŒ็ญ‰้ขๆœฌ้‡‘็š„ๅˆฉๆฏๆ”ฏๅ‡บ็›ธๅฏน่พƒๅฐ‘๏ผŒๅ› ไธบ้š็€ๆœฌ้‡‘็š„ๅ‡ๅฐ‘๏ผŒๅ‰ฉไฝ™่ดทๆฌพไบง็”Ÿ็š„ๅˆฉๆฏไนŸ็›ธๅบ”ๅ‡ๅฐ‘ใ€‚่€Œ็ญ‰้ขๆœฌๆฏ็š„ๅˆฉๆฏๆ”ฏๅ‡บๅˆ™็›ธๅฏน่พƒ้ซ˜๏ผŒๅ› ไธบๆฏๆœˆๅฟ่ฟ˜็š„ๅˆฉๆฏ้€ๆธๅ‡ๅฐ‘๏ผŒๅฏผ่‡ดๆ€ปๅˆฉๆฏๆ”ฏๅ‡บ็›ธๅฏน่พƒ้ซ˜ใ€‚\n' +
            '\n' +
            'ๆ€ปไน‹๏ผŒ็ญ‰้ขๆœฌ้‡‘ๅ’Œ็ญ‰้ขๆœฌๆฏๅœจ่ดทๆฌพๆœŸ้™็›ธๅŒ็š„ๆƒ…ๅ†ตไธ‹๏ผŒ็ญ‰้ขๆœฌ้‡‘็”ฑไบŽๅˆฉๆฏๆ”ฏๅ‡บ็›ธๅฏน่พƒๅฐ‘๏ผŒๆ›ด้€‚ๅˆไบŽ่ต„้‡‘ๅ……่ฃ•ใ€ๆœ‰ๆๅ‰่ฟ˜ๆฌพๆ‰“็ฎ—็š„ๅ€Ÿๆฌพไบบ๏ผ›่€Œ็ญ‰้ขๆœฌๆฏๆฏๆœˆ่ฟ˜ๆฌพ้ขๅ›บๅฎš๏ผŒๆ›ด้€‚ๅˆไบŽๆฏๆœˆๆ”ถๅ…ฅ่พƒ้ซ˜็š„ๅ€Ÿๆฌพไบบใ€‚',
          tool_calls: [],
          invalid_tool_calls: [],
          additional_kwargs: {},
          response_metadata: {}
        },
        lc_namespace: [ 'langchain_core', 'messages' ],
        content: 'undefined็ญ‰้ขๆœฌ้‡‘ๅ’Œ็ญ‰้ขๆœฌๆฏๆ˜ฏไธค็งๅธธ่ง็š„่ดทๆฌพ่ฟ˜ๆฌพๆ–นๅผ๏ผŒๅฎƒไปฌไน‹้—ด็š„ไธป่ฆๅŒบๅˆซๅœจไบŽ่ฎกๆฏๆ–นๅผใ€ๆฏๆœˆ่ฟ˜ๆฌพ้ขๅ’Œๅˆฉๆฏๆ”ฏๅ‡บ็ญ‰ๆ–น้ขใ€‚\n' +
          '\n' +
          '1. ่ฎกๆฏๆ–นๅผ๏ผš็ญ‰้ขๆœฌ้‡‘ๆ˜ฏไธ€็งๆŒ‰ๆœˆ้€’ๅ‡็š„่ฎกๆฏๆ–นๅผ๏ผŒๆฏๆœˆๅฟ่ฟ˜็›ธๅŒๆ•ฐ้ข็š„ๆœฌ้‡‘ๅ’Œๅ‰ฉไฝ™่ดทๆฌพๅœจ่ฏฅๆœˆไบง็”Ÿ็š„ๅˆฉๆฏใ€‚่€Œ็ญ‰้ขๆœฌๆฏๅˆ™ๆ˜ฏๆฏๆœˆๅฟ่ฟ˜็›ธๅŒ้‡‘้ข็š„ๅˆฉๆฏ๏ผŒๆ นๆฎ่ดทๆฌพ้‡‘้ขๅ’Œ่ดทๆฌพๆœŸ้™่ฎก็ฎ—ๆœˆไพ›๏ผŒๆœฌ้‡‘ๅ’Œๅˆฉๆฏๅœจๆฏๆœˆ่ฟ˜ๆฌพไธญๅ ็š„ๆฏ”ไพ‹้€ๆœˆๅ˜ๅŒ–ใ€‚\n' +
          '2. ๆฏๆœˆ่ฟ˜ๆฌพ้ข๏ผš็”ฑไบŽ็ญ‰้ขๆœฌๆฏๆฏๆœˆๅฟ่ฟ˜็š„ๅˆฉๆฏๅ ๆฏๆœˆ่ฟ˜ๆฌพๆ€ป้ข็š„ๆฏ”ไพ‹้€ๆธๅ‡ๅฐ‘๏ผŒๅฏผ่‡ดๆฏๆœˆ่ฟ˜ๆฌพ้ข้€ๆธๅขžๅŠ ๏ผŒ่€Œ็ญ‰้ขๆœฌ้‡‘ๆฏๆœˆๅฟ่ฟ˜็š„ๆœฌ้‡‘็›ธๅŒ๏ผŒๅ› ๆญคๆฏๆœˆ่ฟ˜ๆฌพ้ข้€ๆธๅ‡ๅฐ‘ใ€‚\n' +
          '3. ๅˆฉๆฏๆ”ฏๅ‡บ๏ผšๅœจ่ดทๆฌพๆœŸ้™็›ธๅŒ็š„ๆƒ…ๅ†ตไธ‹๏ผŒ็ญ‰้ขๆœฌ้‡‘็š„ๅˆฉๆฏๆ”ฏๅ‡บ็›ธๅฏน่พƒๅฐ‘๏ผŒๅ› ไธบ้š็€ๆœฌ้‡‘็š„ๅ‡ๅฐ‘๏ผŒๅ‰ฉไฝ™่ดทๆฌพไบง็”Ÿ็š„ๅˆฉๆฏไนŸ็›ธๅบ”ๅ‡ๅฐ‘ใ€‚่€Œ็ญ‰้ขๆœฌๆฏ็š„ๅˆฉๆฏๆ”ฏๅ‡บๅˆ™็›ธๅฏน่พƒ้ซ˜๏ผŒๅ› ไธบๆฏๆœˆๅฟ่ฟ˜็š„ๅˆฉๆฏ้€ๆธๅ‡ๅฐ‘๏ผŒๅฏผ่‡ดๆ€ปๅˆฉๆฏๆ”ฏๅ‡บ็›ธๅฏน่พƒ้ซ˜ใ€‚\n' +
          '\n' +
          'ๆ€ปไน‹๏ผŒ็ญ‰้ขๆœฌ้‡‘ๅ’Œ็ญ‰้ขๆœฌๆฏๅœจ่ดทๆฌพๆœŸ้™็›ธๅŒ็š„ๆƒ…ๅ†ตไธ‹๏ผŒ็ญ‰้ขๆœฌ้‡‘็”ฑไบŽๅˆฉๆฏๆ”ฏๅ‡บ็›ธๅฏน่พƒๅฐ‘๏ผŒๆ›ด้€‚ๅˆไบŽ่ต„้‡‘ๅ……่ฃ•ใ€ๆœ‰ๆๅ‰่ฟ˜ๆฌพๆ‰“็ฎ—็š„ๅ€Ÿๆฌพไบบ๏ผ›่€Œ็ญ‰้ขๆœฌๆฏๆฏๆœˆ่ฟ˜ๆฌพ้ขๅ›บๅฎš๏ผŒๆ›ด้€‚ๅˆไบŽๆฏๆœˆๆ”ถๅ…ฅ่พƒ้ซ˜็š„ๅ€Ÿๆฌพไบบใ€‚',
        name: undefined,
        additional_kwargs: {},
        response_metadata: { tokenUsage: [Object] },
        tool_calls: [],
        invalid_tool_calls: []
      }
    }
 */

Connect these docs programmatically to Claude, VSCode, and more via MCP for real-time answers.