第四期书生大模型实战营 - 入门岛闯关作业2 - Python基础知识

147 阅读4分钟

项目地址

算力平台

1 Conda虚拟环境

  • 参见作业1

2 pip安装三方依赖包

  • pip install
pip install <somepackage> # 安装单个包,<somepackage>替换成你要安装的包名
pip install pandas numpy # 安装多个包,如panda和numpy
pip install numpy==2.0 # 指定版本安装
pip install numpy>=1.19,<2.0 # 使用版本范围安装
  • -r批量安装
pip install -r requirements.txt

2.1 安装到指定目录

  • 默认的share文件夹只读
  • 使用--target-t参数来指定安装目录
  • 使用安装在指定目录的python包,可以在python脚本开头临时动态地将该路径加入python环境变量中
import sys  
  
# 你要添加的目录路径  
your_directory = '/root/myenvs'  
  
# 检查该目录是否已经在 sys.path 中  
if your_directory not in sys.path:  
    # 将目录添加到 sys.path  
    sys.path.append(your_directory)  
  
# 现在你可以直接导入该目录中的模块了  
# 例如:import your_module

3 VScode中的Python Debug

3.1 断点

  • 普通断点:在代码行号左侧点击,添加断点。
  • 条件断点:在断点标记上右键,选择条件断点(conditional breakpoint)。VSCode 中常用的条件断点主要有三种类型:
    • 表达式(Expression):输入一个 Python 表达式,每次触发断点时运行该表达式,当表达式的值为 True 时 VS Code 会暂停执行。例如:x == 10
    • 触发计数(Hit Count):断点触发计数达到输入值时才会暂停运行。 image.png
    • 记录日志(Log Message):触发该断点时在 Debug Console 中输出指定信息,实际上就是 logpoint。
      • 需要输入要输出的信息,如果要用到表达式,可以使用 {} 将表达式括起来。例如,每次记录变量 i 的值可以写 x={i}。

image.png image.png

3.2 在vscode使用命令行进行debug

  • 很多时候我们要debug的不止是一个简单的python文件,而是很多参数,参数中不止会有简单的值还可能有错综复杂的文件关系,甚至debug一整个项目。这种情况下,直接使用命令行来发起debug会是一个更好的选择。
python -m debugpy --listen 5678 --wait-for-client ./myscript.py
  • ./myscript.py可以替换为我们想要debug的python文件,后面可以和直接在命令行中启动python一样跟上输入的参数。记得要先在想要debug的python文件打好断点并保存。

  • --wait-for-client参数会让我们的debug server在等客户端连入后才开始运行debug。在这就是要等到我们在run and debug界面启动debug。

  • 先在终端中发起debug server,然后再去vscode debug页面单击一下绿色箭头开启debug。

image.png

3.3 使用别名简化命令

  1. 在linux系统中,可以对 ~/.bashrc 文件中添加以下命令
alias pyd='python -m debugpy --wait-for-client --listen 5678'
  1. 执行source ~/.bashrc
  2. 之后使用 pyd 命令(你可以自己命名) 替代 python 就能在命令行中起debug了,之前的debug命令就变成了
pyd ./myscript.py

4 调用InternLM API

API文档

  • 在终端中临时将token加入变量,此时该环境变量只在当前终端内有效。所以该种方法需要我们在该终端中运行我们的py脚本。
export api_key="填入你的api token"
python internlm_test.py
  • 若是想永久加入环境变量,可以对 ~/.bashrc 文件中添加以下命令。
    • 保存后记得source ~/.bashrc。
export api_key="填入你的api token"

运行效果如下:

5 Python基础语法

Python基础速通教程

6 作业

6.1 任务一

LeeCode

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        if len(ransomNote) > len(magazine):
            return False
        return collections.Counter(ransomNote) <= collections.Counter(magazine)

image.png

image.png

6.2 任务二

  1. run python debug.py,通过报错栈锁定出错行数 image.png
  2. 添加断点,判定其为非法json image.png
  3. 添加try...catch逻辑控制输出结果

image.png

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)

content = """
书生浦语InternLM2.5是上海人工智能实验室于2024年7月推出的新一代大语言模型,提供1.8B、7B和20B三种参数版本,以适应不同需求。
该模型在复杂场景下的推理能力得到全面增强,支持1M超长上下文,能自主进行互联网搜索并整合信息。
"""
prompt = f"""
请帮我从以下``内的这段模型介绍文字中提取关于该模型的信息,要求包含模型名字、开发机构、提供参数版本、上下文长度四个内容,以json格式返回。
`{content}`
"""

res = internlm_gen(prompt,client)
# Check if res is a valid JSON
try:
    res_json = json.loads(res)
    print(res_json)
except json.JSONDecodeError:
    print("Invaild JSON")
    print(res)

6.3 任务三

image.png

image.png