任务概览
| 任务类型 | 任务内容 | 预计耗时 |
|---|---|---|
| 闯关任务 | Leetcode 383(笔记中提交代码与leetcode提交通过截图) | 20mins |
| 闯关任务 | Vscode连接InternStudio debug笔记 | 10mins |
| 可选任务 | pip安装到指定目录 | 10mins |
作业总共分为三个任务,两个闯关任务均完成视作闯关成功。
提交地址:aicarrier.feishu.cn/share/base/…
任务一
完成Leetcode 383, 笔记中提交代码与leetcode提交通过截图
代码提交:
class Solution {
public:
// Similar to 0242. Valid Anagram
bool canConstruct(string ransomNote, string magazine) {
vector<int> count(26);
for (const char c : magazine)
++count[c - 'a'];
for (const char c : ransomNote) {
if (count[c - 'a'] == 0)
return false;
--count[c - 'a'];
}
return true;
}
};
leetcode提交通过截图
任务二
下面是一段调用书生浦语API实现将非结构化文本转化成结构化json的例子,其中有一个小bug会导致报错。请大家自行通过debug功能定位到报错原因。
TIPS:
- 打断点查看下LLM返回的文本结果。造成本bug的原因与LLM的输出有关,学有余力的同学可以尝试修正这个BUG。
- 作业提交时需要有debug过程的图文笔记,必须要有打断点在debug中看到
res变量的值的截图。 - 避免将api_key明文写在程序中!!! 本段demo为了方便大家使用debug所以将api_key明文写在代码中,这是一种极其不可取的行为!
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)
debug 提交
在 Res 处设置断点,可以运行,正常显示变量
点击下一步的时候报错,应该是没有加载 openai 的包,于是加载了
重新运行,继续报错,应该 API 的值为空造成的
输入 API 的值后,第一步可以运行了
继续下一步的时候,又报错了,这个错误表明程序尝试将一个无效的 JSON 数据(可能是空字符串或非 JSON 格式的数据)传递给 json.loads() 方法进行解析,后多次尝试,还是没有成功
在 deepseek 的帮助下,完成修改: 修改说明:
-
prompt优化:明确要求只返回标准JSON对象,并指定字段名称和值类型
-
异常处理:
- 添加API调用时的异常捕获
- 增加JSON解析失败时的错误提示
-
响应预处理:移除可能存在的```json标记
-
输出优化:使用json.dumps美化输出,支持中文显示
-
参数校验:
- 确保填写有效的API密钥
- 添加空响应检查 修改后代码:
from openai import OpenAI
import json
def internlm_gen(prompt, client):
'''
LLM生成函数
Param prompt: prompt string
Param client: OpenAI client
'''
try:
response = client.chat.completions.create(
model="internlm2.5-latest",
messages=[{"role": "user", "content": prompt}],
stream=False
)
return response.choices[0].message.content
except Exception as e:
print(f"API调用失败: {str(e)}")
return None
api_key = '***' # 确保填写有效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更严格约束输出格式
prompt = f"""
请严格从以下``内的文本中提取模型信息,要求:
1. 只返回包含以下四个字段的标准JSON对象
2. 字段名称分别为:模型名字、开发机构、提供参数版本、上下文长度
3. 确保值为字符串类型
4. 不要包含任何JSON之外的文本或格式符号
需要提取的文本:
`{content}`
"""
res = internlm_gen(prompt, client)
if res:
try:
# 预处理可能存在的格式符号
cleaned_res = res.replace('```json', '').replace('```', '').strip()
res_json = json.loads(cleaned_res)
print(json.dumps(res_json, indent=2, ensure_ascii=False))
except json.JSONDecodeError:
print(f"JSON解析失败,原始响应内容:\n{res}")
else:
print("请求失败,请检查API配置")
输出正常啦!