C++ 实现简单的文章续写

在LangChain中使用Llama.cpp的详细指南 Llama.cpp是一个强大的工具,可以用于处理大规模语言模型(LLM)的推理任务。LangChain是一种允许开发人员轻松集成和操作LLM的框架,而通过结合Llama.cpp,我们可以显著提高LangChain的处理能力。 阅读详情

头文件:

#pragma once
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <time.h>
#include <windows.h> 
using namespace std;
class dataClass {
public:
	string former;
	string latter[50] = { "\0" };
	int latterCount = 0;
};

//文件读入
string streamIn(int &countArray, int former_len, int latter_len, dataClass*);   
//对读入的文件进行前后缀分析
void streamAnalyse(string fullText, int &countArray, int former_len, int latter_len, dataClass*);    
//输出文章
void streamOut(string fullText, int &countArray, int former_len, int latter_len, dataClass*);

C++_Big_1.cpp

//main函数
#include "Head.h"
//void test(dataClass*);

const int NUM_DATA = 700;
int main() {
#pragma comment(linker, "/STACK:873741824")
	string fullText;
	dataClass dataArray[NUM_DATA];
	int var = 0;
	int countArray;
	countArray = 0;
	int former_len, latter_len;    //前缀词长度和后缀词长度
	cout << "请输入前缀长度:" << endl;
	cin >> former_len;
	cout << "请输入后缀长度:" << endl;
	cin >> latter_len;
	fullText = streamIn(countArray, former_len, latter_len, dataArray);
	streamOut(fullText, countArray, former_len, latter_len, dataArray);
	cout << endl;
	
	
	//test(dataArray);    //用于测试内存极限
	//cout << dataArray[0].former;    

	return 0;
}

stream.cpp

#include "Head.h"

/*
重写输入和分析函数
1.读入文件,存储在一个string中
2.对该string对象进行分析
3.按用户给定的前缀长度和后缀长度进行读入
	3.1循环开始后前缀按上一个后缀赋值
	3.2遇到"\n"时后缀停止并记录后缀指针长度用于前缀指针前进
*/

void streamAnalyse(string fullText, int& countArray, int former_len, int latter_len, dataClass* dataArray) {
	int textPoint = 0, loopCount, pointLength = 2 * former_len, loopCountCopy;
	const char* char_fullText;
	char temp[1000] = "\0";
	char_fullText = fullText.c_str();	//文件存在一个string中
	string tempFormer, tempLatter;
	do {
		//前缀检查
		for (loopCount = 0; loopCount < pointLength; loopCount++)
			temp[loopCount] = char_fullText[textPoint + loopCount];
		temp[loopCount] = '\0';
		tempFormer = temp;
		//后缀检查
		loopCountCopy = loopCount;
		for (loopCount = 0; loopCount < 2 * latter_len && char_fullText[textPoint + loopCountCopy + loopCount] != ' '; loopCount++) {
			temp[loopCount] = char_fullText[textPoint + loopCountCopy + loopCount];
		}
		loopCountCopy = loopCount;
		for (loopCount = 0; loopCount < loopCountCopy; loopCount++)
			temp[loopCount] = char_fullText[textPoint + loopCountCopy + loopCount];
		temp[loopCount] = '\0';
		tempLatter = temp;
		//指针检查
		for (loopCount = 0; loopCount < 2 * former_len && char_fullText[textPoint + loopCount] != ' '; loopCount++) {}
		if (loopCount == 2 * former_len)
			pointLength = 2 * former_len;
		else if (loopCount == 0) {
			textPoint += 1;
			pointLength = 2 * former_len;
		}
		else
			pointLength = loopCount;
		//前缀查重
		for (loopCount = 0; loopCount < countArray && dataArray[loopCount].former != tempFormer; loopCount++) {}
		if (loopCount == countArray) {
			dataArray[countArray].former = tempFormer;
			dataArray[countArray].latter[0] = tempLatter;
			dataArray[countArray].latterCount++;
			countArray++;
		}
		else {
			if (dataArray[loopCount].latterCount > 49) {
				textPoint += pointLength;
				continue;
			}
			dataArray[loopCount].latter[dataArray[loopCount].latterCount] = tempLatter;
			dataArray[countArray].latterCount++;
		}
		textPoint += pointLength;
	} while ((textPoint + former_len) < fullText.length());
}

/*
重写输出函数_2
0.初始化随机数
1.进入循环
	1.1取随机数
	1.2按顺序遍历所有前缀,随机输出其后缀
	1.3到达指定字数后停止
*/

void streamOut(string fullText, int& countArray, int former_len, int latter_len, dataClass* dataArray) {
	srand(time(0));
	int randNum, loopCount, textPoint = 0, pointLength, count = 0;
	const char* char_fullText;
	char temp[1000] = "\0";
	char_fullText = fullText.c_str();
	string start, temp_string;
	cout << "请输入启动词(如:春天等):" << endl;
	cin >> start;
	cout << "    " << start;
	for (loopCount = 0; dataArray[loopCount].former != start && loopCount < countArray; loopCount++) {}
	if (loopCount == countArray) {
		cout << "语料库中不存在该启动词!";
		return;
	}
	else {
		randNum = rand() % dataArray[loopCount].latterCount;
		cout << dataArray[loopCount].latter[randNum];
	}
	do {
		//指针检查
		for (loopCount = 0; loopCount < 2 * former_len && char_fullText[textPoint + loopCount] != ' '; loopCount++) {}
		if (loopCount == 2 * former_len)
			pointLength = 2 * former_len;
		else if (loopCount == 0) {
			textPoint += 1;
			pointLength = 2 * former_len;
		}
		else
			pointLength = loopCount + 1;
		for (loopCount = 0; loopCount < pointLength; loopCount++)
			temp[loopCount] = char_fullText[textPoint + loopCount];
		temp[loopCount] = '\0';
		for (loopCount = 0; dataArray[loopCount].former != temp && loopCount < countArray; loopCount++) {}
		if (loopCount == countArray) {
			loopCount = rand() % countArray;
			randNum = rand() % dataArray[loopCount].latterCount;
			cout << dataArray[loopCount].latter[randNum];
		}
		else {
			randNum = rand() % dataArray[loopCount].latterCount;
			cout << dataArray[loopCount].latter[randNum];
		}
		textPoint += pointLength;
		count++;
		Sleep(12);
	}while ((textPoint + former_len) <= fullText.length()-2);
}

string streamIn(int& countArray, int former_len, int latter_len, dataClass* dataArray) {
	string fullText;
	const char* char_fullText;
	ifstream  infile;
	//读入并分析
	infile.open("D:\\spring_data_in\\1.txt", ios::in);
	infile >> fullText;
	char_fullText = fullText.c_str();
	streamAnalyse(fullText, countArray, former_len, latter_len, dataArray);
	infile.close();
	return fullText;
}

 

本地文本生成模型部署实战:从Prompt续写、API调用到批量生产 自然语言处理技术的落地场景中,文本生成已成为内容生产、智能写作与自动化运营的重要支撑。理解语言模型如何通过上下文预测完成续写与风格改写,是掌握本地化部署的基础。借助量化模型与消费级硬件,即使没有高端显卡,也能通过CPU推理完成基础实验,而Ollama等推理引擎可将模型封装为HTTP服务,提供OpenAI兼容接口,让业务系统快速接入。本文以半开放短句作为Prompt样本,完整演示了任务拆解、环境准备、服务启动、温度参数调优、结构化输出验证及批量任务调度的工程链路,并结合API集成与性能观察给出常见问题排查清单 阅读详情

相关推荐

Zabbix在Ubuntu 22.04上的性能优化与监控实战:从基础安装到高级配置

本文详细介绍了在Ubuntu 22.04系统上部署和优化Zabbix监控系统的完整流程,从基础安装到高级配置。内容包括MySQL数据库设置、Zabbix服务器与Web前端优化、性能调优策略以及实战监控场景应用,帮助用户构建高效的企业级监控解决方案。

sss66的博客 895

C/C++文件操作

C语言中一般返回0表示成功(正常 0 异常 -1),fopen和fclose函数都遵循这个规则 数据最终以二进制的数字存储 使用UltraEdit软件打开文本,按下ctrl+H能切换到16进制显示 写入 文件名:盘符+冒号+反斜杠(盘符可大写可小写) 不加盘符,即没有目录就是相对路径,直接保存在工程目录下 加了盘符则表示的决定路径,存储在指定路径下 char buf[] =...

qq_20386411的博客 728

#基于原生JS的交互式代码高亮编辑器实现教程

本文介绍了一个轻量级交互式代码高亮编辑器的实现方案。该编辑器采用原生JavaScript开发,支持语法高亮、行号显示、主题切换等核心功能,适合嵌入博客、文档等场景使用。 项目技术栈包括HTML5/CSS3/JavaScript,使用Prism.js实现语法高亮,prettier提供代码格式化功能。编辑器界面分三个区域:顶部工具栏(语言选择/主题切换)、中间编辑区(行号+代码)、底部状态栏(语言/字符数)。 核心功能实现包括:通过contenteditable属性创建可编辑区域,Flex布局实现行号与代码同步

qq_42386733的博客 1036

C++ 写入txt文件内容并追加内容

C++ 写入txt文件内容并追加内容

wangnaisheng的专栏 3825

STM32F103模拟SSI时序解析:实现高精度绝对式编码器位置读取

本文详细解析了如何在STM32F103微控制器上通过软件模拟SSI协议时序,实现高精度绝对式编码器的位置读取。文章从项目驱动出发,深入剖析了SSI通信原理、硬件电平转换连接、核心软件模拟代码实现及关键时序参数调试方法,并提供了使用示波器进行波形对齐与优化的实战指南,为成本敏感型工业控制与机器人项目提供了高性价比的解决方案。

weixin_29196315的博客 141

Python连接高斯数据库踩坑实录:从SASL报错到SSL安全连接的完整指南

本文详细记录了Python连接高斯数据库时遇到的SASL authentication报错及其解决方法。通过剖析SASL认证机制,对比了修改数据库配置、使用官方驱动等方案的利弊,并重点提供了通过自动化脚本生成SSL证书,实现安全、免密连接的完整指南,帮助开发者彻底解决连接难题。

weixin_28340315的博客 438

文件的初步操作2

文件的顺序读写: 一个文件打开后可以对它进行续写操作。所有对文件的读写操作都可以调用文件读写库函数来实现。下面是常用的读写库函数: 1&amp;gt;字符读写函数:每次读或写一个字符,使用fgetc()和fputc()函数。 2&amp;gt;字符串读写函数:每次读或写一行字符,以换行符终止使用fgets()和fputs()函数。 3&amp;gt;数据块读写函数:每次读或者写某种数量的对象,而每个对象具有指定长...

头秃程序员的日常 260

基于 Spring Cloud 环境污染物数据分析与预测平台

基于 Spring Cloud 环境污染物数据分析与预测平台

935

C++文件操作,读取,写入,追加写入

文件写入,会覆盖原来的内容 代码 #include<fstream> #include<iostream> using namespace std; int main() { fstream f; f.open("data.txt",ios::out); //输入你想写入的内容 f<<"123323"<<" "<<"abs"<<endl; f.close(); return 0; } 运行结果 文件写入,追加的方式,不

weixin_43918046的博客 9万+

SDN — EVPN Overlay 控制面

完成控制面的配置后,当 VxLAN L2 Gateway(e.g. Leaf1)再收到从 Host1 向 Host2 发出的 ARP Request 时,就会先查看自己的 ARP 广播抑制表,发现有 Host2 的 MAC-IP 记录,则直接将 ARP Request 报文中的广播 MAC 地址替换为目的单播 MAC 地址(广播变单播),然后原路 Reply,从而达到 ARP 广播抑制的目的。手动配置的方式虽然简单,但网络中会存在大量的 BUM 洪泛流量,网络扩展性也受到了限制,并不适用于大规模组网场景。

烟云的计算 1859

简谈基于FPGA的千兆以太网设计

简谈基于FPGA的千兆以太网设计 今天给大侠带来简谈基于FPGA的千兆以太网设计,话不多说,上货。 今天我们来简单的聊一聊以太网,以太网在FPGA学习中属于比较高级的内容了,有些大侠肯定会感觉以太网学习起来非常不容易。其实,我可以告诉大家,前期学习的基础打扎实了,后期的学习也没那么难。总之就是说难没那么难,说容易也不是那么容易。那么,言归正传,下面让我们一起来聊一聊以太网的学习。 说起以太网,大家可能就会想到百兆以太网、千兆以太网以及万兆以太网等等。局域以太网从10M开始发展,经历几多的变迁,发展到现

3620

C++文件操作 fstream

文件操作 ​​C++中对文件操作需要包含头文件 ==< fstream >== 文件类型分为两种: 1. 文本文件 - 文件以文本的ASCII码形式存储在计算机中 2. 二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂它们 操作文件的三大类: 1. ofstream:写操作 2. ifstream: 读操作 ...

damonlearning的博客 1105

基于STM32的六足机器人控制系统设计(项目资料ID:27)

六足机器人控制系统综合分析其结构、步态与控制算法,融合云端服务、Wi-Fi、蓝牙、语音识别及手势识别等多种技术,设计了多元化控制模式,并针对不同应用场景提出了差异化的构建方案。系统硬件采用分层设计,分为主控板与舵机控制板:主控板以 STM32F103VET6 为核心,负责各类控制模式的数据处理与状态显示;舵机控制板采用 STM32F103R8T6,专注于舵机角度的精确控制,两板通过串口实现数据交互。

以培养嵌入式工程师为己任 1万+

续写上一篇《C++学习指南》

上一篇文章链接。

A141111111的博客 766

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

c++代码实现我的世界(10)

c++写我的世界指令、地址

cz123_的博客 2774

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

llama.cpp C++ API实战:在普通电脑上集成大模型推理

大模型推理通常依赖GPU和Python环境,但通过GGUF格式和量化技术,可将模型压缩至几GB,在普通电脑的CPU上运行。llama.cpp以纯C/C++实现推理引擎,提供C风格API,支持模型加载、上下文管理、分词、解码与采样全流程。其技术价值在于零Python依赖、内存可控、部署轻量,适用于本地问答、文档处理、代码补全等场景。本文围绕llama.cpp的C++ API,拆解从模型加载到采样循环的完整链路,并分享编译配置、性能调优与常见问题排查的工程实践。

weixin_34189116的博客 303

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

简单的UDP网络程序·续写(后端服务器)

对于客户端和服务端的基本源码参考上文,该文对服务器润色一下,并且实现几个基本的业务服务逻辑

weixin_67595436的博客 1679

c++数据结构实验 图与景区 (借鉴须谨慎)

丑话说在前头,由于不可控原因,本实验与老师建议的形式略有差异(少了两个文件),如果担心因此降低实验课分数的,建议只是借鉴一下。好久没写博客了,放寒假回去摸了好久。近几天才回过神来,开始认真做实验。

weixin_73381483的博客 552

理解llama.cpp如何进行LLM推理

理解llama.cpp如何进行LLM推理

周同学的博客 3222

本地大模型续写玄幻小说:从环境部署到批量生成的完整实践

大语言模型(LLM)正在改变文本生成的方式,而本地化部署更让创作者在不依赖云端的情况下获得可控的生成能力。其核心原理是通过推理框架加载开源模型,将文本生成任务封装为兼容 OpenAI 的 API 接口,实现灵活调用。这种技术路径的价值在于降低隐私风险、避免风格漂移,并支持通过批量任务生成多版本草稿。在实际应用中,无论是网文作者需要 AI 续写玄幻小说,还是文案工具需要集成文本生成能力,都可以通过本地推理服务实现。本文以玄幻小说开篇为测试样例,详细讲解从环境准备、模型下载、服务启动到接口调用与批量生成的完整验

weixin_42524499的博客 274

理解llama.cpp怎么完成大模型推理的

接下来的部分将详细探讨这些步骤。但在此之前,我们需要熟悉张量的概念。

2401_85373691的博客 2030

llama.cpp 本地部署大模型:C++ 集成与 GGUF 量化实战

大模型推理依赖内存带宽与容量,量化技术通过降低权重精度来减少内存占用,使普通 CPU 也能运行模型。GGUF 格式与 llama.cpp 框架结合,实现了高效的 CPU 推理和灵活的 C++ 集成。在本地对话、嵌入式设备等场景中,开发者可通过量化等级选择和采样参数调优,平衡速度与质量。本文深入 llama.cpp 的编译、API 使用与性能调优,帮助 C++ 开发者快速搭建本地推理流程。

weixin_34178244的博客 244

本地AI助手搭建指南:llama.cpp与GGUF实现零门槛大模型部署

大语言模型(LLM)通过深度学习技术实现了强大的自然语言理解和生成能力,其核心原理是基于Transformer架构的海量参数计算。量化技术作为模型压缩的关键手段,通过降低权重精度(如从32位浮点数量化至4位整数)大幅减少模型体积与计算资源需求,使大模型在消费级硬件上的部署成为可能。这一技术为个人开发者和小团队带来了高隐私、低成本、可控的AI能力内核,特别适用于对数据安全敏感、预算有限或需深度定制的应用场景。结合llama.cpp这一高性能C++推理引擎与GGUF统一模型格式,用户无需复杂环境配置即可在普通C

weixin_34009794的博客 402

【LittleXi】 N-gram模型(C++实现)

【LittleXi】 N-gram模型(C++实现)

qq_68591679的博客 660

cpp 调用 java_Java程序员如何正确使用.h和.cpp?【下】

接替昨天的继续写,昨天已经讲了,单单一个类,应该使用.h和.cpp文件——暴露出来的接口写在 .h里,实现写在.cpp里;别处使用 .h声明的方法时,编译器会找到方法的实现;然后今天来看看有继承关系的类是怎么操作的。首先我觉得有个明确的事情,我作为一个Java程序员,本以为.h和.cpp文件是抽象类和实现类的关系,类似于Java模板方法;但实际上不是,他俩共同组成一个类。目录结构如下:Apple....

weixin_42599558的博客 308

回看2025,续写2026

2025年,备战2026年计算机考研暂停了博客更新2026年初,将恢复博客更新,同时做好春招和复试两手准备。

久谦的博客 990
上一篇: MySQL 2022-01-20 【学习笔记】
下一篇: 软件工程实践寒假作业
binaryyy
博客等级 码龄5年 118粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值