program.cs
· 6.4 KiB · C#
Sin formato
using Aiursoft.GptClient;
using Aiursoft.GptClient.Services;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespace Test
{
public abstract class Program
{
private static readonly string PromptGetIdea =
"""
夏日的农家院里,一只芦花鸡突然扑棱着翅膀冲向墙角,尖喙如闪电般啄起一条扭动的蚂蟥。蚂蟥在鸡嘴里挣扎蜷曲,转眼就被囫囵吞下。
围观的小孩瞪大眼睛,这吸血的蚂蟥进了鸡肚子,不得把鸡肠子钻个窟窿?
这可不是奶奶瞎说,蚂蟥钻人体的案例确实存在,曾有位老汉咳血多日,最后在医院里从气管里夹出活水蛭;南方地区也报告过游泳时水蛭钻入人体黏膜的病例;湖北甚至有人被寄生数月,虚弱得干不了重活。
这些吸血的蚂蟥在鼻腔、咽部这些潮湿的黏膜部位寄生,靠吸食血液能活个把月。
那么,鸡吃百虫,连毒虫都不在话下,那鸡如果生吞了吸血水蛭,会不会把鸡肚子钻破?人类为什么没有这么强大的消化道呢?
明明IPv6取之不尽,但为啥运营商却不愿给你“固定地址”?
IPv6作为下一代互联网协议,其地址空间达到了惊人的2^128个,号称"可以为地球上每一粒沙子分配一个IP地址"。
然而,许多用户发现,尽管IPv6地址资源如此丰富,大多数互联网服务提供商(ISP)仍然不愿意为用户分配固定的IPv6地址。这是为什么呢?
看《西游记》连续剧的时候就有很多的疑问,没有细想,觉得大概作者考虑不周的漏洞。多了解一下后,很多看似漏洞的地方也许是有它的道理,甚至是作者故意安排的。
读到孙悟空拜师学艺,因为向师兄们炫耀七十二变,把自己变成一棵松树,被菩提师祖赶走了。似乎并不是什么严重的错误,不至于此吧?经过一番查询,各种说法都有,还有说菩提师祖就是如来佛变得,要把猴子变成工具猴。
这里抛开种种神仙斗法,阴谋论和算计,为什么孙悟空变棵松树,师傅就要赶他走?
你有没有注意过,当夜幕降临,草原上的狮子蜷缩在树荫下,河边的鳄鱼半埋在泥水里,它们睡觉的姿势几乎都是“贴地而卧”?
而我们人类,却习惯在柔软的床上,仰面而眠,甚至还有枕头和被子的讲究。是什么让人类在睡眠时,选择了与绝大多数动物截然不同的姿态?是生理的巧合,还是亿万年进化的秘密?今晚,就让我们翻开这个习惯背后的神秘篇章,一探人类“仰睡”的真正原因。
为什么大部分动物是趴着睡,而人却通常仰着睡?
你有没有注意过,每次坐飞机,总有一条铁律:登机口一到时间,甚至还没起飞,闸门就“啪”地关上,晚几分钟就再也进不去了。
而坐火车呢?哪怕你慢悠悠地走到站台,列车马上就要出发,工作人员似乎总会给你留几分钟,甚至整列车都等你上车。为什么同样是交通工具,规则却大相径庭?这背后,到底隐藏着怎样你意想不到的逻辑和秘密?今天,我们就来揭开这道看似简单却耐人寻味的谜题。
为什么大部分动物是趴着睡,而人却通常仰着睡?
上面这几个问题,都非常有趣,对吧?
还有什么这种,生活中非常巧妙的矛盾,大家好像都习以为常,但一时半会儿又说不出来所以然,又都知道的论题,只是刚好过去没有仔细思考过。想一个让人对话题非常吸引,又好奇答案,还能结合例如西游记这种集体文化和社会现象就更好了。
现在你来扮演以为生活观察家,发散思维,充分想象,只需要想一个这样有趣的话题就可以了。现在给出你想到的这个话题。
""";
private static readonly string PromptGetIntroduction =
"""
{0}
这个问题非常有趣,我觉得让你帮助我写成一篇小作文。
但还别立刻开始。我想先写个有趣的引言。引言的作用是讨论题目,引出读者好奇,吸引读者阅读。
模仿公众号的口吻,写一则有趣的引言。不要直接回答问题本身!而是作为一个文章的开头,让读者对答案非常好奇。
""";
private static readonly string PromptGetFullArticle =
"""
{0}
现在,深度调查一下这个问题,将你的调查结果,模仿微信公众号的口吻,写一篇完整的小作文吧!
""";
public static async Task Main()
{
#region prepare
var apiKey = "";
var endpoint = "http://localhost:11434/api/chat";
var model = "qwen3:30b-a3b-thinking-2507-q8_0";
var services = new ServiceCollection();
services.AddHttpClient();
services.AddLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); });
services.AddGptClient();
var serviceProvider = services.BuildServiceProvider();
var chatClient = serviceProvider.GetRequiredService<ChatClient>();
async Task<string> GetAnswer(string[] prompts)
{
return (await chatClient.AskString(
modelType: model,
completionApiUrl: endpoint,
token: apiKey,
content: prompts,
CancellationToken.None)).GetAnswerPart();
}
#endregion
for (int i = 0; i < 1000; i++)
{
var idea = await GetAnswer([PromptGetIdea]);
var introduction = await GetAnswer([string.Format(PromptGetIntroduction, idea)]);
var fullArticle = await GetAnswer([string.Format(PromptGetFullArticle, introduction)]);
await File.WriteAllTextAsync($"article{i}.md", fullArticle);
}
}
}
}
1 | using Aiursoft.GptClient; |
2 | using Aiursoft.GptClient.Services; |
3 | using Microsoft.Extensions.DependencyInjection; |
4 | using Microsoft.Extensions.Logging; |
5 | |
6 | namespace Test |
7 | { |
8 | public abstract class Program |
9 | { |
10 | private static readonly string PromptGetIdea = |
11 | """ |
12 | 夏日的农家院里,一只芦花鸡突然扑棱着翅膀冲向墙角,尖喙如闪电般啄起一条扭动的蚂蟥。蚂蟥在鸡嘴里挣扎蜷曲,转眼就被囫囵吞下。 |
13 | |
14 | 围观的小孩瞪大眼睛,这吸血的蚂蟥进了鸡肚子,不得把鸡肠子钻个窟窿? |
15 | |
16 | 这可不是奶奶瞎说,蚂蟥钻人体的案例确实存在,曾有位老汉咳血多日,最后在医院里从气管里夹出活水蛭;南方地区也报告过游泳时水蛭钻入人体黏膜的病例;湖北甚至有人被寄生数月,虚弱得干不了重活。 |
17 | |
18 | 这些吸血的蚂蟥在鼻腔、咽部这些潮湿的黏膜部位寄生,靠吸食血液能活个把月。 |
19 | |
20 | 那么,鸡吃百虫,连毒虫都不在话下,那鸡如果生吞了吸血水蛭,会不会把鸡肚子钻破?人类为什么没有这么强大的消化道呢? |
21 | |
22 | 明明IPv6取之不尽,但为啥运营商却不愿给你“固定地址”? |
23 | |
24 | IPv6作为下一代互联网协议,其地址空间达到了惊人的2^128个,号称"可以为地球上每一粒沙子分配一个IP地址"。 |
25 | |
26 | 然而,许多用户发现,尽管IPv6地址资源如此丰富,大多数互联网服务提供商(ISP)仍然不愿意为用户分配固定的IPv6地址。这是为什么呢? |
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 | """; |
52 | |
53 | private static readonly string PromptGetIntroduction = |
54 | """ |
55 | {0} |
56 | |
57 | 这个问题非常有趣,我觉得让你帮助我写成一篇小作文。 |
58 | |
59 | 但还别立刻开始。我想先写个有趣的引言。引言的作用是讨论题目,引出读者好奇,吸引读者阅读。 |
60 | |
61 | 模仿公众号的口吻,写一则有趣的引言。不要直接回答问题本身!而是作为一个文章的开头,让读者对答案非常好奇。 |
62 | """; |
63 | |
64 | private static readonly string PromptGetFullArticle = |
65 | """ |
66 | {0} |
67 | |
68 | 现在,深度调查一下这个问题,将你的调查结果,模仿微信公众号的口吻,写一篇完整的小作文吧! |
69 | """; |
70 | |
71 | public static async Task Main() |
72 | { |
73 | #region prepare |
74 | var apiKey = ""; |
75 | var endpoint = "http://localhost:11434/api/chat"; |
76 | var model = "qwen3:30b-a3b-thinking-2507-q8_0"; |
77 | var services = new ServiceCollection(); |
78 | services.AddHttpClient(); |
79 | services.AddLogging(logging => { logging.SetMinimumLevel(LogLevel.Warning); }); |
80 | services.AddGptClient(); |
81 | var serviceProvider = services.BuildServiceProvider(); |
82 | var chatClient = serviceProvider.GetRequiredService<ChatClient>(); |
83 | async Task<string> GetAnswer(string[] prompts) |
84 | { |
85 | return (await chatClient.AskString( |
86 | modelType: model, |
87 | completionApiUrl: endpoint, |
88 | token: apiKey, |
89 | content: prompts, |
90 | CancellationToken.None)).GetAnswerPart(); |
91 | } |
92 | #endregion |
93 | |
94 | for (int i = 0; i < 1000; i++) |
95 | { |
96 | var idea = await GetAnswer([PromptGetIdea]); |
97 | var introduction = await GetAnswer([string.Format(PromptGetIntroduction, idea)]); |
98 | var fullArticle = await GetAnswer([string.Format(PromptGetFullArticle, introduction)]); |
99 | await File.WriteAllTextAsync($"article{i}.md", fullArticle); |
100 | } |
101 | } |
102 | } |
103 | } |