(笔记+作业)第四期书生大模型实战营---L0G2000 Python 基础知识

学员闯关手册:https://aicarrier.feishu.cn/wiki/QtJnweAW1iFl8LkoMKGcsUS9nld

课程视频:https://www.bilibili.com/video/BV1u61jYSExg/?vd_source=4b532e65fd270475458385d242636159

课程文档:https://github.com/InternLM/Tutorial/tree/camp4/docs/L0/Python

关卡作业:https://github.com/InternLM/Tutorial/blob/camp4/docs/L0/Python/task.md

开发机平台:https://studio.intern-ai.org.cn/

开发机平台介绍:https://aicarrier.feishu.cn/wiki/GQ1Qwxb3UiQuewk8BVLcuyiEnHe

任务1、完成Leetcode 383, 笔记中提交代码与leetcode提交通过截图

https://leetcode.cn/problems/ransom-note/description/

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。

python 复制代码
class Solution:
    def canConstruct(self, ransomNote: str, magazine: str) -> bool:
        from collections import Counter
        
        # 统计 ransomNote 和 magazine 中每个字符的频率
        ransom_counter = Counter(ransomNote)
        magazine_counter = Counter(magazine)
        
        # 检查 ransomNote 中的字符是否可以由 magazine 提供
        for char, count in ransom_counter.items():
            if magazine_counter[char] < count:
                return False
        
        return True

代码解释:

Counter: 使用 collections.Counter 来统计 ransomNote 和 magazine 中每个字符的出现次数。

遍历 ransomNote: 遍历 ransomNote 中的字符及其数量,检查 magazine 是否有足够的字符数量。如果某个字符在 magazine 中的数量少于在 ransomNote 中的数量,则返回 False。

返回结果: 如果 magazine 中的所有字符都能满足 ransomNote 的需求,返回 True。

使用示例:

python 复制代码
solution = Solution()
print(solution.canConstruct("a", "b"))  # 输出: False
print(solution.canConstruct("aa", "ab"))  # 输出: False
print(solution.canConstruct("aa", "aab"))  # 输出: True

任务2、Vscode连接InternStudio debug笔记

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

注意:

提交代码时切记删除自己的api_key! 本段demo为了方便大家使用debug所以将api_key明文写在代码中,这是一种极其不可取的行为!

作业提交时需要有debug过程的图文笔记,以及修改过后的代码。

python 复制代码
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)

获取api key

前往书生浦语的API文档,登陆后点击API tokens。初次使用可能会需要先填写邀请码。

https://internlm.intern-ai.org.cn/api/document

使用api

python 复制代码
#./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)

debug过程

原始代码

python 复制代码
#./internlm_test.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)
bash 复制代码
pip install openai
export api_key="填入你的api token"
python internlm_test.py


原代码报错

打断点:

开始debug

定位报错点:似乎输出的内容不是json格式

python 复制代码
from openai import OpenAI
import json

def internlm_gen(prompt, client):
    """
    LLM生成函数
    Param prompt: prompt string
    Param client: OpenAI client
    """
    try:
        # 调用 API
        response = client.chat.completions.create(
            model="internlm2.5-latest",
            messages=[
                {"role": "user", "content": prompt},
            ],
            stream=False
        )
        # 检查 response 是否有内容
        if not response or 'choices' not in response or len(response['choices']) == 0:
            raise ValueError("API 返回结果无效或为空。")
        # 提取内容
        return response['choices'][0]['message']['content']
    except Exception as e:
        raise RuntimeError(f"调用 API 时发生错误: {e}")

# 设置 API 密钥
api_key = 'your_api_key_here'  # 替换为实际的 API 密钥
if not api_key or api_key.strip() == '':
    raise ValueError("API 密钥为空,请提供有效的密钥。")

# 初始化客户端
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}`
"""

try:
    # 调用生成函数
    res = internlm_gen(prompt, client)
    if not res.strip():  # 检查是否为空
        raise ValueError("API 返回了空的结果内容。")
    # 打印返回内容以供调试
    print("API 返回内容:", res)
    # 尝试解析 JSON
    res_json = json.loads(res)
    print("解析后的 JSON:", res_json)
except json.JSONDecodeError as e:
    print(f"解析 JSON 时发生错误: {e}")
    print(f"返回的内容为: {res}")
except Exception as e:
    print(f"发生错误: {e}")
相关推荐
小杨 学习日志2 分钟前
C高级学习笔记
c语言·笔记·学习
ad禥思妙想1 小时前
如何运行python脚本
开发语言·python
威威猫的栗子1 小时前
用 Python 与 Turtle 创作属于你的“冰墩墩”!
开发语言·python·turtle
IT古董1 小时前
【机器学习】超简明Python基础教程
开发语言·人工智能·python·机器学习
NightCyberpunk1 小时前
JavaScript学习笔记
javascript·笔记·学习
努力的小陈^O^1 小时前
docker学习笔记跟常用命令总结
java·笔记·docker·云原生
qq_q9922502772 小时前
django基于python 语言的酒店推荐系统
后端·python·django
小李L2 小时前
Python3 Flask 应用中使用阿里短信发送
后端·python·flask
好看资源平台2 小时前
动态网站数据爬取——Selenium的使用
爬虫·python
威威猫的栗子2 小时前
Python Turtle绘图:重现汤姆劈树的经典瞬间
开发语言·python