Skip to content

Commit db5f469

Browse files
committed
modify
modify
1 parent 56434a1 commit db5f469

File tree

24 files changed

+746
-479
lines changed

24 files changed

+746
-479
lines changed

README.md

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@
2424
## ✨ 功能特性
2525

2626
- 🔍 自动分析问题,数学建模,编写代码,纠正错误,撰写论文
27-
- 💻 本地代码解释器
27+
- 💻 Code Interperter
28+
- loacl Interperter: 基于 jupyter , 代码保存为 notebook 方便再编辑
29+
- 云端 code interperter: [E2B](https://e2b.dev/)[daytona](https://app.daytona.io/)
2830
- 📝 生成一份编排好格式的论文
29-
- 🤝 muti-agents: ~~建模手~~,代码手(反思模块,本地代码解释器),论文手
31+
- 🤝 muti-agents: ~~建模手~~,代码手,论文手
3032
- 🔄 muti-llms: 每个agent设置不同的模型
33+
- 支持所有模型: [litellm](https://docs.litellm.ai/docs/providers)
3134
- 💰 成本低 agentless(单次任务成本约 1 rmb)
3235

3336
## 🚀 后期计划
@@ -55,6 +58,10 @@
5558
> 项目处于实验探索迭代demo阶段,有许多需要改进优化改进地方,我(项目作者)很忙,有时间会优化更新
5659
> 欢迎贡献
5760
61+
62+
案例参考 ./demo 文件夹下
63+
如果你有好的案例可以提交 PR 在该目录下
64+
5865
## 📖 使用教程
5966

6067
> 确保电脑中安装好 Python, Nodejs, **Redis** 环境
@@ -66,16 +73,9 @@
6673
1. 配置模型
6774

6875
复制`/backend/.env.dev.example``/backend/.env.dev`(删除`.example` 后缀)
69-
填写配置模型和 APIKEY
76+
**配置环境变量**
7077
推荐模型能力较强的、参数量大的模型。
7178

72-
```bash
73-
# support all model, check out https://docs.litellm.ai/docs/
74-
API_KEY=
75-
# gpt-4.1,deepseek/deepseek-chat,gemini/gemini-2.5-flash-preview-04-17
76-
MODEL=
77-
# 确保安装 Redis
78-
```
7979

8080
复制`/fronted/.env.example``/fronted/.env`(删除`.example` 后缀)
8181

@@ -135,6 +135,7 @@ clone 项目后,下载 **Todo Tree** 插件,可以查看代码中所有具
135135
## 📄 版权License
136136

137137
个人免费使用,请勿商业用途,商业用途联系我(作者)
138+
禁止闭源分发
138139

139140
## 🙏 Reference
140141

@@ -147,9 +148,17 @@ Thanks to the following projects:
147148

148149
## 其他
149150

151+
### Sponsor
152+
153+
<div align="center">
154+
<img src="./docs/sponser.png" alt="Buy Me a Coffee" width="280"/>
155+
</div>
156+
150157
感谢赞助
151158
[danmo-tyc](https://github.com/danmo-tyc)
152159

160+
### GROUP
161+
153162
有问题可以进群问
154163
[QQ 群:699970403](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=rFKquDTSxKcWpEhRgpJD-dPhTtqLwJ9r&authKey=xYKvCFG5My4uYZTbIIoV5MIPQedW7hYzf0%2Fbs4EUZ100UegQWcQ8xEEgTczHsyU6&noverify=0&group_code=699970403)
155164

backend/.env.dev.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ ENV=dev
33
API_KEY=
44
# gpt-4.1,deepseek/deepseek-chat
55
MODEL=
6-
# BASE_URL= 不需要填
6+
# BASE_URL= 默认不需要填
77

88
# 模型最大问答次数
99
MAX_CHAT_TURNS=60

backend/app/config/md_template.toml

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ firstPage = """
2525
{问题}
2626
{模型的建立与求解}
2727
"""
28-
2928
RepeatQues = """
3029
# 一、问题重述
3130
## 1.1 问题背景
@@ -97,12 +96,10 @@ symbol = """
9796
9897
{模型的建立与求解}
9998
"""
100-
10199
eda = """
102100
## 4.2 描述性统计
103101
大约200字
104102
"""
105-
106103
ques1 = """模板和要求如下
107104
# 五、模型的建立与求解
108105
## 5.1 问题一模型的建立与求解
@@ -122,7 +119,6 @@ ques2 = """参考模板
122119
模型的求解过程
123120
大约600字
124121
"""
125-
126122
ques3 = """参考模板
127123
## 5.3 问题三模型的建立与求解
128124
### 5.3.1 模型的建立
@@ -132,7 +128,6 @@ ques3 = """参考模板
132128
模型的求解过程
133129
大约600字
134130
"""
135-
136131
ques4 = """参考模板
137132
## 5.4 问题四模型的建立与求解
138133
### 5.4.1 模型的建立
@@ -142,7 +137,6 @@ ques4 = """参考模板
142137
模型的求解过程
143138
大约600字
144139
"""
145-
146140
ques5 = """参考模板
147141
## 5.5 问题五模型的建立与求解
148142
### 5.5.1 模型的建立
@@ -152,7 +146,6 @@ ques5 = """参考模板
152146
模型的求解过程
153147
大约600字
154148
"""
155-
156149
ques6 = """参考模板
157150
## 5.6 问题六模型的建立与求解
158151
### 5.6.1 模型的建立
@@ -162,28 +155,15 @@ ques6 = """参考模板
162155
模型的求解过程
163156
大约600字
164157
"""
165-
166158
sensitivity_analysis = """参考模板
167159
# 六、模型的分析与检验
168160
## 6.1 灵敏度分析
169161
"""
170-
171162
judge = """参考模板和要求
172163
# 七、模型的评价、改进与推广
173164
## 7.1 模型的优点
174165
## 7.2 模型的缺点
175166
## 7.3 模型的改进与推广
176167
优点数量要多于缺点,缺点大约2/3个
177168
大约200字
178-
"""
179-
180-
reference = """
181-
# 参考文献
182-
[1] 作者. (年份). 题目. 期刊, 卷(期), 页码.
183-
[2] 作者. (年份). 题目. 期刊, 卷(期), 页码.
184-
[3] 作者. (年份). 题目. 期刊, 卷(期), 页码.
185-
186-
例子
187-
[1] 刘培杰,李军英.体验式营销模式对农业旅游经济发展的影响[J].山西农经,2024,(16):67-69.DOI:10.16675/j.cnki.cn14-1065/f.2024.16.019.
188-
[2] ..
189169
"""

backend/app/config/setting.py

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,27 @@ def parse_cors(value: str) -> list[str]:
1717

1818
class Settings(BaseSettings):
1919
ENV: str
20-
API_KEY: str
21-
MODEL: str
22-
BASE_URL: Optional[str] = None
20+
21+
COORDINATOR_API_KEY: str
22+
COORDINATOR_MODEL: str
23+
COORDINATOR_BASE_URL: Optional[str] = None
24+
25+
MODELER_API_KEY: str
26+
MODELER_MODEL: str
27+
MODELER_BASE_URL: Optional[str] = None
28+
29+
CODER_API_KEY: str
30+
CODER_MODEL: str
31+
CODER_BASE_URL: Optional[str] = None
32+
33+
WRITER_API_KEY: str
34+
WRITER_MODEL: str
35+
WRITER_BASE_URL: Optional[str] = None
36+
37+
DEFAULT_API_KEY: str
38+
DEFAULT_MODEL: str
39+
DEFAULT_BASE_URL: Optional[str] = None
40+
2341
MAX_CHAT_TURNS: int
2442
MAX_RETRIES: int
2543
E2B_API_KEY: Optional[str] = None
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
from .coder_agent import CoderAgent
2+
from .writer_agent import WriterAgent
3+
from .coordinator_agent import CoordinatorAgent
4+
from .modeler_agent import ModelerAgent
5+
6+
__all__ = [
7+
"CoderAgent",
8+
"WriterAgent",
9+
"CoordinatorAgent",
10+
"ModelerAgent",
11+
]

backend/app/core/agents/agent.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
from app.core.llm.llm import LLM
2+
from app.utils.log_util import logger
3+
4+
5+
class Agent:
6+
def __init__(
7+
self,
8+
task_id: str,
9+
model: LLM,
10+
max_chat_turns: int = 30, # 单个agent最大对话轮次
11+
max_memory: int = 25, # 最大记忆轮次
12+
) -> None:
13+
self.task_id = task_id
14+
self.model = model
15+
self.chat_history: list[dict] = [] # 存储对话历史
16+
self.max_chat_turns = max_chat_turns # 最大对话轮次
17+
self.current_chat_turns = 0 # 当前对话轮次计数器
18+
self.max_memory = max_memory # 最大记忆轮次
19+
20+
async def run(self, prompt: str, system_prompt: str, sub_title: str) -> str:
21+
"""
22+
执行agent的对话并返回结果和总结
23+
24+
Args:
25+
prompt: 输入的提示
26+
27+
Returns:
28+
str: 模型的响应
29+
"""
30+
try:
31+
logger.info(f"{self.__class__.__name__}:开始:执行对话")
32+
self.current_chat_turns = 0 # 重置对话轮次计数器
33+
34+
# 更新对话历史
35+
self.append_chat_history({"role": "system", "content": system_prompt})
36+
self.append_chat_history({"role": "user", "content": prompt})
37+
38+
# 获取历史消息用于本次对话
39+
response = await self.model.chat(
40+
history=self.chat_history,
41+
agent_name=self.__class__.__name__,
42+
sub_title=sub_title,
43+
)
44+
response_content = response.choices[0].message.content
45+
self.chat_history.append({"role": "assistant", "content": response_content})
46+
logger.info(f"{self.__class__.__name__}:完成:执行对话")
47+
return response_content
48+
except Exception as e:
49+
error_msg = f"执行过程中遇到错误: {str(e)}"
50+
logger.error(f"Agent执行失败: {str(e)}")
51+
return error_msg
52+
53+
def append_chat_history(self, msg: dict) -> None:
54+
self.clear_memory()
55+
self.chat_history.append(msg)
56+
57+
def clear_memory(self):
58+
if len(self.chat_history) <= self.max_memory:
59+
return
60+
logger.info(f"{self.__class__.__name__}:清除记忆")
61+
62+
# 使用切片保留第一条和最后两条消息
63+
self.chat_history = self.chat_history[:2] + self.chat_history[-5:]

0 commit comments

Comments
 (0)