自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(227)
  • 资源 (9)
  • 收藏
  • 关注

原创 玩转Kotlin--彻底弄懂Lambda和高阶函数

3语法3规定Lambda表达式语法: 1 lambda 表达式总是被大括号括着; 2 其参数(如果有的话)在 -> 之前声明(参数类型可以省略); 3 函数体(如果存在的话)在 -> 后面在 Kotlin 中有一个约定,如果函数的最后一个参数是一个函数,并且你传递一个 lambda 表达式作为相应的参数,你可以在圆括号之外指定它if the last parameter of a

2017-10-16 22:48:54 17017 4

原创 GreenDao保存List<String>类型数据

**在上一章中介绍了如何简单使用GreenDao,并创建了User类来保存一些简单的数据。 但是假如在User中有一种List类型的数据也需要保存到数据库中,该如何处理呢??**答案很简单,可以转换一下思路,遍历List数据,然后将所有的String对象都append到一个StringBuilder中,然后保存在数据库中即可。 事实上,GreenDao已经为我们考虑到了这种情况,因此才有了 Pr

2017-06-21 11:12:17 11741

原创 自定义ViewGroup实现多个单页面上下滑动效果

阅读过自定义ViewGroup实现仿淘宝的商品详情页的童鞋,应该都了解了ViewGroup中onMeasure、onLayout、onTouchEvent等相关方法的使用。在介绍仿淘宝商品详情页时,我们提到过现在网上很多实现方法是使用ScrollView嵌套两个ScrollView。而我也提到过这样实现的缺陷,很难进行扩展。而使用自定义ViewGroup的话就可以根据自己的需要扩展功能了。今天我们介

2016-12-30 16:33:59 1944 6

原创 You need to use a Theme.AppCompat theme (or descendant) with this activity解决方法

当我的MainActivity继承自v7包中的ActionBarActivity或者AppCompatActivity时,如果在style.xml文件中指定MainActivity所使用的样式如下: @color/colorPrimary @color/colorPrimaryDark

2016-03-25 23:40:53 29151 5

原创 Android在ScrollView中嵌套ViewPager以及ListView的可能出现的问题以及解决方案

我们在实际开发一个款Android App时,经常会遇到如下图所示的需求:从上面gif图片可以看出,在一个页面的最上方有一个首页轮播的效果,在首页轮播的下方又会有一个ListView或者是GridView来显示我们的网络请求数据。对于上述需求,我们很容易想到先使用ViewPager的来实现首页轮播的效果,然后在下方添加一个ListView或者GridView并将数据通过自定

2016-03-17 18:14:58 9602 3

原创 自定义ViewGroup实现仿淘宝的商品详情页

最近公司在新版本上有一个需要, 要在首页添加一个滑动效果, 具体就是仿照X宝的商品详情页, 拉到页面底部时有一个粘滞效果, 如下图 X东的商品详情页,如果用户继续向上拉的话就进入商品图文描述界面:刚开始想拿来主义,直接从网上找个现成的demo来用, 但是网上无一例外的答案都特别统一: 几乎全部是ScrollView中再套两个ScrollView,或者是一个LinearLay

2015-07-23 14:28:45 33207 38

原创 搭建 Agentic RAG 实现本地知识搜索

除了集成网络 API 之,很多公司都会通过数据收集、积累等方式搭建自有数据知识库。可以看出搜索 “公办小学划片” 结果颗粒度太粗,没有精准匹配。可以看出,在TextLoader加载之后,会生成一个Document的数组类型。先将 school_info.txt 加载到内存中,需要使用 TextLoader。这篇文章就来介绍,如何基于公司内部私有知识,实现 Agentic RAG 查询。可以看出,经过切片后 docs 被分为2段 Document 结果。方法创建一个向量库实例,并传入之前创建的。

2025-07-27 19:15:47 501

原创 <span class=“js_title_inner“>搭建 Agentic RAG 实现本地知识搜索</span>

除了集成网络 API 之,很多公司都会通过数据收集、积累等方式搭建自有数据知识库。可以看出搜索 “公办小学划片” 结果颗粒度太粗,没有精准匹配。可以看出,在TextLoader加载之后,会生成一个Document的数组类型。先将 school_info.txt 加载到内存中,需要使用 TextLoader。这篇文章就来介绍,如何基于公司内部私有知识,实现 Agentic RAG 查询。可以看出,经过切片后 docs 被分为2段 Document 结果。方法创建一个向量库实例,并传入之前创建的。

2025-07-27 19:15:47 388

原创 从搭建第一个 Agent 开始

接下来的一段时间,我将通过《LLM 应用开发专栏》这一系列文章,跟大家分享 AI Agent 开发的实战经验。并带读者一步步掌握AI应用的开发精髓,全方位提升Agent开发与调优能力,并塑造个人AI能力栈。第一篇: 调用 Qwen 平台API,通过Autogen搭建Agent,并最终在Agent中集成 Google Serper API 实现网络实时搜索能力。除了火爆程度之外,还有一点也很相似,就是入门门槛相对较低。文章系列的前几篇文章会通过实现一个简易AI产品,来快速梳理AI产品的技术栈与实践。

2025-07-06 22:43:19 430

原创 <span class=“js_title_inner“>从搭建第一个 Agent 开始</span>

接下来的一段时间,我将通过《LLM 应用开发专栏》这一系列文章,跟大家分享 AI Agent 开发的实战经验。并带读者一步步掌握AI应用的开发精髓,全方位提升Agent开发与调优能力,并塑造个人AI能力栈。第一篇: 调用 Qwen 平台API,通过Autogen搭建Agent,并最终在Agent中集成 Google Serper API 实现网络实时搜索能力。除了火爆程度之外,还有一点也很相似,就是入门门槛相对较低。文章系列的前几篇文章会通过实现一个简易AI产品,来快速梳理AI产品的技术栈与实践。

2025-07-06 22:43:19 278

原创 小试牛刀调整Prompt,优化Token消耗

在上一篇文章荒腔走板Mac电脑本地部署 LLM中介绍过本地部署大模型之后,可以通过定制 prompt 来实现 domain 提取等各种各样的需求。但是实际上,部署本地大模型这种方式对于个人开发者来说实在是不太友好。一方面需要投入大量资金确保设备的算力足够支撑LLM的训练和推理;另一方面本地部署的大模型的量级都不会太大,所以效果也不会太理想。对于个人开发者来说,想开发一个 AI 应用,最快的...

2025-01-22 23:39:34 2529

原创 <span class=“js_title_inner“>小试牛刀调整Prompt,优化Token消耗</span>

很明显,通义千问大模型返回的结果是符合我们需求的。如何优化 prompt,尽量在不损失准确率的基础上,减少 token 的使用量,显得尤为重要。通过定制 Prompt,可以让大模型返回固定格式的数据,一种常用的格式就是 JSON。上图中我们自定义的格式相比于JSON格式,虽然可读性很差,但是对于高性能的机器来说不算一件难事。可以看出,Prompt新增了一行 "使用精简模式的JSON,删除一切不必要的空格和换行符号"。我将实现的伪需求是:列举某个城市的3个展览馆,并分别介绍每一个展览馆的一些藏品。

2025-01-22 23:39:34 905

原创 荒腔走板Mac电脑本地部署 LLM

最近在自己电脑上尝试着部署了下大模型,仅用此篇流水账记录一下。环境准备电脑是 16寸 Mac M2 Pro,运行时内存是 16 GB。Mac 并没有独立显存,GPU 显存是和系统内存共享。 模型选择的是ChatGLM-6B ,它基本可以说是 10B 以下级别模型中性能最强之一。并且 ChatGLM-6B 有一个强点,就是在中英文切换对话方面表现突出。语言选择 Python,使用的是 3....

2025-01-06 22:28:18 1754

原创 <span class=“js_title_inner“>荒腔走板Mac电脑本地部署 LLM</span>

这就说明,虽然大模型理解力很强,但是还需要配合更加完善的 Prompt Engineering,甚至是 Fine Tuning。就如同传统 NLU 返回的 Semantic 格式一样,基于大模型也能返回响应的格式,并且大模型的理解能力在传统 NLU 之上。选择 Python,使用的是 3.12.2 版本,目前大多数大模型的推理过程都是用 Python 语言实现。除了简单的聊天功能之外,基于简单的 Prompt Engineering 可以让大模型提供更高阶点的功能。环境配置好,模型也下载好。

2025-01-06 22:28:18 1161

原创 Android APP 集成本地大模型 LLM

这篇文章介绍如何在Android项目中集成大模型LLM,并展示大模型 text-to-text 结果。主要依赖如下2项:MediaPipeGemma 2BMediaPipeGoogle 在2017年发布了 TensorFlow Lite, 它是一个用于在Mobile和IoT上进行 ML 推断的轻量级框架。主要用于将 TensorFlow 模型转换为适用于移动设备(Android、IOS)的轻量级模...

2024-12-24 22:20:05 2289

原创 <span class=“js_title_inner“>Android APP 集成本地大模型 LLM</span>

是谷歌开发的一款轻量级AI模型,提供两种规模:2B和7B参数。目前 Mediapipe 能集成调用的大模型有:Gemma 2B, Phi-2, Falcon-RW-1B, 和 StableLM-3B。传入的 prompt 是 "tell me 7 wonders of the world",来看一下本地大模型是否能够给出世界7大奇迹的结果。这篇文章介绍如何在Android项目中集成大模型LLM,并展示大模型 text-to-text 结果。:需要下载 TFLit 版本,如下图。调用本地模型获取结果。

2024-12-24 22:20:05 428

原创 运行 70B的LLM,需要多大GPU显存 ?

正如文章标题所言,你是否也曾好奇过:加载使用一个 70B 大小的 LLM,究竟需要多大的 GPU 显存呢?读完这篇文章应该会有答案。为什么是GPU,而不是CPUAI 本质上是大量的矩阵与向量运算 ,属于计算密集型运算,需要大量的内存空间来保存模型的训练参数。一般通用 CPU 运算单元都是标量,而 GPU 是一个把SIMD(单指令多数据)和SIMT(单指令多线程)运用到极致的协处理器,在体...

2024-12-14 11:02:26 3358

原创 <span class=“js_title_inner“>运行 70B的LLM,需要多大GPU显存 ?</span>

有一个有趣的事实,GPU的全称是Graphic Processing Unit,从名字中就能看出它最初被设计用来处理图像渲染相关的。在实际的大模型应用中里,用户的输入Input和大模型的输出Output,往往是需要使用成千上万个 Token 来推理得出的。可以看出随着并发请求数、Token数,以及大模型大小的增长,GPU Memory的增长是很恐怖的,这样硬件算力的成本太高。下面 2 张表格分别描述了不同大小的模型,根据不同Token数以及不同并发请求数的情况下,所需要的 GPU Memory 大小。

2024-12-14 11:02:26 407

原创 调用通义千问大模型Function Calling实现实时天气查询

OpenAI 在它的多个版本的模型里提供了一个非常有用的功能叫 Function Calling,就是你传递一些方法的信息给到大模型,大模型根据用户的提问选择合适的方法Function,然后输出给你,你再来决定是否执行。之所以需要Function Calling,通俗来讲就是大模型不具备实时性。因为模型是基于之前的数据训练出来的。而 Function Calling 具备实时性的优势,比如调用第三...

2024-11-04 23:50:26 1758

原创 使用LangChain的Memory支持Kimi上下文聊天

在 使用LangChain创建简易聊天机器人 这篇文章中介绍了 LangChain 的简单使用,其中重点介绍了 LangChain 中 Models和Prompts 这 2 个模块的功能。这篇文章来看下 LangChain 中的 Memory 模块的作用。没有 Memory 的日子Kimi LLM 大模型上篇文章使用的是本地的大模型 Mistral,这篇文章换一种收费的模型试一下。目前国内最火的大...

2024-05-22 22:39:58 3061 2

原创 <span class=“js_title_inner“>使用LangChain的Memory支持Kimi上下文聊天</span>

正如红框中内容所示,此时 Moonshot 大模型是不知道 "它" 代表的是什么的,也就是说大模型默认是没有上下文功能的。这篇文章中介绍了 LangChain 的简单使用,其中重点介绍了 LangChain 中 Models和Prompts 这 2 个模块的功能。可以看到,根据我们之前预设到 memory 中的内容,大模型 kimi_llm 已经可以给出正确的答案。目前国内最火的大模型当属 Kimi了, 它使用的大模型是。创建好模型实例之后,就可以直接调用 invoke 方法,并打印结果。

2024-05-22 22:39:58 759

原创 使用LangChain创建简易聊天机器人

LangChain 是什么就是一个框架或者说是一个工具,用来写 AI 应用。对,没有错!AI小白也可以,有手就行!LangChain有几个核心模块:Models、Prompts、Chains、Indexes、Memory、Agents。这篇主要介绍Models、Prompts这2个最基本的模块。配置环境开发之前需要先配置好开发环境变量,我使用Python语言,然后安装LangChain即可。这2项...

2024-05-14 23:51:10 1128

原创 <span class=“js_title_inner“>使用LangChain创建简易聊天机器人</span>

创建好 llm 模型实例之后,就可以构建模型需要的Prompt(提示词)。最终调用 llm 模型的 invoke 方法就可以获取大模型的返回结果了。建好 PromptTemplate 之后,就可以通过LangChain将 LLM 和 prompt 对象进行组合,并调用大模型方法获取结果。LangChain 最核心的功能就是能够集成各种大模型LLM,后续所有的功能实现以及扩展都是基于此功能的基础之上。AI小白也可以,有手就行!除了 OpenAi 这些收费的大模型之外,LangChain也可以集成本地大模型。

2024-05-14 23:51:10 436

原创 每每聊到线程Thread

进程和线程进程所谓计算机程序 Program,其实就是通过执行一系列指令来完成某一个任务。当你启动一个程序时,操作系统(OS)会将其加载到内存中,并在内存中申请一块固定地址的命名空间(address space),并在此命名空间内执行相关指令。聪明人应该已经听出来了,这不就是"进程 Process" 嘛。没有错,某种程度上我们确实可以将进程理解为一个程序的。线程线程就是在进程内部,一系列可执行的独...

2023-06-01 22:24:08 1326

原创 <span class=“js_title_inner“>每每聊到线程Thread</span>

而这些独立指令最终是被 CPU 执行。User Thread就是用户线程,是处于应用层面的一种数据结构体,比如我们使用 Java SDK 中的 Thread就是User Thread。之所以在之前的结果里多个线程的效率慢,是因为我们创建了 1000 个线程,个数已经完全超出了CPU核数,所以 CPU 不得不在多个线程中进行上下文切换,这个操作会严重影响程序运行效率。改用 Native Thread之后,这几番操作下来,在一定程度上提高了线程的运行效率,但是带来的后果就是线程的创建和销毁操作变得异常笨重。

2023-06-01 22:24:08 53

原创 <span class=“js_title_inner“>每每聊到线程Thread</span>

而这些独立指令最终是被 CPU 执行。User Thread就是用户线程,是处于应用层面的一种数据结构体,比如我们使用 Java SDK 中的 Thread就是User Thread。之所以在之前的结果里多个线程的效率慢,是因为我们创建了 1000 个线程,个数已经完全超出了CPU核数,所以 CPU 不得不在多个线程中进行上下文切换,这个操作会严重影响程序运行效率。改用 Native Thread之后,这几番操作下来,在一定程度上提高了线程的运行效率,但是带来的后果就是线程的创建和销毁操作变得异常笨重。

2023-06-01 22:24:08 58

原创 Vsync 来龙去脉

假如没有Vsync之前在Android 上屏流水账和不同视角下的Android上屏 中已经介绍过View的绘制会经过Measure、Layout、Draw这3个阶段,而这3个阶段的工作都是由CPU来负责包完成。另外CPU还会负责一些用户输入、View动画等事件,这部分工作都是在UI线程中完成。当CPU绘制完成之后,会在RederThread线程中将这部分数据提交给G...

2022-05-26 23:17:22 2438

原创 不同视角下的Android上屏

在电影《金刚川》中,导演使用了一种特殊的拍摄手法---对同一时间维度上的事情进行不同视角的重复播放。虽然有拼凑时长的嫌疑,但实际上,这一手法在艺术体系中有名有据,叫做「复调叙事」。看似是重复,实则是力度更深的铭记,希望观众们不要忘记惨烈的过去。在Android 上屏流水账这篇文章中介绍了Android View显示到屏幕上所经历的流程。这篇文章通过「复调叙事」这一手法...

2022-05-21 13:38:37 649

原创 Android使用SSL自签名证书

一般情况下公司都是通过CA机构来购买SSL证书,但是这种证书费用普遍比较贵,所以在debug环境下可以考虑使用自签名证书。这篇内容将介绍Android如何使用自签名证书,主要分为以下4个步...

2021-11-08 21:35:10 6294

原创 做个人吧,写点Testable代码,好吗!

标题所说的Testable实际上指的是Unit Testable,也就是可单元测试,或者是易书写单元测试的代码。注:不知道单元测试(Unit Test)是什么的,请自行Google需求解析...

2021-10-10 23:40:41 700

原创 Thread疾风传·螺旋丸还是须佐能乎

在上一篇的路漫漫其修远兮,吾将上下而求“锁”中,我向大侠请教了几个线程相关的题目。可是很遗憾,始终没有寻得自己想要的结果。有不少小伙伴在看了文章之后,也对文中提到的问题表现出了一定的兴...

2021-03-20 22:28:30 523

原创 路漫漫其修远兮,吾将上下而求“锁”​

日前面试一精神小伙,观其神态从容、举止自信。料其必学富五车,才高八斗。问其乐观锁、悲观锁、可重入锁、乃至读写锁,无不妙语连珠、出口成章。心生疑惑,欲以考题难之。一则辨其真伪,明足以察秋毫之...

2021-03-17 23:22:17 384

原创 工作中遇到的疑难问题--"闪退"

最近在实现一个自动化测试功能时,经常碰到"闪退"现象。这里总结下问题结果的整个过程。分析日志起初怀疑只是项目中的某段代码逻辑有问题,导致系统crash。所以只要找出cras...

2021-03-09 22:38:35 731

原创 Java的foreach有啥不同

陈述事实现象foreach循环从JDK 5开始,Java可以使用foreach对数组或者实现了Iterator的集合进行遍历。对上述代码进行反编译,可以得出如下字节码:可以看出,在编译时期...

2021-02-25 23:05:14 285

原创 OkHttp与HTTP协议

OkHttp,从名字也能感觉到这套框架似乎与http协议有着千丝万缕的关系。事实上也确实如此,OkHttp所做的各种操作都是建立在http协议基础之上的。因此在理解并自己手写OkHttp...

2020-12-10 23:01:30 2975 1

原创 Java中合理使用局部变量替代成员变量、静态变量

故事起因一个Java类中可以存在多种形式的变量,可以是最一般的成员变量、或静态变量、或临时变量。如下图:publicclassVariableDemo{staticin...

2020-10-11 21:50:39 1067

原创 一个 int 值,只能表示一个数值吗?

正常情况下一个 int 就是代表一个数值,或者一种状态。但是Google和Oracle的工程师似乎特别喜欢用1个 int 类型来表示多种状态,源码中到处都能看到这种使用方式。线程池Thr...

2020-06-06 18:16:25 1873 1

原创 GreenDao在Android项目中的实践总结

文章目录:1 GreenDao 基本使用2 GreenDao 多表之间的关联3 GreenDao 保存List类型数据4 GreenDao 版本升级基本使用1 引入GreenDao在p...

2020-05-29 20:26:00 563

原创 作为一个32岁工程师,我已不再焦虑。你呢?

故事总得有个开头"嗡~嗡!"手机震动了两声,应该是一条短信通知,顺手拿起手机撇了一眼What ? 眼睛一闭一睁《Android进阶课程》已经更新到第18篇了!人生第326...

2020-05-25 12:03:44 1335 1

原创 阿里3轮面试都问了RecyclerView

阿里面试总共4轮,其中有3轮面试都问到了RecyclerView的问题。面试的点各不相同,有原理、嵌套问题、有缓存实现,但是最终都是殊途同归,所有的问题都汇集在如何对RecyclerV...

2020-05-16 22:01:56 1240

Picasso实现下载图片进度提示

http://blog.csdn.net/zxm317122667/article/details/51814095

2016-07-03

Scrollview_ViewPager_ListView

Scrollview中嵌套ViewPager和ListView的问题和解决方案

2016-03-17

自定义ImageView,实现点击之后算出点击的是身体的哪个部位

自定义ImageView,实现点击之后算出点击的是身体的哪个部位

2015-08-13

优化对Private方法进行单元测试Demo

不要对private方法写UnitTest code。这说明调用这个private方法的public接口做了太多它不该做的事情

2018-09-07

自定义VIewGroup实现仿淘宝商品详情页

仿照X宝的商品详情页, 拉到页面底部时有一个粘滞效果,如果用户继续向上拉的话就进入下一页

2015-07-23

MyPopListButton

Android自定义Button结合PopupWindow和ListView实现顺序显示下拉菜单控件 http://blog.csdn.net/zxm317122667/article/details/50929798

2016-03-19

GreenDaoDemo

GreenDao的详细实用案例,包含List<String>类型的保存,已经多表之间的关联

2017-06-21

主题切换应用

http://blog.csdn.net/zxm317122667/article/details/52688882 一步一步教你实现主题切换 注意:需要先运行并安装压缩包中的BlackTheme和WhiteTheme两个应用,最后在运行安装SwitchThemeDemo

2016-09-28

MaterialPullToRefresh

自定义FrameLayout,实现下拉刷新 带水波纹的下拉刷新MaterialPullToRefresh http://blog.csdn.net/zxm317122667/article/details/52094048

2016-08-02

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除