闯关关卡
任务概览
任务类型 | 任务内容 | 预计耗时 |
---|---|---|
闯关任务 | Leetcode 383(笔记中提交代码与leetcode提交通过截图) | 20mins |
闯关任务 | Vscode连接InternStudio debug笔记 | 10mins |
可选任务 | pip安装到指定目录 | 10mins |
class Solution(object):
def canConstruct(self, ransomNote, magazine):
m = list(magazine)
r = list(ransomNote)
for i in range(0, len(m)):
if m[i] in r:
r.remove(m[i])
if len(r) == 0:
return True
else:
return False
Ch1 Conda虚拟环境
1.1 创建新环境
1.2 环境管理
1.3 安装虚拟环境到指定目录
Ch2 使用pip安装Python三方依赖包
2.1 使用pip安装包
2.2 安装requirement.txt
2.3 安装到指定目录
Ch3 使用本地Vscode连接InternStudio开发机
3.1 使用SSH连接开发机
VSCode是由微软开发一款轻量级但功能强大的代码编辑器,开源且完全免费。它拥有丰富的插件生态系统、跨平台支持、以及内置的Git控制功能,为开发者提供了高效便捷的编码体验。
VScode下载地址:Visual Studio Code - Code Editing. Redefined
首先需要安装Remote-SSH插件,安装完成后进入Remote Explorer,在ssh目录下新建一个ssh链接。
点击+号,此时会有弹窗提示输入SSH链接命令(具体请看下文),回车后选择要更新的SSH配置文件,默认选择第一个即可(如有需要也可新建一个SSH配置文件)。
开发机的链接命令可以在开发机控制台对应开发机"SSH连接"找到,复制登录命令到vscode的弹窗中然后回车,vscode就会开始链接InternStudio的服务器,记得此时切回去复制一下ssh的密码,待会会用到。
在新的弹窗中将SSH密码粘贴进去然后回车。随后会弹窗让选择远程终端的类型,选择Linux即可,因为我们的开发机是Linux系统。
首次连接会进行一些初始化设置,可能会比较慢,请耐心等待。后续打开文件夹时可能会再次需要输入密码,建议保持开发机的控制台开启以备不时之需。
当界面左下角显示远程连接地址SSH:ssh.intern-ai.org.cn时,说明连接成功。此时,我们可以像在本地使用VSCode一样,在开发机上进行各种操作。
连接成功后我们打开远程连接的vscode的extensions,在远程开发机(SSH:SSH.INTERN-AI.ORG.CN) 上安装好python的插件,后面python debug会用到。也可以一键把我们本地vscode的插件安装到开发机上。
3.2如何在Vscode中打开终端
可以有两种常用的方法打开终端:
- 单击VSCode页面底部状态栏中的“终端”图标(通常显示为两个图标一个X和一个!),可以快速打开VSCode的终端面板。
- 使用快捷键Ctrl+`(反引号,tab键上面那一个),也可以快速打开VSCode的终端面板。
TIPS:终端面板右上方的+可以新建一个TERMINAL。
Ch4 使用vscode连接开发机进行python debug
4.1 什么是debug?
当你刚开始学习Python编程时,可能会遇到代码不按预期运行的情况。这时,你就需要用到“debug”了。简单来说,“debug”就是能再程序中设置中断点并支持一行一行地运行代码,观测程序中变量的变化,然后找出并修正代码中的错误。而VSCode提供了一个非常方便的debug工具,可以帮助你更容易地找到和修复错误。
4.2 使用Vscode进行Python debug的流程
4.2.1 debug单个python文件
Step1.安装Python扩展
Step2.配置调试
Step3.设置断点
Step4.启动debug
Step5.查看变量
Step6.单步执行代码
Step7.修复错误并重新运行
通过遵循以上步骤,你可以使用VSCode的debug功能来更容易地找到和修复你Python代码中的错误。可以自己编写一个简单的python脚本,并尝试使用debug来更好的理解代码的运行逻辑。记住,debug是编程中非常重要的一部分,所以不要怕花时间在这上面。随着时间的推移,你会变得越来越擅长它!
4.2.2 不同的断点
表达式条件断点
触发计数条件断点
记录日志条件断点
4.3 在vscode使用命令行进行debug
很多时候我们要debug的不止是一个简单的python文件,而是很多参数,参数中不止会有简单的值还可能有错综复杂的文件关系,甚至debug一整个项目。这种情况下,直接使用命令行来发起debug会是一个更好的选择。
4.3.1 vscode设置
vscode支持通过remote的方法连接我们在命令行中发起的debug server。首先我们要配置一下debug的config。
还是点击VSCode侧边栏的“Run and Debug”(运行和调试),单击"create a lauch.json file"
选择debugger时选择python debuger。选择debug config时选择remote attach就行,随后会让我们选择debug server的地址,因为我们是在本地debug,所以全都保持默认直接回车就可以了,也就是我们的server地址为 localhost:5678。
配置完以后会打开配置的json文件,但这不是重点,可以关掉。这时我们会看到run and debug界面有变化,出现了debug选项。
4.3.2 debug命令行
4.3.3 使用别名简化命令
任务二
下面是一段调用书生浦语API实现将非结构化文本转化成结构化json的例子,其中有一个小bug会导致报错。请大家自行通过debug功能定位到报错原因并做修正。
注意:
提交代码时切记删除自己的api_key! 本段demo为了方便大家使用debug所以将api_key明文写在代码中,这是一种极其不可取的行为!
作业提交时需要有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)
Ch5 Python调用InternLM api
5.1 如何获取api key
前往书生浦语的API文档,登陆后点击API tokens。初次使用可能会需要先填写邀请码。
然后创建一个新的api token。
这里一定要注意,浦语的token只有刚创建的时候才能看到全文,后续没法再查看已经创建好的token,如果忘记需要重新创建,所以创建完了以后记得先复制保存到本地。
5.2 如何使用InternLM api
我们可以使用openai python sdk来调用InternLM api。注意在配置api key时,更推荐使用环境变量来配置以避免token泄露:
import os
api_key = os.getenv('api_key')
#api_key = "" #也可以明文写在代码内,不推荐
我们可以在终端中临时将token加入变量,此时该环境变量只在当前终端内有效。所以该种方法需要我们在该终端中运行我们的py脚本:
export api_key="填入你的api token"
python internlm_test.py
若是想永久加入环境变量,可以对 ~/.bashrc 文件中添加以下命令。
export api_key="填入你的api token"
保存后记得source ~/.bashrc。
问题1:发生异常: ModuleNotFoundError
解决:pip install openai
问题2:发生异常: JSONDecodeError
解决:主要解决json.loads(res)执行时,数据为空或提取不到的问题
评论