任务类型 | 任务内容 | 预计耗时 |
---|---|---|
闯关任务 | Leetcode 383(笔记中提交代码与leetcode提交通过截图) | 20mins |
闯关任务 | Vscode连接InternStudio debug笔记 | 10mins |
一、Leetcode 383
首先,我们先看题目描述以及示例。
我们选择先创建一个字典来记录magazine中每个字符的数量,在通过遍历ransomNote中的每个字符进行判断。
二、InternLM2 API
首先我们进入书生浦语平台,点击创建API Token。
输入该API Token的名称,并提交。
提交后即可看到创建的API Token。
(注意!务必在本页面复制并自行保存,一旦点击确认后就无法查看了!)
后续可以在API Tokens界面看到已经创建的Tokens。
三、Python调用InternLM api
首先,我们需要安装对应插件,如下图所示。
安装完成后,我们点击左侧栏中的Run and Debug并点击create a launch.json file。
根据需求选择对应的Debug选项,我们选择Python File。
接着,我们点击左侧栏中的Explorer,进入/root
工作目录,并创建一个internlm_test.py,内容如下:
#./internlm_test.py
from openai import OpenAI
import os
def internlm_gen(prompt,client):
'''
LLM生成函数
Param prompt: prompt string
Param client: OpenAI client
'''
response = client.chat.completions.create(
model="internlm2.5-latest",
messages=[
{"role": "user", "content": prompt},
],
stream=False
)
return response.choices[0].message.content
api_key = os.getenv('api_key')
#api_key = "" #也可以明文写在代码内,不推荐
client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=api_key)
prompt = '''你好!你是谁?'''
response = internlm_gen(prompt,client)
print(response)
在右下角点击选择对应的Python编译器版本。
为了调用InternLM api,我们需要配置api key。但是,将api key以明文形式卸载代码内,存在非常大的风险,我们采用环境变量的方式来配置以避免token泄露。
方法一:临时变量
我们在linux终端中输入export api_key="填入你的api token",即可在当前终端内生效,再输入python internlm_test.py成功运行代码。
方法二、永久变量
我们可以通过修改 ~/.bashrc 文件实现api key的永久配置,避免每次运行都需进行环境配置。
在该文件中新建一行,内容为export api_key="填入你的api token"。
该配置文件修改后,需要通过source ~/.bashrc 命令才能生效。
输入python internlm_test.py,可以看到也成功运行代码。
四、使用vscode进行Python Debug
下面,我们开始进行Python Debug实验,点击左侧栏中的Explorer,进入/root
工作目录,并创建一个internlm_debug.py,内容如下:
from openai import OpenAI
import json
def internlm_gen(prompt,client):
'''
LLM生成函数
Param prompt: prompt string
Param client: OpenAI client
'''
response = client.chat.completions.create(
model="internlm2.5-latest",
messages=[
{"role": "user", "content": prompt},
],
stream=False
)
return response.choices[0].message.content
api_key = ''
client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=api_key)
content = """
书生浦语InternLM2.5是上海人工智能实验室于2024年7月推出的新一代大语言模型,提供1.8B、7B和20B三种参数版本,以适应不同需求。
该模型在复杂场景下的推理能力得到全面增强,支持1M超长上下文,能自主进行互联网搜索并整合信息。
"""
prompt = f"""
请帮我从以下``内的这段模型介绍文字中提取关于该模型的信息,要求包含模型名字、开发机构、提供参数版本、上下文长度四个内容,以json格式返回。
`{content}`
"""
res = internlm_gen(prompt,client)
res_json = json.loads(res)
print(res_json)
接着,我们点击左侧栏中的Run and Debug,并点击上方的绿色箭头,即Starting Debugging。
该Python代码运行后,可以看到在第32行运行中断,并输出报错信息。
根据报错信息,我们对该行代码进行分析,主要是res变量存在问题。
问题:由于json.loads()方法输入内容为json格式,而res作为大模型输出,其格式无法完全匹配。
我们可以看到,下图中res为原始字符串,而res_str为我们需要的结果字符串。
为此,我们需要通过修改代码,对该字符串进行处理。
我们采用正则表达式来提取字符串中的json数据,具体代码如下:
import re
res_str = re.search(r'```json\n(.*?)\n```', res, re.DOTALL).group(1)
res_json = json.loads(res_str)
代码修改后,我们再次点击上方的绿色箭头,即Starting Debugging,即可看到下方终端页面成功显示结果。