This commit is contained in:
2025-07-07 15:29:55 +08:00
parent fcb09c04f2
commit 46552a536f
10 changed files with 143 additions and 71 deletions
+1
View File
@@ -106,6 +106,7 @@ class CodeExecutor:
"Equipment": getattr(importlib.import_module("src.project"), "Equipment", None),
"MaterialOrEquipment": getattr(importlib.import_module("src.project"), "MaterialOrEquipment", None),
"ProjectBuilder": ProjectBuilder,
"logger": logger,
}
old_stdout = sys.stdout
+12 -6
View File
@@ -28,17 +28,23 @@ class LLMClient:
api_type = openai_config.get("api_type", "openai")
os.environ["OPENAI_API_TYPE"] = api_type
temperature = openai_config.get("temperature", 0)
model_name = openai_config.get("model_name", "gpt-4o-mini")
# 初始化限速器:每秒最多0.1次请求(即每10秒1次)
rate_limiter = InMemoryRateLimiter(
requests_per_second=13,
check_every_n_seconds=10,
max_bucket_size=10,
)
#rate_limiter = InMemoryRateLimiter(
# requests_per_second=13,
# check_every_n_seconds=10,
# max_bucket_size=10,
#)
# 开启流式
self.llm = ChatOpenAI(model_name=model_name, temperature=0, streaming=True, rate_limiter=rate_limiter)
self.llm = ChatOpenAI(
model_name=model_name,
temperature=temperature,
streaming=True,
#rate_limiter=rate_limiter
)
def invoke(self, messages):
# 同步调用,返回完整响应
+8 -7
View File
@@ -25,6 +25,7 @@ class MultiAPIKeyChatOpenAI:
api_base = openai_config.get("api_base")
api_type = openai_config.get("api_type", "openai")
model_name = openai_config.get("model_name", "gpt-4o-mini")
temperature = openai_config.get("temperature", 0)
# 设置环境变量(可选,根据需要)
if api_base:
@@ -32,20 +33,20 @@ class MultiAPIKeyChatOpenAI:
os.environ["OPENAI_API_TYPE"] = api_type
# 初始化限速器
rate_limiter = InMemoryRateLimiter(
requests_per_second=13,
check_every_n_seconds=10,
max_bucket_size=10,
)
#rate_limiter = InMemoryRateLimiter(
# requests_per_second=13,
# check_every_n_seconds=10,
# max_bucket_size=10,
#)
# 创建多个 ChatOpenAI 实例,每个使用不同的 API Key
self.llms = [
ChatOpenAI(
api_key=key,
model_name=model_name,
temperature=0,
temperature=temperature,
streaming=True,
rate_limiter=rate_limiter,
#rate_limiter=rate_limiter,
)
for key in api_keys
]
+1 -1
View File
@@ -65,7 +65,7 @@ class ProjectToolkit(ABC):
- code (int): 状态码,固定为 200(成功)或 201(失败)
- message (str): 成功时为 "Ok",失败时包含错误信息和辅助信息
- status (bool): 成功为 True,失败为 False
- data (ProjectDivisionItem | None]): 成功时返回的ProjectDivisionItem,失败时为None
- data (List[Dict[str, Any]]): 成功时返回的数据列表,失败时为空列表
"""
pass
+2 -1
View File
@@ -245,6 +245,7 @@ def project_get_calculate_function():
message = result_dict.get('message', '')
code = result_dict.get('data', '')
data = result_dict.get('data', [])
logger.info(f"status {{status}} message: {{message}}")
if status:
return result_dict
else:
@@ -254,7 +255,7 @@ def project_get_calculate_function():
- 参数必须从用户问题或上下文信息中提取
- 输出代码中必须以def project_get_calculate_function() -> dict函数作为入口函数
- 必须确保生成的代码可以直接执行,代码要注意进行各类错误检查,出错采用抛出异常方式,说明详细信息
- 禁止添加任何注释或解释
- 为函数内部代码生成流程注释,并使用logger进行日志输出
- ProjectToolkit 类中涉及项目划分的函数已考虑在其及其子孙项目划分下查找,所以无需生成递归子项目划分的代码
- 如果文本中包含范围编码格式则需要进行编码展开,如'YX2-1~7'展开为‘YX2-1/YX2-2/YX2-3/YX2-4/YX2-5/YX2-6/YX2-7
"""