npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@baiducloud/qianfan

v0.2.2

Published

针对百度智能云千帆大模型平台,我们推出了一套 JavaScript SDK(下称千帆 SDK),方便用户通过代码接入并调用千帆大模型平台的能力。

Downloads

173,059

Readme

百度千帆大模型平台 JavaScript SDK

针对百度智能云千帆大模型平台,我们推出了一套 JavaScript SDK(下称千帆 SDK),方便用户通过代码接入并调用千帆大模型平台的能力。

license codecov NPM version NPM downloads docs Feedback Issue Feedback Ticket

浏览器环境使用请参考 文档

快速使用

第一步:安装node.js sdk

#如果使用npm:
npm install @baiducloud/qianfan
#如果使用yarn:
yarn add @baiducloud/qianfan

第二步:获得鉴权

在使用千帆 SDK 之前,用户需要 百度智能云控制台 - 安全认证 页面获取 Access Key 与 Secret Key,并在 千帆控制台 中创建应用,选择需要启用的服务,具体流程参见平台 说明文档

选择一:使用安全认证AK/SK鉴权 【推荐】

(1)登录百度智能云千帆控制台,点击“用户账号->安全认证”进入Access Key管理界面。

(2)查看安全认证页面的Access Key/Secret Key

注意: 初始化鉴权时,使用“安全认证/Access Key”中的Access Key和 Secret Key进行鉴权,更多鉴权认证机制请参考鉴权认证机制。 安全认证Access Key(AK)/Secret Key(SK),和使用的获取AcessToken的应用API Key(AK) 和 Secret Key(SK)不同

选择二:使用应用AK/SK鉴权调用 【不推荐,后续可能出现新功能不兼容的情况】

(1)登录百度智能云千帆控制台。 注意:为保障服务稳定运行,账户最好不处于欠费状态。

(2)创建千帆应用。 如果已有应用,此步骤可跳过。如果无应用,进入控制台创建应用 ,如何创建应用也可以参考应用接入使用。

(3)在应用接入页,获取应用的API Key、Secret Key。

第三步:初始化AK和SK

选择一:通过配置文件初始化 【推荐】

在项目的根目录中创建一个名为 .env 的文件,并添加以下内容,SDK从当前目录的 .env 中读取配置。

QIANFAN_AK=your_access_key
QIANFAN_SK=your_secret_key
QIANFAN_ACCESS_KEY=another_access_key
QIANFAN_SECRET_KEY=another_secret_key

选择二:通过环境变量初始化

setEnvVariable('QIANFAN_AK','your_api_key');
setEnvVariable('QIANFAN_SK','your_secret_key');

选择三:通过参数初始化(以ChatCompletion为例)

import {ChatCompletion} from "@baiducloud/qianfan";

// 通过参数初始化,应用API Key替换your_api_key,应用Secret Key替换your_secret_key,以对话Chat为例,调用如下
const client = new ChatCompletion({ QIANFAN_AK: 'your_api_key', QIANFAN_SK: 'your_secret_key' });
// 通过参数初始化, ACCESS_KEY / SECRET_KEY
const client = new ChatCompletion({ QIANFAN_ACCESS_KEY: 'your_api_key', QIANFAN_SECRET_KEY: 'your_secret_key' });

第四步:使用SDK

我们提供了一些 示例,可以帮助快速了解 SDK 的使用方法并完成常见功能。 功能如下:

Chat 单轮对话

默认模型

import {ChatCompletion, setEnvVariable} from "@baiducloud/qianfan";

setEnvVariable('QIANFAN_ACCESS_KEY','***');
setEnvVariable('QIANFAN_SECRET_KEY','***');

const client = new  ChatCompletion();
async function main() {
    const resp = await client.chat({
        messages: [
            {
                role: 'user',
                content: '你好!',
            },
        ],
    });
    console.log(resp);
}

main();
{
  id: 'as-xdiknr8pj9',
  object: 'chat.completion',
  created: 1709721393,
  result: '你好!有什么我可以帮助你的吗?',
  is_truncated: false,
  need_clear_history: false,
  usage: { prompt_tokens: 2, completion_tokens: 8, total_tokens: 10 }
}

指定预置模型

import {ChatCompletion, setEnvVariable} from "@baiducloud/qianfan";

const client = new  ChatCompletion();
async function main() {
    const resp = await client.chat({
        messages: [
            {
                role: 'user',
                content: '今天深圳天气',
            },
        ],
     }, "ERNIE-Lite-8K");
    console.log(resp);
}

main();

用户自行发布的模型服务

import {ChatCompletion, setEnvVariable} from "@baiducloud/qianfan";

const client = new  ChatCompletion({Endpoint: '***'});
async function main() {
    const resp = await client.chat({
        messages: [
            {
                role: 'user',
                content: '你好!',
            },
        ],
    });
    console.log(resp);
}

main

多轮对话

import {ChatCompletion, setEnvVariable} from "@baiducloud/qianfan";

const client = new  ChatCompletion();  
async function main() {    // 调用默认模型,即 ERNIE--turbo
    const resp = await client.chat({
        messages: [
            {
                role: 'user',
                content: '你好!',
            },
            {
                 role: "assistant",
                 content: "你好,请问有什么我可以帮助你的吗?"
             },
             {
                 role: "user",
                 "content": "我在北京,周末可以去哪里玩?"
             },
        ],
    });
    console.log(resp);
}

main();
{
  id: 'as-8vcq0n4u0e',
  object: 'chat.completion',
  created: 1709887877,
  result: '北京是一个拥有许多有趣和独特景点的大城市,周末你可以去很多地方玩。例如:
' +
    '
' +
    '1. **故宫博物院**:这是中国最大的古代建筑群,有着丰富的历史和文化遗产,是个很好的适合全家人游玩的地方。
' +
    '2. **天安门广场**:这里是北京的心脏,周围有许多历史和现代建筑。你可以在广场上漫步,欣赏升旗仪式和观看周围的繁华景象。
' +
    '3. **颐和园**:这是一个美丽的皇家园林,有着优美的湖泊和精美的古建筑。你可以在这里漫步,欣赏美丽的景色,同时也可以了解中国的传统文化。
' +
    '4. **北京动物园**:这是中国最大的动物园之一,有许多稀有动物,包括熊猫、老虎、长颈鹿等。对于孩子们来说是个很好的去处。
' +
    '5. **798艺术区**:这是一个充满艺术气息的地方,有许多画廊、艺术工作室和艺术展览。这里有许多新的现代艺术作品,可以欣赏到一些艺术家的创作。
' +
    '6. **三里屯酒吧街**:如果你对夜生活感兴趣,可以去三里屯酒吧街。这里有许多酒吧和餐馆,是一个热闹的夜生活场所。
' +
    '7. **北京环球度假区**:如果你们喜欢主题公园,那么可以去环球度假区,虽然这是在建的,但是等它建好之后肯定是一个很好的去处。
' +
    '
' +
    '当然,你也可以考虑一些其他的地方,比如购物街、博物馆、公园等等。希望这些建议对你有所帮助!',
  is_truncated: false,
  need_clear_history: false,
  usage: { prompt_tokens: 19, completion_tokens: 307, total_tokens: 326 }
}

流式输出

通过传入 stream: true

import {ChatCompletion, setEnvVariable} from "@baiducloud/qianfan";

const client = new  ChatCompletion();
async function main() {
    const stream = await client.chat({
        messages: [
            {
                role: 'user',
                content: '你好!',
            },
        ],
        stream: true,   //启用流式返回
    });
      for await (const chunk of stream as AsyncIterableIterator<any>) {
        console.log(chunk);
    }
}

main();
{
  id: 'as-f7mrqpanb3',
  object: 'chat.completion',
  created: 1709724132,
  sentence_id: 0,
  is_end: false,
  is_truncated: false,
  result: '你好!',
  need_clear_history: false,
  usage: { prompt_tokens: 2, completion_tokens: 0, total_tokens: 2 }
}
{
  id: 'as-f7mrqpanb3',
  object: 'chat.completion',
  created: 1709724132,
  sentence_id: 1,
  is_end: false,
  is_truncated: false,
  result: '有什么我可以帮助你的吗?',
  need_clear_history: false,
  usage: { prompt_tokens: 2, completion_tokens: 0, total_tokens: 2 }
}
{
  id: 'as-f7mrqpanb3',
  object: 'chat.completion',
  created: 1709724132,
  sentence_id: 2,
  is_end: true,
  is_truncated: false,
  result: '',
  need_clear_history: false,
  usage: { prompt_tokens: 2, completion_tokens: 8, total_tokens: 10 }
}

V2 调用

千帆 JavaScript SDK 也同步支持了 V2 版本的调用方式,用户可以通过配置 version: 'v2' 来创建对应的 V2 版本。 用户需要配置QIANFAN_ACCESS_KEY 和 QIANFAN_SECRET_KEY,可以配置appid(应用ID) ,不传使用静默 appid。

获取BearToken的示例代码如下:

import {getBearToken} from "@baiducloud/qianfan";

const bearToken = await getBearToken();
console.log(bearToken);

非流式情况下的调用示例如下所示:

import {ChatCompletion} from "@baiducloud/qianfan";

const client = new  ChatCompletion({
       version: 'v2',
        // appid: 'XXX'
});
async function main() {
    const resp = await client.chat({
        messages: [
            {
                role: 'user',
                content: '今天深圳天气',
            },
        ],
     }, "ernie-4.0-8k");
    console.log(resp?.choices);
}

main();
[
  {
    index: 0,
    message: {
      role: 'assistant',
      content: '很抱歉,我无法直接获取实时的天气信息。建议您通过以下几种方式查询今天深圳的天气情况:\n' +
        '\n' +
        '1. 天气预报应用:您可以在手机应用商店下载天气预报应用,然后搜索“深圳”以获取当地的天气情况。\n' +
        '\n' +
        '2. 搜索引擎:在搜索引擎中输入“深圳今天天气”或“深圳天气预报”,通常可以找到相关的天气信息。\n' +
        '\n' +
        '3. 社交媒体:有些社交媒体平台会提供天气预报功能,您可以关注相关的账号或搜索相关话题以获取天气信息。\n' +
        '\n' +
        '4. 电视或广播:如果您正在家中,可以打开电视或广播,通常会有天气预报节目或新闻播报天气情况。\n' +
        '\n' +
        '请注意,天气情况可能会随时变化,建议您在出门前再次确认天气情况,以便做好相应的准备。'
    },
    finish_reason: 'normal',
    flag: 0
  }
]

流式示例代码如下:

import {ChatCompletion} from "@baiducloud/qianfan";

const client = new  ChatCompletion({
       version: 'v2',
        // appid: 'XXX'
});
async function main() {
    const resp = await client.chat({
        messages: [
            {
                role: 'user',
                content: '今天深圳天气',
            },
        ],
        stream: true,
     }, "ernie-4.0-8k");
    for await (const chunk of resp) {
        console.log(chunk?.choices[0]?.delta);
    }
}

main();
{ content: '很抱歉,' }
{ content: '我无法直接' }
{ content: '获取实时的' }
{ content: '天气信息' }
{ content: '。' }
{ content: '但通常情况下' }
{ content: ',您' }
...
{ content: '建议您直接' }
{ content: '查看相关的' }
{ content: '天气预报服务' }
{ content: '或应用' }
{ content: '。' }
{ content: '' }

续写Completions

千帆 SDK 支持调用续写Completions相关API,支持非流式、流式调用。

默认模型

import {Completions, setEnvVariable} from "@baiducloud/qianfan";

const client = new Completions({ QIANFAN_ACCESS_KEY: 'your_iam_ak', QIANFAN_SECRET_KEY: 'your_iam_sk' });
async function main() {
    const resp = await client.completions({
        prompt: 'In Bash, how do I list all text files in the current directory (excluding subdirectories) that have been modified in the last month',
    });
    console.log(resp);
}

main();

指定预置模型

import {Completions, setEnvVariable} from "@baiducloud/qianfan";

const client = new Completions();
async function main() {
    const resp = await client.completions({
        prompt: '你好',
    }, 'ERNIE-3.5-8K');
    console.log(resp);
}

main();

用户自行发布的模型服务

通过Endpoint传入服务地址

import {Completions, setEnvVariable} from "@baiducloud/qianfan";

const client = new Completions({QIANFAN_ACCESS_KEY: '***', QIANFAN_SECRET_KEY: '***', Endpoint: '***'});
async function main() {
    const resp = await client.completions({
        prompt: '你好,你是谁',
    });
    console.log(resp);
}

main();
{
  id: 'as-hfmv5mvdim',
  object: 'chat.completion',
  created: 1709779789,
  result: '你好!请问有什么我可以帮助你的吗?无论你有什么问题或需要帮助,我都会尽力回答和提供支持。请随时告诉我你的需求,我会尽快回复你。',
  is_truncated: false,
  need_clear_history: false,
  finish_reason: 'normal',
  usage: { prompt_tokens: 1, completion_tokens: 34, total_tokens: 35 }
}

流式调用

通过传入 stream: true

import {Completions, setEnvVariable} from "@baiducloud/qianfan";

const client = new Completions({ QIANFAN_ACCESS_KEY: '***', QIANFAN_SECRET_KEY: '***' });
async function main() {
    const stream = await client.completions({
        prompt: '你好,你是谁',
        stream: true,   //启用流式返回
    });
     for await (const chunk of stream as AsyncIterableIterator<any>) {
        console.log(chunk);
    }
}

main();
{
  id: 'as-cck51r1rfw',
  object: 'chat.completion',
  created: 1709779938,
  sentence_id: 0,
  is_end: false,
  is_truncated: false,
  result: '你好!',
  need_clear_history: false,
  finish_reason: 'normal',
  usage: { prompt_tokens: 1, completion_tokens: 2, total_tokens: 3 }
}
{
  id: 'as-cck51r1rfw',
  object: 'chat.completion',
  created: 1709779938,
  sentence_id: 1,
  is_end: false,
  is_truncated: false,
  result: '请问有什么可以帮助你的吗?',
  need_clear_history: false,
  finish_reason: 'normal',
  usage: { prompt_tokens: 1, completion_tokens: 2, total_tokens: 3 }
}
{
  id: 'as-cck51r1rfw',
  object: 'chat.completion',
  created: 1709779938,
  sentence_id: 2,
  is_end: true,
  is_truncated: false,
  result: '',
  need_clear_history: false,
  finish_reason: 'normal',
  usage: { prompt_tokens: 1, completion_tokens: 8, total_tokens: 9 }
}

向量Embeddings

千帆 SDK 同样支持调用千帆大模型平台中的模型,将输入文本转化为用浮点数表示的向量形式。转化得到的语义向量可应用于文本检索、信息推荐、知识挖掘等场景。

默认模型

import {Embedding} from "@baiducloud/qianfan";

const client = new Embedding();
async function main() {
    const resp = await client.embedding({
        input: ['介绍下你自己吧', '你有什么爱好吗?'],
    });
    const data = resp.data[0] as any;
    console.log(data.embedding);
}

main();
[0.06814255565404892,  0.007878394797444344,  0.060368239879608154, ...]
[0.13463851809501648,  -0.010635783895850182,   0.024348173290491104, ...]

指定模型

Embedding-V1


import {Eembedding} from "@baiducloud/qianfan";

const client = new Eembedding({ QIANFAN_ACCESS_KEY: '***', QIANFAN_SECRET_KEY: '***' });
async function main() {
    const resp = await client.embedding({
        input: ['介绍下你自己吧', '你有什么爱好吗?'],
    }, 'Embedding-V1');
    const data = resp.data[0] as any;
    console.log(data.embedding);
}

main();
[0.13463850319385529,  -0.010635782964527607,   0.024348171427845955...]

图像-Images

文生图

import * as http from 'http';
import {Text2Image, setEnvVariable} from "@baiducloud/qianfan";
const client = new Text2Image({Endpoint:'***'});

async function main() {
    const resp = await client.text2Image({
        prompt: 'A Ragdoll cat with a bowtie.',
    });

    const base64Image = resp.data[0].b64_image;
    // 创建一个简单的服务器
    const server = http.createServer((req, res) => {
        res.writeHead(200, {'Content-Type': 'text/html'});
        let html = `<html><body><img src="data:image/jpeg;base64,${base64Image}" /><br/></body></html>`;
        res.end(html);
    });

    const port = 3002;
    server.listen(port, () => {
        console.log(`服务器运行在 http://localhost:${port}`);
    });
}

main();

图生文

预置模型Fuyu-8B
import {setEnvVariable} from '@baiducloud/qianfan'
import {Image2Text} from "@baiducloud/qianfan";

// 调用大模型
const client = new Image2Text();
async function main() {
    const resp = await client.image2Text({
        prompt: '分析一下图片画了什么',
        image: 'iVBORw0KGgoAAAANSUhEUgAAB4IAAxxxxxxxxxxxx=',  //  请替换图片的base64编码
    });
    console.log(resp.result)
}

main();
用户自定义模型
import {setEnvVariable} from '@baiducloud/qianfan'
import {Image2Text} from "@baiducloud/qianfan";

// 调用大模型
const client = new Image2Text({Endpoint: '***'});
async function main() {
    const resp = await client.image2Text({
        prompt: '分析一下图片画了什么',
        image: 'iVBORw0KGgoAAAANSUhEUgAAB4IAAxxxxxxxxxxxx=',  //  请替换图片的base64编码
    });
    console.log(resp.result)
}

main();

Plugin 插件

千帆插件

SDK支持使用平台插件能力,以帮助用户快速构建 LLM 应用或将 LLM 应用到自建程序中。支持知识库、智慧图问、天气等插件。

import {Plugin} from "@baiducloud/qianfan";
// 注意:千帆插件需要传入Endpoint, 一言插件不用
const client = new Plugin({Endpoint: '***'});

// 天气插件
async function main() {
    const resp = await client.plugins({
        query: '深圳今天天气如何',
        /** 
         *  插件名称
         * 知识库插件固定值为["uuid-zhishiku"] 
         * 智慧图问插件固定值为["uuid-chatocr"]
         * 天气插件固定值为["uuid-weatherforecast"]
         */ 
        plugins: [
            'uuid-weatherforecast',
        ],
    });
}

// 智慧图问
async function chatocrMain() {
    const resp = await client.plugins({
        query: '请解析这张图片, 告诉我怎么画这张图的简笔画',
        plugins: [
            'uuid-chatocr',
        ],
        fileurl: 'https://xxx.bcebos.com/xxx/xxx.jpeg',
    });
}

// 知识库
async function zhishikuMain() {
    const reps = await client.plugins({
        query: '你好什么时候飞行员需要负法律责任?',
        plugins: [
            'uuid-zhishiku',
        ],
    });
}

main();

// chatocrMain();

// zhishikuMain();

一言插件 API-V2

说图解画(ImageAI):基于图片进行文字创作、回答问题,帮你写文案、想故事、图生图。暂仅支持10MB以内的图片。 览卷文档(ChatFile):原ChatFile,可基于文档完成摘要、问答、创作等任务,仅支持10MB以内文档,不支持扫描件。 E言易图(eChart):基于Apache Echarts为您提供数据洞察和图表制作,目前支持柱状图、折线图、饼图、雷达图、散点图、漏斗图、思维导图(树图)。

// eChart插件
async function yiYaneChartMain() {
    const resp = await client.plugins({
        messages: [
            {
                "role": "user",
                "content": "帮我画一个饼状图:8月的用户反馈中,BUG有100条,需求有100条,使用咨询100条,总共300条反馈"
            }
        ],
        plugins: ["eChart"],
    });
}

yiYaneChartMain() 

// ImageAI插件测试
async function yiYanImageAIMain() {
    const resp = await client.plugins({
        messages: [
            {
                "role": "user",
                "content": "<img>cow.jpeg</img><url>https://xxx/xxx/xxx.jpeg</url> 这张图片当中都有啥"
            }
        ],
        plugins: ["ImageAI"],
    });
}

yiYanImageAIMain()

// ChatFile测试
async function yiYanChatFileMain() {
    const resp = await client.plugins({
        messages: [
            {'role': 'user', 'content': '<file>浅谈牛奶的营养与消费趋势.docx</file><url>https://xxx/xxx/xxx.docx</url>'},
            // eslint-disable-next-line max-len
            {'role': 'assistant', 'content': '以下是该文档的关键内容:\n牛奶作为一种营养丰富、易消化吸收的天然食品,受到广泛欢迎。其价值主要表现在营养成分和医学价值两个方面。在营养成分方面,牛奶含有多种必需的营养成分,如脂肪、蛋白质、乳糖、矿物质和水分等,比例适中,易于消化吸收。在医学价值方面,牛奶具有促进生长发育、维持健康水平的作用,对于儿童长高也有积极影响。此外,牛奶还具有极高的市场前景,消费者关注度持续上升,消费心理和市场需求也在不断变化。为了更好地发挥牛奶的营养价值,我们应该注意健康饮用牛奶的方式,适量饮用,并根据自身情况选择合适的牛奶产品。综上所述,牛奶作为一种理想的天然食品,不仅具有丰富的营养成分,还具有极高的医学价值和市场前景。我们应该充分认识牛奶的价值,科学饮用,让牛奶为我们的健康发挥更大的作用。'},
            {'role': 'user', 'content': '牛奶的营养成本有哪些'},
        ],
        plugins: ['ChatFile']
    });
}
yiYanChatFileMain();

Reranker 重排序

跨语种语义表征算法模型,擅长优化语义搜索结果和语义相关顺序精排,支持中英日韩四门语言。

import {Reranker} from "@baiducloud/qianfan";
// 直接读取 env  
const client = new Reranker();

async function main() {
     const resp = await client.reranker({
        query: '上海天气',
        documents: ['上海气候', '北京美食'],
    });
}

main();

通过其他集成了sdk的库来使用

langchain

安装langchain库

npm install @langchain/baidu-qianfan

添加环境变量(或作为函数参数传入)

export QIANFAN_AK=""
export QIANFAN_SK=""
export QIANFAN_ACCESS_KEY=""
export QIANFAN_SECRET_KEY=""

示例


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

const chat = new ChatBaiduQianfan({
    model: 'ERNIE-Lite-8K'
});
const message = new HumanMessage("北京天气");

const res = await chat.invoke([message]);

import { BaiduQianfanEmbeddings } from "@langchain/baidu-qianfan";

const embeddings = new BaiduQianfanEmbeddings();
const res = await embeddings.embedQuery("Introduce the city Beijing");