using ED = array< int , 2 >; using GRAPH = vector<vector<ED>>; GRAPH tr (n + 1) ; GRAPH rtr (n + 1) ; ffp (i, 1 , m) { int u (q_), v (q_), w (q_) ; tr[u]. push_back ({ w,v }); //tr是树边,本人的习惯 rtr[v]. push_back ({ w,u }); //rtr是反图 } auto dij = [&]( int st, GRAPH& gp)->ll { priority_queue<ED, vector<ED>, greater<ED>>dui; vector< int > dis (n + 1 , iINF); dis[st] = 0 ; dui. push ({ 0 ,st }); while (dui. size ()) { auto [w, now] = dui. top (); dui. pop (); if (dis[now] < w) continue ; for ( auto [nxtw, nxt] : gp[now]) { if (nxtw + dis[now] >= dis[nxt]) continue ; dis[nxt] = nxtw + dis[now]; dui. push ({ nxtw + dis[now],nxt }); } } return accumulate (dis. begin () + 1 , dis. end (), 0ll );
类型别名:让代码更易读,明确数据的字节长度 // 1. 定义WAV的三个核心数据块结构(对应格式规范) // RIFF块:文件整体标识 struct chunk1 { char ChunkID[ 4 ]; // 块标识,固定为"RIFF" u32 ChunkSize; // 从该字段到文件末尾的字节数(总字节数-8) char Format[ 4 ]; // 格式类型,固定为"WAVE" }RIFF; // fmt块:音频参数配置 struct chunk2 { char ChunkID[ 4 ]; // 块标识,固定为"fmt "(注意末尾有空格) u16 Tag; // 编码格式,1代表PCM(无压缩) u32 ChunkSize; // fmt块的大小,PCM格式固定为16 u16 Chnnels; // 声道数:1=单声道,2=立体声 u32 SampleRate; // 采样率 u32 ByteRate; // 每秒数据量 = 采样率×声道数×位深/8 u16 BloclAlign; // 每个采样的总字节数 = 声道数×位深/8 u16 BitsperSample; // 每个采样的位深:16位(常见) }Fmt; // data块:音频数据存储区 struct chunk3 { char DataId[ 4 ]; // 块标识,固定为"data" u32 DataSize; // 音频数据的总字节数 }Data; signed main ( int argc, char* argv[]) { // 打开文件:"wb"表示以二进制模式写入(关键!文件本质是二进制) FILE *fp = fopen ( "test.wav" , "wb" ); // 计算总采样数:采样率×时长(5秒×44100=220500个样本) u32 NumSamples = HZ * DURATION; // 2. 填充RIFF块并写入文件 memcpy (RIFF.ChunkID, "RIFF" , 4 ); // 写入块标识 RIFF.ChunkSize = NumSamples* sizeof (u16)+ 36 ; // 计算块大小 memcpy (RIFF.Format, "WAVE" , 4 ); // 声明为WAVE格式 fwrite (RIFF.ChunkID, sizeof ( char ), 4 ,fp); // 写入4个字符的ChunkID fwrite (&RIFF.ChunkSize, sizeof (u32), 1 ,fp); // 写入4字节的ChunkSize fwrite (RIFF.Format, sizeof ( char ), 4 ,fp); // 写入4个字符的Format // 3. 填充fmt块并写入文件 memcpy (Fmt.ChunkID, "fmt " , 4 );huluzhibo.cn Fmt.ChunkSize = 16 ; // PCM格式下fmt块固定16字节 Fmt.Tag = 1 ; // PCM无压缩编码 Fmt.Chnnels = 1 ; // 单声道 Fmt.SampleRate = HZ; // 44100Hz采样率 Fmt.ByteRate = HZ* sizeof (u16); // 每秒字节数:44100×2=88200 Fmt.BloclAlign = Fmt.Chnnels * sizeof (u16); // 每个采样2字节 Fmt.BitsperSample = 16 ; // 16位位深 // 按顺序写入fmt块的所有参数(严格遵循格式规范) fwrite (&Fmt.ChunkID, sizeof ( char ), 4 ,fp); fwrite (&Fmt.ChunkSize, sizeof (u32), 1 ,fp); fwrite (&Fmt.Tag, sizeof (u16), 1 ,fp); fwrite (&Fmt.Chnnels, sizeof (u16), 1 ,fp); fwrite (&Fmt.SampleRate, sizeof (u32), 1 ,fp); fwrite (&Fmt.ByteRate, sizeof (u32), 1 ,fp); fwrite (&Fmt.BloclAlign, sizeof (u16), 1 ,fp); fwrite (&Fmt.BitsperSample, sizeof (u16), 1 ,fp); // 4. 填充data块并写入文件 memcpy (Data.DataId, "data" , 4 ); Data.DataSize = NumSamples * sizeof (u16); // 音频数据总字节数 fwrite (&Data.DataId, sizeof ( char ), 4 ,fp); fwrite (&Data.DataSize, sizeof (u32), 1 ,fp); // 5. 生成音频数据并写入(440Hz正弦波,标准A调) for ( int i= 0 ;i<NumSamples;i++){ f32 t = (f32)i/HZ; // 计算当前时间点(秒) // 生成440Hz正弦波的数值(声音的本质是振动,正弦波模拟声波) f32 y = sinf (t* 440.0f * 2.0f * 3.1415926f ); // 转换为16位整数(适配16位位深的音频) i16 sample = (i16)(y*INT16_MAX); // 写入单个音频样本(2字节)
curl -fsSL https://claude.ai/install.sh | bash ## Claude Code 配置 GLM Coding Plan curl -O "https://cdn.bigmodel.cn/install/claude_code_env.sh" && bash ./claude_code_env.sh ## 手动配置Claude-code export ANTHROPIC_BASE_URL= "https://codeyy.top" export ANTHROPIC_AUTH_TOKEN= "my_ANTHROPIC_AUTH_TOKEN" export ANTHROPIC_BASE_URL= " https://open.bigmodel.cn/api/anthropic" ttkqol.cn
from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser #这里是你的千问apikey os.environ[ "DASHSCOPE_API_KEY" ] = "apikey" model = ChatTongyi(model= "qwen-plus" ) prompt = ChatPromptTemplate.from_messages([ ( "system" , "你是一个精通{topic}的资深技术专家。" ), ( "user" , "请用三句话解释一下什么是{concept}。" ) ]) output_parser = StrOutputParser() chain = prompt | model | output_parser #文本输出 response = chain.invoke({ "topic" : "Python" , "concept" : "列表" }) print (response) #分割 print ( "=" * 30 ) #流式输出 for chunk in chain.stream({ "topic" : "人工智能" , "concept" : "神经网络" }):
# 定义要请求的URL url = "https://" # 发送GET请求 response = requests.get(url) # 检查HTTP状态码 if response.status_code == 200: print(f"请求成功!状态码: {response.status_code}") # 打印响应内容的开头部分 print("响应内容前100个字符:", response.text[:100]) else: print(f"请求失败!状态码: {response.status_code}")
使用 PythonRun 在线运行这段代码,结果如下:
请求成功!状态码: 200 响应内容前100个字符: <!doctype html><html><head><title>Example Domain</title><meta name="viewport" content="wid
from
langchain.prompts.example_selector
import
LengthBasedExampleSelectorfrom
langchain_core.output_parsers
import
StrOutputParserfrom
langchain_openai
import
ChatOpenAIimport
os zhiboapp.com.cnfrom
dotenv
import
load_dotenv# 定义反义词任务的示例数据集(few-shot examples)# 每个示例包含一个输入词(input)和对应的反义词(output)examples
=
[
{
"input"
:
"开心"
,
"output"
:
"伤心"
},
{
"input"
:
"高"
,
"output"
:
"矮"
},
{
"input"
:
"精力充沛"
,
"output"
:
"没精打采"
},
{
"input"
:
"粗"
,
"output"
:
"细"
},]# 定义单个示例的格式模板# 使用 {input} 和 {output} 作为占位符,用于后续填充具体值example_prompt
=
PromptTemplate(
input_variables
=
[
"input"
,
"output"
],
# 声明模板中使用的变量名
template
=
"Input: {input}\nOutput: {output}"
,
# 示例的文本格式)# 创建一个基于长度的示例选择器(LengthBasedExampleSelector)# 作用:根据输入提示的总长度动态选择最合适的示例数量,避免超出模型上下文限制example_selector
=
LengthBasedExampleSelector(
examples
=
examples,
# 提供所有候选示例
example_prompt
=
example_prompt,
# 用于格式化每个示例的模板
max_length
=
25
,
# 设定整个 prompt(含前缀、示例、后缀)的最大 token 长度(此处为字符数近似)
# 注意:LengthBasedExampleSelector 默认使用 len(text) 计算长度(非精确 token 数),适用于简单场景)# 构建动态少样本提示模板(FewShotPromptTemplate)# 它会根据输入内容的长度,自动从 examples 中选择合适数量的示例插入到 prompt 中dynamic_prompt
=
FewShotPromptTemplate(
example_selector
=
example_selector,
# 使用上面定义的动态选择器(而非固定示例列表)
example_prompt
=
example_prompt,
# 单个示例的格式
prefix
=
"给出每个输入的反义词"
,
# 提示的开头部分(任务指令)
suffix
=
"Input: {adjective}\nOutput:"
,
# 提示的结尾部分,包含待预测的输入占位符
input_variables
=
[
"adjective"
],
# 声明最终用户输入的变量名(与 suffix 中的 {adjective} 对应))# === 测试 1:输入较短,应选择多个示例 ===print
(
"【测试1】输入较短,选择多个示例:"
)print
(dynamic_prompt.
format
(adjective
=
"big"
))print
(
'ttzb.tw.cn------------'
)# === 测试 2:输入很长,应只选择少量或一个示例以控制总长度 ===long_string
=
"big and huge and massive and large and gigantic and tall and much much much much much bigger than everything else"print
(
"【测试2】输入很长,仅选择一个示例:"
)print
(dynamic_prompt.
format
(adjective
=
long_string))print
(
'------------'
)# === 测试 3:动态添加新示例 ===# 向示例选择器中新增一个示例("胖" -> "瘦")new_example
=
{
"input"
:
"胖"
,
"output"
:
"瘦"
}dynamic_prompt.example_selector.add_example(new_example)print
(
"【测试3】添加新示例后,查询'热情':"
)print
(dynamic_prompt.
format
(adjective
=
"热情"
))print
(
'------------'
)# === 配置并调用 DeepSeek 大语言模型 ===llm
=
ChatOpenAI(
api_key
=
os.getenv(
"DEEPSEEK_API_KEY"
),
base_url
=
os.getenv(
"DEEP_URL"
),
# Deepseek 的 API 基础地址
model
=
"deepseek-v3:671b"
,
# Deepseek 对话模型(可选:deepseek-chat-pro 等高级模型)
temperature
=
0.7
,
# 温度参数(0-1,越低越稳定)
max_tokens
=
1024
# 最大生成 tokens remenzhibo.com)# 创建字符串输出解析器,用于将模型返回的 AIMessage 转换为纯文本output_parser
=
StrOutputParser()# 构建处理链(Chain):prompt → LLM → output parser# 使用 LangChain 的管道操作符 `|` 连接各组件chain
=
dynamic_prompt | llm | output_parser# 调用链,传入输入变量 {"adjective": "热情"}# 注意:chain.invoke() 内部已包含 llm 调用和 output_parser 解析,无需再手动调用 output_parsermessage
=
chain.invoke({
"adjective"
:
"热情"
})nbczhibo.com# ⚠️ 注意:上一行 `chain.invoke()` 已经返回了字符串(因为最后是 StrOutputParser)# 所以下面这行是多余的,甚至会导致错误(因为 message 已是 str,不能再次 invoke)# result = output_parser.invoke(message) # ❌ 错误:message 是 str,不是 AIMessage# 正确做法:直接使用 message 作为结果result
=
message ftzhibo.comprint
(
'###############'
)print
(
"【模型输出】"
)print
(result) |
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 |
【测试
1
】输入较短,选择多个示例:给出每个输入的反义词Input
: 开心Output: 伤心Input
: 高Output: 矮Input
: 精力充沛Output: 没精打采Input
: 粗Output: 细Input
: bigOutput:-
-
-
-
-
-
-
-
-
-
-
-【测试
2
】输入很长,仅选择一个示例:给出每个输入的反义词Input
: 开心Output: 伤心Input
: big
and
huge
and
massive
and
large
and
gigantic
and
tall
and
much much much much much bigger than everything
elseOutput:livesoccerzb.cn-
-
-
-
-
-
-
-
-
-
-
-【测试
3
】添加新示例后,查询
'热情'
:给出每个输入的反义词Input
: 开心Output: 伤心Input
: 高Output: 矮Input
: 精力充沛Output: 没精打采Input
: 粗Output: 细Input
: 胖Output: 瘦Input
: 热情 |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70048957/viewspace-3109002/ ,如需转载,请注明出处,否则将追究法律责任。