bida


Namebida JSON
Version 0.9.4 PyPI version JSON
download
home_pagehttps://github.com/pfzhou/bida
Summarybida, 简单、易用、稳定、高效,便于扩展和集成的,大语言模型工程化开发框架
upload_time2023-10-10 05:06:13
maintainer
docs_urlNone
authorPengfei Zhou
requires_python>=3.9
license
keywords ai aigc llm chat completion embedding
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # bida:简单、易用、稳定、高效,便于扩展和集成的,大语言模型工程化开发框架

## 快速上手

1. 从pip或pip3安装最新的bida
```cmd
pip install -U bida
```

2. 新建py文件或Jupyter Notebook:

```python
from bida import ChatLLM

llm = ChatLLM(
    model_type='openai',                                # 调用openai的chat模型
    model_name='gpt-4')                                 # 设定模型为:gpt-4,默认是gpt3.5

result = llm.chat("从1加到100等于多少?只计算奇数相加呢?") 
print(result)
```
```python
from bida import ChatLLM

llm = ChatLLM(
    model_type="baidu",                                 # 调用百度文心一言
    stream_callback=ChatLLM.stream_callback_func)       # 使用默认的流式输出函数

llm.chat("你好呀,请问你是谁?") 
```



## 已支持模型 ( 持续更新中... 截止2023年10月,[国内开放商用API的模型已经全部支持](https://mp.weixin.qq.com/s/Hjg1lYXGdzOP-jUbXuJyXA))

| 模型公司         | 模型类型  | 模型名称         |  是否支持   | 说明                      |
|:---------------:|:---------:|:---------------:| :--------: |:--------------------------|
| OpenAI | [Chat](https://platform.openai.com/docs/api-reference/chat)   | gpt-3.5,gpt-4   |  √ | 支持gpt3.5和gpt4全部模型  |
| | [Text Completion](https://platform.openai.com/docs/api-reference/completions) | text-davinci-003 |  √ | Text 生成类模型   |
| | [Embeddings](https://platform.openai.com/docs/api-reference/embeddings)   | text-embedding-ada-002 | √ | 向量化模型 |
| |
| 百度-文心一言 | Chat | [ernie-bot](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/jlil56u11), [ernie-bot-turbo](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/4lilb2lpf) | √ | 百度商用Chat模型  |
| | Embeddings  | [embedding_v1](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/alj562vvu)  |  √ | 百度商用向量化模型 |
| | 托管模型 | [各类开源模型](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Nlks5zkzu) | √ | 百度托管的各类开源模型,请使用百度第三方模型接入协议自行配置,详见下文的模型接入章节 |
| |
| 阿里云-通义千问  | Chat | [qwen-v1, qwen-plus-v1](https://help.aliyun.com/zh/dashscope/developer-reference/api-details?spm=a2c4g.11186623.0.0.6160416fZvec2K), [qwen-7b-chat-v1](https://help.aliyun.com/zh/dashscope/developer-reference/api-details-12?spm=a2c4g.11186623.0.0.5f1d7abe3hDzoF) |  √  | 阿里云商用和开源Chat模型 |
| | Embeddings  | [text-embedding-v1](https://help.aliyun.com/zh/dashscope/developer-reference/generic-text-vector/?spm=a2c4g.11186623.0.0.4c7a7ba0PtIctI)  | √ | 阿里云商用向量化模型  |
| | 托管模型 | [各类开源模型](https://dashscope.console.aliyun.com/model?spm=5176.28072958.J_2026023950.2.49c8764fIXrFly) | √ | 阿里云托管的其他各类开源模型,请使用阿里云第三方模型接入协议自行配置,详见下文的模型接入章节 |
| |
| MiniMax  | [Chat](https://api.minimax.chat/document/guides/chat?id=6433f37294878d408fc82953) | abab5, abab5.5 |  √  | MiniMax商用Chat模型 |
| | [Chat Pro](https://api.minimax.chat/document/guides/chat-pro?id=64b79fa3e74cddc5215939f4) | abab5.5 | √ | MiniMax商用Chat模型, 采用[自定义Chatcompletion pro模式](https://api.minimax.chat/document/tuning-guide?id=64841821346c0de66a730bd5),[支持多人多bot对话场景,示例对话,返回格式限制,函数调用,插件等功能](examples/MINIMAX模型调用说明.ipynb) |
| | [Embeddings](https://api.minimax.chat/document/guides/embeddings?id=6464722084cdc277dfaa966a) | embo-01 | √ | MiniMax商用向量模型 |
| |
| 智谱AI-ChatGLM | Chat | [ChatGLM-Pro、Std、Lite](https://open.bigmodel.cn/dev/api#overview), [characterglm](https://open.bigmodel.cn/dev/api#super-humanoid) | √ | 智谱AI多版本商用大模型 |
| | Embeddings | [Text-Embedding](https://open.bigmodel.cn/dev/api#vector) | √ | 智谱AI商用文本向量模型 |
| |
| 讯飞-星火 | Chat | [SparkDesk V1.5, V2.0](https://www.xfyun.cn/doc/spark/Web.html) | √ | 讯飞星火认知大模型 |
| | Embeddings | [embedding](https://www.xfyun.cn/doc/spark/embedding_api.html) | √ | 讯飞星火文本向量模型 |
| |
| 商汤-日日新 | Chat | [nova-ptc-xl-v1, nova-ptc-xs-v1](https://platform.sensenova.cn/#/doc?path=/chat/GetStarted/APIList.md) | √ | SenseNova 商汤日日新大模型 |
| |
| 百川智能 | Chat | [baichuan-53b-v1.0.0](https://platform.baichuan-ai.com/docs/api) | √ | 百川53B大模型 |
| |
| 腾讯-混元 | Chat | [Tencent Hunyuan](https://cloud.tencent.com/document/product/1729/97732) | √ | 腾讯混元大模型 |
| |
| 自行部署的开源模型 | Chat, Completion, Embeddings | 各类开源模型 | √ | 使用[FastChat](https://github.com/lm-sys/FastChat)等部署的开源模型,提供的Web API接口遵循[OpenAI-Compatible RESTful APIs](https://github.com/lm-sys/FastChat/blob/main/docs/openai_api.md),可以直接支持,详见下文的模型接入章节 |
| |

**注意**:

1. 以上模型和API能否使用,依赖自行购买开通的模型范围,相关Key需配置完成后才可以(详见下面环境变量章节),购买及开通请联系厂商咨询。
2. 如果需要增加模型或增加新的模型公司进来,请参考下面的模型接入章节。
3. 如果希望适配你们的模型或提出改进意见,请联系**pfzhou@gmail.com**


## 缘起与定位

### - 开发人员切换到面向AIGC开发非常困难

AIGC里面的模型LLM和提示词Prompt两项技术都非常新,发展日新月异,理论、教程、工具、工程化等各个方面都非常欠缺,使用的技术栈与当前主流开发人员的经验几乎没有重叠:

| 分类     | 当前主流开发                    | Prompt工程                                    | 开发模型、微调模型                         |
|:------:|:------------------------- |:------------------------------------------- | --------------------------------- |
| 开发语言   | Java、.Net、Javscript、ABAP等 | 自然语言,Python                                 | Python                            |
| 开发工具   | 非常多和成熟                    | 无                                           | 成熟                                |
| 开发门槛   | 较低且成熟                     | 低但非常不成熟                                     | 非常高                               |
| 开发技术   | 清晰且稳态                     | 入门简单但非常难于稳态输出                               | 复杂且多变                             |
| 常用技术   | 面向对象、数据库、大数据              | prompt tunning、incontext learning、embedding | Transformer、RLHF、Finetunning、LoRA |
| 开源支持   | 丰富且成熟                     | 非常混乱处于较低水平                                  | 丰富但不成熟                            |
| 开发成本   | 低                         | 较高                                          | 非常高                               |
| 开发人员   | 丰富                        | 极度稀缺                                        | 非常稀缺                              |
| 开发协同模式 | 根据产品经理交付的文档进行开发           | 一人或极简的小组,从需求到交付运营全部工作                       | 根据理论研究方向开发                        |

### - 企业需求非常旺盛,处于快速上升趋势

当前,所有的科技公司、互联网公司、大数据公司几乎都在all in这个方向,但更多的传统企业还处于迷茫的状态。传统企业并非不需要,而是: 1) 没有技术人才储备,不知道做什么;2) 没有硬件储备,没有能力做;3) 业务数字化程度底,用AIGC改造升级周期长、见效慢。

### - 每个模型都提供了API,有的还有完善的SDK,为什么要再封装一遍?

目前国内外各种商用、开源模型太多,发展又特别快,不过模型的API、数据对象并不一样,导致我们面对一个新模型(甚至一个新版本),都要去阅读开发文档,并修改自己的应用代码去适配,相信每个应用开发人员都测试过很多个模型,应该都深受其苦。

实际上,模型能力虽有不同,但提供能力的模式大体是一致的,因此有一个可以适配大量模型API,提供统一调用模式的框架,就变成了很多开发人员的迫切需求。

### - 既然如此,这些langchain都有,直接用不好吗,为什么要重复造轮子?

首先,bida并非要替代langchain,而是针对的目标定位不同、开发理念也有很大差异:

| 分类                    | langchain                                              | bida                                                                          |
|:---------------------:|:------------------------------------------------------ |:----------------------------------------------------------------------------- |
| 目标人群                  | AIGC方向的全量开发人群                                          | 对把AIGC与应用开发结合有迫切需求的开发人员                                                       |
| 模型支持                  | 支持本地部署或远端部署的各种模型                                       | 仅支持提供Web API的模型调用,目前商用模型大部分都提供,开源模型使用FastChat等框架部署后也可以提供Web API               |
| 框架结构                  | 因为提供的能力多,结构非常复杂,截止2023年8月,核心代码已有1700多个文件,15万行代码,学习门槛较高 | 核心代码十余个,2000行左右代码,学习和修改代码较简单                                                  |
| 功能支持                  | 提供AIGC方向各类模型、技术、应用领域的全覆盖                               | 当前提供ChatCompletions、Completions、Embeddings、Function Call等功能支持,语音、图像等多模态功能近期陆续发布 |
| Prompt                | 提供Prompt模板,但自有功能使用的Prompt内嵌在代码内,调试和修改都很困难              | 提供Prompt模板,当前无内置功能使用Prompt,将来如果使用,也会采用配置型后加载模式,便于用户自行调整                       |
| Conversation & Memory | 支持,并提供多种Memory管理方式                                     | 支持,支持Conversation持久化(保存至duckdb中),Memory提供限定归档会话能力,其他能力有扩展框架可自行扩展              |
| Function & Plugin     | 支持,并提供很丰富的扩展能力,但使用效果依赖大模型的自身能力                       | 兼容使用OpenAI的Function Call规范的大模型                                                |
| Agent & Chain         | 支持,并提供很丰富的扩展能力,但使用效果依赖大模型的自身能力                       | 不支持,计划另开项目实现,也可基于当前框架自行扩展开发                                   |
| 其他功能                  | 支持很多其他功能,比如文档拆块(拆块后做embedding,用于实现chatpdf等类似的功能)       | 暂无其他功能,如果增加也会采用另开兼容项目的方式来实现,当前可以使用其他产品提供的能力组合后实现  |
| 运行效率 | 很多开发者反映比直接调用API慢,原因未知 | 仅封装了调用流程和统一了调用接口,性能与直接调用API没有区别 |

langchain做为业内领军的开源项目,为大模型以及AGI的推广做出了巨大贡献,我们也在项目中应用了它,同时在开发bida时,也借鉴了很多它的模式和思想。但langchain太想做一个大而全的工具,不可避免的也产生了很多缺点,下面几篇文章,意见都差不多:[Max Woolf](https://minimaxir.com/2023/07/langchain-problem/) - [中文](https://mp.weixin.qq.com/s/Iwe6M391b2BBWae-HmOIJQ), [Hacker News](https://news.ycombinator.com/item?id=36645575) - [中文](https://mp.weixin.qq.com/s/GKF28C1yzWZDtCXjJQ52hg) 。

圈内流行一句话非常好的做了总结:**langchain,一个人人都会学习,但最终都会丢弃的教科书。**

### - 因此, 基于以上几点,我们希望根据当前主流开发人员和企业应用开发的特点,搭建一个简单、易用、稳定、高效,便于扩展和集成的大语言模型工程化开发框架,大幅消减开发AI产品的难度和周期。


## 使用说明

### 1. 初始化环境

#### 1.1 安装bida
从pip或pip3安装最新的bida
```cmd
pip install -U bida
```

从github clone项目代码到本地目录:
```cmd
git clone https://github.com/pfzhou/bida.git
pip install -r requirements.txt
```
#### 1.2 配置环境变量

修改当前代码根目录下面的文件: **[".env.template"](.env.template)** 的扩展名,成为 **".env"** 环境变量文件。请根据文件中的说明,把**已经申请模型的key**配置进去。

**请注意**:该文件已经加入忽略清单,不会被传到git服务器。

#### 1.3 验证是否配置成功

[examples\1.初始化环境.ipynb](examples/1.初始化环境.ipynb)


### 2. 使用bida调用模型

下面演示代码会混合使用各种bida支持的模型,请根据自己购买的模型修改替换代码中的**[model_type]**值为对应的模型公司名字,就可以快速切换各种模型进行体验:
```python
# 更多信息参看\bida\models\*.json中的model_type配置
# openai
llm = ChatLLM(model_type="openai")
# baidu
llm = ChatLLM(model_type="baidu")
# baidu third models(llama-2...)
llm = ChatLLM(model_type="baidu-third")
# aliyun
llm = ChatLLM(model_type="aliyun")
# minimax
llm = ChatLLM(model_type="minimax")
# minimax ccp
llm = ChatLLM(model_type="minimax-ccp")
# zhipu ai
llm = ChatLLM(model_type="chatglm2")
# xunfei xinghuo
llm = ChatLLM(model_type="xfyun")
# senstime
llm = ChatLLM(model_type="senstime")
# baichuan ai
llm = ChatLLM(model_type="baichuan")
# tencent ai
llm = ChatLLM(model_type="tencent")
```

#### 2.1 Chat模式

> Chat模式:ChatCompletion,当前主流的LLM交互模式,bida支持会话管理,支持持久化保存和Memory管理。

- 调用并打印回答内容:

```python
from bida import ChatLLM

llm = ChatLLM(model_type='baidu')
result = llm.chat("你好呀,请问你是谁?") 
print(result)
```

- 流式stream调用,实现打字机效果:

```python
from bida import ChatLLM

# stream调用
llm = ChatLLM(model_type="baidu", stream_callback=ChatLLM.stream_callback_func)

result = llm.chat("你好呀,请问你是谁?")      
```

- 多轮对话:

```python
from bida import ChatLLM

llm = ChatLLM(model_type="baidu", stream_callback=ChatLLM.stream_callback_func) 

result = llm.chat("你是一个服务助理,请简洁回答我的问题。我的名字是老周。")
result = llm.chat("我的名字是?")
```

以上的详细代码和更多功能示例,请参考下面的NoteBook:

> [examples\2.1.Chat模式.ipynb](examples/2.1.Chat模式.ipynb)


- **使用gradio建立chatbot**

    - [gradio](https://www.gradio.app/)是一款非常流行的自然语言处理界面框架

    - bida + gradio 可以用几行代码就搭建一个可用的应用程序
  
```python
import gradio as gr
from bida import ChatLLM

llm = ChatLLM(model_type='openai')

def predict(message, history):
    answer = llm.chat(message)
    return answer

gr.ChatInterface(predict).launch()
```

![image](docs/gradio-chatbot-demo02.png)

> 详细内容见:[bida+gradio的chatbot demo](examples/gradio-chatbot-demo.ipynb)


#### 2.2 Completion模式

> Completion模式:Completions或TextCompletions,上一代LLM交互模式,仅支持单轮会话,不保存聊天记录,每次调用都是全新的交流。

**请注意:** 该模式在[OpenAI 2023年7月6日的文章中](https://openai.com/blog/gpt-4-api-general-availability),明确表示要逐步淘汰,新出的模型也基本不提供相关功能,即使支持的模型估计也会采取跟随OpenAI,预计未来都会逐渐淘汰。

```python
from bida import TextLLM

llm = TextLLM(model_type="openai")
result = llm.completion("你是一个服务助理,请简洁回答我的问题。我的名字是老周。")
print(result)
```

示例代码详见:

> [examples\2.2.Completion模式.ipynb](examples/2.2.Completion模式.ipynb)

#### 2.3 使用提示词

提示词Prompt是大语言模型中最重要的功能,颠覆了传统面向对象的开发模式,转变为: **Prompt工程**。 本框架使用“提示词模板Prompt Templete”来实现,支持替换标记、多模型设定不同的提示词和模型执行交互时自动替换等功能。

当前已提供 **PromptTemplate_Text** :支持使用字符串文本生成Prompt模板,bida也支持灵活的自定义模板,未来计划提供从json和数据库中加载模板的能力。

详细示例代码请参看下面的文件:
> [examples\2.3.Prompt提示词.ipynb](examples/2.3.Prompt提示词.ipynb)

**提示词中重要说明**
- 不同模型对提示词的支持能力不尽相同,比如:
1. ChatGPT和Vicuna等国外大模型,对中文提示词支持不够稳定,建议用英文写提示词
2. 国内很多模型对推理类的提示词不敏感(指令遵循不好),对于生成Json、SQL、Code的指令几乎完全忽略
3. 英文大写单词和中文加入【】、“”等强调信息,对模型注意力有明显影响
4. 重要信息可以重复多遍,对模型注意力有明显影响,放置的位置因模型而异,有的在开始效果好,有的在结尾效果好
5. 提示词太长影响输出的token数量,要根据不同模型的max_token值做调整
   
总的来说,建议提示词遵循:**设定角色,明确任务,给出上下文(相关资料或示例)的三段式结构**,可以参考示例中的写法。

- 提示词的一些介绍文档,供参考:

1. [吴恩达的系列课程 https://learn.deeplearning.ai/login](https://learn.deeplearning.ai/login) , [中文版](https://github.com/datawhalechina/prompt-engineering-for-developers) , [解读](https://mp.weixin.qq.com/s/gUtB71uWI7Dg_tfRzaidCA)

 2. [openai cookbook https://github.com/openai/openai-cookbook](https://github.com/openai/openai-cookbook)

3. 微软Azure文档:[提示工程简介](https://learn.microsoft.com/zh-cn/azure/cognitive-services/openai/concepts/prompt-engineering) , [提示工程技术](https://learn.microsoft.com/zh-cn/azure/cognitive-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-completions)

4. [Github上最火的Prompt Engineering Guide](https://github.com/dair-ai/Prompt-Engineering-Guide) , [中文版](https://github.com/wangxuqi/Prompt-Engineering-Guide-Chinese)


#### 2.4 函数调用function calling

[**函数调用Function Calling**](https://openai.com/blog/function-calling-and-other-api-updates)是OpenAI2023年6月13日发布的功能,我们都知道ChatGPT训练的数据是基于2021年之前的,你要问一些实时性相关的问题就没法回答你了,而函数调用让实时获取网络数据成为可能,比如查询天气预报、查股票、推荐个近期的电影之类的。

- 函数调用的流程是什么?
1. 用户发起提问时,调用一次带有函数描述的completions接口,gpt会判断是否支持调用函数,如果可以就从用户的提问信息中提取出函数所需要的参数。
2. 开发者拿到gpt提取出来的参数后自行调用函数并返回结果
3. 将函数的返回结果再次发给GPT做总结归纳为自然语言
   ![image](docs/function_call.png)
- 哪些模型支持:gpt-3.5-turbo-0613 和 gpt-4-0613 这两个模型都支持函数调用,MiniMax的Pro模式也支持,其他厂商也在跟进中。
- 需要注意:
1. 整个过程会对gpt执行两次调用,第一次调用从问题中提取函数参数,第二次对函数返回结果做归纳总结
2. 函数调用并不是由gpt调用,而是开发者来调用,本框架已经封装了自动调用方法,但需要开发者自己实现具体的执行代码

- OpenAI 相关资料:[Guide](https://platform.openai.com/docs/guides/gpt/function-calling),  [API Reference](https://platform.openai.com/docs/api-reference/chat/create#chat/create-functions), [CookBook1](https://github.com/openai/openai-cookbook/blob/main/examples/How_to_call_functions_with_chat_models.ipynb), [CookBook2](https://github.com/openai/openai-cookbook/blob/3115683f14b3ed9570df01d721a2b01be6b0b066/examples/How_to_call_functions_for_knowledge_retrieval.ipynb)
- 详细示例参看:[examples/2.4.function_calling函数调用.ipynb](examples/2.4.function_calling函数调用.ipynb)


#### 2.5 添加自定义函数
1. /bida/functions/目录下建立一个函数定义json文件
2. 编写具体执行函数代码的py文件
3. 启动框架调试

- 详细内容见:[function接入手册](bida/functions/README.md)


#### 2.6 Embeddings嵌入模型

Embeddings技术是实现Prompt inContext Learning最重要的技术,对比以前关键词检索,又提升了一步。

**注意**:不同模型embedding出来的数据是不通用的,因此检索时问题的embedding也要用同一个模型才可以。

| 模型名称 | 输出维度 | 批处理记录数 | 单条文本token限制 |
| :---:  | :---: | :---: | :---: |
| OpenAI | 1536 | 不限 | 8191 |
| 百度 | 384 | 16 | 384 |
| 阿里 | 1536 | 10 | 2048 |
| MiniMax | 1536 | 不限 | 4096 |
| 智谱AI | 1024 | 单条 | 512 |
| 讯飞星火 | 1024 | 单条 | 256 |

**注意:** bida的embedding接口支持批处理,超过模型批处理限制会自动分批循环处理后一起返回。单条文本内容超过限制token数,根据模型的逻辑,有的会报错,有的会截断处理。

> 详细示例参看:[examples\2.6.Embeddings嵌入模型.ipynb](examples/2.6.Embeddings嵌入模型.ipynb)


## 模型接入说明

1. bida\models\目录下建立一个模型配置json文件
2. 编写具体模型实现方法的py文件
3. 启动框架调试
   详细内容见:[模型接入手册](bida/models/README.md)


## bida框架结构

```
├─bida                          # bida框架主目录
│  ├─core                           # bida框架核心代码
│  ├─functions                      # 自定义function文件
│  ├─   *.json                          # function定义
│  ├─   *.py                            # 对应的调用代码
│  ├─models                         # 接入模型文件
│  ├─   *.json                          # 模型配置定义:openai.json、baidu.json等
│  ├─   *_api.py                        # 模型接入代码:openai_api.py、baidu_api.py等
│  ├─   *_sdk.py                        # 模型sdk代码:baidu_sdk.py等
│  ├─prompts                        # 自定义prompt模板文件
│  ├─*.py                           # 框架其他代码文件
├─docs                          # 帮助文档
├─examples                      # 演示代码、notebook文件和相关数据文件
├─test                          # pytest测试代码
│ .env.template                 # .env的模板
│ LICENSE                       # MIT 授权文件
│ pytest.ini                    # pytest配置文件
│ README.md                     # 本说明文件
│ requirements.txt              # 相关依赖包
```
## 联系方式
#### pfzhou@gmail.com
我们希望可以适配更多的模型,也欢迎您提出宝贵意见,一起为开发者提供更好的产品!

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/pfzhou/bida",
    "name": "bida",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": "",
    "keywords": "ai aigc llm chat completion embedding",
    "author": "Pengfei Zhou",
    "author_email": "pfzhou@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/f5/dd/8b7bcd5f79ce23db607b8b2c33f6d6fd16bc0305c266527586471cef21bd/bida-0.9.4.tar.gz",
    "platform": null,
    "description": "# bida\uff1a\u7b80\u5355\u3001\u6613\u7528\u3001\u7a33\u5b9a\u3001\u9ad8\u6548\uff0c\u4fbf\u4e8e\u6269\u5c55\u548c\u96c6\u6210\u7684\uff0c\u5927\u8bed\u8a00\u6a21\u578b\u5de5\u7a0b\u5316\u5f00\u53d1\u6846\u67b6\r\n\r\n## \u5feb\u901f\u4e0a\u624b\r\n\r\n1. \u4ecepip\u6216pip3\u5b89\u88c5\u6700\u65b0\u7684bida\r\n```cmd\r\npip install -U bida\r\n```\r\n\r\n2. \u65b0\u5efapy\u6587\u4ef6\u6216Jupyter Notebook\uff1a\r\n\r\n```python\r\nfrom bida import ChatLLM\r\n\r\nllm = ChatLLM(\r\n    model_type='openai',                                # \u8c03\u7528openai\u7684chat\u6a21\u578b\r\n    model_name='gpt-4')                                 # \u8bbe\u5b9a\u6a21\u578b\u4e3a\uff1agpt-4\uff0c\u9ed8\u8ba4\u662fgpt3.5\r\n\r\nresult = llm.chat(\"\u4ece1\u52a0\u5230100\u7b49\u4e8e\u591a\u5c11\uff1f\u53ea\u8ba1\u7b97\u5947\u6570\u76f8\u52a0\u5462\uff1f\") \r\nprint(result)\r\n```\r\n```python\r\nfrom bida import ChatLLM\r\n\r\nllm = ChatLLM(\r\n    model_type=\"baidu\",                                 # \u8c03\u7528\u767e\u5ea6\u6587\u5fc3\u4e00\u8a00\r\n    stream_callback=ChatLLM.stream_callback_func)       # \u4f7f\u7528\u9ed8\u8ba4\u7684\u6d41\u5f0f\u8f93\u51fa\u51fd\u6570\r\n\r\nllm.chat(\"\u4f60\u597d\u5440\uff0c\u8bf7\u95ee\u4f60\u662f\u8c01\uff1f\") \r\n```\r\n\r\n\r\n\r\n## \u5df2\u652f\u6301\u6a21\u578b ( \u6301\u7eed\u66f4\u65b0\u4e2d... \u622a\u6b622023\u5e7410\u6708\uff0c[\u56fd\u5185\u5f00\u653e\u5546\u7528API\u7684\u6a21\u578b\u5df2\u7ecf\u5168\u90e8\u652f\u6301](https://mp.weixin.qq.com/s/Hjg1lYXGdzOP-jUbXuJyXA))\r\n\r\n| \u6a21\u578b\u516c\u53f8         | \u6a21\u578b\u7c7b\u578b  | \u6a21\u578b\u540d\u79f0         |  \u662f\u5426\u652f\u6301   | \u8bf4\u660e                      |\r\n|:---------------:|:---------:|:---------------:| :--------: |:--------------------------|\r\n| OpenAI | [Chat](https://platform.openai.com/docs/api-reference/chat)   | gpt-3.5\uff0cgpt-4   |  \u221a | \u652f\u6301gpt3.5\u548cgpt4\u5168\u90e8\u6a21\u578b  |\r\n| | [Text Completion](https://platform.openai.com/docs/api-reference/completions) | text-davinci-003 |  \u221a | Text \u751f\u6210\u7c7b\u6a21\u578b   |\r\n| | [Embeddings](https://platform.openai.com/docs/api-reference/embeddings)   | text-embedding-ada-002 | \u221a | \u5411\u91cf\u5316\u6a21\u578b |\r\n| |\r\n| \u767e\u5ea6-\u6587\u5fc3\u4e00\u8a00 | Chat | [ernie-bot](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/jlil56u11), [ernie-bot-turbo](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/4lilb2lpf) | \u221a | \u767e\u5ea6\u5546\u7528Chat\u6a21\u578b  |\r\n| | Embeddings  | [embedding_v1](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/alj562vvu)  |  \u221a | \u767e\u5ea6\u5546\u7528\u5411\u91cf\u5316\u6a21\u578b |\r\n| | \u6258\u7ba1\u6a21\u578b | [\u5404\u7c7b\u5f00\u6e90\u6a21\u578b](https://cloud.baidu.com/doc/WENXINWORKSHOP/s/Nlks5zkzu) | \u221a | \u767e\u5ea6\u6258\u7ba1\u7684\u5404\u7c7b\u5f00\u6e90\u6a21\u578b\uff0c\u8bf7\u4f7f\u7528\u767e\u5ea6\u7b2c\u4e09\u65b9\u6a21\u578b\u63a5\u5165\u534f\u8bae\u81ea\u884c\u914d\u7f6e\uff0c\u8be6\u89c1\u4e0b\u6587\u7684\u6a21\u578b\u63a5\u5165\u7ae0\u8282 |\r\n| |\r\n| \u963f\u91cc\u4e91-\u901a\u4e49\u5343\u95ee  | Chat | [qwen-v1, qwen-plus-v1](https://help.aliyun.com/zh/dashscope/developer-reference/api-details?spm=a2c4g.11186623.0.0.6160416fZvec2K), [qwen-7b-chat-v1](https://help.aliyun.com/zh/dashscope/developer-reference/api-details-12?spm=a2c4g.11186623.0.0.5f1d7abe3hDzoF) |  \u221a  | \u963f\u91cc\u4e91\u5546\u7528\u548c\u5f00\u6e90Chat\u6a21\u578b |\r\n| | Embeddings  | [text-embedding-v1](https://help.aliyun.com/zh/dashscope/developer-reference/generic-text-vector/?spm=a2c4g.11186623.0.0.4c7a7ba0PtIctI)  | \u221a | \u963f\u91cc\u4e91\u5546\u7528\u5411\u91cf\u5316\u6a21\u578b  |\r\n| | \u6258\u7ba1\u6a21\u578b | [\u5404\u7c7b\u5f00\u6e90\u6a21\u578b](https://dashscope.console.aliyun.com/model?spm=5176.28072958.J_2026023950.2.49c8764fIXrFly) | \u221a | \u963f\u91cc\u4e91\u6258\u7ba1\u7684\u5176\u4ed6\u5404\u7c7b\u5f00\u6e90\u6a21\u578b\uff0c\u8bf7\u4f7f\u7528\u963f\u91cc\u4e91\u7b2c\u4e09\u65b9\u6a21\u578b\u63a5\u5165\u534f\u8bae\u81ea\u884c\u914d\u7f6e\uff0c\u8be6\u89c1\u4e0b\u6587\u7684\u6a21\u578b\u63a5\u5165\u7ae0\u8282 |\r\n| |\r\n| MiniMax  | [Chat](https://api.minimax.chat/document/guides/chat?id=6433f37294878d408fc82953) | abab5, abab5.5 |  \u221a  | MiniMax\u5546\u7528Chat\u6a21\u578b |\r\n| | [Chat Pro](https://api.minimax.chat/document/guides/chat-pro?id=64b79fa3e74cddc5215939f4) | abab5.5 | \u221a | MiniMax\u5546\u7528Chat\u6a21\u578b, \u91c7\u7528[\u81ea\u5b9a\u4e49Chatcompletion pro\u6a21\u5f0f](https://api.minimax.chat/document/tuning-guide?id=64841821346c0de66a730bd5)\uff0c[\u652f\u6301\u591a\u4eba\u591abot\u5bf9\u8bdd\u573a\u666f\uff0c\u793a\u4f8b\u5bf9\u8bdd\uff0c\u8fd4\u56de\u683c\u5f0f\u9650\u5236\uff0c\u51fd\u6570\u8c03\u7528\uff0c\u63d2\u4ef6\u7b49\u529f\u80fd](examples/MINIMAX\u6a21\u578b\u8c03\u7528\u8bf4\u660e.ipynb) |\r\n| | [Embeddings](https://api.minimax.chat/document/guides/embeddings?id=6464722084cdc277dfaa966a) | embo-01 | \u221a | MiniMax\u5546\u7528\u5411\u91cf\u6a21\u578b |\r\n| |\r\n| \u667a\u8c31AI-ChatGLM | Chat | [ChatGLM-Pro\u3001Std\u3001Lite](https://open.bigmodel.cn/dev/api#overview), [characterglm](https://open.bigmodel.cn/dev/api#super-humanoid) | \u221a | \u667a\u8c31AI\u591a\u7248\u672c\u5546\u7528\u5927\u6a21\u578b |\r\n| | Embeddings | [Text-Embedding](https://open.bigmodel.cn/dev/api#vector) | \u221a | \u667a\u8c31AI\u5546\u7528\u6587\u672c\u5411\u91cf\u6a21\u578b |\r\n| |\r\n| \u8baf\u98de-\u661f\u706b | Chat | [SparkDesk V1.5, V2.0](https://www.xfyun.cn/doc/spark/Web.html) | \u221a | \u8baf\u98de\u661f\u706b\u8ba4\u77e5\u5927\u6a21\u578b |\r\n| | Embeddings | [embedding](https://www.xfyun.cn/doc/spark/embedding_api.html) | \u221a | \u8baf\u98de\u661f\u706b\u6587\u672c\u5411\u91cf\u6a21\u578b |\r\n| |\r\n| \u5546\u6c64-\u65e5\u65e5\u65b0 | Chat | [nova-ptc-xl-v1, nova-ptc-xs-v1](https://platform.sensenova.cn/#/doc?path=/chat/GetStarted/APIList.md) | \u221a | SenseNova \u5546\u6c64\u65e5\u65e5\u65b0\u5927\u6a21\u578b |\r\n| |\r\n| \u767e\u5ddd\u667a\u80fd | Chat | [baichuan-53b-v1.0.0](https://platform.baichuan-ai.com/docs/api) | \u221a | \u767e\u5ddd53B\u5927\u6a21\u578b |\r\n| |\r\n| \u817e\u8baf-\u6df7\u5143 | Chat | [Tencent\u00a0Hunyuan](https://cloud.tencent.com/document/product/1729/97732) | \u221a | \u817e\u8baf\u6df7\u5143\u5927\u6a21\u578b |\r\n| |\r\n| \u81ea\u884c\u90e8\u7f72\u7684\u5f00\u6e90\u6a21\u578b | Chat, Completion, Embeddings | \u5404\u7c7b\u5f00\u6e90\u6a21\u578b | \u221a | \u4f7f\u7528[FastChat](https://github.com/lm-sys/FastChat)\u7b49\u90e8\u7f72\u7684\u5f00\u6e90\u6a21\u578b\uff0c\u63d0\u4f9b\u7684Web API\u63a5\u53e3\u9075\u5faa[OpenAI-Compatible RESTful APIs](https://github.com/lm-sys/FastChat/blob/main/docs/openai_api.md)\uff0c\u53ef\u4ee5\u76f4\u63a5\u652f\u6301\uff0c\u8be6\u89c1\u4e0b\u6587\u7684\u6a21\u578b\u63a5\u5165\u7ae0\u8282 |\r\n| |\r\n\r\n**\u6ce8\u610f**\uff1a\r\n\r\n1. \u4ee5\u4e0a\u6a21\u578b\u548cAPI\u80fd\u5426\u4f7f\u7528\uff0c\u4f9d\u8d56\u81ea\u884c\u8d2d\u4e70\u5f00\u901a\u7684\u6a21\u578b\u8303\u56f4\uff0c\u76f8\u5173Key\u9700\u914d\u7f6e\u5b8c\u6210\u540e\u624d\u53ef\u4ee5\uff08\u8be6\u89c1\u4e0b\u9762\u73af\u5883\u53d8\u91cf\u7ae0\u8282\uff09\uff0c\u8d2d\u4e70\u53ca\u5f00\u901a\u8bf7\u8054\u7cfb\u5382\u5546\u54a8\u8be2\u3002\r\n2. \u5982\u679c\u9700\u8981\u589e\u52a0\u6a21\u578b\u6216\u589e\u52a0\u65b0\u7684\u6a21\u578b\u516c\u53f8\u8fdb\u6765\uff0c\u8bf7\u53c2\u8003\u4e0b\u9762\u7684\u6a21\u578b\u63a5\u5165\u7ae0\u8282\u3002\r\n3. \u5982\u679c\u5e0c\u671b\u9002\u914d\u4f60\u4eec\u7684\u6a21\u578b\u6216\u63d0\u51fa\u6539\u8fdb\u610f\u89c1\uff0c\u8bf7\u8054\u7cfb**pfzhou@gmail.com**\r\n\r\n\r\n## \u7f18\u8d77\u4e0e\u5b9a\u4f4d\r\n\r\n### - \u5f00\u53d1\u4eba\u5458\u5207\u6362\u5230\u9762\u5411AIGC\u5f00\u53d1\u975e\u5e38\u56f0\u96be\r\n\r\nAIGC\u91cc\u9762\u7684\u6a21\u578bLLM\u548c\u63d0\u793a\u8bcdPrompt\u4e24\u9879\u6280\u672f\u90fd\u975e\u5e38\u65b0\uff0c\u53d1\u5c55\u65e5\u65b0\u6708\u5f02\uff0c\u7406\u8bba\u3001\u6559\u7a0b\u3001\u5de5\u5177\u3001\u5de5\u7a0b\u5316\u7b49\u5404\u4e2a\u65b9\u9762\u90fd\u975e\u5e38\u6b20\u7f3a\uff0c\u4f7f\u7528\u7684\u6280\u672f\u6808\u4e0e\u5f53\u524d\u4e3b\u6d41\u5f00\u53d1\u4eba\u5458\u7684\u7ecf\u9a8c\u51e0\u4e4e\u6ca1\u6709\u91cd\u53e0\uff1a\r\n\r\n| \u5206\u7c7b     | \u5f53\u524d\u4e3b\u6d41\u5f00\u53d1                    | Prompt\u5de5\u7a0b                                    | \u5f00\u53d1\u6a21\u578b\u3001\u5fae\u8c03\u6a21\u578b                         |\r\n|:------:|:------------------------- |:------------------------------------------- | --------------------------------- |\r\n| \u5f00\u53d1\u8bed\u8a00   | Java\u3001.Net\u3001Javscript\u3001ABAP\u7b49 | \u81ea\u7136\u8bed\u8a00\uff0cPython                                 | Python                            |\r\n| \u5f00\u53d1\u5de5\u5177   | \u975e\u5e38\u591a\u548c\u6210\u719f                    | \u65e0                                           | \u6210\u719f                                |\r\n| \u5f00\u53d1\u95e8\u69db   | \u8f83\u4f4e\u4e14\u6210\u719f                     | \u4f4e\u4f46\u975e\u5e38\u4e0d\u6210\u719f                                     | \u975e\u5e38\u9ad8                               |\r\n| \u5f00\u53d1\u6280\u672f   | \u6e05\u6670\u4e14\u7a33\u6001                     | \u5165\u95e8\u7b80\u5355\u4f46\u975e\u5e38\u96be\u4e8e\u7a33\u6001\u8f93\u51fa                               | \u590d\u6742\u4e14\u591a\u53d8                             |\r\n| \u5e38\u7528\u6280\u672f   | \u9762\u5411\u5bf9\u8c61\u3001\u6570\u636e\u5e93\u3001\u5927\u6570\u636e              | prompt tunning\u3001incontext learning\u3001embedding | Transformer\u3001RLHF\u3001Finetunning\u3001LoRA |\r\n| \u5f00\u6e90\u652f\u6301   | \u4e30\u5bcc\u4e14\u6210\u719f                     | \u975e\u5e38\u6df7\u4e71\u5904\u4e8e\u8f83\u4f4e\u6c34\u5e73                                  | \u4e30\u5bcc\u4f46\u4e0d\u6210\u719f                            |\r\n| \u5f00\u53d1\u6210\u672c   | \u4f4e                         | \u8f83\u9ad8                                          | \u975e\u5e38\u9ad8                               |\r\n| \u5f00\u53d1\u4eba\u5458   | \u4e30\u5bcc                        | \u6781\u5ea6\u7a00\u7f3a                                        | \u975e\u5e38\u7a00\u7f3a                              |\r\n| \u5f00\u53d1\u534f\u540c\u6a21\u5f0f | \u6839\u636e\u4ea7\u54c1\u7ecf\u7406\u4ea4\u4ed8\u7684\u6587\u6863\u8fdb\u884c\u5f00\u53d1           | \u4e00\u4eba\u6216\u6781\u7b80\u7684\u5c0f\u7ec4\uff0c\u4ece\u9700\u6c42\u5230\u4ea4\u4ed8\u8fd0\u8425\u5168\u90e8\u5de5\u4f5c                       | \u6839\u636e\u7406\u8bba\u7814\u7a76\u65b9\u5411\u5f00\u53d1                        |\r\n\r\n### - \u4f01\u4e1a\u9700\u6c42\u975e\u5e38\u65fa\u76db\uff0c\u5904\u4e8e\u5feb\u901f\u4e0a\u5347\u8d8b\u52bf\r\n\r\n\u5f53\u524d\uff0c\u6240\u6709\u7684\u79d1\u6280\u516c\u53f8\u3001\u4e92\u8054\u7f51\u516c\u53f8\u3001\u5927\u6570\u636e\u516c\u53f8\u51e0\u4e4e\u90fd\u5728all in\u8fd9\u4e2a\u65b9\u5411\uff0c\u4f46\u66f4\u591a\u7684\u4f20\u7edf\u4f01\u4e1a\u8fd8\u5904\u4e8e\u8ff7\u832b\u7684\u72b6\u6001\u3002\u4f20\u7edf\u4f01\u4e1a\u5e76\u975e\u4e0d\u9700\u8981\uff0c\u800c\u662f\uff1a 1) \u6ca1\u6709\u6280\u672f\u4eba\u624d\u50a8\u5907\uff0c\u4e0d\u77e5\u9053\u505a\u4ec0\u4e48\uff1b2) \u6ca1\u6709\u786c\u4ef6\u50a8\u5907\uff0c\u6ca1\u6709\u80fd\u529b\u505a\uff1b3) \u4e1a\u52a1\u6570\u5b57\u5316\u7a0b\u5ea6\u5e95\uff0c\u7528AIGC\u6539\u9020\u5347\u7ea7\u5468\u671f\u957f\u3001\u89c1\u6548\u6162\u3002\r\n\r\n### - \u6bcf\u4e2a\u6a21\u578b\u90fd\u63d0\u4f9b\u4e86API\uff0c\u6709\u7684\u8fd8\u6709\u5b8c\u5584\u7684SDK\uff0c\u4e3a\u4ec0\u4e48\u8981\u518d\u5c01\u88c5\u4e00\u904d\uff1f\r\n\r\n\u76ee\u524d\u56fd\u5185\u5916\u5404\u79cd\u5546\u7528\u3001\u5f00\u6e90\u6a21\u578b\u592a\u591a\uff0c\u53d1\u5c55\u53c8\u7279\u522b\u5feb\uff0c\u4e0d\u8fc7\u6a21\u578b\u7684API\u3001\u6570\u636e\u5bf9\u8c61\u5e76\u4e0d\u4e00\u6837\uff0c\u5bfc\u81f4\u6211\u4eec\u9762\u5bf9\u4e00\u4e2a\u65b0\u6a21\u578b\uff08\u751a\u81f3\u4e00\u4e2a\u65b0\u7248\u672c\uff09\uff0c\u90fd\u8981\u53bb\u9605\u8bfb\u5f00\u53d1\u6587\u6863\uff0c\u5e76\u4fee\u6539\u81ea\u5df1\u7684\u5e94\u7528\u4ee3\u7801\u53bb\u9002\u914d\uff0c\u76f8\u4fe1\u6bcf\u4e2a\u5e94\u7528\u5f00\u53d1\u4eba\u5458\u90fd\u6d4b\u8bd5\u8fc7\u5f88\u591a\u4e2a\u6a21\u578b\uff0c\u5e94\u8be5\u90fd\u6df1\u53d7\u5176\u82e6\u3002\r\n\r\n\u5b9e\u9645\u4e0a\uff0c\u6a21\u578b\u80fd\u529b\u867d\u6709\u4e0d\u540c\uff0c\u4f46\u63d0\u4f9b\u80fd\u529b\u7684\u6a21\u5f0f\u5927\u4f53\u662f\u4e00\u81f4\u7684\uff0c\u56e0\u6b64\u6709\u4e00\u4e2a\u53ef\u4ee5\u9002\u914d\u5927\u91cf\u6a21\u578bAPI\uff0c\u63d0\u4f9b\u7edf\u4e00\u8c03\u7528\u6a21\u5f0f\u7684\u6846\u67b6\uff0c\u5c31\u53d8\u6210\u4e86\u5f88\u591a\u5f00\u53d1\u4eba\u5458\u7684\u8feb\u5207\u9700\u6c42\u3002\r\n\r\n### - \u65e2\u7136\u5982\u6b64\uff0c\u8fd9\u4e9blangchain\u90fd\u6709\uff0c\u76f4\u63a5\u7528\u4e0d\u597d\u5417\uff0c\u4e3a\u4ec0\u4e48\u8981\u91cd\u590d\u9020\u8f6e\u5b50\uff1f\r\n\r\n\u9996\u5148\uff0cbida\u5e76\u975e\u8981\u66ff\u4ee3langchain\uff0c\u800c\u662f\u9488\u5bf9\u7684\u76ee\u6807\u5b9a\u4f4d\u4e0d\u540c\u3001\u5f00\u53d1\u7406\u5ff5\u4e5f\u6709\u5f88\u5927\u5dee\u5f02\uff1a\r\n\r\n| \u5206\u7c7b                    | langchain                                              | bida                                                                          |\r\n|:---------------------:|:------------------------------------------------------ |:----------------------------------------------------------------------------- |\r\n| \u76ee\u6807\u4eba\u7fa4                  | AIGC\u65b9\u5411\u7684\u5168\u91cf\u5f00\u53d1\u4eba\u7fa4                                          | \u5bf9\u628aAIGC\u4e0e\u5e94\u7528\u5f00\u53d1\u7ed3\u5408\u6709\u8feb\u5207\u9700\u6c42\u7684\u5f00\u53d1\u4eba\u5458                                                       |\r\n| \u6a21\u578b\u652f\u6301                  | \u652f\u6301\u672c\u5730\u90e8\u7f72\u6216\u8fdc\u7aef\u90e8\u7f72\u7684\u5404\u79cd\u6a21\u578b                                       | \u4ec5\u652f\u6301\u63d0\u4f9bWeb API\u7684\u6a21\u578b\u8c03\u7528\uff0c\u76ee\u524d\u5546\u7528\u6a21\u578b\u5927\u90e8\u5206\u90fd\u63d0\u4f9b\uff0c\u5f00\u6e90\u6a21\u578b\u4f7f\u7528FastChat\u7b49\u6846\u67b6\u90e8\u7f72\u540e\u4e5f\u53ef\u4ee5\u63d0\u4f9bWeb API               |\r\n| \u6846\u67b6\u7ed3\u6784                  | \u56e0\u4e3a\u63d0\u4f9b\u7684\u80fd\u529b\u591a\uff0c\u7ed3\u6784\u975e\u5e38\u590d\u6742\uff0c\u622a\u6b622023\u5e748\u6708\uff0c\u6838\u5fc3\u4ee3\u7801\u5df2\u67091700\u591a\u4e2a\u6587\u4ef6\uff0c15\u4e07\u884c\u4ee3\u7801\uff0c\u5b66\u4e60\u95e8\u69db\u8f83\u9ad8 | \u6838\u5fc3\u4ee3\u7801\u5341\u4f59\u4e2a\uff0c2000\u884c\u5de6\u53f3\u4ee3\u7801\uff0c\u5b66\u4e60\u548c\u4fee\u6539\u4ee3\u7801\u8f83\u7b80\u5355                                                  |\r\n| \u529f\u80fd\u652f\u6301                  | \u63d0\u4f9bAIGC\u65b9\u5411\u5404\u7c7b\u6a21\u578b\u3001\u6280\u672f\u3001\u5e94\u7528\u9886\u57df\u7684\u5168\u8986\u76d6                               | \u5f53\u524d\u63d0\u4f9bChatCompletions\u3001Completions\u3001Embeddings\u3001Function Call\u7b49\u529f\u80fd\u652f\u6301\uff0c\u8bed\u97f3\u3001\u56fe\u50cf\u7b49\u591a\u6a21\u6001\u529f\u80fd\u8fd1\u671f\u9646\u7eed\u53d1\u5e03 |\r\n| Prompt                | \u63d0\u4f9bPrompt\u6a21\u677f\uff0c\u4f46\u81ea\u6709\u529f\u80fd\u4f7f\u7528\u7684Prompt\u5185\u5d4c\u5728\u4ee3\u7801\u5185\uff0c\u8c03\u8bd5\u548c\u4fee\u6539\u90fd\u5f88\u56f0\u96be              | \u63d0\u4f9bPrompt\u6a21\u677f\uff0c\u5f53\u524d\u65e0\u5185\u7f6e\u529f\u80fd\u4f7f\u7528Prompt\uff0c\u5c06\u6765\u5982\u679c\u4f7f\u7528\uff0c\u4e5f\u4f1a\u91c7\u7528\u914d\u7f6e\u578b\u540e\u52a0\u8f7d\u6a21\u5f0f\uff0c\u4fbf\u4e8e\u7528\u6237\u81ea\u884c\u8c03\u6574                       |\r\n| Conversation & Memory | \u652f\u6301\uff0c\u5e76\u63d0\u4f9b\u591a\u79cdMemory\u7ba1\u7406\u65b9\u5f0f                                     | \u652f\u6301\uff0c\u652f\u6301Conversation\u6301\u4e45\u5316\uff08\u4fdd\u5b58\u81f3duckdb\u4e2d\uff09\uff0cMemory\u63d0\u4f9b\u9650\u5b9a\u5f52\u6863\u4f1a\u8bdd\u80fd\u529b\uff0c\u5176\u4ed6\u80fd\u529b\u6709\u6269\u5c55\u6846\u67b6\u53ef\u81ea\u884c\u6269\u5c55              |\r\n| Function & Plugin     | \u652f\u6301\uff0c\u5e76\u63d0\u4f9b\u5f88\u4e30\u5bcc\u7684\u6269\u5c55\u80fd\u529b\uff0c\u4f46\u4f7f\u7528\u6548\u679c\u4f9d\u8d56\u5927\u6a21\u578b\u7684\u81ea\u8eab\u80fd\u529b                       | \u517c\u5bb9\u4f7f\u7528OpenAI\u7684Function Call\u89c4\u8303\u7684\u5927\u6a21\u578b                                                |\r\n| Agent & Chain         | \u652f\u6301\uff0c\u5e76\u63d0\u4f9b\u5f88\u4e30\u5bcc\u7684\u6269\u5c55\u80fd\u529b\uff0c\u4f46\u4f7f\u7528\u6548\u679c\u4f9d\u8d56\u5927\u6a21\u578b\u7684\u81ea\u8eab\u80fd\u529b                       | \u4e0d\u652f\u6301\uff0c\u8ba1\u5212\u53e6\u5f00\u9879\u76ee\u5b9e\u73b0\uff0c\u4e5f\u53ef\u57fa\u4e8e\u5f53\u524d\u6846\u67b6\u81ea\u884c\u6269\u5c55\u5f00\u53d1                                   |\r\n| \u5176\u4ed6\u529f\u80fd                  | \u652f\u6301\u5f88\u591a\u5176\u4ed6\u529f\u80fd\uff0c\u6bd4\u5982\u6587\u6863\u62c6\u5757\uff08\u62c6\u5757\u540e\u505aembedding\uff0c\u7528\u4e8e\u5b9e\u73b0chatpdf\u7b49\u7c7b\u4f3c\u7684\u529f\u80fd\uff09       | \u6682\u65e0\u5176\u4ed6\u529f\u80fd\uff0c\u5982\u679c\u589e\u52a0\u4e5f\u4f1a\u91c7\u7528\u53e6\u5f00\u517c\u5bb9\u9879\u76ee\u7684\u65b9\u5f0f\u6765\u5b9e\u73b0\uff0c\u5f53\u524d\u53ef\u4ee5\u4f7f\u7528\u5176\u4ed6\u4ea7\u54c1\u63d0\u4f9b\u7684\u80fd\u529b\u7ec4\u5408\u540e\u5b9e\u73b0  |\r\n| \u8fd0\u884c\u6548\u7387 | \u5f88\u591a\u5f00\u53d1\u8005\u53cd\u6620\u6bd4\u76f4\u63a5\u8c03\u7528API\u6162\uff0c\u539f\u56e0\u672a\u77e5 | \u4ec5\u5c01\u88c5\u4e86\u8c03\u7528\u6d41\u7a0b\u548c\u7edf\u4e00\u4e86\u8c03\u7528\u63a5\u53e3\uff0c\u6027\u80fd\u4e0e\u76f4\u63a5\u8c03\u7528API\u6ca1\u6709\u533a\u522b |\r\n\r\nlangchain\u505a\u4e3a\u4e1a\u5185\u9886\u519b\u7684\u5f00\u6e90\u9879\u76ee\uff0c\u4e3a\u5927\u6a21\u578b\u4ee5\u53caAGI\u7684\u63a8\u5e7f\u505a\u51fa\u4e86\u5de8\u5927\u8d21\u732e\uff0c\u6211\u4eec\u4e5f\u5728\u9879\u76ee\u4e2d\u5e94\u7528\u4e86\u5b83\uff0c\u540c\u65f6\u5728\u5f00\u53d1bida\u65f6\uff0c\u4e5f\u501f\u9274\u4e86\u5f88\u591a\u5b83\u7684\u6a21\u5f0f\u548c\u601d\u60f3\u3002\u4f46langchain\u592a\u60f3\u505a\u4e00\u4e2a\u5927\u800c\u5168\u7684\u5de5\u5177\uff0c\u4e0d\u53ef\u907f\u514d\u7684\u4e5f\u4ea7\u751f\u4e86\u5f88\u591a\u7f3a\u70b9\uff0c\u4e0b\u9762\u51e0\u7bc7\u6587\u7ae0\uff0c\u610f\u89c1\u90fd\u5dee\u4e0d\u591a\uff1a[Max Woolf](https://minimaxir.com/2023/07/langchain-problem/) - [\u4e2d\u6587](https://mp.weixin.qq.com/s/Iwe6M391b2BBWae-HmOIJQ), [Hacker News](https://news.ycombinator.com/item?id=36645575) - [\u4e2d\u6587](https://mp.weixin.qq.com/s/GKF28C1yzWZDtCXjJQ52hg) \u3002\r\n\r\n\u5708\u5185\u6d41\u884c\u4e00\u53e5\u8bdd\u975e\u5e38\u597d\u7684\u505a\u4e86\u603b\u7ed3\uff1a**langchain\uff0c\u4e00\u4e2a\u4eba\u4eba\u90fd\u4f1a\u5b66\u4e60\uff0c\u4f46\u6700\u7ec8\u90fd\u4f1a\u4e22\u5f03\u7684\u6559\u79d1\u4e66\u3002**\r\n\r\n### - \u56e0\u6b64\uff0c \u57fa\u4e8e\u4ee5\u4e0a\u51e0\u70b9\uff0c\u6211\u4eec\u5e0c\u671b\u6839\u636e\u5f53\u524d\u4e3b\u6d41\u5f00\u53d1\u4eba\u5458\u548c\u4f01\u4e1a\u5e94\u7528\u5f00\u53d1\u7684\u7279\u70b9\uff0c\u642d\u5efa\u4e00\u4e2a\u7b80\u5355\u3001\u6613\u7528\u3001\u7a33\u5b9a\u3001\u9ad8\u6548\uff0c\u4fbf\u4e8e\u6269\u5c55\u548c\u96c6\u6210\u7684\u5927\u8bed\u8a00\u6a21\u578b\u5de5\u7a0b\u5316\u5f00\u53d1\u6846\u67b6\uff0c\u5927\u5e45\u6d88\u51cf\u5f00\u53d1AI\u4ea7\u54c1\u7684\u96be\u5ea6\u548c\u5468\u671f\u3002\r\n\r\n\r\n## \u4f7f\u7528\u8bf4\u660e\r\n\r\n### 1. \u521d\u59cb\u5316\u73af\u5883\r\n\r\n#### 1.1 \u5b89\u88c5bida\r\n\u4ecepip\u6216pip3\u5b89\u88c5\u6700\u65b0\u7684bida\r\n```cmd\r\npip install -U bida\r\n```\r\n\r\n\u4ecegithub clone\u9879\u76ee\u4ee3\u7801\u5230\u672c\u5730\u76ee\u5f55\uff1a\r\n```cmd\r\ngit clone https://github.com/pfzhou/bida.git\r\npip install -r requirements.txt\r\n```\r\n#### 1.2 \u914d\u7f6e\u73af\u5883\u53d8\u91cf\r\n\r\n\u4fee\u6539\u5f53\u524d\u4ee3\u7801\u6839\u76ee\u5f55\u4e0b\u9762\u7684\u6587\u4ef6\uff1a **[\".env.template\"](.env.template)** \u7684\u6269\u5c55\u540d\uff0c\u6210\u4e3a **\".env\"** \u73af\u5883\u53d8\u91cf\u6587\u4ef6\u3002\u8bf7\u6839\u636e\u6587\u4ef6\u4e2d\u7684\u8bf4\u660e\uff0c\u628a**\u5df2\u7ecf\u7533\u8bf7\u6a21\u578b\u7684key**\u914d\u7f6e\u8fdb\u53bb\u3002\r\n\r\n**\u8bf7\u6ce8\u610f**\uff1a\u8be5\u6587\u4ef6\u5df2\u7ecf\u52a0\u5165\u5ffd\u7565\u6e05\u5355\uff0c\u4e0d\u4f1a\u88ab\u4f20\u5230git\u670d\u52a1\u5668\u3002\r\n\r\n#### 1.3 \u9a8c\u8bc1\u662f\u5426\u914d\u7f6e\u6210\u529f\r\n\r\n[examples\\1.\u521d\u59cb\u5316\u73af\u5883.ipynb](examples/1.\u521d\u59cb\u5316\u73af\u5883.ipynb)\r\n\r\n\r\n### 2. \u4f7f\u7528bida\u8c03\u7528\u6a21\u578b\r\n\r\n\u4e0b\u9762\u6f14\u793a\u4ee3\u7801\u4f1a\u6df7\u5408\u4f7f\u7528\u5404\u79cdbida\u652f\u6301\u7684\u6a21\u578b\uff0c\u8bf7\u6839\u636e\u81ea\u5df1\u8d2d\u4e70\u7684\u6a21\u578b\u4fee\u6539\u66ff\u6362\u4ee3\u7801\u4e2d\u7684**[model_type]**\u503c\u4e3a\u5bf9\u5e94\u7684\u6a21\u578b\u516c\u53f8\u540d\u5b57\uff0c\u5c31\u53ef\u4ee5\u5feb\u901f\u5207\u6362\u5404\u79cd\u6a21\u578b\u8fdb\u884c\u4f53\u9a8c\uff1a\r\n```python\r\n# \u66f4\u591a\u4fe1\u606f\u53c2\u770b\\bida\\models\\*.json\u4e2d\u7684model_type\u914d\u7f6e\r\n# openai\r\nllm = ChatLLM(model_type=\"openai\")\r\n# baidu\r\nllm = ChatLLM(model_type=\"baidu\")\r\n# baidu third models\uff08llama-2...\uff09\r\nllm = ChatLLM(model_type=\"baidu-third\")\r\n# aliyun\r\nllm = ChatLLM(model_type=\"aliyun\")\r\n# minimax\r\nllm = ChatLLM(model_type=\"minimax\")\r\n# minimax ccp\r\nllm = ChatLLM(model_type=\"minimax-ccp\")\r\n# zhipu ai\r\nllm = ChatLLM(model_type=\"chatglm2\")\r\n# xunfei xinghuo\r\nllm = ChatLLM(model_type=\"xfyun\")\r\n# senstime\r\nllm = ChatLLM(model_type=\"senstime\")\r\n# baichuan ai\r\nllm = ChatLLM(model_type=\"baichuan\")\r\n# tencent ai\r\nllm = ChatLLM(model_type=\"tencent\")\r\n```\r\n\r\n#### 2.1 Chat\u6a21\u5f0f\r\n\r\n> Chat\u6a21\u5f0f\uff1aChatCompletion\uff0c\u5f53\u524d\u4e3b\u6d41\u7684LLM\u4ea4\u4e92\u6a21\u5f0f\uff0cbida\u652f\u6301\u4f1a\u8bdd\u7ba1\u7406\uff0c\u652f\u6301\u6301\u4e45\u5316\u4fdd\u5b58\u548cMemory\u7ba1\u7406\u3002\r\n\r\n- \u8c03\u7528\u5e76\u6253\u5370\u56de\u7b54\u5185\u5bb9\uff1a\r\n\r\n```python\r\nfrom bida import ChatLLM\r\n\r\nllm = ChatLLM(model_type='baidu')\r\nresult = llm.chat(\"\u4f60\u597d\u5440\uff0c\u8bf7\u95ee\u4f60\u662f\u8c01\uff1f\") \r\nprint(result)\r\n```\r\n\r\n- \u6d41\u5f0fstream\u8c03\u7528\uff0c\u5b9e\u73b0\u6253\u5b57\u673a\u6548\u679c\uff1a\r\n\r\n```python\r\nfrom bida import ChatLLM\r\n\r\n# stream\u8c03\u7528\r\nllm = ChatLLM(model_type=\"baidu\", stream_callback=ChatLLM.stream_callback_func)\r\n\r\nresult = llm.chat(\"\u4f60\u597d\u5440\uff0c\u8bf7\u95ee\u4f60\u662f\u8c01\uff1f\")      \r\n```\r\n\r\n- \u591a\u8f6e\u5bf9\u8bdd\uff1a\r\n\r\n```python\r\nfrom bida import ChatLLM\r\n\r\nllm = ChatLLM(model_type=\"baidu\", stream_callback=ChatLLM.stream_callback_func) \r\n\r\nresult = llm.chat(\"\u4f60\u662f\u4e00\u4e2a\u670d\u52a1\u52a9\u7406\uff0c\u8bf7\u7b80\u6d01\u56de\u7b54\u6211\u7684\u95ee\u9898\u3002\u6211\u7684\u540d\u5b57\u662f\u8001\u5468\u3002\")\r\nresult = llm.chat(\"\u6211\u7684\u540d\u5b57\u662f\uff1f\")\r\n```\r\n\r\n\u4ee5\u4e0a\u7684\u8be6\u7ec6\u4ee3\u7801\u548c\u66f4\u591a\u529f\u80fd\u793a\u4f8b\uff0c\u8bf7\u53c2\u8003\u4e0b\u9762\u7684NoteBook\uff1a\r\n\r\n> [examples\\2.1.Chat\u6a21\u5f0f.ipynb](examples/2.1.Chat\u6a21\u5f0f.ipynb)\r\n\r\n\r\n- **\u4f7f\u7528gradio\u5efa\u7acbchatbot**\r\n\r\n    - [gradio](https://www.gradio.app/)\u662f\u4e00\u6b3e\u975e\u5e38\u6d41\u884c\u7684\u81ea\u7136\u8bed\u8a00\u5904\u7406\u754c\u9762\u6846\u67b6\r\n\r\n    - bida + gradio \u53ef\u4ee5\u7528\u51e0\u884c\u4ee3\u7801\u5c31\u642d\u5efa\u4e00\u4e2a\u53ef\u7528\u7684\u5e94\u7528\u7a0b\u5e8f\r\n  \r\n```python\r\nimport gradio as gr\r\nfrom bida import ChatLLM\r\n\r\nllm = ChatLLM(model_type='openai')\r\n\r\ndef predict(message, history):\r\n    answer = llm.chat(message)\r\n    return answer\r\n\r\ngr.ChatInterface(predict).launch()\r\n```\r\n\r\n![image](docs/gradio-chatbot-demo02.png)\r\n\r\n> \u8be6\u7ec6\u5185\u5bb9\u89c1\uff1a[bida+gradio\u7684chatbot demo](examples/gradio-chatbot-demo.ipynb)\r\n\r\n\r\n#### 2.2 Completion\u6a21\u5f0f\r\n\r\n> Completion\u6a21\u5f0f\uff1aCompletions\u6216TextCompletions\uff0c\u4e0a\u4e00\u4ee3LLM\u4ea4\u4e92\u6a21\u5f0f\uff0c\u4ec5\u652f\u6301\u5355\u8f6e\u4f1a\u8bdd\uff0c\u4e0d\u4fdd\u5b58\u804a\u5929\u8bb0\u5f55\uff0c\u6bcf\u6b21\u8c03\u7528\u90fd\u662f\u5168\u65b0\u7684\u4ea4\u6d41\u3002\r\n\r\n**\u8bf7\u6ce8\u610f\uff1a** \u8be5\u6a21\u5f0f\u5728[OpenAI 2023\u5e747\u67086\u65e5\u7684\u6587\u7ae0\u4e2d](https://openai.com/blog/gpt-4-api-general-availability)\uff0c\u660e\u786e\u8868\u793a\u8981\u9010\u6b65\u6dd8\u6c70\uff0c\u65b0\u51fa\u7684\u6a21\u578b\u4e5f\u57fa\u672c\u4e0d\u63d0\u4f9b\u76f8\u5173\u529f\u80fd\uff0c\u5373\u4f7f\u652f\u6301\u7684\u6a21\u578b\u4f30\u8ba1\u4e5f\u4f1a\u91c7\u53d6\u8ddf\u968fOpenAI\uff0c\u9884\u8ba1\u672a\u6765\u90fd\u4f1a\u9010\u6e10\u6dd8\u6c70\u3002\r\n\r\n```python\r\nfrom bida import TextLLM\r\n\r\nllm = TextLLM(model_type=\"openai\")\r\nresult = llm.completion(\"\u4f60\u662f\u4e00\u4e2a\u670d\u52a1\u52a9\u7406\uff0c\u8bf7\u7b80\u6d01\u56de\u7b54\u6211\u7684\u95ee\u9898\u3002\u6211\u7684\u540d\u5b57\u662f\u8001\u5468\u3002\")\r\nprint(result)\r\n```\r\n\r\n\u793a\u4f8b\u4ee3\u7801\u8be6\u89c1\uff1a\r\n\r\n> [examples\\2.2.Completion\u6a21\u5f0f.ipynb](examples/2.2.Completion\u6a21\u5f0f.ipynb)\r\n\r\n#### 2.3 \u4f7f\u7528\u63d0\u793a\u8bcd\r\n\r\n\u63d0\u793a\u8bcdPrompt\u662f\u5927\u8bed\u8a00\u6a21\u578b\u4e2d\u6700\u91cd\u8981\u7684\u529f\u80fd\uff0c\u98a0\u8986\u4e86\u4f20\u7edf\u9762\u5411\u5bf9\u8c61\u7684\u5f00\u53d1\u6a21\u5f0f\uff0c\u8f6c\u53d8\u4e3a\uff1a **Prompt\u5de5\u7a0b**\u3002 \u672c\u6846\u67b6\u4f7f\u7528\u201c\u63d0\u793a\u8bcd\u6a21\u677fPrompt Templete\u201d\u6765\u5b9e\u73b0\uff0c\u652f\u6301\u66ff\u6362\u6807\u8bb0\u3001\u591a\u6a21\u578b\u8bbe\u5b9a\u4e0d\u540c\u7684\u63d0\u793a\u8bcd\u548c\u6a21\u578b\u6267\u884c\u4ea4\u4e92\u65f6\u81ea\u52a8\u66ff\u6362\u7b49\u529f\u80fd\u3002\r\n\r\n\u5f53\u524d\u5df2\u63d0\u4f9b **PromptTemplate_Text** \uff1a\u652f\u6301\u4f7f\u7528\u5b57\u7b26\u4e32\u6587\u672c\u751f\u6210Prompt\u6a21\u677f\uff0cbida\u4e5f\u652f\u6301\u7075\u6d3b\u7684\u81ea\u5b9a\u4e49\u6a21\u677f\uff0c\u672a\u6765\u8ba1\u5212\u63d0\u4f9b\u4ecejson\u548c\u6570\u636e\u5e93\u4e2d\u52a0\u8f7d\u6a21\u677f\u7684\u80fd\u529b\u3002\r\n\r\n\u8be6\u7ec6\u793a\u4f8b\u4ee3\u7801\u8bf7\u53c2\u770b\u4e0b\u9762\u7684\u6587\u4ef6\uff1a\r\n> [examples\\2.3.Prompt\u63d0\u793a\u8bcd.ipynb](examples/2.3.Prompt\u63d0\u793a\u8bcd.ipynb)\r\n\r\n**\u63d0\u793a\u8bcd\u4e2d\u91cd\u8981\u8bf4\u660e**\r\n- \u4e0d\u540c\u6a21\u578b\u5bf9\u63d0\u793a\u8bcd\u7684\u652f\u6301\u80fd\u529b\u4e0d\u5c3d\u76f8\u540c\uff0c\u6bd4\u5982\uff1a\r\n1. ChatGPT\u548cVicuna\u7b49\u56fd\u5916\u5927\u6a21\u578b\uff0c\u5bf9\u4e2d\u6587\u63d0\u793a\u8bcd\u652f\u6301\u4e0d\u591f\u7a33\u5b9a\uff0c\u5efa\u8bae\u7528\u82f1\u6587\u5199\u63d0\u793a\u8bcd\r\n2. \u56fd\u5185\u5f88\u591a\u6a21\u578b\u5bf9\u63a8\u7406\u7c7b\u7684\u63d0\u793a\u8bcd\u4e0d\u654f\u611f\uff08\u6307\u4ee4\u9075\u5faa\u4e0d\u597d\uff09\uff0c\u5bf9\u4e8e\u751f\u6210Json\u3001SQL\u3001Code\u7684\u6307\u4ee4\u51e0\u4e4e\u5b8c\u5168\u5ffd\u7565\r\n3. \u82f1\u6587\u5927\u5199\u5355\u8bcd\u548c\u4e2d\u6587\u52a0\u5165\u3010\u3011\u3001\u201c\u201d\u7b49\u5f3a\u8c03\u4fe1\u606f\uff0c\u5bf9\u6a21\u578b\u6ce8\u610f\u529b\u6709\u660e\u663e\u5f71\u54cd\r\n4. \u91cd\u8981\u4fe1\u606f\u53ef\u4ee5\u91cd\u590d\u591a\u904d\uff0c\u5bf9\u6a21\u578b\u6ce8\u610f\u529b\u6709\u660e\u663e\u5f71\u54cd\uff0c\u653e\u7f6e\u7684\u4f4d\u7f6e\u56e0\u6a21\u578b\u800c\u5f02\uff0c\u6709\u7684\u5728\u5f00\u59cb\u6548\u679c\u597d\uff0c\u6709\u7684\u5728\u7ed3\u5c3e\u6548\u679c\u597d\r\n5. \u63d0\u793a\u8bcd\u592a\u957f\u5f71\u54cd\u8f93\u51fa\u7684token\u6570\u91cf\uff0c\u8981\u6839\u636e\u4e0d\u540c\u6a21\u578b\u7684max_token\u503c\u505a\u8c03\u6574\r\n   \r\n\u603b\u7684\u6765\u8bf4\uff0c\u5efa\u8bae\u63d0\u793a\u8bcd\u9075\u5faa\uff1a**\u8bbe\u5b9a\u89d2\u8272\uff0c\u660e\u786e\u4efb\u52a1\uff0c\u7ed9\u51fa\u4e0a\u4e0b\u6587\uff08\u76f8\u5173\u8d44\u6599\u6216\u793a\u4f8b\uff09\u7684\u4e09\u6bb5\u5f0f\u7ed3\u6784**\uff0c\u53ef\u4ee5\u53c2\u8003\u793a\u4f8b\u4e2d\u7684\u5199\u6cd5\u3002\r\n\r\n- \u63d0\u793a\u8bcd\u7684\u4e00\u4e9b\u4ecb\u7ecd\u6587\u6863\uff0c\u4f9b\u53c2\u8003\uff1a\r\n\r\n1. [\u5434\u6069\u8fbe\u7684\u7cfb\u5217\u8bfe\u7a0b https://learn.deeplearning.ai/login](https://learn.deeplearning.ai/login) \uff0c [\u4e2d\u6587\u7248](https://github.com/datawhalechina/prompt-engineering-for-developers) \uff0c [\u89e3\u8bfb](https://mp.weixin.qq.com/s/gUtB71uWI7Dg_tfRzaidCA)\r\n\r\n 2. [openai cookbook https://github.com/openai/openai-cookbook](https://github.com/openai/openai-cookbook)\r\n\r\n3. \u5fae\u8f6fAzure\u6587\u6863\uff1a[\u63d0\u793a\u5de5\u7a0b\u7b80\u4ecb](https://learn.microsoft.com/zh-cn/azure/cognitive-services/openai/concepts/prompt-engineering) , [\u63d0\u793a\u5de5\u7a0b\u6280\u672f](https://learn.microsoft.com/zh-cn/azure/cognitive-services/openai/concepts/advanced-prompt-engineering?pivots=programming-language-completions)\r\n\r\n4. [Github\u4e0a\u6700\u706b\u7684Prompt Engineering Guide](https://github.com/dair-ai/Prompt-Engineering-Guide) \uff0c [\u4e2d\u6587\u7248](https://github.com/wangxuqi/Prompt-Engineering-Guide-Chinese)\r\n\r\n\r\n#### 2.4 \u51fd\u6570\u8c03\u7528function calling\r\n\r\n[**\u51fd\u6570\u8c03\u7528Function Calling**](https://openai.com/blog/function-calling-and-other-api-updates)\u662fOpenAI2023\u5e746\u670813\u65e5\u53d1\u5e03\u7684\u529f\u80fd\uff0c\u6211\u4eec\u90fd\u77e5\u9053ChatGPT\u8bad\u7ec3\u7684\u6570\u636e\u662f\u57fa\u4e8e2021\u5e74\u4e4b\u524d\u7684\uff0c\u4f60\u8981\u95ee\u4e00\u4e9b\u5b9e\u65f6\u6027\u76f8\u5173\u7684\u95ee\u9898\u5c31\u6ca1\u6cd5\u56de\u7b54\u4f60\u4e86\uff0c\u800c\u51fd\u6570\u8c03\u7528\u8ba9\u5b9e\u65f6\u83b7\u53d6\u7f51\u7edc\u6570\u636e\u6210\u4e3a\u53ef\u80fd\uff0c\u6bd4\u5982\u67e5\u8be2\u5929\u6c14\u9884\u62a5\u3001\u67e5\u80a1\u7968\u3001\u63a8\u8350\u4e2a\u8fd1\u671f\u7684\u7535\u5f71\u4e4b\u7c7b\u7684\u3002\r\n\r\n- \u51fd\u6570\u8c03\u7528\u7684\u6d41\u7a0b\u662f\u4ec0\u4e48\uff1f\r\n1. \u7528\u6237\u53d1\u8d77\u63d0\u95ee\u65f6\uff0c\u8c03\u7528\u4e00\u6b21\u5e26\u6709\u51fd\u6570\u63cf\u8ff0\u7684completions\u63a5\u53e3\uff0cgpt\u4f1a\u5224\u65ad\u662f\u5426\u652f\u6301\u8c03\u7528\u51fd\u6570\uff0c\u5982\u679c\u53ef\u4ee5\u5c31\u4ece\u7528\u6237\u7684\u63d0\u95ee\u4fe1\u606f\u4e2d\u63d0\u53d6\u51fa\u51fd\u6570\u6240\u9700\u8981\u7684\u53c2\u6570\u3002\r\n2. \u5f00\u53d1\u8005\u62ff\u5230gpt\u63d0\u53d6\u51fa\u6765\u7684\u53c2\u6570\u540e\u81ea\u884c\u8c03\u7528\u51fd\u6570\u5e76\u8fd4\u56de\u7ed3\u679c\r\n3. \u5c06\u51fd\u6570\u7684\u8fd4\u56de\u7ed3\u679c\u518d\u6b21\u53d1\u7ed9GPT\u505a\u603b\u7ed3\u5f52\u7eb3\u4e3a\u81ea\u7136\u8bed\u8a00\r\n   ![image](docs/function_call.png)\r\n- \u54ea\u4e9b\u6a21\u578b\u652f\u6301\uff1agpt-3.5-turbo-0613 \u548c gpt-4-0613 \u8fd9\u4e24\u4e2a\u6a21\u578b\u90fd\u652f\u6301\u51fd\u6570\u8c03\u7528\uff0cMiniMax\u7684Pro\u6a21\u5f0f\u4e5f\u652f\u6301\uff0c\u5176\u4ed6\u5382\u5546\u4e5f\u5728\u8ddf\u8fdb\u4e2d\u3002\r\n- \u9700\u8981\u6ce8\u610f\uff1a\r\n1. \u6574\u4e2a\u8fc7\u7a0b\u4f1a\u5bf9gpt\u6267\u884c\u4e24\u6b21\u8c03\u7528\uff0c\u7b2c\u4e00\u6b21\u8c03\u7528\u4ece\u95ee\u9898\u4e2d\u63d0\u53d6\u51fd\u6570\u53c2\u6570\uff0c\u7b2c\u4e8c\u6b21\u5bf9\u51fd\u6570\u8fd4\u56de\u7ed3\u679c\u505a\u5f52\u7eb3\u603b\u7ed3\r\n2. \u51fd\u6570\u8c03\u7528\u5e76\u4e0d\u662f\u7531gpt\u8c03\u7528\uff0c\u800c\u662f\u5f00\u53d1\u8005\u6765\u8c03\u7528\uff0c\u672c\u6846\u67b6\u5df2\u7ecf\u5c01\u88c5\u4e86\u81ea\u52a8\u8c03\u7528\u65b9\u6cd5\uff0c\u4f46\u9700\u8981\u5f00\u53d1\u8005\u81ea\u5df1\u5b9e\u73b0\u5177\u4f53\u7684\u6267\u884c\u4ee3\u7801\r\n\r\n- OpenAI \u76f8\u5173\u8d44\u6599\uff1a[Guide](https://platform.openai.com/docs/guides/gpt/function-calling),  [API Reference](https://platform.openai.com/docs/api-reference/chat/create#chat/create-functions), [CookBook1](https://github.com/openai/openai-cookbook/blob/main/examples/How_to_call_functions_with_chat_models.ipynb), [CookBook2](https://github.com/openai/openai-cookbook/blob/3115683f14b3ed9570df01d721a2b01be6b0b066/examples/How_to_call_functions_for_knowledge_retrieval.ipynb)\r\n- \u8be6\u7ec6\u793a\u4f8b\u53c2\u770b\uff1a[examples/2.4.function_calling\u51fd\u6570\u8c03\u7528.ipynb](examples/2.4.function_calling\u51fd\u6570\u8c03\u7528.ipynb)\r\n\r\n\r\n#### 2.5 \u6dfb\u52a0\u81ea\u5b9a\u4e49\u51fd\u6570\r\n1. /bida/functions/\u76ee\u5f55\u4e0b\u5efa\u7acb\u4e00\u4e2a\u51fd\u6570\u5b9a\u4e49json\u6587\u4ef6\r\n2. \u7f16\u5199\u5177\u4f53\u6267\u884c\u51fd\u6570\u4ee3\u7801\u7684py\u6587\u4ef6\r\n3. \u542f\u52a8\u6846\u67b6\u8c03\u8bd5\r\n\r\n- \u8be6\u7ec6\u5185\u5bb9\u89c1\uff1a[function\u63a5\u5165\u624b\u518c](bida/functions/README.md)\r\n\r\n\r\n#### 2.6 Embeddings\u5d4c\u5165\u6a21\u578b\r\n\r\nEmbeddings\u6280\u672f\u662f\u5b9e\u73b0Prompt inContext Learning\u6700\u91cd\u8981\u7684\u6280\u672f\uff0c\u5bf9\u6bd4\u4ee5\u524d\u5173\u952e\u8bcd\u68c0\u7d22\uff0c\u53c8\u63d0\u5347\u4e86\u4e00\u6b65\u3002\r\n\r\n**\u6ce8\u610f**\uff1a\u4e0d\u540c\u6a21\u578bembedding\u51fa\u6765\u7684\u6570\u636e\u662f\u4e0d\u901a\u7528\u7684\uff0c\u56e0\u6b64\u68c0\u7d22\u65f6\u95ee\u9898\u7684embedding\u4e5f\u8981\u7528\u540c\u4e00\u4e2a\u6a21\u578b\u624d\u53ef\u4ee5\u3002\r\n\r\n| \u6a21\u578b\u540d\u79f0 | \u8f93\u51fa\u7ef4\u5ea6 | \u6279\u5904\u7406\u8bb0\u5f55\u6570 | \u5355\u6761\u6587\u672ctoken\u9650\u5236 |\r\n| :---:  | :---: | :---: | :---: |\r\n| OpenAI | 1536 | \u4e0d\u9650 | 8191 |\r\n| \u767e\u5ea6 | 384 | 16 | 384 |\r\n| \u963f\u91cc | 1536 | 10 | 2048 |\r\n| MiniMax | 1536 | \u4e0d\u9650 | 4096 |\r\n| \u667a\u8c31AI | 1024 | \u5355\u6761 | 512 |\r\n| \u8baf\u98de\u661f\u706b | 1024 | \u5355\u6761 | 256 |\r\n\r\n**\u6ce8\u610f\uff1a** bida\u7684embedding\u63a5\u53e3\u652f\u6301\u6279\u5904\u7406\uff0c\u8d85\u8fc7\u6a21\u578b\u6279\u5904\u7406\u9650\u5236\u4f1a\u81ea\u52a8\u5206\u6279\u5faa\u73af\u5904\u7406\u540e\u4e00\u8d77\u8fd4\u56de\u3002\u5355\u6761\u6587\u672c\u5185\u5bb9\u8d85\u8fc7\u9650\u5236token\u6570\uff0c\u6839\u636e\u6a21\u578b\u7684\u903b\u8f91\uff0c\u6709\u7684\u4f1a\u62a5\u9519\uff0c\u6709\u7684\u4f1a\u622a\u65ad\u5904\u7406\u3002\r\n\r\n> \u8be6\u7ec6\u793a\u4f8b\u53c2\u770b\uff1a[examples\\2.6.Embeddings\u5d4c\u5165\u6a21\u578b.ipynb](examples/2.6.Embeddings\u5d4c\u5165\u6a21\u578b.ipynb)\r\n\r\n\r\n## \u6a21\u578b\u63a5\u5165\u8bf4\u660e\r\n\r\n1. bida\\models\\\u76ee\u5f55\u4e0b\u5efa\u7acb\u4e00\u4e2a\u6a21\u578b\u914d\u7f6ejson\u6587\u4ef6\r\n2. \u7f16\u5199\u5177\u4f53\u6a21\u578b\u5b9e\u73b0\u65b9\u6cd5\u7684py\u6587\u4ef6\r\n3. \u542f\u52a8\u6846\u67b6\u8c03\u8bd5\r\n   \u8be6\u7ec6\u5185\u5bb9\u89c1\uff1a[\u6a21\u578b\u63a5\u5165\u624b\u518c](bida/models/README.md)\r\n\r\n\r\n## bida\u6846\u67b6\u7ed3\u6784\r\n\r\n```\r\n\u251c\u2500bida                          # bida\u6846\u67b6\u4e3b\u76ee\u5f55\r\n\u2502  \u251c\u2500core                           # bida\u6846\u67b6\u6838\u5fc3\u4ee3\u7801\r\n\u2502  \u251c\u2500functions                      # \u81ea\u5b9a\u4e49function\u6587\u4ef6\r\n\u2502  \u251c\u2500   *.json                          # function\u5b9a\u4e49\r\n\u2502  \u251c\u2500   *.py                            # \u5bf9\u5e94\u7684\u8c03\u7528\u4ee3\u7801\r\n\u2502  \u251c\u2500models                         # \u63a5\u5165\u6a21\u578b\u6587\u4ef6\r\n\u2502  \u251c\u2500   *.json                          # \u6a21\u578b\u914d\u7f6e\u5b9a\u4e49\uff1aopenai.json\u3001baidu.json\u7b49\r\n\u2502  \u251c\u2500   *_api.py                        # \u6a21\u578b\u63a5\u5165\u4ee3\u7801\uff1aopenai_api.py\u3001baidu_api.py\u7b49\r\n\u2502  \u251c\u2500   *_sdk.py                        # \u6a21\u578bsdk\u4ee3\u7801\uff1abaidu_sdk.py\u7b49\r\n\u2502  \u251c\u2500prompts                        # \u81ea\u5b9a\u4e49prompt\u6a21\u677f\u6587\u4ef6\r\n\u2502  \u251c\u2500*.py                           # \u6846\u67b6\u5176\u4ed6\u4ee3\u7801\u6587\u4ef6\r\n\u251c\u2500docs                          # \u5e2e\u52a9\u6587\u6863\r\n\u251c\u2500examples                      # \u6f14\u793a\u4ee3\u7801\u3001notebook\u6587\u4ef6\u548c\u76f8\u5173\u6570\u636e\u6587\u4ef6\r\n\u251c\u2500test                          # pytest\u6d4b\u8bd5\u4ee3\u7801\r\n\u2502 .env.template                 # .env\u7684\u6a21\u677f\r\n\u2502 LICENSE                     \u00a0\u00a0# MIT \u6388\u6743\u6587\u4ef6\r\n\u2502 pytest.ini                    # pytest\u914d\u7f6e\u6587\u4ef6\r\n\u2502 README.md                     # \u672c\u8bf4\u660e\u6587\u4ef6\r\n\u2502 requirements.txt              # \u76f8\u5173\u4f9d\u8d56\u5305\r\n```\r\n## \u8054\u7cfb\u65b9\u5f0f\r\n#### pfzhou@gmail.com\r\n\u6211\u4eec\u5e0c\u671b\u53ef\u4ee5\u9002\u914d\u66f4\u591a\u7684\u6a21\u578b\uff0c\u4e5f\u6b22\u8fce\u60a8\u63d0\u51fa\u5b9d\u8d35\u610f\u89c1\uff0c\u4e00\u8d77\u4e3a\u5f00\u53d1\u8005\u63d0\u4f9b\u66f4\u597d\u7684\u4ea7\u54c1\uff01\r\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "bida\uff0c \u7b80\u5355\u3001\u6613\u7528\u3001\u7a33\u5b9a\u3001\u9ad8\u6548\uff0c\u4fbf\u4e8e\u6269\u5c55\u548c\u96c6\u6210\u7684\uff0c\u5927\u8bed\u8a00\u6a21\u578b\u5de5\u7a0b\u5316\u5f00\u53d1\u6846\u67b6",
    "version": "0.9.4",
    "project_urls": {
        "Homepage": "https://github.com/pfzhou/bida"
    },
    "split_keywords": [
        "ai",
        "aigc",
        "llm",
        "chat",
        "completion",
        "embedding"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "94375e65daa3280b8df37b15ecc96500d5146a8ba36f7286e3cd5a4514176d72",
                "md5": "f0b4892abe83d10f23b8a9cca34e1e70",
                "sha256": "194771808853b87661bb3e184cb7fff1ba690ad706f709bc8dc582330e956ed2"
            },
            "downloads": -1,
            "filename": "bida-0.9.4-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f0b4892abe83d10f23b8a9cca34e1e70",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.9",
            "size": 84333,
            "upload_time": "2023-10-10T05:06:10",
            "upload_time_iso_8601": "2023-10-10T05:06:10.923455Z",
            "url": "https://files.pythonhosted.org/packages/94/37/5e65daa3280b8df37b15ecc96500d5146a8ba36f7286e3cd5a4514176d72/bida-0.9.4-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f5dd8b7bcd5f79ce23db607b8b2c33f6d6fd16bc0305c266527586471cef21bd",
                "md5": "1c458e77c4b1bc5aa01690b531f76f10",
                "sha256": "166299500c7b317b877c7f60074f9a72d0097c00e46f89b9614f166782942798"
            },
            "downloads": -1,
            "filename": "bida-0.9.4.tar.gz",
            "has_sig": false,
            "md5_digest": "1c458e77c4b1bc5aa01690b531f76f10",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 67114,
            "upload_time": "2023-10-10T05:06:13",
            "upload_time_iso_8601": "2023-10-10T05:06:13.781348Z",
            "url": "https://files.pythonhosted.org/packages/f5/dd/8b7bcd5f79ce23db607b8b2c33f6d6fd16bc0305c266527586471cef21bd/bida-0.9.4.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-10-10 05:06:13",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pfzhou",
    "github_project": "bida",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [],
    "lcname": "bida"
}
        
Elapsed time: 0.47810s