天问青训营第一天:使用豆包大模型和OpenAI API进行实验 | 豆包MarsCode AI刷题

1,194 阅读4分钟

青训笔记第一天 使用豆包大模型和OpenAI API进行实验:LangChain系统安装和快速入门

此篇是青训营笔记的第一篇,主要记录LangChain实战的相关思考与教程,希望其中的解答和知识可以为其他同学解惑。关于刷题算法相关帖子,请移步:占位

一、前言:AI练中学为我们配置了什么环境

第0天是开篇词,要说的不多。但细心的同学可以发现,第一份文件中没有显式地指明api url和key:

# 01_SimpleTextGeneration
llm = ChatOpenAI(model=os.environ.get("LLM_MODELEND"))

什么是api url和key?
API URL(API网址):发送请求以使用LLM服务的网络地址。通常是一个HTTPS URL,如OpenAI的https://api.openai.com/v1/chat/completions。类似于楼号,所有人共用。
API Key(API密钥):一个唯一的字符串,用于认证和授权你的请求。类似于钥匙,必须保密!!!

我们使用MarsCode问一问,看来......得靠自己找。

image.png

简单看一看langchain的源码,可以发现在ChatOpenAI的基类:BaseChatOpenAI的初始化中,若没有提供openai_api_key,则会自动从环境中获取;若没有提供openai_api_base(即url),则会置空并使用默认值。

image-9.png

image-8.png

简单调试并输出,可以发现默认配置的url是https://a0ai-api.zijieapi.com/api/11m/v1(字节的大模型),key是sk-***(任何时候都不能随便发哦~)

api_key = os.getenv('OPENAI_API_KEY')
base_url = os.getenv('OPENAI_BASE_URL')

这个api是free且有10k限额的。如果要使用更厉害的模型,或者使用自己的key,应该怎么办呢?

什么是token?
Tokens是文本的基本单位,可以是单词、单词的一部分,或者标点符号。
对于英文,一个token平均大约等于4个字符或0.75个单词。
对于中文,一个汉字通常被视为一个token。
10k限额即10k个tokens。

二、阅读README.md,完成前期准备

image-10.png

翻到文件列表的最下面,可以找到README.md,里面有详细的说明。跟着一步一步走,就可以使用50w额度的豆包大模型!

  1. 按步骤注册豆包API账号(略)

  2. 创建api key(略)

  3. 创建推理接入点(推荐使用doubao-pro-32k),创建好后如下:(ep-**就是model名称) image-1.png

  4. 查看api使用说明,在右侧可以选择API调用 image-12.png

    选择通过API Key授权,可以看到url是https://ark.cn-beijing.volces.com/api/v3 image-4.png

实际上,我们查看文档可以发现,字节的这些大模型调用的v3 API已经与OpenAI API协议兼容。
目前大部分大模型(如claude、llama)都实现了OpenAI API的兼容,使得开发者可以方便地调用或更换模型。 OpenAI SDK非常强大,可以参考其官方文档学习(需科学上网):platform.openai.com/docs/api-re… image-2.png image-5.png

至此,我们已经获得了关键的key、url和model,下一步是配置环境变量。

三、配置环境变量

由于key是需要高度保密的,因此直接将其硬编码至代码中是最坏的选项。可以参考README.md中设置.cloudiderc文件。也可以使用.env方法,以灵活地更改不同文件的环境变量。

在项目根目录 or 配置目录 or 与.py同级处创建 .env 文件,并添加以下内容:

OPENAI_API_KEY=your_api_key
OPENAI_BASE_URL=https://ark.cn-beijing.volces.com/api/v3
LLM_MODEL=ep-***

导入包,使用load_dotenv(),即可将.env文件加载进环境变量中,并使用os.getenv()查询:

from dotenv import load_dotenv
import os

# 加载 .env 文件中的环境变量
load_dotenv()

api_key = os.getenv('OPENAI_API_KEY')
base_url = os.getenv('OPENAI_BASE_URL')
model = os.getenv('LLM_MODEL')

至此,环境配置完毕,可以测试输出是否正确。接下来便可以使用豆包大模型了!

四、使用豆包大模型

在掘金小册中已经说明,目前的API调用方式分为旧版的Text Model和新版的Chat Model,下面简单列举一下二者在使用上的区别:

特性旧版/Text新版/Chat
适用模型text-davinci-002, text-curie-001, 字节v1、v2gpt-3.5-turbo, gpt-4, 字节v3
API 调用方法client.completions.create()client.chat.completions.create()
输入格式prompt="123"messages={"role": "user", "content": "123"}
输出处理response.choices[0].textresponse.choices[0].message.content
灵活性高,允许多轮对话和角色设置

当然,掘金小册中也提及:

对于简单的单轮文本生成任务,使用Text模型可能会更简单、更直接。例如,如果你只需要模型根据一个简单的提示生成一段文本,那么Text模型可能更适合。
而Chat模型给我们输出的文本更完善,是一句完整的话,而Text模型输出的是几个名字。这是因为ChatGPT经过了对齐(基于人类反馈的强化学习),输出的答案更像是真实聊天场景。

因此,具体选用依据实际情况而定。愉快在01_LangChain快速入门中使用豆包大模型吧!!

下期见!