joyagent-jdgenie源码启动
我个人认为就是个概念而已。“就是个概念”这个说法我是从张雪枫那里听来的,他在一个视频里被一个学生问到大学该不该报人工智能专业时,他批评很多学校的AI专业课程太杂而不精,最后总结说"本科阶段的人工智能就是个概念"。在我看来,本质上就是个噱头,就是把封装了一下,实际效果和LLM没有任何区别。但因为要和别人吹牛逼,还是得了解一下。最近在B站看到有人推广京东的这个项目,正好借着这个机会研究研究。说实话这个
我个人认为Agent就是个概念而已。“就是个概念”这个说法我是从张雪枫那里听来的,他在一个视频里被一个学生问到大学该不该报人工智能专业时,他批评很多学校的AI专业课程太杂而不精,最后总结说"本科阶段的人工智能就是个概念"。在我看来,Agent本质上就是个噱头,就是把LLM封装了一下,实际效果和LLM没有任何区别。但因为要和别人吹牛逼,还是得了解一下。最近在B站看到有人推广京东的joyagent-jdgenie这个项目,正好借着这个机会研究研究。
目录
吐槽原项目
说实话这个项目写得挺差的,不像是“大厂”的水平,感觉像是实习生做的。随便都能列举出好多问题:
1. 配置混乱

我是第一次见到有人在yml里配置这么多内容。首先是否优雅,美观就不说了,稍微不注意就会配置错了,就比如上图的message_size_limit有人能一眼看出它属于哪个父节点吗?而且内容也不可读,比如上图的digital_employee_prompt正常人打开项目想看他的prompt写了什么,还得用什么工具打印出来。 再说有些配置就应该写死到代码里,比如tool,提示词,参数就是和代码绑定的,改了配置代码肯定要改,这种配置有何作用?
2. 为了抽象而抽象
原项目几个Agent关系是这样的:
看源码SummaryAgent使用到的方式只有new SummaryAgent().summaryTaskResult(),这个方法其实就是调用了llm去返回一个结果仅此而已,还要去搞个继承。这个SummaryAgent完全可以用一个静态方法替换,这样一来BaseAgent和ReactAgent就可以合并了。
3. 为了用而用的future.get()
CompletableFuture<String> future = getFuture();
String s = future.get();
项目里很多类似这样的代码,这样除了增加调试难度想不出来有什么好处。看了getFuture()里面的内容,完全可以改成同步的。
4. 有bug根本跑不起来
不知道他是故意的还是不小心,在com.jd.genie.agent.llm.LLM(截止2025.8.12 master分支,最后提交hash是25783436b49e15f0d1896630b4f001e81b454781还没有见修复)第716行:
if (Objects.nonNull(toolCall.function)) {
if (Objects.nonNull(toolCall.function.name)) {
currentToolCall.function = toolCall.function;
}
if (Objects.nonNull(toolCall.function.arguments)) {
currentToolCall.function.arguments += toolCall.function.arguments;
}
}
currentToolCall.function.arguments一开始是空,+=了之后变成null ... 会导致后面arguments解析不出来,真好奇7月底那些UP主是怎么跑起来的,也没见他们提出要改这里。
源码运行
下面介绍经过我修改后的agent-is-just-a-concept如何启动,项目地址是:https://gitcode.com/dfgdsghjfd/agent-is-just-a-concept 。还没空改太多,目前项目结构基本保持原样,如果想运行原项目的也可以参考下。
项目有三个子项目genie-backend、genie-tool、ui(原项目的genie-client还没研究有什么用,不启动也可以)。
准备工作
genie-backend、genie-tool需要依赖大语言模型,可以选择自行部署或使用云端大语言模型。我使用的是自己用vllm部署的Qwen3-14B,vllm版本是0.8.5.post1,启动命令如下:
vllm serve /local/Qwen/Qwen3-14B \
--host=0.0.0.0 --port 9999 \
--dtype half --gpu_memory_utilization 0.9 --max_model_len 13000 \
--enable-auto-tool-choice --tool-call-parser hermes
后端
genie-backend就是一个标准的springboot项目,运行com.jd.genie.GenieApplication既可。修改配置的话原始项目和我修改后的项目只用改llm.default下的相关字段,其他都不需要修改。下面有一些model_name它会先从llm.settings里找模型,找不到就会用default模型。一般人哪有那么多钱去搞四五个模型,所有agent都用一个模型可以跑通。

前端
就是一个标准的前端项目,启动非常简单,先安装好pnpm,然后安装依赖,pnpm i,启动命令是pnpm run dev 。
python服务
根据原始项目的README.md,用自己部署的模型跑不起来。如果用原始项目的话要修改llm_util.py,在import之后加上:
from litellm import register_model
model_name = os.getenv("DEFAULT_MODEL")
models = {
model_name: {
'api_base': os.getenv('OPENAI_BASE_URL'),
'api_key': os.getenv('OPENAI_API_KEY'),
'model': model_name,
"litellm_provider": "openai",
}
}
register_model(models)
然后修改.env文件,修改这三个参数:OPENAI_API_KEY,OPENAI_BASE_URL,DEFAULT_MODEL。国内的模型litellm_provider一般选openai都可以成功。
我没有用他推荐的uv启动,用了传统的virtualenv,原始项目文档说要python3.11,实测3.12也可以运行。启动命令如下:
cd genie-tool
virtualenv -p python3.12 .venv
source .venv/bin/activate
pip install -e .
# 只用运行一次
python -m genie_tool.db.db_engine
# 启动服务
python server.py
测试
三个项目启动好后,就可以在浏览器访问了,地址是http://localhost:3000。

最后分别向joyagent和原始llm提问“1+1=2报告”
joyagent回答

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>数学基础:1+1=2的定义、证明与应用</title>
<!-- Tailwind CSS CDN -->
<script src="https://unpkg.com/tailwindcss@^2/dist/tailwind.min.js"></script>
<!-- ECharts CDN -->
<script src="https://unpkg.com/echarts@5.4.2/dist/echarts.min.js"></script>
<style>
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
.chart-container {
height: 400px;
}
</style>
</head>
<body class="bg-gray-50 text-gray-800">
<!-- 导航栏 -->
<nav class="bg-blue-600 text-white p-4">
<div class="container mx-auto flex justify-between items-center">
<h1 class="text-2xl font-bold">数学基础探索</h1>
<div class="space-x-4">
<a href="#definition" class="hover:text-blue-200">定义</a>
<a href="#proof" class="hover:text-blue-200">证明</a>
<a href="#application" class="hover:text-blue-200">应用</a>
</div>
</div>
</nav>
<!-- 主内容 -->
<main class="container mx-auto p-6">
<!-- 引言 -->
<section class="mb-12">
<h2 class="text-3xl font-bold mb-4">1+1=2:数学的基石</h2>
<p class="text-lg mb-6">
1+1=2是数学中最基础的等式之一,它不仅是算术运算的核心,更是现代数学体系的基石。从皮亚诺公理到集合论,从计算机科学到物理学,这一等式贯穿于各个领域。本文将深入探讨其定义、证明方法及实际应用。
</p>
</section>
<!-- 数学定义 -->
<section id="definition" class="mb-12">
<h2 class="text-2xl font-bold mb-4">1+1=2的数学定义</h2>
<div class="bg-white p-6 rounded-lg shadow-md">
<h3 class="text-xl font-semibold mb-2">1. 自然数的定义</h3>
<p class="mb-4">
在皮亚诺公理体系中,自然数通过以下公理定义:<br>
1. 0是自然数;<br>
2. 每个自然数n都有唯一的后继数S(n);<br>
3. 0不是任何自然数的后继数;<br>
4. 不同的自然数有不同的后继数;<br>
5. 对于自然数的任何性质,若0具有该性质且n具有该性质时S(n)也具有该性质,则所有自然数都具有该性质。
</p>
<h3 class="text-xl font-semibold mb-2">2. 加法的定义</h3>
<p class="mb-4">
加法通过递归定义:<br>
- 对于任意自然数a,a+0 = a;<br>
- a+S(b) = S(a+b)。
</p>
<h3 class="text-xl font-semibold mb-2">3. 1与2的定义</h3>
<p>
在皮亚诺体系中,1定义为S(0),2定义为S(1)。因此,1+1=2的等式本质上是S(0)+S(0)=S(S(0))。
</p>
</div>
</section>
<!-- 证明方法 -->
<section id="proof" class="mb-12">
<h2 class="text-2xl font-bold mb-4">1+1=2的证明方法</h2>
<div class="bg-white p-6 rounded-lg shadow-md">
<h3 class="text-xl font-semibold mb-4">1. 皮亚诺公理体系下的证明</h3>
<ol class="list-decimal pl-5 mb-6">
<li>根据加法定义,1+1 = 1+S(0) = S(1+0) = S(1) = 2</li>
<li>该证明依赖于加法的递归定义和后继函数的性质</li>
</ol>
<h3 class="text-xl font-semibold mb-4">2. 集合论视角</h3>
<p class="mb-4">
在集合论中,自然数可定义为集合:<br>
- 0 = ∅<br>
- 1 = {∅}<br>
- 2 = {∅, {∅}}<br>
加法操作可定义为集合的并集运算,1+1即为{∅} ∪ {∅} = {∅},对应自然数1,但需注意这种定义方式与皮亚诺体系存在差异。
</p>
<h3 class="text-xl font-semibold mb-4">3. 布尔代数中的特殊情况</h3>
<p>
在布尔代数中,1代表真值,1+1=1(逻辑或运算),这说明数学等式的成立依赖于具体代数结构的定义。
</p>
</div>
</section>
<!-- 实际应用 -->
<section id="application" class="mb-12">
<h2 class="text-2xl font-bold mb-4">1+1=2的实际应用</h2>
<div class="bg-white p-6 rounded-lg shadow-md">
<h3 class="text-xl font-semibold mb-4">1. 计算机科学</h3>
<ul class="list-disc pl-5 mb-6">
<li>二进制运算:1+1=10(二进制)是计算机底层运算的基础</li>
<li>布尔逻辑:在逻辑门设计中,1+1=1(逻辑或)是电路设计的核心</li>
</ul>
<h3 class="text-xl font-semibold mb-4">2. 物理学</h3>
<ul class="list-disc pl-5 mb-6">
<li>量子力学:粒子叠加态的数学描述</li>
<li>相对论:时空度规的计算</li>
</ul>
<h3 class="text-xl font-semibold mb-4">3. 经济学</h3>
<p class="mb-4">
在微观经济学中,1+1=2的边际效用递减原理说明:两个相同商品的总效用小于单个商品效用的两倍。
</p>
<h3 class="text-xl font-semibold mb-4">4. 日常生活</h3>
<ul class="list-disc pl-5">
<li>购物结算:商品数量的累加</li>
<li>时间计算:小时与分钟的进位</li>
</ul>
</div>
<!-- ECharts 图表 -->
<div class="chart-container mb-6" id="math-structures-chart"></div>
<script>
const chart = echarts.init(document.getElementById('math-structures-chart'));
const option = {
title: {
text: '不同数学体系中1+1的结果',
left: 'center'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'shadow'
}
},
legend: {
data: ['经典算术', '布尔代数', '二进制运算', '集合论']
},
grid: {
left: '10%',
right: '10%',
bottom: '15%'
},
xAxis: {
type: 'category',
axisTick: { alignWithLabel: true },
data: ['1+1']
},
yAxis: {
type: 'value'
},
series: [
{ name: '经典算术', type: 'bar', data: [2] },
{ name: '布尔代数', type: 'bar', data: [1] },
{ name: '二进制运算', type: 'bar', data: [2] },
{ name: '集合论', type: 'bar', data: [1] }
]
};
chart.setOption(option);
</script>
</section>
<!-- 结论 -->
<section class="mb-12">
<h2 class="text-2xl font-bold mb-4">结论</h2>
<p class="text-lg mb-6">
1+1=2不仅是基础算术的起点,更是现代数学体系的基石。其证明依赖于特定公理体系,而实际应用则贯穿于科学、工程和日常生活的各个领域。理解这一等式的本质,有助于我们更深入地认识数学的抽象性与实用性。
</p>
</section>
</main>
<!-- 页脚 -->
<footer class="bg-gray-800 text-white text-center py-6 mt-12">
<p>Created by Autobots</p>
<p>页面内容均由 AI 生成,仅供参考</p>
</footer>
</body>
</html>
原始llm回答
我使用openaiapi调用,openai版本是1.75.0,代码如下:
import os
from dotenv import load_dotenv
from openai import OpenAI
load_dotenv()
vllm = OpenAI(
api_key='EMPTY',
base_url=os.getenv('VLLM_URL')
)
messages = [
{'role': 'user', 'content': '生成一份1+1=2的报告,html格式'}
]
if __name__ == '__main__':
vllm_response = vllm.chat.completions.create(
model='Qwen/Qwen3-14B',
messages=messages,
stream=False,
top_p=.2,
temperature=.2,
seed=21,
)
print(vllm_response.choices[0].message.content)

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>1+1=2的报告</title>
<style>
body {
font-family: "微软雅黑", Arial, sans-serif;
line-height: 1.6;
margin: 40px;
background-color: #f9f9f9;
color: #333;
}
h1 {
color: #2c3e50;
border-bottom: 2px solid #3498db;
padding-bottom: 10px;
}
.section {
margin-bottom: 30px;
}
.section h2 {
color: #2980b9;
border-left: 4px solid #3498db;
padding-left: 10px;
margin-bottom: 15px;
}
code {
background-color: #ecf0f1;
padding: 2px 5px;
border-radius: 4px;
font-family: monospace;
}
footer {
text-align: center;
color: #777;
margin-top: 50px;
font-size: 0.9em;
}
</style>
</head>
<body>
<h1>1+1=2的报告</h1>
<div class="section">
<h2>引言</h2>
<p>
等式 <code>1+1=2</code> 是数学中最基础且直观的算术表达式之一。它不仅是算术运算的起点,也体现了数学逻辑的严谨性。本报告将从数学基础、哲学意义和实际应用三个角度进行简要分析。
</p>
</div>
<div class="section">
<h2>数学基础</h2>
<p>
在皮亚诺公理体系中,自然数的定义和加法运算通过递归方式建立:
</p>
<ul>
<li>定义:1 是自然数的起始元素(或 0,取决于公理体系)</li>
<li>定义:每个自然数 <code>n</code> 都有唯一的后继 <code>n'</code></li>
<li>定义:加法运算 <code>+</code> 满足 <code>n + 1 = n'</code></li>
</ul>
<p>
根据这些公理,<code>1 + 1 = 2</code> 是加法运算的直接推论。
</p>
</div>
<div class="section">
<h2>哲学意义</h2>
<p>
该等式体现了数学的抽象性与客观性:
</p>
<ul>
<li>抽象性:数字和运算符是人类对现实世界的抽象</li>
<li>客观性:在所有符合皮亚诺公理的系统中,该等式恒成立</li>
<li>逻辑自洽:作为数学公理体系的基础,其正确性无需外部验证</li>
</ul>
</div>
<div class="section">
<h2>实际应用</h2>
<p>
尽管看似简单,该等式在现实中有广泛应用:
</p>
<ul>
<li>计算机科学:二进制运算的基础</li>
<li>工程计算:基本的数值运算单元</li>
<li>经济学:最基本的资源分配模型</li>
<li>日常场景:购物结算、时间计算等</li>
</ul>
</div>
<footer>
© 2023 数学基础研究报告 | 作者:AI助手
</footer>
</body>
</html>
向原始LLM要是提示词写多一点感觉他也能生成出一个一样的。所以Agent就是个概念而已。
火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)