Skip to content

Commit 41f33aa

Browse files
authored
Merge pull request #4 from lihq1403/refactor
refactor: Comprehensive codebase overhaul with improved architecture and enhanced functionality
2 parents 5ed4af2 + 80f7442 commit 41f33aa

File tree

306 files changed

+38046
-6777
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

306 files changed

+38046
-6777
lines changed

.cursor/rules/odin.mdc

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
---
2+
description: 项目规范
3+
globs:
4+
alwaysApply: false
5+
---
6+
# Odin 项目规范
7+
8+
## 项目概述
9+
10+
Odin 是一个基于 PHP 的 LLM 应用开发框架,其命名灵感来自于北欧神话中的主神 Odin(奥丁)和他的两只乌鸦 Huginn 和 Muninn,Huginn 和 Muninn 分别代表的 **思想** 和 **记忆**,它们两个每天早上一破晓就飞到人间,到了晚上再将所见所闻带回给 Odin。
11+
12+
此项目旨在帮助开发人员利用 LLM 技术创建更加智能和灵活的应用程序,通过提供一系列强大而易用的功能,为 LLM 技术落地提供了更多的可能性。项目提供一系列便捷的工具和API,简化与各种LLM提供商(如OpenAI、Azure OpenAI等)的集成过程。
13+
14+
### 核心特性
15+
16+
- 统一的API接口设计,支持多种LLM提供商
17+
- 强大的工具调用功能,支持函数调用和参数验证
18+
- 流式响应处理,支持实时交互
19+
- 灵活的请求和响应处理机制
20+
- 完善的错误处理和异常管理
21+
22+
## 编码标准
23+
24+
### 基本要求
25+
26+
- 语言版本:PHP 8.0+
27+
- 框架:Hyperf
28+
- 代码规范:PSR-12 + Hyperf规范
29+
- 文档要求:复杂逻辑必须有PHPDoc注释
30+
31+
### 代码风格
32+
33+
- 缩进:4空格
34+
- 行长度:120字符
35+
- 命名规范:
36+
- 类名:PascalCase
37+
- 方法名:camelCase
38+
- 属性:camelCase
39+
- 常量:UPPER_SNAKE_CASE
40+
- 变量:camelCase
41+
- 类型提示:所有方法参数和返回值必须使用类型声明
42+
- 注释:使用中文注释,保持简洁明了
43+
44+
### 文件组织
45+
46+
- 源码结构:遵循PSR-4自动加载规范
47+
- 命名空间:Hyperf\Odin
48+
49+
### 静态分析
50+
51+
### 静态分析
52+
53+
- 工具:PHPStan
54+
- 级别:Level 5
55+
- 覆盖范围:所有源代码(src)和测试代码(tests)必须通过 phpstan level 5 检查
56+
- 执行命令:vendor/bin/phpstan analyse src tests --level=5
57+
- 类型声明:所有类型必须明确定义,避免使用混合类型(mixed),除非绝对必要
58+
59+
### 最佳实践
60+
61+
- 使用依赖注入而非直接实例化
62+
- 遵循单一职责原则,每个类只负责一个功能
63+
- 优先使用组合而非继承
64+
- 使用接口定义行为,提高代码灵活性
65+
- 使用强类型,避免隐式类型转换
66+
- 异常必须被妥善处理或向上抛出
67+
- 避免使用魔术方法和魔术常量
68+
69+
## 测试标准
70+
71+
### 基本要求
72+
73+
- 测试框架:PHPUnit
74+
- 覆盖率要求:关键业务逻辑覆盖率目标 >= 80%
75+
- 静态分析:所有测试必须通过 phpstan level 5
76+
77+
### 单元测试规范
78+
79+
- 命名规则:test{测试功能}方法名
80+
- 结构要求:每个源代码类应有对应的测试类
81+
- 隔离性:测试应该相互独立,不依赖执行顺序
82+
- 断言要求:每个测试应包含至少一个断言
83+
- Mock框架:使用Mockery框架模拟外部依赖
84+
85+
### 测试数据管理
86+
87+
- 数据创建:使用工厂方法或数据提供者创建测试数据
88+
- 数据分离:测试数据应与测试逻辑分离
89+
90+
### 测试代码组织
91+
92+
- 目录结构:tests/Cases/{对应源码路径}
93+
- 命名空间:HyperfTest\Odin
94+
95+
### 测试最佳实践
96+
97+
- 每个测试方法只测试一个功能点
98+
- 使用数据提供者测试边界条件
99+
- 为复杂测试提供详细注释说明测试目的
100+
- 测试失败抛出的异常类型和消息
101+
- 使用setUp和tearDown方法处理重复的测试准备和清理工作
102+
- 为模拟对象提供准确的类型注释
103+
104+
## Git 工作流
105+
106+
### 分支管理
107+
108+
- main:稳定发布分支
109+
- develop:开发集成分支
110+
- refactor:重构分支(重构完成后将合并到 main)
111+
- feature:feature/{功能名称}
112+
- bugfix:bugfix/{问题简述}
113+
- release:release/v{版本号}
114+
115+
### 提交规范
116+
117+
提交信息格式:{类型}: {简短描述}
118+
119+
类型包括:
120+
- feat:新功能
121+
- fix:修复
122+
- docs:文档
123+
- style:格式
124+
- refactor:重构
125+
- test:测试
126+
- chore:其他
127+
128+
### 代码审查
129+
130+
必须进行代码审查,检查清单:
131+
- 代码符合项目规范
132+
- 新功能有对应单元测试
133+
- 通过所有CI检查
134+
- 无重复代码
135+
- 良好的性能表现
136+
137+
## Cursor 编辑器设置
138+
139+
### AI 建议
140+
141+
- 启用 AI 建议
142+
- 重点关注代码质量和测试覆盖
143+
144+
### 编辑器配置
145+
146+
- Tab 大小:4
147+
- 自动换行:关闭
148+
- 保存时格式化:开启

.gitignore

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,10 @@ output/
1111
.env
1212
.DS_Store
1313
*.lock
14-
.phpunit*
14+
.phpunit*
15+
todo/
16+
.vscode/
17+
bin/
18+
publish/
19+
config/
20+
.obsidian/

.php-cs-fixer.php

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
<?php
22

3+
declare(strict_types=1);
4+
/**
5+
* This file is part of Hyperf.
6+
*
7+
* @link https://www.hyperf.io
8+
* @document https://hyperf.wiki
9+
* @contact group@hyperf.io
10+
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
11+
*/
12+
use PhpCsFixer\Config;
13+
use PhpCsFixer\Finder;
14+
315
$header = <<<'EOF'
416
This file is part of Hyperf.
517
@@ -9,7 +21,7 @@
921
@license https://github.com/hyperf/hyperf/blob/master/LICENSE
1022
EOF;
1123

12-
return (new PhpCsFixer\Config())
24+
return (new Config())
1325
->setRiskyAllowed(true)
1426
->setRules([
1527
'@PSR2' => true,
@@ -23,13 +35,13 @@
2335
'location' => 'after_declare_strict',
2436
],
2537
'array_syntax' => [
26-
'syntax' => 'short'
38+
'syntax' => 'short',
2739
],
2840
'list_syntax' => [
29-
'syntax' => 'short'
41+
'syntax' => 'short',
3042
],
3143
'concat_space' => [
32-
'spacing' => 'one'
44+
'spacing' => 'one',
3345
],
3446
'blank_line_before_statement' => [
3547
'statements' => [
@@ -38,7 +50,7 @@
3850
],
3951
'general_phpdoc_annotation_remove' => [
4052
'annotations' => [
41-
'author'
53+
'author',
4254
],
4355
],
4456
'ordered_imports' => [
@@ -88,7 +100,7 @@
88100
'multiline_comment_opening_closing' => true,
89101
])
90102
->setFinder(
91-
PhpCsFixer\Finder::create()
103+
Finder::create()
92104
->exclude('vendor')
93105
->in(__DIR__)
94106
)

.vscode/settings.json

Lines changed: 0 additions & 4 deletions
This file was deleted.

README.md

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,67 @@
55
Odin 是一个基于 PHP 的 LLM 应用开发框架,其命名灵感来自于北欧神话中的主神 Odin(奥丁)和他的两只乌鸦 Huginn 和 Muninn,Huginn 和 Muninn 分别代表的 **思想****记忆**,它们两个每天早上一破晓就飞到人间,到了晚上再将所见所闻带回给 Odin。
66
此项目旨在帮助开发人员利用 LLM 技术创建更加智能和灵活的应用程序,通过提供一系列强大而易用的功能,为 LLM 技术落地提供了更多的可能性。
77

8-
# 安装
8+
## 核心特性
9+
10+
- **多模型支持**:支持 OpenAI、Azure OpenAI、AWS Bedrock、Doubao、ChatGLM 等多种大语言模型
11+
- **统一接口**:提供一致的 API 接口,简化与不同 LLM 提供商的集成
12+
- **工具调用**:支持 Function Calling,允许模型调用自定义工具和函数
13+
- **记忆管理**:提供灵活的记忆管理系统,支持会话上下文保持
14+
- **向量存储**:集成 Qdrant 向量数据库,支持知识检索和语义搜索
15+
- **Agent 开发**:内置 Agent 框架,支持智能代理开发
16+
- **高性能**:优化的实现,支持流式响应和高效处理
17+
18+
## 系统要求
19+
20+
- PHP >= 8.0
21+
- PHP 扩展:bcmath、curl、mbstring
22+
- Composer >= 2.0
23+
- Hyperf 框架 (2.2.x, 3.0.x 或 3.1.x)
24+
25+
## 安装
926

1027
```bash
1128
composer require hyperf/odin
1229
```
1330

14-
# License
31+
## 快速开始
32+
33+
1. 安装完成后,发布配置文件:
34+
35+
```bash
36+
php bin/hyperf.php vendor:publish hyperf/odin
37+
```
38+
39+
2.`.env` 文件中配置你的 API 密钥:
40+
41+
```
42+
OPENAI_API_KEY=your_openai_api_key
43+
```
44+
45+
3.`config/autoload/odin.php` 中设置默认模型:
46+
47+
```php
48+
return [
49+
'llm' => [
50+
'default' => 'gpt-4o', // 设置你的默认模型
51+
// ... 其他配置
52+
],
53+
];
54+
```
55+
56+
## 文档
57+
58+
详细的文档可在 `doc/user-guide` 目录中找到,包括:
59+
- 安装和配置
60+
- 核心概念
61+
- API 参考
62+
- 模型提供商
63+
- 工具开发
64+
- 记忆管理
65+
- Agent 开发
66+
- 示例项目
67+
- 常见问题解答
68+
69+
## License
1570

1671
Odin is open-sourced software licensed under the [MIT license](https://github.com/hyperf/odin/blob/master/LICENSE).

bin/code_optimize.php

Lines changed: 0 additions & 90 deletions
This file was deleted.

0 commit comments

Comments
 (0)