0%

过去两年,大模型能力的提升有目共睹。
对话越来越自然,推理能力不断增强,看起来几乎“无所不能”。

但在真实的工程实践中,很多人都有类似的感受:
Demo 很惊艳,真正落地却并不轻松。

问题往往不在模型能力本身,而在于:
我们仍然在用早期的工程抽象,承载已经高度复杂的 AI 能力。

本文尝试从工程视角,回顾 AI 应用从「对话」到「Skills」的演进路径。

阅读全文 »

曾经编写的费用分摊的小程序,如今已焕新升级。我为其接入了AI能力,打造出一个能理解指令、预测操作的智能助手。程序的核心代码由Claude Code协助编写。

现在,通过简单的自然语言就能与它对话。更棒的是,它能预判我的下一步操作,并提前给出提示。预测准确时,只需一键确认即可,让操作效率倍增。

体验地址:https://zhengw-tech.com/expense/ai-chat.html,可以先自行操作体验下

如果大家还有兴趣,下面开始详细介绍功能使用指南~

阅读全文 »

下午三点,你正在 feature/new-module 分支上开发新功能,代码改到一半,还没到能 commit 的程度

这时候 QA 在群里 @你:上周提测的 feature/payment 有 bug,订单回调没处理异常情况,需要修一下

你下意识想切到 feature/payment 分支,手悬在键盘上停住了——当前 feature/new-module 上散了一地的代码怎么办?git stash?stash pop 的时候冲突了怎么办?而且你心里清楚,修完 QA 提的 bug 之后还得继续回来开发 feature/new-module。两边来回切分支,万一哪次忘了 stash 或者切错了分支,代码就可能搞混

这个场景,只要你在同一个代码仓库里同时跟过「开发中」和「测试中」两个需求,就一定经历过。git stashgit switch 能解决一部分问题,但当「并行开发」变成常态,你会发现一直在 stash → switch → pop → 解决冲突之间来回折腾——而且真的很容易搞错

Git 从 2.5 版本(2015 年)开始就内置了一个更彻底的解决方案——git worktree

阅读全文 »

之前进行过机器学习的数学笔记-回归中,主要是人工计算导数以及更新计算

本次为对应《动手学深度学习》线性回归部分内容,使用PyTorch 来简化实现

构造测试数据

找到合适的数据比较麻烦,我们可以自己生成对应的测试用的数据,添加一定的噪声

线性模型:$\mathbf{y}=\mathbf{W}\mathbf{X}+b$,其中 $\mathbf{W}$ 和 $\mathbf{X}$ 都是矩阵

比如可以是$y=w_1x_1 + b$ 也可以是 $y=w_1x_1+w_2x_2+b$ 等等

我们可以根据输入的 $\mathbf{W}$ 和 $b$ ,根据$\mathbf{W}$的形状生成对应高斯分布的$\mathbf{X}$,执行 $\mathbf{y}=\mathbf{W}\mathbf{X}+b$ 获取对应的 $y$ 值

阅读全文 »

本文主要介绍一下通过Spring AI 来快速实现一个简单的类似OpenAI Agents SDK的功能

具体效果为在application.yml 中配置对应的agent 信息,如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
spring:
ai:
agents:
# 定义一个Agent
- name: historyTutor
# 与大模型交互时的Agent的系统提示词
instructions: You provide assistance with historical queries. Explain important events and context clearly.
# 其他Agent可以获取到的关于当前agent的描述信息
handoffDescription: Specialist agent for historical questions

# 定义另一个Agent
- name: mathTutor
instructions: You provide help with math problems. Explain your reasoning at each step and include examples
handoffDescription: Specialist agent for math questions

# 定义入口agent
- name: triageAgent
instructions: You determine which agent/tools to use based on the user's homework question
# 这里定义可以分派的其他agent有哪些
handoffs:
- historyTutor
- mathTutor

使用时,按需注入即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
@Slf4j
@RestController
public class AgentController {

// 通过名称注入
@Resource
private Agent triageAgent;

@GetMapping("/triage")
public Flux<String> triage(String input) {
return triageAgent.asyncExecute(input);
}
}
阅读全文 »

LLamaIndex顾名思义,看起来是一个适合构建索引的框架,也就是 RAG(Retrieval-Augmented Generation),所以我们本次主要看一下如何使用LlamaIndex 来实现一下RAG(当然,它也能用来实现智能体等功能)

RAG 的交互流程如下

主要涉及如下几个步骤节点

阅读全文 »

LangGraph 是一个用于构建大型语言模型 Agent 的编排框架,它与 LangChain 深度集成,具备出色的有状态流程管理能力。在之前的文章中,曾介绍过如何使用LangGraph及MCP实现Agent。在那篇文章中可以看到,得益于 LangGraph 内置的丰富组件,开发过程非常简洁。

本文将简要介绍 LangGraph 中常用的一些核心概念,帮助更好地理解和使用。如需详细内容,请参考官方文档

阅读全文 »

目前agent 大致有两种风格,一种是自己定义相应的工作流程(workflows),还有一种就是流程完全让大模型自己进行判断处理(agents)

本次主要简单记录一下使用langgraph 及mcp 实现一个 agents

这个可以认为是一个最简化工作流,只有llm 及tools 两个节点,当大模型判断需要调用tools 时就执行调用,直到大模型认为不需要调用工具,这时认为执行结束了,可以返回对应的结果

stateDiagram-v2
    [*] --> Start
    Start --> Agent
    Agent --> Tools : continue
    Tools --> Agent
    Agent --> End : end
    End --> [*]

交互流程

sequenceDiagram
    participant U as User
    participant A as Agent (LLM)
    participant T as Tools
    U->>A: Initial input
    Note over A: Messages modifier + LLM
    loop while tool_calls present
        A->>T: Execute tools
        T-->>A: ToolMessage for each tool_calls
    end
    A->>U: Return final state
阅读全文 »

感知机

感知机是一种监督学习算法,用于解决线性可分(Linearly Separable)的二分类问题,具体内容如下:

计算预测值:$z=w_1x_1 + w_2x_2 + b$

激活函数为阶跃函数:

$$ y_{pred}= \begin{cases} 1 & z \ge 0\\ 0 & z \lt 0 \end{cases} $$

参数更新函数:

$$ w_i = w_i + \eta \cdot (y_{true} - y_{pred}) \cdot x_i$$
$$b = b + \eta \cdot (y_{true} - y_{pred})$$
阅读全文 »