20260601更新

This commit is contained in:
liubiren 2026-06-01 21:01:31 +08:00
parent 11cbe59cce
commit 49d3a589ee
729 changed files with 30 additions and 59 deletions

View File

@ -5,24 +5,24 @@
# 列举导入模块 # 列举导入模块
from pathlib import Path from pathlib import Path
from typing import List, Optional
from typing_extensions import is_protocol
from uuid import uuid4
from typing import List, Optional, Union, cast
from starlette.applications import Starlette
from pydantic_ai import Agent as BaseAgent, AgentRunResult from pydantic_ai import Agent as BaseAgent, AgentRunResult
from pydantic_ai.models import Model from pydantic_ai.builtin_tools import AbstractBuiltinTool
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.capabilities import AgentCapability from pydantic_ai.capabilities import AgentCapability
from pydantic_ai.models.openai import OpenAIChatModel
from pydantic_ai.output import OutputSpec from pydantic_ai.output import OutputSpec
from pydantic_ai.providers.openai import OpenAIProvider from pydantic_ai.providers.openai import OpenAIProvider
from pydantic_ai.ui._web.api import ConfigureFrontend, ModelInfo, BuiltinToolInfo from pydantic_core.core_schema import is_subclass_schema
from pydantic_ai_skills import SkillsCapability from starlette.applications import Starlette
from starlette.routing import Mount, Route
from starlette.routing import Route
from starlette.requests import Request
from starlette.responses import Response
from sys import path
path.append(Path(__file__).resolve().parent.as_posix())
from memory import Memory
class Agent: class Agent:
@ -45,9 +45,8 @@ class Agent:
:param output_type: 输出类型 :param output_type: 输出类型
:return: 智能体实例 :return: 智能体实例
""" """
# 引入相应模块 # 生成会话唯一标识
from uuid import uuid4 self.session_id = uuid4().hex.lower()
from .memory import Memory
# 创建智能体 # 创建智能体
self.agent = self._create_agent( self.agent = self._create_agent(
@ -55,9 +54,7 @@ class Agent:
capabilities=capabilities, capabilities=capabilities,
output_type=output_type, output_type=output_type,
) )
a = self.agent.to_web()
# 生成会话唯一标识
self.session_id = uuid4().hex.lower()
# 实例记忆体 # 实例记忆体
self.memory = Memory() self.memory = Memory()
@ -73,7 +70,7 @@ class Agent:
:param instructions: 指令 :param instructions: 指令
:param capabilities: 智能体能力列表 :param capabilities: 智能体能力列表
:param output_type: 输出类型 :param output_type: 输出类型
:return: 智能体实例 :return: Agent 实例
""" """
agent = BaseAgent( agent = BaseAgent(
model=OpenAIChatModel( model=OpenAIChatModel(
@ -108,45 +105,19 @@ class Agent:
) )
return result return result
def start_starlette_app(self) -> None: def create_starlette_application(
self,
builtin_tools: Optional[List[AbstractBuiltinTool]] = None,
) -> Starlette:
""" """
启动 Starlette 应用为智能体提供网页交互式对话界面 创建 Starlette 应用为智能体提供交互式对话界面
:return: None :param models: ModelsParam = None,
:param builtin_tools: Sequence[AbstractBuiltinTool] | None = None,
:return: Starlette 实例
""" """
self.agent.to_web()
model = cast(Model, self.agent.model)
model_infos = [ModelInfo(id=model.model_id, name=model.label, builtin_tools=[])]
async def options_chat(request: Request) -> Response:
"""处理 OPTIONS 请求"""
return Response()
async def configure_frontend(request: Request) -> Response:
"""向前端提供模型和技能"""
config = ConfigureFrontend(
models=[
ModelInfo(
id=model.model_id,
name=model.label,
builtin_tools=model.profile.supported_builtin_tools,
)
],
builtin_tools=[],
)
return JSONResponse(config.model_dump(by_alias=True))
Starlette(
routes=[
Route("/chat", options_chat, methods=["OPTIONS"]),
Route("/chat", post_chat, methods=["POST"]),
Route("/configure", configure_frontend, methods=["GET"]),
Route("/health", health, methods=["GET"]),
]
)
a = Agent(instructions="你是一个专业的翻译") exit()
print(a) exit()
return application

View File

@ -9,12 +9,12 @@ import sys
from pathlib import Path from pathlib import Path
sys.path.append(Path(__file__).parent.parent.as_posix()) sys.path.append(Path(__file__).parent.parent.as_posix())
from utils.agent import BaseAgent from utils.agent import Agent
if __name__ == "__main__": if __name__ == "__main__":
# 实例智能体 # 实例智能体
agent = BaseAgent( agent = Agent(
instructions=( instructions=(
"你是耐烧蚀高分子领域 Wiki 助手。\n\n" "你是耐烧蚀高分子领域 Wiki 助手。\n\n"
"### 【工具规范】\n" "### 【工具规范】\n"
@ -29,6 +29,6 @@ if __name__ == "__main__":
"### 【原则】\n" "### 【原则】\n"
"严禁幻觉,保持专业严谨。" "严禁幻觉,保持专业严谨。"
), ),
skill_names=["wiki-helper"],
) )
uvicorn.run(app=agent.start_web_service(), host="127.0.0.1", port=7932) a = agent.create_starlette_application()
uvicorn.run(app=a, host="127.0.0.1", port=7932)

Some files were not shown because too many files have changed in this diff Show More