| 12345678910111213141516171819202122232425262728293031 |
- """文档传输兼容层;原件解析与渲染仍由 Agent 的沙箱代码完成。"""
- from pathlib import PurePosixPath
- from langchain.agents.middleware.types import AgentMiddleware
- from langchain_core.messages import ToolMessage
- def _pdf_read_feedback(request):
- call = request.tool_call
- if call['name'] != 'read_file':
- return None
- path = call.get('args', {}).get('file_path', '')
- if not isinstance(path, str) or PurePosixPath(path).suffix.lower() != '.pdf':
- return None
- # 当前 OpenAI 兼容网关不接受框架的 PDF file 内容块。给模型可恢复反馈,
- # 不在此处隐式 OCR 或调用旧解析器,也不读取这份原件。
- return ToolMessage(content=(
- 'PDF 是二进制原件,当前模型接口不能直接接收 PDF 附件。请按 Skill 自己编写 Python,'
- '通过 run_python 使用 pypdfium2 取得页数和文本;扫描页渲染为 PNG,再用 read_file 查看 PNG。'
- '代码内将 /workspace/ 前缀移除,使用工作区相对路径。'
- ), tool_call_id=call['id'], name='read_file', status='error')
- class MainFanSandboxMiddleware(AgentMiddleware):
- def wrap_tool_call(self, request, handler):
- feedback = _pdf_read_feedback(request)
- return feedback if feedback is not None else handler(request)
- async def awrap_tool_call(self, request, handler):
- feedback = _pdf_read_feedback(request)
- return feedback if feedback is not None else await handler(request)
|