Ch1 Conda虚拟环境
虚拟环境是Python开发中不可或缺的一部分,它允许你在不同的项目中使用不同版本的库,避免依赖冲突。Conda是一个强大的包管理器和环境管理器。
创建新环境
在开发机上已经安装好了conda,可以直接使用。创建虚拟环境时主要需要设置两个参数,一是虚拟环境的名字,二是python的版本。
conda create --name myenv python=3.9
这将创建一个名为myenv的新环境,使用Python 3.9。 在安装包时会有一步二次确认,填y就行。
如果要退出环境,回到默认环境,命令为
conda deactivate
其他常见的虚拟环境管理命令还有
#查看当前设备上所有的虚拟环境
conda env list
#查看当前环境中安装了的所有包
conda list
#删除环境(比如要删除myenv)
conda env remove myenv
进行开发机python debug
配置debug
在上一篇文章中,已经将python环境搭建好,所以需要调试配置一下。
进入到vscode,连接到开发机,点击以下
选择python debugger后选择“Python File” config。
debug单个python文件
默认应该是已经选择好了python解释器,在代码行号旁边点击,即可设置断点
在第四行打上断点
启动debug
在“Run and Debug”侧边栏的“Variables”(变量)部分,你可以看到当前作用域内的所有变量及其值。
单步执行代码
可以使用顶部的debug面板的按钮来单步执行代码。这样,你可以逐行运行代码,并查看每行代码执行后的效果。
不同的断点
在VSCode中,我们还可以设置条件断点,这样断点只有在满足特定条件时才会触发。
普通断点:在代码行号左侧点击,添加断点。
条件断点:在断点标记上右键,选择条件断点(conditional breakpoint)。VSCode 中常用的条件断点主要有三种类型:
表达式(Expression):输入一个 Python 表达式,每次触发断点时运行该表达式,当表达式的值为 True 时 VS Code 会暂停执行。例如:x == 10
触发计数(Hit Count):断点触发计数达到输入值时才会暂停运行。
记录日志(Log Message):触发该断点时在 Debug Console 中输出指定信息,实际上就是 logpoint。需要输入要输出的信息,如果要用到表达式,可以使用 {} 将表达式括起来。例如,每次记录变量 i 的值可以写 x={i}。
Python调用InternLM api
获取api key
前往书生浦语的API文档,登陆后点击API tokens。初次进入应该要绑定手机号。
注意保存好自己的的API Token。
使用InternLM api
#./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)
可以在终端中临时将token加入变量,此时该环境变量只在当前终端内有效。
export api_key="填入你的api token"
python internlm_test.py
若是想永久加入环境变量,可以对 ~/.bashrc 文件中添加以下命令。
export api_key="填入你的api token"
运行时可能会缺少openai的库,所以可以使用
pip install openai
效果如下
任务二
目标:下面是一段调用书生浦语API实现将非结构化文本转化成结构化json的例子,其中有一个小bug会导致报错。请大家自行通过debug功能定位到报错原因并做修正。
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)
以上代码运行后,报错提示:
开始进行debug调试
弹出报错提示,所以尝试打印res,查看其res内容和类型
发现多了个json标识,要保证为纯json内容,即:
{
"model_name": "书生浦语InternLM2.5",
"developer": "上海人工智能实验室",
"parameter_versions": [1.8B, 7B, 20B],
"context_length": "1M"
}
可以修改代码为:(res左边删除json```\n,右边删除\n```)
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 = res.replace('json','',1) # 去掉json字符串
# res = res.strip('```\n') # 去掉json字符串前后的```符号
res = res.lstrip('```json\n')
res = res.rstrip('\n```')
print(res)
res_json = json.loads(res)
print(res_json)
参与讨论