书生浦语第六期 L1-G2000
基本要求:获取书生 apikey 成功调用文本生成截图,天气服务运行成功截图
进阶要求:完成2、3 章节所有内容并贴运行成功截图
1.获取书生浦语大模型对应的apikey;
首先进入书生浦语apikey网站:https://internlm.intern-ai.org.cn/api/tokens
之后按照下面步骤进行
得到对应的apikey之后保存,API Token 只能复制一次,生成后请妥善保管。
2.配置开发机
开发机配置:
-
镜像选择:Cuda11.7-conda
-
GPU 配置:10% A100
3.进入开发机之后配置环境
pip install openai
3.1文本生成
新建文件t2t.py
from openai import OpenAI
client = OpenAI(api_key="eyJ0eXxx", # 此处传token,不带Bearerbase_url="https://chat.intern-ai.org.cn/api/v1/",
)completion = client.chat.completions.create(model="intern-s1",messages=[{"role": "user","content": "写一个关于独角兽的睡前故事,一句话就够了。"}]
)print(completion.choices[0].message.content)
运行结果
3.2分析图像输入
图像输入为url
from openai import OpenAIclient = OpenAI(api_key="eyJ0eXxx", # 此处传token,不带Bearerbase_url="https://chat.intern-ai.org.cn/api/v1/",
)response = client.chat.completions.create(model="intern-s1",messages=[{"role": "user","content": [{"type": "text", "text": "图片里有什么?"},{"type": "image_url","image_url": {"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg",},},],}],extra_body={"thinking_mode": True},
)print(response.choices[0].message.content)
图像输入为本地图像
import base64
from openai import OpenAIclient = OpenAI(api_key="eyJ0eXxx", # 此处传token,不带Bearerbase_url="https://chat.intern-ai.org.cn/api/v1/",
)
# Function to encode the image
def encode_image(image_path):with open(image_path, "rb") as image_file:return base64.b64encode(image_file.read()).decode("utf-8")# Path to your image
image_path = "/root/share/intern.jpg"# Getting the Base64 string
base64_image = encode_image(image_path)completion = client.chat.completions.create(model="intern-s1",messages=[{"role": "user","content": [{ "type": "text", "text": "图片里有什么?" },{"type": "image_url","image_url": {"url": f"data:image/jpeg;base64,{base64_image}",},},],}],
)print(completion.choices[0].message.content)
运行结果
3.3模型实用工具
Openai格式调用
from openai import OpenAIclient = OpenAI( api_key="sk-lYQQ6Qxx,不带Bearerbase_url="https://chat.intern-ai.org.cn/api/v1/",
)
tools = [{"type": "function","function": {"name": "get_weather","description": "Get current temperature for a given location.","parameters": {"type": "object","properties": {"location": {"type": "string","description": "City and country e.g. Bogotá, Colombia"}},"required": ["location"],"additionalProperties": False},"strict": True}
}]completion = client.chat.completions.create(model="intern-s1",messages=[{"role": "user", "content": "What is the weather like in Paris today?"}],tools=tools
)print(completion.choices[0].message.tool_calls)
python原生调用
import requests
import json# API 配置
API_KEY = "eyJ0exxxxQ"
BASE_URL = "https://chat.intern-ai.org.cn/api/v1/"
ENDPOINT = f"{BASE_URL}chat/completions"# 定义天气查询工具
WEATHER_TOOLS = [{"type": "function","function": {"name": "get_weather","description": "获取指定城市或坐标的当前温度(摄氏度)","parameters": {"type": "object","properties": {"latitude": {"type": "number", "description": "纬度"},"longitude": {"type": "number", "description": "经度"}},"required": ["latitude", "longitude"],"additionalProperties": False},"strict": True}
}]def get_weather(latitude, longitude):"""获取指定坐标的天气信息Args:latitude: 纬度longitude: 经度Returns:当前温度(摄氏度)"""try:# 调用开放气象APIresponse = requests.get(f"https://api.open-meteo.com/v1/forecast?latitude={latitude}&longitude={longitude}¤t=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m")data = response.json()temperature = data['current']['temperature_2m']return f"{temperature}"except Exception as e:return f"获取天气信息时出错: {str(e)}"def make_api_request(messages, tools=None):"""发送API请求"""headers = {"Content-Type": "application/json","Authorization": f"Bearer {API_KEY}"}payload = {"model": "intern-s1","messages": messages,"temperature": 0.7}if tools:payload["tools"] = toolspayload["tool_choice"] = "auto"try:response = requests.post(ENDPOINT, headers=headers, json=payload, timeout=30)response.raise_for_status()return response.json()except requests.exceptions.RequestException as e:print(f"API请求失败: {e}")return Nonedef main():# 初始消息 - 巴黎的坐标messages = [{"role": "user", "content": "请查询当前北京的温度"}]print("🌤️ 正在查询天气...")# 第一轮API调用response = make_api_request(messages, WEATHER_TOOLS)if not response:returnassistant_message = response["choices"][0]["message"]# 检查工具调用if assistant_message.get("tool_calls"):print("🔧 执行工具调用...")print("tool_calls:",assistant_message.get("tool_calls"))messages.append(assistant_message)# 处理工具调用for tool_call in assistant_message["tool_calls"]:function_name = tool_call["function"]["name"]function_args = json.loads(tool_call["function"]["arguments"])tool_call_id = tool_call["id"]if function_name == "get_weather":latitude = function_args["latitude"]longitude = function_args["longitude"]weather_result = get_weather(latitude, longitude)print(f"温度查询结果: {weather_result}°C")# 添加工具结果tool_message = {"role": "tool", "content": weather_result,"tool_call_id": tool_call_id}messages.append(tool_message)# 第二轮API调用获取最终答案final_response = make_api_request(messages)if final_response:final_message = final_response["choices"][0]["message"]print(f"✅ 最终回答: {final_message['content']}")else:print(f"直接回答: {assistant_message.get('content', 'No content')}")if __name__ == "__main__":main()
3.4流式输出
stream=True
,打开流式传输,体验如同网页端 Intern 吐字的感觉。
from openai import OpenAIclient = OpenAI(api_key="eyxxxx",base_url="https://chat.intern-ai.org.cn/api/v1/",
)stream = client.chat.completions.create(model="intern-s1",messages=[{"role": "user","content": "Say '1 2 3 4 5 6 7' ten times fast.",},],stream=True,
)# 只打印逐字输出的内容
for chunk in stream:if chunk.choices[0].delta.content:print(chunk.choices[0].delta.content, end="", flush=True) # 逐字输出,不换行
3.5开启模型的思考模式
通过extra_body={"thinking_mode": True}
打开思考模式
from openai import OpenAI
client = OpenAI(api_key="eyxxA", # 此处传token,不带Bearerbase_url="https://chat.intern-ai.org.cn/api/v1/",
)completion = client.chat.completions.create(model="intern-s1",messages=[{"role": "user","content": "写一个关于独角兽的睡前故事,一句话就够了。"}],extra_body={"thinking_mode": True,},
)print(completion.choices[0].message)
3.6科学能力
数学方面
from getpass import getpass
from openai import OpenAIapi_key = getpass("请输入 API Key(输入不可见):")
client = OpenAI(api_key=api_key, # 此处传token,不带Bearerbase_url="https://chat.intern-ai.org.cn/api/v1/",
)response = client.chat.completions.create(model="intern-s1",messages=[{"role": "user","content": [{"type": "text", "text": "这道题选什么"},{"type": "image_url","image_url": {"url": "https://pic1.imgdb.cn/item/68d24759c5157e1a882b2505.jpg",},},],}],extra_body={"thinking_mode": True,},
)print(response.choices[0].message.content)
化学方面
from getpass import getpass
from openai import OpenAIapi_key = getpass("请输入 API Key(输入不可见):")
client = OpenAI(api_key=api_key, # 此处传token,不带Bearerbase_url="https://chat.intern-ai.org.cn/api/v1/",
)response = client.chat.completions.create(model="intern-s1",messages=[{"role": "user","content": [{"type": "text", "text": "从左到右,给出图中反应物的化学式"},{"type": "image_url","image_url": {"url": "https://pic1.imgdb.cn/item/68d23c82c5157e1a882ad47f.png",},},],}],extra_body={"thinking_mode": True,"temperature": 0.7,"top_p": 1.0,"top_k": 50,"min_p": 0.0,},
)print(response.choices[0].message.content)
4.MCP
什么是MCP?
MCP(Model Control Protocol)是一种专为 AI 设计的协议(类别 USB-C接口转换器),其核心作用是扩充 AI 的能力。通过 MCP,AI 可以:
-
获取外部数据
-
操作文件系统
-
调用各种服务接口
-
实现复杂的工作流程
通过本教程,您将掌握如何让 Intern-S1 API 突破传统对话限制,实现以下核心功能:
-
外部数据获取:连接并处理来自各种外部源的数据
-
文件系统操作:具备完整的文件创建、读取、修改和删除能力,实现一个命令行版本的 cursor。
这是书生浦语配置的一些MCP项目
4.1环境准备
git clone https://github.com/fak111/mcp_tutorial.git
cd mcp_tutorial
bash install.sh
4.2配置API
cd mcp-client
cp .env.example .env
在vscode模式下进入.env文件输入你的apikey
4.3天气服务使用
cd mcp-client
source .venv/bin/activate
uv run client_interns1.py ../mcp-server/weather/build/index.jsget_weather Beijing
4.4文件服务系统
文件服务启动 uv run client_fixed.py arg1 arg2
其中
-
arg1
:MCP 文件操作服务的路径 -
arg2
:运行文件操作的工作目录路径
cd mcp-client
source .venv/bin/activate
uv run client_fixed.py ../mcp-server/filesystem/dist/index.js ../