241119学习日记——[CSDIY] [InternStudio] 大模型训练营 [08]
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.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调试,发现又非常
https://i-blog.csdnimg.cn/direct/deb89aa853fd42299682701597686ba4.png#pic_center
总结了一下就是 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.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格式。")
https://i-blog.csdnimg.cn/direct/93ad351841e0445ab5e50f2cab97c535.png#pic_center
可以看到返回结果,确实是因为返回内容不符合 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 OpenAIimport jsonimport redef 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.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字符串。") https://i-blog.csdnimg.cn/direct/a2b378cdb6f0463bab96c1e8dd2e7892.png#pic_center
这时候可以看到确实能够返回相干的内容了,下面进行末了的调整,去除调试阶段的代码
4. 最终代码运行调试
from openai import OpenAIimport jsonimport redef 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.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) https://i-blog.csdnimg.cn/direct/01a91ca9cd794e2dab55bb365e77977f.png#pic_center
可以看到乐成提取了json对象,输出也符及格式。
至此调试完成,精确代码即为最终代码。
任务三:pip 安装
1. 连接开发机
第一步,在本地VScode连接长途开发机,这些操作在前面的课程有所涉及
https://i-blog.csdnimg.cn/direct/b6772a748bac41aba30f11768aa7ed83.png#pic_center
2. 下载numpy包
终端键入指令:pip install -t /root/myenvs numpy
https://i-blog.csdnimg.cn/direct/0f9de736c64d4f63a3153724cabd22a3.png#pic_center
可以看到乐成安装完成,输出的几行红字只是因为其他依赖可能导致不兼容。这是小问题。
3. 新建 .py 文件
linux命令 touch test.py 新建测试文件
https://i-blog.csdnimg.cn/direct/1d5dc677aec641d1ac2ca2f98d4cb1f7.png#pic_center
查看文件夹 可以看到新建完成
https://i-blog.csdnimg.cn/direct/f9d9171ec1144f7bae50ba7cc5216dfa.png#pic_center
4. 引入包并运行
import numpy,再点击运行
也可以看到没有任何报错。运行乐成,任务完成。
https://i-blog.csdnimg.cn/direct/b4a172f5484846d19a4e15efc3455a0a.png#pic_center
碎碎念:东西还挺多的,但是我很感爱好。也感谢有一个学习机会,感谢开源。虽然折腾,但是感觉进入心流的 feel 还是很爽的。盼望明天继承!(ps:今天满课…下战书的数学实验也没怎么听,纯在弄,中午也耗了泰半小时),还是感谢对峙,完成所有任务的时候还是有成绩感的。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]