学员闯关手册: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}")