书生大模型实战营第四期-入门岛-2. Python关卡任务

书生大模型实战营第四期-入门岛-2. Python关卡任务

书生大模型实战营-第四期

闯关手册:https://github.com/InternLM/Tutorial/blob/camp4/docs/L0/Python/task.md

任务类型任务内容预计耗时
闯关任务Leetcode 383(笔记中提交代码与leetcode提交通过截图)20mins
闯关任务Vscode连接InternStudio debug笔记10mins
可选任务pip安装到指定目录10mins

任务一

任务内容

完成Leetcode 383,笔记中提交代码与leetcode提交通过截图。

作业过程

结果:

leetcode-383

代码:

from collections import Counter

class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        # 统计每个字符出现的次数
        ransom_count = Counter(ransomNote)
        magazine_count = Counter(magazine)

        # 遍历 ransomNote 中的每个字符,检查 magazine 中是否有足够的供应
        for char, count in ransom_count.items():
            if magazine_count[char] < count:
                return False
            
        return True

任务二

任务内容

下面是一段调用书生浦语API实现将非结构化文本转化成结构化json的例子,其中有一个小bug会导致报错。请大家自行通过debug功能定位到报错原因并做修正。

TIPS:

  • 打断点查看下LLM返回的文本结果。造成本bug的原因与LLM的输出有关,学有余力的同学可以尝试修正这个BUG。
  • 作业提交时需要有debug过程的图文笔记,必须要有打断点在debug中看到res变量的值的截图。
  • 避免将api_key明文写在程序中!!! 本段demo为了方便大家使用debug所以将api_key明文写在代码中,这是一种极其不可取的行为!

作业过程

首先在开发机中运行打断点并运行任务代码,查看LLM返回内容:

from openai import OpenAI
import json
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)
res_json = json.loads(res)
print(res_json)

断点查看LLM返回结果res,为markdown格式内容:

```json
{
  "模型名字": "书生浦语InternLM2.5",
  "开发机构": "上海人工智能实验室",
  "提供参数版本": [1.8B, 7B, 20B],
  "上下文长度": "1M"
}

debug界面打印的res变量值:

L0-python-debug-res
上述res返回markdown格式的一段json内容,通过正则表达式去除markdown语法部分,提取其中json格式字符串。修改后的代码如下:

from openai import OpenAI
import json
import os
import re

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)
# print(res)
res_string = re.search(r'```json\n(.*?)\n```', res, re.DOTALL).group(1)
# print(res_string)
res_json = json.loads(res_string)
print(res_json)

运行结果:

(myenv) root@intern-studio-50014188:~/camp4/L0/Python# python task2_xg.py 
{'model_name': '书生浦语InternLM2.5', 'developer': '上海人工智能实验室', 'parameter_versions': ['1.8B', '7B', '20B'], 'max_context_length': '1M'}

任务三(可选)

任务内容

使用VScode连接开发机后使用pip install -t命令安装一个numpy到看开发机/root/myenvs目录下,并成功在一个新建的python文件中引用。

作业过程

使用pip的时候可以使用--target-t参数来指定安装目录,此时pip会将你需要安装的包安装到你指定的目录下。

pip install numpy -t /root/myenvs 

要引用指定目录的python包numpy,python脚本开头临时动态地将该路径加入python环境变量中去。以下为代码示例:

import sys

numpy_dir = '/root/myenvs'

if numpy_dir not in sys.path:
    sys.path.append(numpy_dir)

import numpy as np

print("-"*30)

# 创建一个一维数组
arr = np.array([1, 2, 3, 4, 5])

# 打印数组
print("一维数组:\n", arr)

# 数组的基本操作
arr_sum = np.sum(arr)  # 求和
arr_mean = np.mean(arr)  # 求平均值
arr_max = np.max(arr)  # 最大值
arr_min = np.min(arr)  # 最小值

print("数组求和:", arr_sum)
print("数组平均值:", arr_mean)
print("数组最大值:", arr_max)
print("数组最小值:", arr_min)

print("-"*30)

# 创建二维数组
matrix = np.array([[1, 2], [3, 4]])

# 打印数组
print("二维数组:\n", matrix)

# 矩阵加法
matrix_add = matrix + 5  # 每个元素加5
print("矩阵加法:\n", matrix_add)

# 矩阵乘法
matrix_mult = matrix @ matrix  # 矩阵乘法
print("矩阵乘法:\n", matrix_mult)

print("-"*30)

# 创建一个从0到10的等差数列
arr_range = np.arange(0, 10, 2)
print("等差数列:", arr_range)

# 创建一个指定形状的全零数组
zeros_array = np.zeros((3, 3))  # 创建一个3x3的全零数组
print("全零数组:\n", zeros_array)

# 创建一个指定形状的全一数组
ones_array = np.ones((2, 2))  # 创建一个2x2的全一数组
print("全一数组:\n", ones_array)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lldhsds

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值