(笔记+作业)第四期书生大模型实战营---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}")
相关推荐
行云流水剑44 分钟前
【学习记录】如何使用 Python 提取 PDF 文件中的内容
python·学习·pdf
心扬1 小时前
python生成器
开发语言·python
明月醉窗台1 小时前
qt使用笔记二:main.cpp详解
数据库·笔记·qt
mouseliu2 小时前
python之二:docker部署项目
前端·python
Ombré_mi2 小时前
MCP客户端Client开发流程
大模型·uv·deepseek·mcp·mcp客户端
狂小虎2 小时前
亲测解决self.transform is not exist
python·深度学习
Python智慧行囊2 小时前
Python 中 Django 中间件:原理、方法与实战应用
python·中间件·架构·django·开发
让我上个超影吧2 小时前
黑马点评【基于redis实现共享session登录】
java·redis
深科文库2 小时前
构建 MCP 服务器:第 3 部分 — 添加提示
服务器·python·chatgpt·langchain·prompt·aigc·agi