CSDIY:这是一个非科班学生的努力之路,从今天开始这个系列会长期更新,(最好做到日更),我会慢慢把自己目前对CS的努力逐一上传,帮助那些和我一样有着梦想的玩家取得胜利!!!
第一弹:Cpp零基础学习【30 DAYS 从0到1】
第二弹:Cpp刷题文档【LeetCode】
第三弹:Go开发入门【字节后端青训营】
第四弹:Cpp简单项目开发【黑马Rookie】
第五弹:数据结构绪论【数据结构与算法】
第六弹:Go工程实践【字节后端青训营】
第七弹:高质量编程和性能调优【字节后端青训营】
第八弹:Linux 基础知识【书生大模型训练营】
第九弹:Python 基础知识【书生大模型训练营】

第2关 L0G2000 Python 基础知识

闯关

任务一:LeetCode.383

链接:CSDN连接:LeetCode.383

任务二:JSON Debug 日记

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
    )
    print("Response from API:", response)  # 打印响应内容
    return response.choices[0].message.content

# debug 完成之后要删除
my_api_key = ''

client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=my_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)
1. 原本代码运行调试

使用launch.json调试,发现又异常
在这里插入图片描述
总结了一下就是 json 的值没办法提取,或者说提取的字符串没办法做 json 格式的解码。

并且出错的位置在代码第36行处,下面可以修改代码,增加输出,监控 json 提取。

2. Debug 1 运行调试
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
    )
    print("Response from API:", response)  # 打印响应内容
    return response.choices[0].message.content

# debug 完成之后要删除
my_api_key = ''

client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=my_api_key)

content = """
书生浦语InternLM2.5是上海人工智能实验室于2024年7月推出的新一代大语言模型,提供1.8B、7B和20B三种参数版本,以适应不同需求。
该模型在复杂场景下的推理能力得到全面增强,支持1M超长上下文,能自主进行互联网搜索并整合信息。
"""
prompt = f"""
请帮我从以下``内的这段模型介绍文字中提取关于该模型的信息,要求包含模型名字、开发机构、提供参数版本、上下文长度四个内容,以json格式返回。
`{content}`
"""

# debug 1.
res = internlm_gen(prompt,client)
try:
    res_json = json.loads(res)
    print(res_json)
except json.JSONDecodeError:
    print("返回的内容不是有效的JSON格式。")

在这里插入图片描述

可以看到返回结果,确实是因为返回内容不符合 json 的解码格式导致的,下面尝试使用正则化表达式来进行提取。可以先导入python的正则包 import re

3. Debug 2 运行调试

注意到debug 1的输出中的json字符串的格式大致为```json ```的格式,所以正则表达式可以写做:

re.search(r'```json\n(.*?)\n```', res, re.DOTALL)
  • json:匹配字符串中的json`这三个字符。
  • \n:匹配一个换行符。
  • (.*?):使用非贪婪模式匹配任意数量的任意字符,直到遇到下一个指定的模式。这里的圆括号表示捕获这部分匹配的文本,以便后续可以提取出来。
  • \n:再次匹配一个换行符。
  • :匹配字符串中的这三个字符。
  • re.DOTALL是一个标志,它允许.字符匹配包括换行符在内的任何字符。
  • 第一个 ```标记JSON字符串的开始。
  • 中间的任何字符(包括换行符,因为使用了re.DOTALL标志)都会被 .*? 匹配,这是一个非贪婪匹配,它会尽可能少地匹配字符,直到遇到下一个 ```。
  • 最后一个 ```标记JSON字符串的结束。
from openai import OpenAI
import json
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
    )
    print("Response from API:", response)  # 打印响应内容
    return response.choices[0].message.content

# debug 完成之后要删除
my_api_key = ''

client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=my_api_key)

content = """
书生浦语InternLM2.5是上海人工智能实验室于2024年7月推出的新一代大语言模型,提供1.8B、7B和20B三种参数版本,以适应不同需求。
该模型在复杂场景下的推理能力得到全面增强,支持1M超长上下文,能自主进行互联网搜索并整合信息。
"""
prompt = f"""
请帮我从以下``内的这段模型介绍文字中提取关于该模型的信息,要求包含模型名字、开发机构、提供参数版本、上下文长度四个内容,以json格式返回。
`{content}`
"""

# debug 2.
# 使用正则表达式提取JSON字符串
res = internlm_gen(prompt,client)
json_str_match = re.search(r'```json\n(.*?)\n```', res, re.DOTALL)
if json_str_match:
    json_str = json_str_match.group(1).strip()  # 获取匹配的JSON字符串并去除前后空白
    try:
        res_json = json.loads(json_str)
        print(res_json)
    except json.JSONDecodeError:
        print("返回的内容不是有效的JSON格式。")
else:
    print("未能提取到JSON字符串。")

在这里插入图片描述

这时候可以看到确实能够返回相关的内容了,下面进行最后的调整,去除调试阶段的代码

4. 最终代码运行调试
from openai import OpenAI
import json
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
    )
    print("Response from API:", response)  # 打印响应内容
    return response.choices[0].message.content

# debug 完成之后要删除
my_api_key = ''

client = OpenAI(base_url="https://internlm-chat.intern-ai.org.cn/puyu/api/v1/",api_key=my_api_key)

content = """
书生浦语InternLM2.5是上海人工智能实验室于2024年7月推出的新一代大语言模型,提供1.8B、7B和20B三种参数版本,以适应不同需求。
该模型在复杂场景下的推理能力得到全面增强,支持1M超长上下文,能自主进行互联网搜索并整合信息。
"""
prompt = f"""
请帮我从以下``内的这段模型介绍文字中提取关于该模型的信息,要求包含模型名字、开发机构、提供参数版本、上下文长度四个内容,以json格式返回。
`{content}`
"""

# 最终代码:
res = internlm_gen(prompt,client)
res_json = re.search(r'```json\n(.*?)\n```', res, re.DOTALL)
res_json = res_json.group(1).strip()  # 获取匹配的JSON字符串并去除前后空白
print(res_json)

在这里插入图片描述

可以看到成功提取了json对象,输出也符合格式。

至此调试完成,正确代码即为最终代码。

任务三:pip 安装

1. 连接开发机

第一步,在本地VScode连接远程开发机,这些操作在前面的课程有所涉及

在这里插入图片描述

2. 下载numpy包

终端键入指令:pip install -t /root/myenvs numpy

在这里插入图片描述

可以看到成功安装完成,输出的几行红字只是因为其他依赖可能导致不兼容。这是小问题。

3. 新建 .py 文件

linux命令 touch test.py 新建测试文件

在这里插入图片描述

查看文件夹 可以看到新建完成

在这里插入图片描述

4. 引入包并运行

import numpy,再点击运行

也可以看到没有任何报错。运行成功,任务完成。

在这里插入图片描述

碎碎念:东西还挺多的,但是我很感兴趣。也感谢有一个学习机会,感谢开源。虽然折腾,但是感觉进入心流的 feel 还是很爽的。希望明天继续!(ps:今天满课…下午的数学实验也没怎么听,纯在弄,中午也耗了大半小时),还是感谢坚持,完成所有任务的时候还是有成就感的。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐